mirror of
https://github.com/openssl/openssl.git
synced 2025-03-31 20:10:45 +08:00
Stack.
This commit is contained in:
parent
62aa714f00
commit
426edadf98
@ -352,6 +352,10 @@ err:\
|
||||
#define M_ASN1_I2D_len_SET(a,f) \
|
||||
ret+=i2d_ASN1_SET(a,NULL,f,V_ASN1_SET,V_ASN1_UNIVERSAL,IS_SET);
|
||||
|
||||
#define M_ASN1_I2D_len_SET_type(type,a,f) \
|
||||
ret+=i2d_ASN1_SET_OF_##type(a,NULL,f,V_ASN1_SET, \
|
||||
V_ASN1_UNIVERSAL,IS_SET);
|
||||
|
||||
#define M_ASN1_I2D_len_SEQUENCE(a,f) \
|
||||
ret+=i2d_ASN1_SET(a,NULL,f,V_ASN1_SEQUENCE,V_ASN1_UNIVERSAL, \
|
||||
IS_SEQUENCE);
|
||||
@ -444,6 +448,8 @@ err:\
|
||||
|
||||
#define M_ASN1_I2D_put_SET(a,f) i2d_ASN1_SET(a,&p,f,V_ASN1_SET,\
|
||||
V_ASN1_UNIVERSAL,IS_SET)
|
||||
#define M_ASN1_I2D_put_SET_type(type,a,f) \
|
||||
i2d_ASN1_SET_OF_##type(a,&p,f,V_ASN1_SET,V_ASN1_UNIVERSAL,IS_SET)
|
||||
#define M_ASN1_I2D_put_IMP_SET(a,f,x) i2d_ASN1_SET(a,&p,f,x,\
|
||||
V_ASN1_CONTEXT_SPECIFIC,IS_SET)
|
||||
#define M_ASN1_I2D_put_IMP_SET_type(type,a,f,x) \
|
||||
|
@ -67,7 +67,7 @@ int i2d_PKCS7_SIGN_ENVELOPE(PKCS7_SIGN_ENVELOPE *a, unsigned char **pp)
|
||||
|
||||
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(a->md_algs,i2d_X509_ALGOR);
|
||||
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);
|
||||
M_ASN1_I2D_len_IMP_SET_opt(a->crl,i2d_X509_CRL,1);
|
||||
@ -77,7 +77,7 @@ int i2d_PKCS7_SIGN_ENVELOPE(PKCS7_SIGN_ENVELOPE *a, unsigned char **pp)
|
||||
|
||||
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(a->md_algs,i2d_X509_ALGOR);
|
||||
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);
|
||||
M_ASN1_I2D_put_IMP_SET_opt(a->crl,i2d_X509_CRL,1);
|
||||
@ -96,7 +96,8 @@ PKCS7_SIGN_ENVELOPE *d2i_PKCS7_SIGN_ENVELOPE(PKCS7_SIGN_ENVELOPE **a,
|
||||
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(ret->md_algs,d2i_X509_ALGOR,X509_ALGOR_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);
|
||||
M_ASN1_D2I_get_IMP_set_opt_type(X509,ret->cert,d2i_X509,X509_free,0);
|
||||
M_ASN1_D2I_get_IMP_set_opt(ret->crl,d2i_X509_CRL,X509_CRL_free,1);
|
||||
@ -115,7 +116,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->md_algs,sk_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;
|
||||
ret->crl=NULL;
|
||||
@ -129,7 +130,7 @@ 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_pop_free(a->md_algs,X509_ALGOR_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_pop_free(a->crl,X509_CRL_free);
|
||||
|
@ -66,7 +66,7 @@ int i2d_PKCS7_SIGNED(PKCS7_SIGNED *a, unsigned char **pp)
|
||||
M_ASN1_I2D_vars(a);
|
||||
|
||||
M_ASN1_I2D_len(a->version,i2d_ASN1_INTEGER);
|
||||
M_ASN1_I2D_len_SET(a->md_algs,i2d_X509_ALGOR);
|
||||
M_ASN1_I2D_len_SET_type(X509_ALGOR,a->md_algs,i2d_X509_ALGOR);
|
||||
M_ASN1_I2D_len(a->contents,i2d_PKCS7);
|
||||
M_ASN1_I2D_len_IMP_SEQUENCE_opt_type(X509,a->cert,i2d_X509,0);
|
||||
M_ASN1_I2D_len_IMP_SET_opt(a->crl,i2d_X509_CRL,1);
|
||||
@ -75,7 +75,7 @@ int i2d_PKCS7_SIGNED(PKCS7_SIGNED *a, unsigned char **pp)
|
||||
M_ASN1_I2D_seq_total();
|
||||
|
||||
M_ASN1_I2D_put(a->version,i2d_ASN1_INTEGER);
|
||||
M_ASN1_I2D_put_SET(a->md_algs,i2d_X509_ALGOR);
|
||||
M_ASN1_I2D_put_SET_type(X509_ALGOR,a->md_algs,i2d_X509_ALGOR);
|
||||
M_ASN1_I2D_put(a->contents,i2d_PKCS7);
|
||||
M_ASN1_I2D_put_IMP_SEQUENCE_opt_type(X509,a->cert,i2d_X509,0);
|
||||
M_ASN1_I2D_put_IMP_SET_opt(a->crl,i2d_X509_CRL,1);
|
||||
@ -92,7 +92,8 @@ PKCS7_SIGNED *d2i_PKCS7_SIGNED(PKCS7_SIGNED **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->md_algs,d2i_X509_ALGOR,X509_ALGOR_free);
|
||||
M_ASN1_D2I_get_set_type(X509_ALGOR,ret->md_algs,d2i_X509_ALGOR,
|
||||
X509_ALGOR_free);
|
||||
M_ASN1_D2I_get(ret->contents,d2i_PKCS7);
|
||||
M_ASN1_D2I_get_IMP_set_opt_type(X509,ret->cert,d2i_X509,X509_free,0);
|
||||
M_ASN1_D2I_get_IMP_set_opt(ret->crl,d2i_X509_CRL,X509_CRL_free,1);
|
||||
@ -109,7 +110,7 @@ PKCS7_SIGNED *PKCS7_SIGNED_new(void)
|
||||
|
||||
M_ASN1_New_Malloc(ret,PKCS7_SIGNED);
|
||||
M_ASN1_New(ret->version,ASN1_INTEGER_new);
|
||||
M_ASN1_New(ret->md_algs,sk_new_null);
|
||||
M_ASN1_New(ret->md_algs,sk_X509_ALGOR_new_null);
|
||||
M_ASN1_New(ret->contents,PKCS7_new);
|
||||
ret->cert=NULL;
|
||||
ret->crl=NULL;
|
||||
@ -122,7 +123,7 @@ void PKCS7_SIGNED_free(PKCS7_SIGNED *a)
|
||||
{
|
||||
if (a == NULL) return;
|
||||
ASN1_INTEGER_free(a->version);
|
||||
sk_pop_free(a->md_algs,X509_ALGOR_free);
|
||||
sk_X509_ALGOR_pop_free(a->md_algs,X509_ALGOR_free);
|
||||
PKCS7_free(a->contents);
|
||||
sk_X509_pop_free(a->cert,X509_free);
|
||||
sk_pop_free(a->crl,X509_CRL_free);
|
||||
@ -130,3 +131,5 @@ void PKCS7_SIGNED_free(PKCS7_SIGNED *a)
|
||||
Free((char *)a);
|
||||
}
|
||||
|
||||
IMPLEMENT_STACK_OF(X509_ALGOR)
|
||||
IMPLEMENT_ASN1_SET_OF(X509_ALGOR)
|
||||
|
@ -73,7 +73,8 @@ BIO *PKCS7_dataInit(PKCS7 *p7, BIO *bio)
|
||||
X509_ALGOR *xa;
|
||||
const EVP_MD *evp_md;
|
||||
const EVP_CIPHER *evp_cipher=NULL;
|
||||
STACK *md_sk=NULL,*rsk=NULL;
|
||||
STACK_OF(X509_ALGOR) *md_sk=NULL;
|
||||
STACK *rsk=NULL;
|
||||
X509_ALGOR *xalg=NULL;
|
||||
PKCS7_RECIP_INFO *ri=NULL;
|
||||
EVP_PKEY *pkey;
|
||||
@ -116,9 +117,9 @@ BIO *PKCS7_dataInit(PKCS7 *p7, BIO *bio)
|
||||
|
||||
if (md_sk != NULL)
|
||||
{
|
||||
for (i=0; i<sk_num(md_sk); i++)
|
||||
for (i=0; i<sk_X509_ALGOR_num(md_sk); i++)
|
||||
{
|
||||
xa=(X509_ALGOR *)sk_value(md_sk,i);
|
||||
xa=sk_X509_ALGOR_value(md_sk,i);
|
||||
if ((btmp=BIO_new(BIO_f_md())) == NULL)
|
||||
{
|
||||
PKCS7err(PKCS7_F_PKCS7_DATAINIT,ERR_R_BIO_LIB);
|
||||
@ -265,7 +266,8 @@ BIO *PKCS7_dataDecode(PKCS7 *p7, EVP_PKEY *pkey, BIO *in_bio, X509 *pcert)
|
||||
const EVP_CIPHER *evp_cipher=NULL;
|
||||
EVP_CIPHER_CTX *evp_ctx=NULL;
|
||||
X509_ALGOR *enc_alg=NULL;
|
||||
STACK *md_sk=NULL,*rsk=NULL;
|
||||
STACK_OF(X509_ALGOR) *md_sk=NULL;
|
||||
STACK *rsk=NULL;
|
||||
X509_ALGOR *xalg=NULL;
|
||||
PKCS7_RECIP_INFO *ri=NULL;
|
||||
/* EVP_PKEY *pkey; */
|
||||
@ -315,9 +317,9 @@ BIO *PKCS7_dataDecode(PKCS7 *p7, EVP_PKEY *pkey, BIO *in_bio, X509 *pcert)
|
||||
/* We will be checking the signature */
|
||||
if (md_sk != NULL)
|
||||
{
|
||||
for (i=0; i<sk_num(md_sk); i++)
|
||||
for (i=0; i<sk_X509_ALGOR_num(md_sk); i++)
|
||||
{
|
||||
xa=(X509_ALGOR *)sk_value(md_sk,i);
|
||||
xa=sk_X509_ALGOR_value(md_sk,i);
|
||||
if ((btmp=BIO_new(BIO_f_md())) == NULL)
|
||||
{
|
||||
PKCS7err(PKCS7_F_PKCS7_DATADECODE,ERR_R_BIO_LIB);
|
||||
|
@ -191,7 +191,7 @@ int PKCS7_add_signer(PKCS7 *p7, PKCS7_SIGNER_INFO *psi)
|
||||
int i,j,nid;
|
||||
X509_ALGOR *alg;
|
||||
STACK *signer_sk;
|
||||
STACK *md_sk;
|
||||
STACK_OF(X509_ALGOR) *md_sk;
|
||||
|
||||
i=OBJ_obj2nid(p7->type);
|
||||
switch (i)
|
||||
@ -213,9 +213,9 @@ int PKCS7_add_signer(PKCS7 *p7, PKCS7_SIGNER_INFO *psi)
|
||||
|
||||
/* If the digest is not currently listed, add it */
|
||||
j=0;
|
||||
for (i=0; i<sk_num(md_sk); i++)
|
||||
for (i=0; i<sk_X509_ALGOR_num(md_sk); i++)
|
||||
{
|
||||
alg=(X509_ALGOR *)sk_value(md_sk,i);
|
||||
alg=sk_X509_ALGOR_value(md_sk,i);
|
||||
if (OBJ_obj2nid(alg->algorithm) == nid)
|
||||
{
|
||||
j=1;
|
||||
@ -226,7 +226,7 @@ int PKCS7_add_signer(PKCS7 *p7, PKCS7_SIGNER_INFO *psi)
|
||||
{
|
||||
alg=X509_ALGOR_new();
|
||||
alg->algorithm=OBJ_nid2obj(nid);
|
||||
sk_push(md_sk,(char *)alg);
|
||||
sk_X509_ALGOR_push(md_sk,alg);
|
||||
}
|
||||
|
||||
sk_push(signer_sk,(char *)psi);
|
||||
|
@ -110,7 +110,7 @@ typedef struct pkcs7_recip_info_st
|
||||
typedef struct pkcs7_signed_st
|
||||
{
|
||||
ASN1_INTEGER *version; /* version 1 */
|
||||
STACK /* X509_ALGOR's */ *md_algs; /* md used */
|
||||
STACK_OF(X509_ALGOR) *md_algs; /* md used */
|
||||
STACK_OF(X509) *cert; /* [ 0 ] */
|
||||
STACK /* X509_CRL */ *crl; /* [ 1 ] */
|
||||
STACK /* PKCS7_SIGNER_INFO */ *signer_info;
|
||||
@ -138,7 +138,7 @@ typedef struct pkcs7_enveloped_st
|
||||
typedef struct pkcs7_signedandenveloped_st
|
||||
{
|
||||
ASN1_INTEGER *version; /* version 1 */
|
||||
STACK /* X509_ALGOR's */ *md_algs; /* md used */
|
||||
STACK_OF(X509_ALGOR) *md_algs; /* md used */
|
||||
STACK_OF(X509) *cert; /* [ 0 ] */
|
||||
STACK /* X509_CRL */ *crl; /* [ 1 ] */
|
||||
STACK /* PKCS7_SIGNER_INFO */ *signer_info;
|
||||
|
@ -120,6 +120,9 @@ typedef struct X509_algor_st
|
||||
ASN1_TYPE *parameter;
|
||||
} X509_ALGOR;
|
||||
|
||||
DECLARE_STACK_OF(X509_ALGOR)
|
||||
DECLARE_ASN1_SET_OF(X509_ALGOR)
|
||||
|
||||
typedef struct X509_val_st
|
||||
{
|
||||
ASN1_UTCTIME *notBefore;
|
||||
|
@ -59,7 +59,7 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include "apps.h"
|
||||
#include "../apps/apps.h"
|
||||
#include <openssl/buffer.h>
|
||||
#include <openssl/err.h>
|
||||
#include <openssl/evp.h>
|
||||
|
Loading…
x
Reference in New Issue
Block a user