EVP: Change the output size type of EVP_Q_digest() and EVP_Q_mac()
authorRichard Levitte <levitte@openssl.org>
Tue, 22 Jun 2021 16:09:25 +0000 (18:09 +0200)
committerRichard Levitte <levitte@openssl.org>
Wed, 23 Jun 2021 21:00:36 +0000 (23:00 +0200)
This makes them more consistent with other new interfaces.

Fixes #15839

Reviewed-by: David von Oheimb <david.von.oheimb@siemens.com>
Reviewed-by: Paul Dale <pauli@openssl.org>
Reviewed-by: Tim Hudson <tjh@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/15861)

crypto/evp/digest.c
crypto/evp/mac_lib.c
doc/man3/EVP_DigestInit.pod
doc/man3/EVP_MAC.pod
include/openssl/evp.h

index 98c39343bed66efca7cdaf9d602b8d3b3760492a..4a5c926103f2c839a1a8b6d38e4cada8f18e2715 100644 (file)
@@ -630,16 +630,19 @@ int EVP_Digest(const void *data, size_t count,
 }
 
 int EVP_Q_digest(OSSL_LIB_CTX *libctx, const char *name, const char *propq,
-                 const void *data, size_t count,
-                 unsigned char *md, unsigned int *size)
+                 const void *data, size_t datalen,
+                 unsigned char *md, size_t *mdlen)
 {
     EVP_MD *digest = EVP_MD_fetch(libctx, name, propq);
+    unsigned int temp = 0;
     int ret = 0;
 
     if (digest != NULL) {
-        ret = EVP_Digest(data, count, md, size, digest, NULL);
+        ret = EVP_Digest(data, datalen, md, &temp, digest, NULL);
         EVP_MD_free(digest);
     }
+    if (mdlen != NULL)
+        *mdlen = temp;
     return ret;
 }
 
index 339d10919f12d9aef6c3a2f75ca42ab02ab6057f..1a68c58919e9745fb264a836a5944d06f721b2a4 100644 (file)
@@ -233,16 +233,17 @@ int EVP_MAC_names_do_all(const EVP_MAC *mac,
     return 1;
 }
 
-unsigned char *EVP_Q_mac(OSSL_LIB_CTX *libctx, const char *name, const char *propq,
+unsigned char *EVP_Q_mac(OSSL_LIB_CTX *libctx,
+                         const char *name, const char *propq,
                          const char *subalg, const OSSL_PARAM *params,
                          const void *key, size_t keylen,
                          const unsigned char *data, size_t datalen,
-                         unsigned char *out, size_t outsize, unsigned int *outlen)
+                         unsigned char *out, size_t outsize, size_t *outlen)
 {
     EVP_MAC *mac = EVP_MAC_fetch(libctx, name, propq);
     OSSL_PARAM subalg_param[] = { OSSL_PARAM_END, OSSL_PARAM_END };
     EVP_MAC_CTX *ctx  = NULL;
-    size_t len;
+    size_t len = 0;
     unsigned char *res = NULL;
 
     if (outlen != NULL)
@@ -286,7 +287,7 @@ unsigned char *EVP_Q_mac(OSSL_LIB_CTX *libctx, const char *name, const char *pro
         }
         res = out;
         if (res != NULL && outlen != NULL)
-            *outlen = (unsigned int)len;
+            *outlen = len;
     }
 
  err:
index dd822a4ca05694cacaaaf30ea6e8c55ba29b1449..75d8e63e24bbfea29aa01eec316770b52973dda4 100644 (file)
@@ -52,8 +52,8 @@ EVP_MD_CTX_type, EVP_MD_CTX_pkey_ctx, EVP_MD_CTX_md_data
  int EVP_MD_CTX_test_flags(const EVP_MD_CTX *ctx, int flags);
 
  int EVP_Q_digest(OSSL_LIB_CTX *libctx, const char *name, const char *propq,
-                  const void *data, size_t count,
-                  unsigned char *md, unsigned int *size);
+                  const void *data, size_t datalen,
+                  unsigned char *md, size_t *mdlen);
  int EVP_Digest(const void *data, size_t count, unsigned char *md,
                 unsigned int *size, const EVP_MD *type, ENGINE *impl);
  int EVP_DigestInit_ex2(EVP_MD_CTX *ctx, const EVP_MD *type,
@@ -234,9 +234,10 @@ as a parameter descriptor.
 Sets, clears and tests I<ctx> flags.  See L</FLAGS> below for more information.
 
 =item EVP_Q_digest() is a quick one-shot digest function.
-It hashes I<count> bytes of data at I<data> using the digest algorithm I<name>,
-which is fetched using the optional I<libctx> and I<propq> parameters.
-The digest value is placed in I<md> and its length is written at I<size>
+
+It hashes I<datalen> bytes of data at I<data> using the digest algorithm
+I<name>, which is fetched using the optional I<libctx> and I<propq> parameters.
+The digest value is placed in I<md> and its length is written at I<mdlen>
 if the pointer is not NULL. At most B<EVP_MAX_MD_SIZE> bytes will be written.
 
 =item EVP_Digest()
index 0c68f42b6f4cb31792cedd476dbfd59018434522..289cbda7571974beb21c8c3bcc0d2fd543889dd6 100644 (file)
@@ -46,7 +46,7 @@ EVP_MAC_do_all_provided - EVP MAC routines
                           const char *subalg, const OSSL_PARAM *params,
                           const void *key, size_t keylen,
                           const unsigned char *data, size_t datalen,
-                          unsigned char *out, size_t outsize, unsigned int *outlen);
+                          unsigned char *out, size_t outsize, size_t *outlen);
  int EVP_MAC_init(EVP_MAC_CTX *ctx, const unsigned char *key, size_t keylen,
                   const OSSL_PARAM params[]);
  int EVP_MAC_update(EVP_MAC_CTX *ctx, const unsigned char *data, size_t datalen);
index 50cf8eeb776b7b337bb02b72ff0f9b65c8bb2736..76fabd63ed4f9047989a93a4e7a4b1aee04aabca 100644 (file)
@@ -715,8 +715,8 @@ __owur int EVP_Digest(const void *data, size_t count,
                           unsigned char *md, unsigned int *size,
                           const EVP_MD *type, ENGINE *impl);
 __owur int EVP_Q_digest(OSSL_LIB_CTX *libctx, const char *name,
-                        const char *propq, const void *data, size_t count,
-                        unsigned char *md, unsigned int *size);
+                        const char *propq, const void *data, size_t datalen,
+                        unsigned char *md, size_t *mdlen);
 
 __owur int EVP_MD_CTX_copy(EVP_MD_CTX *out, const EVP_MD_CTX *in);
 __owur int EVP_DigestInit(EVP_MD_CTX *ctx, const EVP_MD *type);
@@ -1216,7 +1216,7 @@ unsigned char *EVP_Q_mac(OSSL_LIB_CTX *libctx, const char *name, const char *pro
                          const char *subalg, const OSSL_PARAM *params,
                          const void *key, size_t keylen,
                          const unsigned char *data, size_t datalen,
-                         unsigned char *out, size_t outsize, unsigned int *outlen);
+                         unsigned char *out, size_t outsize, size_t *outlen);
 int EVP_MAC_init(EVP_MAC_CTX *ctx, const unsigned char *key, size_t keylen,
                  const OSSL_PARAM params[]);
 int EVP_MAC_update(EVP_MAC_CTX *ctx, const unsigned char *data, size_t datalen);