old_hmac_encode: check for NULL result when allocating *pder
[openssl.git] / crypto / hmac / hm_ameth.c
index 204bdb2492d0e6bef217e11e9c923f0be106a546..3d998e94da861f0ea20a17a324d927614b10134d 100644 (file)
@@ -1,4 +1,4 @@
-/* Written by Dr Stephen N Henson (shenson@bigfoot.com) for the OpenSSL
+/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
  * project 2007.
  */
 /* ====================================================================
@@ -84,6 +84,19 @@ static void hmac_key_free(EVP_PKEY *pkey)
        }
 
 
+static int hmac_pkey_ctrl(EVP_PKEY *pkey, int op, long arg1, void *arg2)
+       {
+       switch (op)
+               {
+               case ASN1_PKEY_CTRL_DEFAULT_MD_NID:
+               *(int *)arg2 = NID_sha1;
+               return 1;
+
+               default:
+               return -2;
+               }
+       }
+
 #ifdef HMAC_TEST_PRIVATE_KEY_FORMAT
 /* A bogus private key format for test purposes. This is simply the
  * HMAC key with "HMAC PRIVATE KEY" in the headers. When enabled the
@@ -110,6 +123,8 @@ static int old_hmac_encode(const EVP_PKEY *pkey, unsigned char **pder)
                if (!*pder)
                        {
                        *pder = OPENSSL_malloc(os->length);
+                       if (*pder == NULL)
+                               return -1;
                        inc = 0;
                        }
                else inc = 1;
@@ -139,11 +154,11 @@ const EVP_PKEY_ASN1_METHOD hmac_asn1_meth =
        0,0,0,
 
        hmac_size,
-       0,
-       0,0,0,0,0,0,
+       0, 0,
+       0,0,0,0,0,0,0,
 
        hmac_key_free,
-       0,
+       hmac_pkey_ctrl,
 #ifdef HMAC_TEST_PRIVATE_KEY_FORMAT
        old_hmac_decode,
        old_hmac_encode