ASN1_IMP_SET_OF_OPT(CMS_SignerInfo, unsignedAttrs, X509_ATTRIBUTE, 1) } ASN1_SEQUENCE_END_cb(CMS_SignerInfo, CMS_SignerInfo) ASN1_SEQUENCE(CMS_OtherRevocationInfoFormat) = { ASN1_SIMPLE(CMS_OtherRevocationInfoFormat, otherRevInfoFormat, ASN1_OBJECT), ASN1_OPT(CMS_OtherRevocationInfoFormat, otherRevInfo, ASN1_ANY) } ASN1_SEQUENCE_END(CMS_OtherRevocationInfoFormat) ASN1_CHOICE(CMS_RevocationInfoChoice) = { ASN1_SIMPLE(CMS_RevocationInfoChoice, d.crl, X509_CRL), ASN1_IMP(CMS_RevocationInfoChoice, d.other, CMS_OtherRevocationInfoFormat, 1) } ASN1_CHOICE_END(CMS_RevocationInfoChoice) ASN1_NDEF_SEQUENCE(CMS_SignedData) = { ASN1_SIMPLE(CMS_SignedData, version, LONG), ASN1_SET_OF(CMS_SignedData, digestAlgorithms, X509_ALGOR), ASN1_SIMPLE(CMS_SignedData, encapContentInfo, CMS_EncapsulatedContentInfo), ASN1_IMP_SET_OF_OPT(CMS_SignedData, certificates, CMS_CertificateChoices, 0), ASN1_IMP_SET_OF_OPT(CMS_SignedData, crls, CMS_RevocationInfoChoice, 1), ASN1_SET_OF(CMS_SignedData, signerInfos, CMS_SignerInfo) } ASN1_NDEF_SEQUENCE_END(CMS_SignedData) ASN1_SEQUENCE(CMS_OriginatorInfo) = { ASN1_IMP_SET_OF_OPT(CMS_OriginatorInfo, certificates, CMS_CertificateChoices, 0), ASN1_IMP_SET_OF_OPT(CMS_OriginatorInfo, crls, CMS_RevocationInfoChoice, 1) } ASN1_SEQUENCE_END(CMS_OriginatorInfo) ASN1_NDEF_SEQUENCE(CMS_EncryptedContentInfo) = { ASN1_SIMPLE(CMS_EncryptedContentInfo, contentType, ASN1_OBJECT), ASN1_SIMPLE(CMS_EncryptedContentInfo, contentEncryptionAlgorithm, X509_ALGOR), ASN1_IMP_OPT(CMS_EncryptedContentInfo, encryptedContent, ASN1_OCTET_STRING_NDEF, 0)
#include <openssl/asn1t.h> #include <openssl/x509.h> #include <openssl/obj.h> /* * X509_ATTRIBUTE: this has the following form: typedef struct * x509_attributes_st { ASN1_OBJECT *object; int single; union { char *ptr; * STACK_OF(ASN1_TYPE) *set; ASN1_TYPE *single; } value; } X509_ATTRIBUTE; * this needs some extra thought because the CHOICE type is merged with the * main structure and because the value can be anything at all we *must* try * the SET OF first because the ASN1_ANY type will swallow anything including * the whole SET OF structure. */ ASN1_CHOICE(X509_ATTRIBUTE_SET) = { ASN1_SET_OF(X509_ATTRIBUTE, value.set, ASN1_ANY), ASN1_SIMPLE(X509_ATTRIBUTE, value.single, ASN1_ANY) } ASN1_CHOICE_END_selector(X509_ATTRIBUTE, X509_ATTRIBUTE_SET, single) ASN1_SEQUENCE(X509_ATTRIBUTE) = { ASN1_SIMPLE(X509_ATTRIBUTE, object, ASN1_OBJECT), /* CHOICE type merged with parent */ ASN1_EX_COMBINE(0, 0, X509_ATTRIBUTE_SET) } ASN1_SEQUENCE_END(X509_ATTRIBUTE) IMPLEMENT_ASN1_FUNCTIONS(X509_ATTRIBUTE) IMPLEMENT_ASN1_DUP_FUNCTION(X509_ATTRIBUTE) X509_ATTRIBUTE *X509_ATTRIBUTE_create(int nid, int atrtype, void *value) { X509_ATTRIBUTE *ret = NULL;
#include "x509_lcl.h" /*- * X509_ATTRIBUTE: this has the following form: * * typedef struct x509_attributes_st * { * ASN1_OBJECT *object; * STACK_OF(ASN1_TYPE) *set; * } X509_ATTRIBUTE; * */ ASN1_SEQUENCE(X509_ATTRIBUTE) = { ASN1_SIMPLE(X509_ATTRIBUTE, object, ASN1_OBJECT), ASN1_SET_OF(X509_ATTRIBUTE, set, ASN1_ANY) } ASN1_SEQUENCE_END(X509_ATTRIBUTE) IMPLEMENT_ASN1_FUNCTIONS(X509_ATTRIBUTE) IMPLEMENT_ASN1_DUP_FUNCTION(X509_ATTRIBUTE) X509_ATTRIBUTE *X509_ATTRIBUTE_create(int nid, int atrtype, void *value) { X509_ATTRIBUTE *ret = NULL; ASN1_TYPE *val = NULL; if ((ret = X509_ATTRIBUTE_new()) == NULL) return (NULL); ret->object = OBJ_nid2obj(nid); if ((val = ASN1_TYPE_new()) == NULL) goto err;
ASN1_NDEF_EXP_OPT(CPK_CMS, d.signed_and_enveloped, CPK_SIGN_ENVELOPE, 0)), } ASN1_ADB_END(CPK_CMS, 0, type, 0, &cpkcmsdefault_tt, NULL); ASN1_NDEF_SEQUENCE(CPK_CMS) = { ASN1_SIMPLE(CPK_CMS, type, ASN1_OBJECT), ASN1_ADB_OBJECT(CPK_CMS) }ASN1_NDEF_SEQUENCE_END(CPK_CMS) IMPLEMENT_ASN1_FUNCTIONS(CPK_CMS) IMPLEMENT_ASN1_NDEF_FUNCTION(CPK_CMS) IMPLEMENT_ASN1_DUP_FUNCTION(CPK_CMS) ASN1_NDEF_SEQUENCE(CPK_SIGNED) = { ASN1_SIMPLE(CPK_SIGNED, version, LONG), ASN1_SET_OF(CPK_SIGNED, digest_algors, X509_ALGOR), ASN1_SIMPLE(CPK_SIGNED, contents, CPK_CMS), ASN1_IMP_SEQUENCE_OF_OPT(CPK_SIGNED, cert, X509, 0), ASN1_IMP_SET_OF_OPT(CPK_SIGNED, crl, X509_CRL, 1), ASN1_SET_OF(CPK_SIGNED, signer_infos, CPK_SIGNER_INFO) } ASN1_NDEF_SEQUENCE_END(CPK_SIGNED) IMPLEMENT_ASN1_FUNCTIONS(CPK_SIGNED) ASN1_SEQUENCE(CPK_SIGNER_INFO) = { ASN1_SIMPLE(CPK_SIGNER_INFO, version, LONG), ASN1_SIMPLE(CPK_SIGNER_INFO, signer, X509_NAME), ASN1_SIMPLE(CPK_SIGNER_INFO, digest_algor, X509_ALGOR), ASN1_IMP_SEQUENCE_OF_OPT(CPK_SIGNER_INFO, signed_attr, X509_ATTRIBUTE, 0), ASN1_SIMPLE(CPK_SIGNER_INFO, sign_algor, X509_ALGOR), ASN1_SIMPLE(CPK_SIGNER_INFO, signature, ASN1_OCTET_STRING),