stack.
authorBen Laurie <ben@openssl.org>
Wed, 2 Jun 1999 21:13:45 +0000 (21:13 +0000)
committerBen Laurie <ben@openssl.org>
Wed, 2 Jun 1999 21:13:45 +0000 (21:13 +0000)
crypto/asn1/p7_evp.c
crypto/asn1/p7_recip.c
crypto/asn1/p7_s_e.c
crypto/pkcs7/pk7_doit.c
crypto/pkcs7/pk7_lib.c
crypto/pkcs7/pkcs7.h

index 701578e6fb6c7df6050e958c460de2aee1f8c90c..b2b3d50dcd809428d3d4ac69ee8d2c370a7f3a0a 100644 (file)
@@ -66,13 +66,15 @@ int i2d_PKCS7_ENVELOPE(PKCS7_ENVELOPE *a, unsigned char **pp)
        M_ASN1_I2D_vars(a);
 
        M_ASN1_I2D_len(a->version,i2d_ASN1_INTEGER);
-       M_ASN1_I2D_len_SET(a->recipientinfo,i2d_PKCS7_RECIP_INFO);
+       M_ASN1_I2D_len_SET_type(PKCS7_RECIP_INFO,a->recipientinfo,
+                               i2d_PKCS7_RECIP_INFO);
        M_ASN1_I2D_len(a->enc_data,i2d_PKCS7_ENC_CONTENT);
 
        M_ASN1_I2D_seq_total();
 
        M_ASN1_I2D_put(a->version,i2d_ASN1_INTEGER);
-       M_ASN1_I2D_put_SET(a->recipientinfo,i2d_PKCS7_RECIP_INFO);
+       M_ASN1_I2D_put_SET_type(PKCS7_RECIP_INFO,a->recipientinfo,
+                               i2d_PKCS7_RECIP_INFO);
        M_ASN1_I2D_put(a->enc_data,i2d_PKCS7_ENC_CONTENT);
 
        M_ASN1_I2D_finish();
@@ -86,8 +88,8 @@ PKCS7_ENVELOPE *d2i_PKCS7_ENVELOPE(PKCS7_ENVELOPE **a, unsigned char **pp,
        M_ASN1_D2I_Init();
        M_ASN1_D2I_start_sequence();
        M_ASN1_D2I_get(ret->version,d2i_ASN1_INTEGER);
-       M_ASN1_D2I_get_set(ret->recipientinfo,d2i_PKCS7_RECIP_INFO,
-               PKCS7_RECIP_INFO_free);
+       M_ASN1_D2I_get_set_type(PKCS7_RECIP_INFO,ret->recipientinfo,
+                               d2i_PKCS7_RECIP_INFO,PKCS7_RECIP_INFO_free);
        M_ASN1_D2I_get(ret->enc_data,d2i_PKCS7_ENC_CONTENT);
 
        M_ASN1_D2I_Finish(a,PKCS7_ENVELOPE_free,ASN1_F_D2I_PKCS7_ENVELOPE);
@@ -100,7 +102,7 @@ PKCS7_ENVELOPE *PKCS7_ENVELOPE_new(void)
 
        M_ASN1_New_Malloc(ret,PKCS7_ENVELOPE);
        M_ASN1_New(ret->version,ASN1_INTEGER_new);
-       M_ASN1_New(ret->recipientinfo,sk_new_null);
+       M_ASN1_New(ret->recipientinfo,sk_PKCS7_RECIP_INFO_new_null);
        M_ASN1_New(ret->enc_data,PKCS7_ENC_CONTENT_new);
        return(ret);
        M_ASN1_New_Error(ASN1_F_PKCS7_ENVELOPE_NEW);
@@ -110,7 +112,7 @@ void PKCS7_ENVELOPE_free(PKCS7_ENVELOPE *a)
        {
        if (a == NULL) return;
        ASN1_INTEGER_free(a->version);
-       sk_pop_free(a->recipientinfo,PKCS7_RECIP_INFO_free);
+       sk_PKCS7_RECIP_INFO_pop_free(a->recipientinfo,PKCS7_RECIP_INFO_free);
        PKCS7_ENC_CONTENT_free(a->enc_data);
        Free((char *)a);
        }
index d6017af30b9f0327f7fea805d947722ea8db0aa0..08d3cd122eda1a83ba67502fc33baa24022df998 100644 (file)
@@ -121,3 +121,5 @@ void PKCS7_RECIP_INFO_free(PKCS7_RECIP_INFO *a)
        Free((char *)a);
        }
 
