diff --git a/doc/APIchanges b/doc/APIchanges
index b9d7b8b5695bf71806339b80b47f3931c8c12508..e8c08ca76909cf805a306731b072aac10bb09122 100644
--- a/doc/APIchanges
+++ b/doc/APIchanges
@@ -15,6 +15,10 @@ libavutil:     2015-08-28
 
 API changes, most recent first:
 
+2017-xx-xx - xxxxxxxxxx
+  Change av_sha_update() and av_md5_sum()/av_md5_update() length
+  parameter type to size_t at next major bump.
+
 2017-05-05 - xxxxxxxxxx - lavc 57.94.100 - avcodec.h
   The cuvid decoders now support AVCodecContext.hw_device_ctx, which removes
   the requirement to set an incomplete AVCodecContext.hw_frames_ctx only to
diff --git a/libavutil/md5.c b/libavutil/md5.c
index 1069ef1efe0f03d09f46c1c360442a9479360371..31e69925aed5c3db942bca0fb41907f20c2239d4 100644
--- a/libavutil/md5.c
+++ b/libavutil/md5.c
@@ -150,7 +150,11 @@ void av_md5_init(AVMD5 *ctx)
     ctx->ABCD[3] = 0x67452301;
 }
 
+#if FF_API_CRYPTO_SIZE_T
 void av_md5_update(AVMD5 *ctx, const uint8_t *src, int len)
+#else
+void av_md5_update(AVMD5 *ctx, const uint8_t *src, size_t len)
+#endif
 {
     const uint8_t *end;
     int j;
@@ -200,7 +204,11 @@ void av_md5_final(AVMD5 *ctx, uint8_t *dst)
         AV_WL32(dst + 4 * i, ctx->ABCD[3 - i]);
 }
 
+#if FF_API_CRYPTO_SIZE_T
 void av_md5_sum(uint8_t *dst, const uint8_t *src, const int len)
+#else
+void av_md5_sum(uint8_t *dst, const uint8_t *src, size_t len)
+#endif
 {
     AVMD5 ctx;
 
diff --git a/libavutil/md5.h b/libavutil/md5.h
index 9571c1fa46724c726215d80e3b0692a0a3944257..ca72ccbf8371145a33c51886ad7af99a83405492 100644
--- a/libavutil/md5.h
+++ b/libavutil/md5.h
@@ -27,6 +27,7 @@
 #ifndef AVUTIL_MD5_H
 #define AVUTIL_MD5_H
 
+#include <stddef.h>
 #include <stdint.h>
 
 #include "attributes.h"
@@ -63,7 +64,11 @@ void av_md5_init(struct AVMD5 *ctx);
  * @param src input data to update hash with
  * @param len input data length
  */
+#if FF_API_CRYPTO_SIZE_T
 void av_md5_update(struct AVMD5 *ctx, const uint8_t *src, int len);
+#else
+void av_md5_update(struct AVMD5 *ctx, const uint8_t *src, size_t len);
+#endif
 
 /**
  * Finish hashing and output digest value.
@@ -80,7 +85,11 @@ void av_md5_final(struct AVMD5 *ctx, uint8_t *dst);
  * @param src The data to hash
  * @param len The length of the data, in bytes
  */
+#if FF_API_CRYPTO_SIZE_T
 void av_md5_sum(uint8_t *dst, const uint8_t *src, const int len);
+#else
+void av_md5_sum(uint8_t *dst, const uint8_t *src, size_t len);
+#endif
 
 /**
  * @}
diff --git a/libavutil/sha.c b/libavutil/sha.c
index 5b42ccf1b2f009a1ceaa8781676af998f5f48ae6..ef6fa4422740735606e88e9b61e98b49212e38ea 100644
--- a/libavutil/sha.c
+++ b/libavutil/sha.c
@@ -311,7 +311,11 @@ av_cold int av_sha_init(AVSHA *ctx, int bits)
     return 0;
 }
 
-void av_sha_update(AVSHA* ctx, const uint8_t* data, unsigned int len)
+#if FF_API_CRYPTO_SIZE_T
+void av_sha_update(struct AVSHA *ctx, const uint8_t *data, unsigned int len)
+#else
+void av_sha_update(struct AVSHA *ctx, const uint8_t *data, size_t len)
+#endif
 {
     unsigned int i, j;
 
diff --git a/libavutil/sha.h b/libavutil/sha.h
index c7558a89646b1ba2fba6445eb3a4970c0852f128..c0180e5729a2e9232bdbf387b9b74d6acc25e943 100644
--- a/libavutil/sha.h
+++ b/libavutil/sha.h
@@ -27,6 +27,7 @@
 #ifndef AVUTIL_SHA_H
 #define AVUTIL_SHA_H
 
+#include <stddef.h>
 #include <stdint.h>
 
 #include "attributes.h"
@@ -69,11 +70,15 @@ int av_sha_init(struct AVSHA* context, int bits);
 /**
  * Update hash value.
  *
- * @param context hash function context
+ * @param ctx     hash function context
  * @param data    input data to update hash with
  * @param len     input data length
  */
-void av_sha_update(struct AVSHA* context, const uint8_t* data, unsigned int len);
+#if FF_API_CRYPTO_SIZE_T
+void av_sha_update(struct AVSHA *ctx, const uint8_t *data, unsigned int len);
+#else
+void av_sha_update(struct AVSHA *ctx, const uint8_t *data, size_t len);
+#endif
 
 /**
  * Finish hashing and output digest value.
diff --git a/libavutil/version.h b/libavutil/version.h
index bba39e018036be19798350e4ce2b1ccbe62eb3fa..e7a657971f4ae5d61e14088704997a4ce3ef047b 100644
--- a/libavutil/version.h
+++ b/libavutil/version.h
@@ -135,6 +135,9 @@
 #ifndef FF_API_PKT_PTS
 #define FF_API_PKT_PTS                  (LIBAVUTIL_VERSION_MAJOR < 56)
 #endif
+#ifndef FF_API_CRYPTO_SIZE_T
+#define FF_API_CRYPTO_SIZE_T            (LIBAVUTIL_VERSION_MAJOR < 56)
+#endif
 
 
 /**