Changes from 0.9.7.
authorRichard Levitte <levitte@openssl.org>
Mon, 3 Nov 2003 00:06:02 +0000 (00:06 +0000)
committerRichard Levitte <levitte@openssl.org>
Mon, 3 Nov 2003 00:06:02 +0000 (00:06 +0000)
CHANGES
crypto/aes/aes_cbc.c
crypto/mem.c
crypto/pkcs7/pk7_doit.c

diff --git a/CHANGES b/CHANGES
index 9655a97429c624697db77fd08930a9ea09aa956d..0d8d08cd806f00d593faa077d7b37384b36115f6 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -4,7 +4,8 @@
 
  Changes between 0.9.7c and 0.9.7d  [xx XXX XXXX]
 
-  *)
+  *) Use the correct content when signing type "other".
+     [Steve Henson]
 
  Changes between 0.9.7b and 0.9.7c  [30 Sep 2003]
 
index 86b27b10d612ab887ae3d4bbda666533783b1c0a..1222a21002c1add66fcfbf5fe57c84475838102b 100644 (file)
@@ -104,7 +104,7 @@ void AES_cbc_encrypt(const unsigned char *in, unsigned char *out,
                        memcpy(tmp, in, AES_BLOCK_SIZE);
                        AES_decrypt(tmp, tmp, key);
                        for(n=0; n < len; ++n)
-                               out[n] ^= ivec[n];
+                               out[n] = tmp[n] ^ ivec[n];
                        memcpy(ivec, tmp, AES_BLOCK_SIZE);
                }                       
        }
index 29df7d35b248891beb2d60585a102fd2e2768ad0..bb862db49975f99110349ef5e337f6df3d92eb72 100644 (file)
@@ -352,11 +352,15 @@ void *CRYPTO_realloc_clean(void *str, int old_len, int num, const char *file,
                realloc_debug_func(str, NULL, num, file, line, 0);
        ret=malloc_ex_func(num,file,line);
        if(ret)
+               {
                memcpy(ret,str,old_len);
-       OPENSSL_cleanse(str,old_len);
-       free_func(str);
+               OPENSSL_cleanse(str,old_len);
+               free_func(str);
+               }
 #ifdef LEVITTE_DEBUG_MEM
-       fprintf(stderr, "LEVITTE_DEBUG_MEM:         | 0x%p -> 0x%p (%d)\n", str, ret, num);
+       fprintf(stderr,
+               "LEVITTE_DEBUG_MEM:         | 0x%p -> 0x%p (%d)\n",
+               str, ret, num);
 #endif
        if (realloc_debug_func != NULL)
                realloc_debug_func(str, ret, num, file, line, 1);
index 190ca0e9bf576761369908257111e158da66fb50..35c7dcd0b3e7778b884328bfb664a3e72d282b72 100644 (file)
@@ -91,17 +91,19 @@ static int PKCS7_type_is_other(PKCS7* p7)
 
        }
 
-static int PKCS7_type_is_octet_string(PKCS7* p7)
+static ASN1_OCTET_STRING *PKCS7_get_octet_string(PKCS7 *p7)
        {
-       if ( 0==PKCS7_type_is_other(p7) )
-               return 0;
-
-       return (V_ASN1_OCTET_STRING==p7->d.other->type) ? 1 : 0;
+       if ( PKCS7_type_is_data(p7))
+               return p7->d.data;
+       if ( PKCS7_type_is_other(p7) && p7->d.other
+               && (p7->d.other->type == V_ASN1_OCTET_STRING))
+               return p7->d.other->value.octet_string;
+       return NULL;
        }
 
 BIO *PKCS7_dataInit(PKCS7 *p7, BIO *bio)
        {
-       int i,j;
+       int i;
        BIO *out=NULL,*btmp=NULL;
        X509_ALGOR *xa;
        const EVP_MD *evp_md;
@@ -159,8 +161,7 @@ BIO *PKCS7_dataInit(PKCS7 *p7, BIO *bio)
                                goto err;
                                }
 
-                       j=OBJ_obj2nid(xa->algorithm);
-                       evp_md=EVP_get_digestbyname(OBJ_nid2sn(j));
+                       evp_md=EVP_get_digestbyobj(xa->algorithm);
                        if (evp_md == NULL)
                                {
                                PKCS7err(PKCS7_F_PKCS7_DATAINIT,PKCS7_R_UNKNOWN_DIGEST_TYPE);
@@ -250,29 +251,22 @@ BIO *PKCS7_dataInit(PKCS7 *p7, BIO *bio)
                btmp=NULL;
                }
 