+IMPLEMENT_STACK_OF(PKCS7_RECIP_INFO)
+IMPLEMENT_ASN1_SET_OF(PKCS7_RECIP_INFO)
index 7b3440c1dec5d931b0c7f148fb3274189a1fd1c6..90946695c9503a0c75b2d0200c91429742582f68 100644 (file)
@@ -66,7 +66,8 @@ int i2d_PKCS7_SIGN_ENVELOPE(PKCS7_SIGN_ENVELOPE *a, unsigned char **pp)
        M_ASN1_I2D_vars(a);
 
        M_ASN1_I2D_len(a->version,i2d_ASN1_INTEGER);
-       M_ASN1_I2D_len_SET(a->recipientinfo,i2d_PKCS7_RECIP_INFO);
+       M_ASN1_I2D_len_SET_type(PKCS7_RECIP_INFO,a->recipientinfo,
+                               i2d_PKCS7_RECIP_INFO);
        M_ASN1_I2D_len_SET_type(X509_ALGOR,a->md_algs,i2d_X509_ALGOR);
        M_ASN1_I2D_len(a->enc_data,i2d_PKCS7_ENC_CONTENT);
        M_ASN1_I2D_len_IMP_SEQUENCE_opt_type(X509,a->cert,i2d_X509,0);
@@ -77,7 +78,8 @@ int i2d_PKCS7_SIGN_ENVELOPE(PKCS7_SIGN_ENVELOPE *a, unsigned char **pp)
        M_ASN1_I2D_seq_total();
 
        M_ASN1_I2D_put(a->version,i2d_ASN1_INTEGER);
-       M_ASN1_I2D_put_SET(a->recipientinfo,i2d_PKCS7_RECIP_INFO);
+       M_ASN1_I2D_put_SET_type(PKCS7_RECIP_INFO,a->recipientinfo,
+                               i2d_PKCS7_RECIP_INFO);
        M_ASN1_I2D_put_SET_type(X509_ALGOR,a->md_algs,i2d_X509_ALGOR);
        M_ASN1_I2D_put(a->enc_data,i2d_PKCS7_ENC_CONTENT);
        M_ASN1_I2D_put_IMP_SEQUENCE_opt_type(X509,a->cert,i2d_X509,0);
