ASN1_item_verify needs to initialize ctx before any "goto err" can
[openssl.git] / crypto / asn1 / a_digest.c
index 6c12249d2cefb9f4c20e9de4083fe1eac0608846..d00d9e22b188708dbad146c02c1955ee5842279d 100644 (file)
 # include <sys/types.h>
 #endif
 
+#include <openssl/err.h>
 #include <openssl/evp.h>
 #include <openssl/buffer.h>
 #include <openssl/x509.h>
 
 #ifndef NO_ASN1_OLD
 
-int ASN1_digest(int (*i2d)(), const EVP_MD *type, char *data,
+int ASN1_digest(i2d_of_void *i2d, const EVP_MD *type, char *data,
                unsigned char *md, unsigned int *len)
        {
-       EVP_MD_CTX ctx;
        int i;
        unsigned char *str,*p;
 
        i=i2d(data,NULL);
-       if ((str=(unsigned char *)OPENSSL_malloc(i)) == NULL) return(0);
+       if ((str=(unsigned char *)OPENSSL_malloc(i)) == NULL)
+               {
+               ASN1err(ASN1_F_ASN1_DIGEST,ERR_R_MALLOC_FAILURE);
+               return(0);
+               }
        p=str;
        i2d(data,&p);
 
-       EVP_DigestInit(&ctx,type);
-       EVP_DigestUpdate(&ctx,str,i);
-       EVP_DigestFinal(&ctx,md,len);
+       EVP_Digest(str, i, md, len, type, NULL);
        OPENSSL_free(str);
        return(1);
        }
@@ -96,16 +98,13 @@ int ASN1_digest(int (*i2d)(), const EVP_MD *type, char *data,
 int ASN1_item_digest(const ASN1_ITEM *it, const EVP_MD *type, void *asn,
                unsigned char *md, unsigned int *len)
        {
-       EVP_MD_CTX ctx;
        int i;
        unsigned char *str = NULL;
 
        i=ASN1_item_i2d(asn,&str, it);
        if (!str) return(0);
 
-       EVP_DigestInit(&ctx,type);
-       EVP_DigestUpdate(&ctx,str,i);
-       EVP_DigestFinal(&ctx,md,len);
+       EVP_Digest(str, i, md, len, type, NULL);
        OPENSSL_free(str);
        return(1);
        }