-       if (bio == NULL) {
+       if (bio == NULL)
+               {
                if (PKCS7_is_detached(p7))
                        bio=BIO_new(BIO_s_null());
-               else {
-                       if (PKCS7_type_is_signed(p7) ) { 
-                               if ( PKCS7_type_is_data(p7->d.sign->contents)) {
-                                       ASN1_OCTET_STRING *os;
-                                       os=p7->d.sign->contents->d.data;
-                                       if (os->length > 0)
-                                               bio = BIO_new_mem_buf(os->data, os->length);
-                               }
-                               else if ( PKCS7_type_is_octet_string(p7->d.sign->contents) ) {
-                                       ASN1_OCTET_STRING *os;
-                                       os=p7->d.sign->contents->d.other->value.octet_string;
-                                       if (os->length > 0)
-                                               bio = BIO_new_mem_buf(os->data, os->length);
-                               }
-                       }
-                       if(bio == NULL) {
+               else
+                       {
+                       ASN1_OCTET_STRING *os;
+                       os = PKCS7_get_octet_string(p7->d.sign->contents);
+                       if (os && os->length > 0)
+                               bio = BIO_new_mem_buf(os->data, os->length);
+                       if(bio == NULL)
+                               {
                                bio=BIO_new(BIO_s_mem());
                                BIO_set_mem_eof_return(bio,0);
+                               }
                        }
-               }
        }
        BIO_push(out,bio);
        bio=NULL;
@@ -311,7 +305,7 @@ BIO *PKCS7_dataDecode(PKCS7 *p7, EVP_PKEY *pkey, BIO *in_bio, X509 *pcert)
        switch (i)
                {
        case NID_pkcs7_signed:
-               data_body=p7->d.sign->contents->d.data;
+               data_body=PKCS7_get_octet_string(p7->d.sign->contents);
                md_sk=p7->d.sign->md_algs;
                break;
        case NID_pkcs7_signedAndEnveloped:
@@ -319,7 +313,7 @@ BIO *PKCS7_dataDecode(PKCS7 *p7, EVP_PKEY *pkey, BIO *in_bio, X509 *pcert)
                md_sk=p7->d.signed_and_enveloped->md_algs;
                data_body=p7->d.signed_and_enveloped->enc_data->enc_data;
                enc_alg=p7->d.signed_and_enveloped->enc_data->algorithm;
-               evp_cipher=EVP_get_cipherbyname(OBJ_nid2sn(OBJ_obj2nid(enc_alg->algorithm)));
+               evp_cipher=EVP_get_cipherbyobj(enc_alg->algorithm);
                if (evp_cipher == NULL)
                        {
                        PKCS7err(PKCS7_F_PKCS7_DATADECODE,PKCS7_R_UNSUPPORTED_CIPHER_TYPE);
@@ -331,7 +325,7 @@ BIO *PKCS7_dataDecode(PKCS7 *p7, EVP_PKEY *pkey, BIO *in_bio, X509 *pcert)
                rsk=p7->d.enveloped->recipientinfo;
                enc_alg=p7->d.enveloped->enc_data->algorithm;
                data_body=p7->d.enveloped->enc_data->enc_data;
-               evp_cipher=EVP_get_cipherbyname(OBJ_nid2sn(OBJ_obj2nid(enc_alg->algorithm)));
+               evp_cipher=EVP_get_cipherbyobj(enc_alg->algorithm);
                if (evp_cipher == NULL)
                        {
                        PKCS7err(PKCS7_F_PKCS7_DATADECODE,PKCS7_R_UNSUPPORTED_CIPHER_TYPE);
@@ -357,7 +351,7 @@ BIO *PKCS7_dataDecode(PKCS7 *p7, EVP_PKEY *pkey, BIO *in_bio, X509 *pcert)
                                }
 
                        j=OBJ_obj2nid(xa->algorithm);
-                       evp_md=EVP_get_digestbyname(OBJ_nid2sn(j));
+                       evp_md=EVP_get_digestbynid(j);
                        if (evp_md == NULL)
                                {
                                PKCS7err(PKCS7_F_PKCS7_DATADECODE,PKCS7_R_UNKNOWN_DIGEST_TYPE);
@@ -531,9 +525,9 @@ int PKCS7_dataFinal(PKCS7 *p7, BIO *bio)
                break;
        case NID_pkcs7_signed:
                si_sk=p7->d.sign->signer_info;
-               os=p7->d.sign->contents->d.data;
+               os=PKCS7_get_octet_string(p7->d.sign->contents);
                /* If detached data then the content is excluded */
-               if(p7->detached) {
+               if(PKCS7_type_is_data(p7->d.sign->contents) && p7->detached) {
                        M_ASN1_OCTET_STRING_free(os);
                        p7->d.sign->contents->d.data = NULL;
                }