diff --git a/library/chachapoly.c b/library/chachapoly.c
index 0dba5ed..d599c52 100644
--- a/library/chachapoly.c
+++ b/library/chachapoly.c
@@ -66,8 +66,8 @@
     {
         memset( zeroes, 0, sizeof( zeroes ) );
         (void) mbedtls_poly1305_update( &ctx->poly1305_ctx,
-                                        16U - partial_block_len,
-                                        zeroes );
+                                        zeroes,
+                                        16U - partial_block_len );
     }
 }
 
@@ -85,8 +85,8 @@
     {
         memset( zeroes, 0, sizeof( zeroes ) );
         (void) mbedtls_poly1305_update( &ctx->poly1305_ctx,
-                                        16U - partial_block_len,
-                                        zeroes );
+                                        zeroes,
+                                        16U - partial_block_len );
     }
 }
 
@@ -194,7 +194,7 @@
 
     ctx->aad_len += aad_len;
 
-    return( mbedtls_poly1305_update( &ctx->poly1305_ctx, aad_len, aad ) );
+    return( mbedtls_poly1305_update( &ctx->poly1305_ctx, aad, aad_len ) );
 }
 
 int mbedtls_chachapoly_update( mbedtls_chachapoly_context *ctx,
@@ -233,11 +233,11 @@
          *       above, we can safety ignore the return value.
          */
         (void) mbedtls_chacha20_update( &ctx->chacha20_ctx, len, input, output );
-        (void) mbedtls_poly1305_update( &ctx->poly1305_ctx, len, output );
+        (void) mbedtls_poly1305_update( &ctx->poly1305_ctx, output, len );
     }
     else /* DECRYPT */
     {
-        (void) mbedtls_poly1305_update( &ctx->poly1305_ctx, len, input );
+        (void) mbedtls_poly1305_update( &ctx->poly1305_ctx, input, len );
         (void) mbedtls_chacha20_update( &ctx->chacha20_ctx, len, input, output );
     }
 
@@ -289,7 +289,7 @@
     len_block[14] = (unsigned char) ( ctx->ciphertext_len >> 48 );
     len_block[15] = (unsigned char) ( ctx->ciphertext_len >> 56 );
 
-    (void) mbedtls_poly1305_update( &ctx->poly1305_ctx, 16U, len_block );
+    (void) mbedtls_poly1305_update( &ctx->poly1305_ctx, len_block, 16U );
     (void) mbedtls_poly1305_finish( &ctx->poly1305_ctx, mac );
 
     return( 0 );
diff --git a/library/poly1305.c b/library/poly1305.c
index 66f932c..14c362d 100644
--- a/library/poly1305.c
+++ b/library/poly1305.c
@@ -285,8 +285,8 @@
 }
 
 int mbedtls_poly1305_update( mbedtls_poly1305_context *ctx,
-                             size_t ilen,
-                             const unsigned char* input )
+                             const unsigned char *input,
+                             size_t ilen )
 {
     size_t offset    = 0U;
     size_t remaining = ilen;
@@ -391,9 +391,9 @@
 }
 
 int mbedtls_poly1305_mac( const unsigned char key[32],
-                           size_t ilen,
-                           const unsigned char *input,
-                           unsigned char mac[16] )
+                          const unsigned char *input,
+                          size_t ilen,
+                          unsigned char mac[16] )
 {
     mbedtls_poly1305_context ctx;
     int result;
@@ -404,7 +404,7 @@
     if ( result != 0 )
         goto cleanup;
 
-    result = mbedtls_poly1305_update( &ctx, ilen, input );
+    result = mbedtls_poly1305_update( &ctx, input, ilen );
     if ( result != 0 )
         goto cleanup;
 
@@ -496,8 +496,8 @@
         }
 
         result = mbedtls_poly1305_mac( test_keys[i],
-                                       test_data_len[i],
                                        test_data[i],
+                                       test_data_len[i],
                                        mac );
         if ( result != 0 )
         {
