| OLD | NEW |
| 1 /* pk7_asn.c */ | 1 /* pk7_asn.c */ |
| 2 /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL | 2 /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL |
| 3 * project 2000. | 3 * project 2000. |
| 4 */ | 4 */ |
| 5 /* ==================================================================== | 5 /* ==================================================================== |
| 6 * Copyright (c) 2000 The OpenSSL Project. All rights reserved. | 6 * Copyright (c) 2000 The OpenSSL Project. All rights reserved. |
| 7 * | 7 * |
| 8 * Redistribution and use in source and binary forms, with or without | 8 * Redistribution and use in source and binary forms, with or without |
| 9 * modification, are permitted provided that the following conditions | 9 * modification, are permitted provided that the following conditions |
| 10 * are met: | 10 * are met: |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 70 | 70 |
| 71 ASN1_ADB(PKCS7) = { | 71 ASN1_ADB(PKCS7) = { |
| 72 ADB_ENTRY(NID_pkcs7_data, ASN1_NDEF_EXP_OPT(PKCS7, d.data, ASN1_OCTET_ST
RING_NDEF, 0)), | 72 ADB_ENTRY(NID_pkcs7_data, ASN1_NDEF_EXP_OPT(PKCS7, d.data, ASN1_OCTET_ST
RING_NDEF, 0)), |
| 73 ADB_ENTRY(NID_pkcs7_signed, ASN1_NDEF_EXP_OPT(PKCS7, d.sign, PKCS7_SIGNE
D, 0)), | 73 ADB_ENTRY(NID_pkcs7_signed, ASN1_NDEF_EXP_OPT(PKCS7, d.sign, PKCS7_SIGNE
D, 0)), |
| 74 ADB_ENTRY(NID_pkcs7_enveloped, ASN1_NDEF_EXP_OPT(PKCS7, d.enveloped, PKC
S7_ENVELOPE, 0)), | 74 ADB_ENTRY(NID_pkcs7_enveloped, ASN1_NDEF_EXP_OPT(PKCS7, d.enveloped, PKC
S7_ENVELOPE, 0)), |
| 75 ADB_ENTRY(NID_pkcs7_signedAndEnveloped, ASN1_NDEF_EXP_OPT(PKCS7, d.signe
d_and_enveloped, PKCS7_SIGN_ENVELOPE, 0)), | 75 ADB_ENTRY(NID_pkcs7_signedAndEnveloped, ASN1_NDEF_EXP_OPT(PKCS7, d.signe
d_and_enveloped, PKCS7_SIGN_ENVELOPE, 0)), |
| 76 ADB_ENTRY(NID_pkcs7_digest, ASN1_NDEF_EXP_OPT(PKCS7, d.digest, PKCS7_DIG
EST, 0)), | 76 ADB_ENTRY(NID_pkcs7_digest, ASN1_NDEF_EXP_OPT(PKCS7, d.digest, PKCS7_DIG
EST, 0)), |
| 77 ADB_ENTRY(NID_pkcs7_encrypted, ASN1_NDEF_EXP_OPT(PKCS7, d.encrypted, PKC
S7_ENCRYPT, 0)) | 77 ADB_ENTRY(NID_pkcs7_encrypted, ASN1_NDEF_EXP_OPT(PKCS7, d.encrypted, PKC
S7_ENCRYPT, 0)) |
| 78 } ASN1_ADB_END(PKCS7, 0, type, 0, &p7default_tt, NULL); | 78 } ASN1_ADB_END(PKCS7, 0, type, 0, &p7default_tt, NULL); |
| 79 | 79 |
| 80 ASN1_NDEF_SEQUENCE(PKCS7) = { | 80 /* PKCS#7 streaming support */ |
| 81 static int pk7_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it, |
| 82 » » » » » » » void *exarg) |
| 83 { |
| 84 » ASN1_STREAM_ARG *sarg = exarg; |
| 85 » PKCS7 **pp7 = (PKCS7 **)pval; |
| 86 |
| 87 » switch(operation) |
| 88 » » { |
| 89 |
| 90 » » case ASN1_OP_STREAM_PRE: |
| 91 » » if (PKCS7_stream(&sarg->boundary, *pp7) <= 0) |
| 92 » » » return 0; |
| 93 » » case ASN1_OP_DETACHED_PRE: |
| 94 » » sarg->ndef_bio = PKCS7_dataInit(*pp7, sarg->out); |
| 95 » » if (!sarg->ndef_bio) |
| 96 » » » return 0; |
| 97 » » break; |
| 98 |
| 99 » » case ASN1_OP_STREAM_POST: |
| 100 » » case ASN1_OP_DETACHED_POST: |
| 101 » » if (PKCS7_dataFinal(*pp7, sarg->ndef_bio) <= 0) |
| 102 » » » return 0; |
| 103 » » break; |
| 104 |
| 105 » » } |
| 106 » return 1; |
| 107 } |
| 108 |
| 109 ASN1_NDEF_SEQUENCE_cb(PKCS7, pk7_cb) = { |
| 81 ASN1_SIMPLE(PKCS7, type, ASN1_OBJECT), | 110 ASN1_SIMPLE(PKCS7, type, ASN1_OBJECT), |
| 82 ASN1_ADB_OBJECT(PKCS7) | 111 ASN1_ADB_OBJECT(PKCS7) |
| 83 }ASN1_NDEF_SEQUENCE_END(PKCS7) | 112 }ASN1_NDEF_SEQUENCE_END_cb(PKCS7, PKCS7) |
| 84 | 113 |
| 85 IMPLEMENT_ASN1_FUNCTIONS(PKCS7) | 114 IMPLEMENT_ASN1_FUNCTIONS(PKCS7) |
| 86 IMPLEMENT_ASN1_NDEF_FUNCTION(PKCS7) | 115 IMPLEMENT_ASN1_NDEF_FUNCTION(PKCS7) |
| 87 IMPLEMENT_ASN1_DUP_FUNCTION(PKCS7) | 116 IMPLEMENT_ASN1_DUP_FUNCTION(PKCS7) |
| 88 | 117 |
| 89 ASN1_NDEF_SEQUENCE(PKCS7_SIGNED) = { | 118 ASN1_NDEF_SEQUENCE(PKCS7_SIGNED) = { |
| 90 ASN1_SIMPLE(PKCS7_SIGNED, version, ASN1_INTEGER), | 119 ASN1_SIMPLE(PKCS7_SIGNED, version, ASN1_INTEGER), |
| 91 ASN1_SET_OF(PKCS7_SIGNED, md_algs, X509_ALGOR), | 120 ASN1_SET_OF(PKCS7_SIGNED, md_algs, X509_ALGOR), |
| 92 ASN1_SIMPLE(PKCS7_SIGNED, contents, PKCS7), | 121 ASN1_SIMPLE(PKCS7_SIGNED, contents, PKCS7), |
| 93 ASN1_IMP_SEQUENCE_OF_OPT(PKCS7_SIGNED, cert, X509, 0), | 122 ASN1_IMP_SEQUENCE_OF_OPT(PKCS7_SIGNED, cert, X509, 0), |
| 94 ASN1_IMP_SET_OF_OPT(PKCS7_SIGNED, crl, X509_CRL, 1), | 123 ASN1_IMP_SET_OF_OPT(PKCS7_SIGNED, crl, X509_CRL, 1), |
| 95 ASN1_SET_OF(PKCS7_SIGNED, signer_info, PKCS7_SIGNER_INFO) | 124 ASN1_SET_OF(PKCS7_SIGNED, signer_info, PKCS7_SIGNER_INFO) |
| 96 } ASN1_NDEF_SEQUENCE_END(PKCS7_SIGNED) | 125 } ASN1_NDEF_SEQUENCE_END(PKCS7_SIGNED) |
| 97 | 126 |
| 98 IMPLEMENT_ASN1_FUNCTIONS(PKCS7_SIGNED) | 127 IMPLEMENT_ASN1_FUNCTIONS(PKCS7_SIGNED) |
| 99 | 128 |
| 100 /* Minor tweak to operation: free up EVP_PKEY */ | 129 /* Minor tweak to operation: free up EVP_PKEY */ |
| 101 static int si_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it) | 130 static int si_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it, |
| 131 » » » » » » » void *exarg) |
| 102 { | 132 { |
| 103 if(operation == ASN1_OP_FREE_POST) { | 133 if(operation == ASN1_OP_FREE_POST) { |
| 104 PKCS7_SIGNER_INFO *si = (PKCS7_SIGNER_INFO *)*pval; | 134 PKCS7_SIGNER_INFO *si = (PKCS7_SIGNER_INFO *)*pval; |
| 105 EVP_PKEY_free(si->pkey); | 135 EVP_PKEY_free(si->pkey); |
| 106 } | 136 } |
| 107 return 1; | 137 return 1; |
| 108 } | 138 } |
| 109 | 139 |
| 110 ASN1_SEQUENCE_cb(PKCS7_SIGNER_INFO, si_cb) = { | 140 ASN1_SEQUENCE_cb(PKCS7_SIGNER_INFO, si_cb) = { |
| 111 ASN1_SIMPLE(PKCS7_SIGNER_INFO, version, ASN1_INTEGER), | 141 ASN1_SIMPLE(PKCS7_SIGNER_INFO, version, ASN1_INTEGER), |
| (...skipping 21 matching lines...) Expand all Loading... |
| 133 | 163 |
| 134 ASN1_NDEF_SEQUENCE(PKCS7_ENVELOPE) = { | 164 ASN1_NDEF_SEQUENCE(PKCS7_ENVELOPE) = { |
| 135 ASN1_SIMPLE(PKCS7_ENVELOPE, version, ASN1_INTEGER), | 165 ASN1_SIMPLE(PKCS7_ENVELOPE, version, ASN1_INTEGER), |
| 136 ASN1_SET_OF(PKCS7_ENVELOPE, recipientinfo, PKCS7_RECIP_INFO), | 166 ASN1_SET_OF(PKCS7_ENVELOPE, recipientinfo, PKCS7_RECIP_INFO), |
| 137 ASN1_SIMPLE(PKCS7_ENVELOPE, enc_data, PKCS7_ENC_CONTENT) | 167 ASN1_SIMPLE(PKCS7_ENVELOPE, enc_data, PKCS7_ENC_CONTENT) |
| 138 } ASN1_NDEF_SEQUENCE_END(PKCS7_ENVELOPE) | 168 } ASN1_NDEF_SEQUENCE_END(PKCS7_ENVELOPE) |
| 139 | 169 |
| 140 IMPLEMENT_ASN1_FUNCTIONS(PKCS7_ENVELOPE) | 170 IMPLEMENT_ASN1_FUNCTIONS(PKCS7_ENVELOPE) |
| 141 | 171 |
| 142 /* Minor tweak to operation: free up X509 */ | 172 /* Minor tweak to operation: free up X509 */ |
| 143 static int ri_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it) | 173 static int ri_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it, |
| 174 » » » » » » » » void *exarg) |
| 144 { | 175 { |
| 145 if(operation == ASN1_OP_FREE_POST) { | 176 if(operation == ASN1_OP_FREE_POST) { |
| 146 PKCS7_RECIP_INFO *ri = (PKCS7_RECIP_INFO *)*pval; | 177 PKCS7_RECIP_INFO *ri = (PKCS7_RECIP_INFO *)*pval; |
| 147 X509_free(ri->cert); | 178 X509_free(ri->cert); |
| 148 } | 179 } |
| 149 return 1; | 180 return 1; |
| 150 } | 181 } |
| 151 | 182 |
| 152 ASN1_SEQUENCE_cb(PKCS7_RECIP_INFO, ri_cb) = { | 183 ASN1_SEQUENCE_cb(PKCS7_RECIP_INFO, ri_cb) = { |
| 153 ASN1_SIMPLE(PKCS7_RECIP_INFO, version, ASN1_INTEGER), | 184 ASN1_SIMPLE(PKCS7_RECIP_INFO, version, ASN1_INTEGER), |
| 154 ASN1_SIMPLE(PKCS7_RECIP_INFO, issuer_and_serial, PKCS7_ISSUER_AND_SERIAL
), | 185 ASN1_SIMPLE(PKCS7_RECIP_INFO, issuer_and_serial, PKCS7_ISSUER_AND_SERIAL
), |
| 155 ASN1_SIMPLE(PKCS7_RECIP_INFO, key_enc_algor, X509_ALGOR), | 186 ASN1_SIMPLE(PKCS7_RECIP_INFO, key_enc_algor, X509_ALGOR), |
| 156 ASN1_SIMPLE(PKCS7_RECIP_INFO, enc_key, ASN1_OCTET_STRING) | 187 ASN1_SIMPLE(PKCS7_RECIP_INFO, enc_key, ASN1_OCTET_STRING) |
| 157 } ASN1_SEQUENCE_END_cb(PKCS7_RECIP_INFO, PKCS7_RECIP_INFO) | 188 } ASN1_SEQUENCE_END_cb(PKCS7_RECIP_INFO, PKCS7_RECIP_INFO) |
| 158 | 189 |
| 159 IMPLEMENT_ASN1_FUNCTIONS(PKCS7_RECIP_INFO) | 190 IMPLEMENT_ASN1_FUNCTIONS(PKCS7_RECIP_INFO) |
| 160 | 191 |
| 161 ASN1_NDEF_SEQUENCE(PKCS7_ENC_CONTENT) = { | 192 ASN1_NDEF_SEQUENCE(PKCS7_ENC_CONTENT) = { |
| 162 ASN1_SIMPLE(PKCS7_ENC_CONTENT, content_type, ASN1_OBJECT), | 193 ASN1_SIMPLE(PKCS7_ENC_CONTENT, content_type, ASN1_OBJECT), |
| 163 ASN1_SIMPLE(PKCS7_ENC_CONTENT, algorithm, X509_ALGOR), | 194 ASN1_SIMPLE(PKCS7_ENC_CONTENT, algorithm, X509_ALGOR), |
| 164 » ASN1_IMP_OPT(PKCS7_ENC_CONTENT, enc_data, ASN1_OCTET_STRING, 0) | 195 » ASN1_IMP_OPT(PKCS7_ENC_CONTENT, enc_data, ASN1_OCTET_STRING_NDEF, 0) |
| 165 } ASN1_NDEF_SEQUENCE_END(PKCS7_ENC_CONTENT) | 196 } ASN1_NDEF_SEQUENCE_END(PKCS7_ENC_CONTENT) |
| 166 | 197 |
| 167 IMPLEMENT_ASN1_FUNCTIONS(PKCS7_ENC_CONTENT) | 198 IMPLEMENT_ASN1_FUNCTIONS(PKCS7_ENC_CONTENT) |
| 168 | 199 |
| 169 ASN1_NDEF_SEQUENCE(PKCS7_SIGN_ENVELOPE) = { | 200 ASN1_NDEF_SEQUENCE(PKCS7_SIGN_ENVELOPE) = { |
| 170 ASN1_SIMPLE(PKCS7_SIGN_ENVELOPE, version, ASN1_INTEGER), | 201 ASN1_SIMPLE(PKCS7_SIGN_ENVELOPE, version, ASN1_INTEGER), |
| 171 ASN1_SET_OF(PKCS7_SIGN_ENVELOPE, recipientinfo, PKCS7_RECIP_INFO), | 202 ASN1_SET_OF(PKCS7_SIGN_ENVELOPE, recipientinfo, PKCS7_RECIP_INFO), |
| 172 ASN1_SET_OF(PKCS7_SIGN_ENVELOPE, md_algs, X509_ALGOR), | 203 ASN1_SET_OF(PKCS7_SIGN_ENVELOPE, md_algs, X509_ALGOR), |
| 173 ASN1_SIMPLE(PKCS7_SIGN_ENVELOPE, enc_data, PKCS7_ENC_CONTENT), | 204 ASN1_SIMPLE(PKCS7_SIGN_ENVELOPE, enc_data, PKCS7_ENC_CONTENT), |
| 174 ASN1_IMP_SET_OF_OPT(PKCS7_SIGN_ENVELOPE, cert, X509, 0), | 205 ASN1_IMP_SET_OF_OPT(PKCS7_SIGN_ENVELOPE, cert, X509, 0), |
| (...skipping 30 matching lines...) Expand all Loading... |
| 205 ASN1_ITEM_TEMPLATE_END(PKCS7_ATTR_SIGN) | 236 ASN1_ITEM_TEMPLATE_END(PKCS7_ATTR_SIGN) |
| 206 | 237 |
| 207 /* When verifying attributes we need to use the received order. So | 238 /* When verifying attributes we need to use the received order. So |
| 208 * we use SEQUENCE OF and tag it to SET OF | 239 * we use SEQUENCE OF and tag it to SET OF |
| 209 */ | 240 */ |
| 210 | 241 |
| 211 ASN1_ITEM_TEMPLATE(PKCS7_ATTR_VERIFY) = | 242 ASN1_ITEM_TEMPLATE(PKCS7_ATTR_VERIFY) = |
| 212 ASN1_EX_TEMPLATE_TYPE(ASN1_TFLG_SEQUENCE_OF | ASN1_TFLG_IMPTAG | ASN1_TF
LG_UNIVERSAL, | 243 ASN1_EX_TEMPLATE_TYPE(ASN1_TFLG_SEQUENCE_OF | ASN1_TFLG_IMPTAG | ASN1_TF
LG_UNIVERSAL, |
| 213 V_ASN1_SET, PKCS7_ATTRIBUTES, X509_ATTRIBUTE) | 244 V_ASN1_SET, PKCS7_ATTRIBUTES, X509_ATTRIBUTE) |
| 214 ASN1_ITEM_TEMPLATE_END(PKCS7_ATTR_VERIFY) | 245 ASN1_ITEM_TEMPLATE_END(PKCS7_ATTR_VERIFY) |
| 246 |
| 247 IMPLEMENT_ASN1_PRINT_FUNCTION(PKCS7) |
| OLD | NEW |