diff --git a/library/chachapoly.c b/library/chachapoly.c
index ebf25bb..de9e66c 100644
--- a/library/chachapoly.c
+++ b/library/chachapoly.c
@@ -123,7 +123,7 @@
 
     if ( ( ctx == NULL ) || ( key == NULL ) )
     {
-        return( MBEDTLS_ERR_CHACHAPOLY_BAD_INPUT_DATA );
+        return( MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA );
     }
 
     result = mbedtls_chacha20_setkey( &ctx->chacha20_ctx, key );
@@ -140,7 +140,7 @@
 
     if ( ( ctx == NULL ) || ( nonce == NULL ) )
     {
-        return( MBEDTLS_ERR_CHACHAPOLY_BAD_INPUT_DATA );
+        return( MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA );
     }
 
     /* Set counter = 0, will be update to 1 when generating Poly1305 key */
@@ -180,12 +180,12 @@
 {
     if ( ctx == NULL )
     {
-        return( MBEDTLS_ERR_CHACHAPOLY_BAD_INPUT_DATA );
+        return( MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA );
     }
     else if ( ( aad_len > 0U ) && ( aad == NULL ) )
     {
         /* aad pointer is allowed to be NULL if aad_len == 0 */
-        return( MBEDTLS_ERR_CHACHAPOLY_BAD_INPUT_DATA );
+        return( MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA );
     }
     else if ( ctx->state != CHACHAPOLY_STATE_AAD )
     {
@@ -204,12 +204,12 @@
 {
     if ( ctx == NULL )
     {
-        return( MBEDTLS_ERR_CHACHAPOLY_BAD_INPUT_DATA );
+        return( MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA );
     }
     else if ( ( len > 0U ) && ( ( input == NULL ) || ( output == NULL ) ) )
     {
         /* input and output pointers are allowed to be NULL if len == 0 */
-        return( MBEDTLS_ERR_CHACHAPOLY_BAD_INPUT_DATA );
+        return( MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA );
     }
     else if ( ( ctx->state != CHACHAPOLY_STATE_AAD ) &&
               ( ctx->state != CHACHAPOLY_STATE_CIPHERTEXT ) )
@@ -251,7 +251,7 @@
 
     if ( ( ctx == NULL ) || ( mac == NULL ) )
     {
-        return( MBEDTLS_ERR_CHACHAPOLY_BAD_INPUT_DATA );
+        return( MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA );
     }
     else if ( ctx->state == CHACHAPOLY_STATE_INIT )
     {
@@ -340,7 +340,7 @@
     int diff;
 
     if( tag == NULL )
-        return( MBEDTLS_ERR_CHACHAPOLY_BAD_INPUT_DATA );
+        return( MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA );
 
     if( ( ret = mbedtls_chachapoly_crypt_and_tag( ctx,
                         MBEDTLS_CHACHAPOLY_DECRYPT, length, nonce,
diff --git a/library/error.c b/library/error.c
index d9c21cd..512831f 100644
--- a/library/error.c
+++ b/library/error.c
@@ -670,17 +670,15 @@
         mbedtls_snprintf( buf, buflen, "CHACHA20 - Invalid input parameter(s)" );
     if( use_ret == -(MBEDTLS_ERR_CHACHA20_FEATURE_UNAVAILABLE) )
         mbedtls_snprintf( buf, buflen, "CHACHA20 - Feature not available. For example, s part of the API is not implemented" );
+    if( use_ret == -(MBEDTLS_ERR_CHACHA20_HW_ACCEL_FAILED) )
+        mbedtls_snprintf( buf, buflen, "CHACHA20 - Chacha20 hardware accelerator failed" );
 #endif /* MBEDTLS_CHACHA20_C */
 
 #if defined(MBEDTLS_CHACHAPOLY_C)
-    if( use_ret == -(MBEDTLS_ERR_CHACHAPOLY_BAD_INPUT_DATA) )
-        mbedtls_snprintf( buf, buflen, "CHACHAPOLY - Invalid input parameter(s)" );
     if( use_ret == -(MBEDTLS_ERR_CHACHAPOLY_BAD_STATE) )
         mbedtls_snprintf( buf, buflen, "CHACHAPOLY - The requested operation is not permitted in the current state" );
     if( use_ret == -(MBEDTLS_ERR_CHACHAPOLY_AUTH_FAILED) )
         mbedtls_snprintf( buf, buflen, "CHACHAPOLY - Authenticated decryption failed: data was not authentic" );
-    if( use_ret == -(MBEDTLS_ERR_CHACHAPOLY_FEATURE_UNAVAILABLE) )
-        mbedtls_snprintf( buf, buflen, "CHACHAPOLY - Feature not available. For example, s part of the API is not implemented" );
 #endif /* MBEDTLS_CHACHAPOLY_C */
 
 #if defined(MBEDTLS_CMAC_C)
@@ -800,6 +798,8 @@
         mbedtls_snprintf( buf, buflen, "POLY1305 - Invalid input parameter(s)" );
     if( use_ret == -(MBEDTLS_ERR_POLY1305_FEATURE_UNAVAILABLE) )
         mbedtls_snprintf( buf, buflen, "POLY1305 - Feature not available. For example, s part of the API is not implemented" );
+    if( use_ret == -(MBEDTLS_ERR_POLY1305_HW_ACCEL_FAILED) )
+        mbedtls_snprintf( buf, buflen, "POLY1305 - Poly1305 hardware accelerator failed" );
 #endif /* MBEDTLS_POLY1305_C */
 
 #if defined(MBEDTLS_RIPEMD160_C)