@@ -96,8 +98,8 @@ PKCS7_SIGN_ENVELOPE *d2i_PKCS7_SIGN_ENVELOPE(PKCS7_SIGN_ENVELOPE **a,
        M_ASN1_D2I_Init();
        M_ASN1_D2I_start_sequence();
        M_ASN1_D2I_get(ret->version,d2i_ASN1_INTEGER);
-       M_ASN1_D2I_get_set(ret->recipientinfo,d2i_PKCS7_RECIP_INFO,
-               PKCS7_RECIP_INFO_free);
+       M_ASN1_D2I_get_set_type(PKCS7_RECIP_INFO,ret->recipientinfo,
+                               d2i_PKCS7_RECIP_INFO,PKCS7_RECIP_INFO_free);
        M_ASN1_D2I_get_set_type(X509_ALGOR,ret->md_algs,d2i_X509_ALGOR,
                                X509_ALGOR_free);
        M_ASN1_D2I_get(ret->enc_data,d2i_PKCS7_ENC_CONTENT);
@@ -118,7 +120,7 @@ PKCS7_SIGN_ENVELOPE *PKCS7_SIGN_ENVELOPE_new(void)
 
        M_ASN1_New_Malloc(ret,PKCS7_SIGN_ENVELOPE);
        M_ASN1_New(ret->version,ASN1_INTEGER_new);
-       M_ASN1_New(ret->recipientinfo,sk_new_null);
+       M_ASN1_New(ret->recipientinfo,sk_PKCS7_RECIP_INFO_new_null);
        M_ASN1_New(ret->md_algs,sk_X509_ALGOR_new_null);
        M_ASN1_New(ret->enc_data,PKCS7_ENC_CONTENT_new);
        ret->cert=NULL;
@@ -132,12 +134,12 @@ void PKCS7_SIGN_ENVELOPE_free(PKCS7_SIGN_ENVELOPE *a)
        {
        if (a == NULL) return;
        ASN1_INTEGER_free(a->version);
-       sk_pop_free(a->recipientinfo,PKCS7_RECIP_INFO_free);
+       sk_PKCS7_RECIP_INFO_pop_free(a->recipientinfo,PKCS7_RECIP_INFO_free);
        sk_X509_ALGOR_pop_free(a->md_algs,X509_ALGOR_free);
        PKCS7_ENC_CONTENT_free(a->enc_data);
        sk_X509_pop_free(a->cert,X509_free);
        sk_X509_CRL_pop_free(a->crl,X509_CRL_free);
        sk_PKCS7_SIGNER_INFO_pop_free(a->signer_info,PKCS7_SIGNER_INFO_free);
-       Free((char *)a);
+       Free(a);
        }
 
index 16c1556b2cddb158b7c47d07329357488559e3e0..5481036f35654f26c2a2354cfe552398c244f7af 100644 (file)
@@ -74,7 +74,7 @@ BIO *PKCS7_dataInit(PKCS7 *p7, BIO *bio)
        const EVP_MD *evp_md;
        const EVP_CIPHER *evp_cipher=NULL;
        STACK_OF(X509_ALGOR) *md_sk=NULL;
-       STACK *rsk=NULL;
+       STACK_OF(PKCS7_RECIP_INFO) *rsk=NULL;
        X509_ALGOR *xalg=NULL;
        PKCS7_RECIP_INFO *ri=NULL;
        EVP_PKEY *pkey;
@@ -174,9 +174,9 @@ BIO *PKCS7_dataInit(PKCS7 *p7, BIO *bio)
 
                /* Lets do the pub key stuff :-) */
                max=0;
-               for (i=0; i<sk_num(rsk); i++)
+               for (i=0; i<sk_PKCS7_RECIP_INFO_num(rsk); i++)
                        {
-                       ri=(PKCS7_RECIP_INFO *)sk_value(rsk,i);
+                       ri=sk_PKCS7_RECIP_INFO_value(rsk,i);
                        if (ri->cert == NULL)
                                {
                                PKCS7err(PKCS7_F_PKCS7_DATAINIT,PKCS7_R_MISSING_CERIPEND_INFO);
@@ -192,9 +192,9 @@ BIO *PKCS7_dataInit(PKCS7 *p7, BIO *bio)
                        PKCS7err(PKCS7_F_PKCS7_DATAINIT,ERR_R_MALLOC_FAILURE);
                        goto err;
                        }
-               for (i=0; i<sk_num(rsk); i++)
+               for (i=0; i<sk_PKCS7_RECIP_INFO_num(rsk); i++)
                        {
-                       ri=(PKCS7_RECIP_INFO *)sk_value(rsk,i);
+                       ri=sk_PKCS7_RECIP_INFO_value(rsk,i);
                        pkey=X509_get_pubkey(ri->cert);
                        jj=EVP_PKEY_encrypt(tmp,key,keylen,pkey);
                        EVP_PKEY_free(pkey);
@@ -267,7 +267,7 @@ BIO *PKCS7_dataDecode(PKCS7 *p7, EVP_PKEY *pkey, BIO *in_bio, X509 *pcert)
        EVP_CIPHER_CTX *evp_ctx=NULL;
        X509_ALGOR *enc_alg=NULL;
        STACK_OF(X509_ALGOR) *md_sk=NULL;
-       STACK *rsk=NULL;
+       STACK_OF(PKCS7_RECIP_INFO) *rsk=NULL;
        X509_ALGOR *xalg=NULL;
        PKCS7_RECIP_INFO *ri=NULL;
 /*     EVP_PKEY *pkey; */
@@ -368,8 +368,8 @@ BIO *PKCS7_dataDecode(PKCS7 *p7, EVP_PKEY *pkey, BIO *in_bio, X509 *pcert)
                 * (if any)
                 */
 
-               for (i=0; i<sk_num(rsk); i++) {
-                       ri=(PKCS7_RECIP_INFO *)sk_value(rsk,i);
+               for (i=0; i<sk_PKCS7_RECIP_INFO_num(rsk); i++) {
+                       ri=sk_PKCS7_RECIP_INFO_value(rsk,i);
                        if(!X509_NAME_cmp(ri->issuer_and_serial->issuer,
                                        pcert->cert_info->issuer) &&
                             !ASN1_INTEGER_cmp(pcert->cert_info->serialNumber,
@@ -767,16 +767,16 @@ err:
 
 PKCS7_ISSUER_AND_SERIAL *PKCS7_get_issuer_and_serial(PKCS7 *p7, int idx)
        {
-       STACK *rsk;
+       STACK_OF(PKCS7_RECIP_INFO) *rsk;
        PKCS7_RECIP_INFO *ri;
        int i;
 
        i=OBJ_obj2nid(p7->type);
        if (i != NID_pkcs7_signedAndEnveloped) return(NULL);
        rsk=p7->d.signed_and_enveloped->recipientinfo;
-       ri=(PKCS7_RECIP_INFO *)sk_value(rsk,0);
-       if (sk_num(rsk) <= idx) return(NULL);
-       ri=(PKCS7_RECIP_INFO *)sk_value(rsk,idx);
+       ri=sk_PKCS7_RECIP_INFO_value(rsk,0);
+       if (sk_PKCS7_RECIP_INFO_num(rsk) <= idx) return(NULL);
+       ri=sk_PKCS7_RECIP_INFO_value(rsk,idx);
        return(ri->issuer_and_serial);
        }
 
index 89b2e8172ab55e7fe97d912165cf8f5a794f5be1..8b863d05583eb58fe6c40e8b0c9bb68aedbdb0ee 100644 (file)
@@ -371,7 +371,7 @@ err:
 int PKCS7_add_recipient_info(PKCS7 *p7, PKCS7_RECIP_INFO *ri)
        {
        int i;
-       STACK *sk;
+       STACK_OF(PKCS7_RECIP_INFO) *sk;
 
        i=OBJ_obj2nid(p7->type);
        switch (i)
@@ -387,7 +387,7 @@ int PKCS7_add_recipient_info(PKCS7 *p7, PKCS7_RECIP_INFO *ri)
                return(0);
                }
 
-       sk_push(sk,(char *)ri);
+       sk_PKCS7_RECIP_INFO_push(sk,ri);
        return(1);
        }
 
index 9e80f865e95009d9dc00032e3f6ddc9363b13a68..c1414edeba0feb89cd1effb1f8070b5e04022a52 100644 (file)
@@ -110,6 +110,9 @@ typedef struct pkcs7_recip_info_st
        X509                            *cert; /* get the pub-key from this */
        } PKCS7_RECIP_INFO;
 
+DECLARE_STACK_OF(PKCS7_RECIP_INFO)
+DECLARE_ASN1_SET_OF(PKCS7_RECIP_INFO)
+
 typedef struct pkcs7_signed_st
        {
        ASN1_INTEGER                    *version;       /* version 1 */
@@ -134,7 +137,7 @@ typedef struct pkcs7_enc_content_st
 typedef struct pkcs7_enveloped_st
        {
        ASN1_INTEGER                    *version;       /* version 0 */
-       STACK /* PKCS7_RECIP_INFO */    *recipientinfo;
+       STACK_OF(PKCS7_RECIP_INFO)      *recipientinfo;
        PKCS7_ENC_CONTENT               *enc_data;
        } PKCS7_ENVELOPE;
 
@@ -147,7 +150,7 @@ typedef struct pkcs7_signedandenveloped_st
        STACK_OF(PKCS7_SIGNER_INFO)     *signer_info;
 
        PKCS7_ENC_CONTENT               *enc_data;
-       STACK /* PKCS7_RECIP_INFO */    *recipientinfo;
+       STACK_OF(PKCS7_RECIP_INFO)      *recipientinfo;
        } PKCS7_SIGN_ENVELOPE;
 
 typedef struct pkcs7_digest_st