diff options
Diffstat (limited to 'src/lib/libcrypto/asn1/x_req.c')
| -rw-r--r-- | src/lib/libcrypto/asn1/x_req.c | 102 |
1 files changed, 90 insertions, 12 deletions
diff --git a/src/lib/libcrypto/asn1/x_req.c b/src/lib/libcrypto/asn1/x_req.c index 6ffcb9d03c..5e8aa21b0d 100644 --- a/src/lib/libcrypto/asn1/x_req.c +++ b/src/lib/libcrypto/asn1/x_req.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: x_req.c,v 1.13 2015/02/10 05:25:45 jsing Exp $ */ | 1 | /* $OpenBSD: x_req.c,v 1.14 2015/02/11 03:39:51 jsing Exp $ */ |
| 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
| 3 | * All rights reserved. | 3 | * All rights reserved. |
| 4 | * | 4 | * |
| @@ -92,15 +92,57 @@ rinf_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it, void *exarg) | |||
| 92 | return 1; | 92 | return 1; |
| 93 | } | 93 | } |
| 94 | 94 | ||
| 95 | ASN1_SEQUENCE_enc(X509_REQ_INFO, enc, rinf_cb) = { | 95 | static const ASN1_AUX X509_REQ_INFO_aux = { |
| 96 | ASN1_SIMPLE(X509_REQ_INFO, version, ASN1_INTEGER), | 96 | .app_data = NULL, |
| 97 | ASN1_SIMPLE(X509_REQ_INFO, subject, X509_NAME), | 97 | .flags = ASN1_AFLG_ENCODING, |
| 98 | ASN1_SIMPLE(X509_REQ_INFO, pubkey, X509_PUBKEY), | 98 | .ref_offset = 0, |
| 99 | .ref_lock = 0, | ||
| 100 | .asn1_cb = rinf_cb, | ||
| 101 | .enc_offset = offsetof(X509_REQ_INFO, enc), | ||
| 102 | }; | ||
| 103 | static const ASN1_TEMPLATE X509_REQ_INFO_seq_tt[] = { | ||
| 104 | { | ||
| 105 | .flags = 0, | ||
| 106 | .tag = 0, | ||
| 107 | .offset = offsetof(X509_REQ_INFO, version), | ||
| 108 | .field_name = "version", | ||
| 109 | .item = &ASN1_INTEGER_it, | ||
| 110 | }, | ||
| 111 | { | ||
| 112 | .flags = 0, | ||
| 113 | .tag = 0, | ||
| 114 | .offset = offsetof(X509_REQ_INFO, subject), | ||
| 115 | .field_name = "subject", | ||
| 116 | .item = &X509_NAME_it, | ||
| 117 | }, | ||
| 118 | { | ||
| 119 | .flags = 0, | ||
| 120 | .tag = 0, | ||
| 121 | .offset = offsetof(X509_REQ_INFO, pubkey), | ||
| 122 | .field_name = "pubkey", | ||
| 123 | .item = &X509_PUBKEY_it, | ||
| 124 | }, | ||
| 99 | /* This isn't really OPTIONAL but it gets round invalid | 125 | /* This isn't really OPTIONAL but it gets round invalid |
| 100 | * encodings | 126 | * encodings |
| 101 | */ | 127 | */ |
| 102 | ASN1_IMP_SET_OF_OPT(X509_REQ_INFO, attributes, X509_ATTRIBUTE, 0) | 128 | { |
| 103 | } ASN1_SEQUENCE_END_enc(X509_REQ_INFO, X509_REQ_INFO) | 129 | .flags = ASN1_TFLG_IMPLICIT | ASN1_TFLG_SET_OF | ASN1_TFLG_OPTIONAL, |
| 130 | .tag = 0, | ||
| 131 | .offset = offsetof(X509_REQ_INFO, attributes), | ||
| 132 | .field_name = "attributes", | ||
| 133 | .item = &X509_ATTRIBUTE_it, | ||
| 134 | }, | ||
| 135 | }; | ||
| 136 | |||
| 137 | const ASN1_ITEM X509_REQ_INFO_it = { | ||
| 138 | .itype = ASN1_ITYPE_SEQUENCE, | ||
| 139 | .utype = V_ASN1_SEQUENCE, | ||
| 140 | .templates = X509_REQ_INFO_seq_tt, | ||
| 141 | .tcount = sizeof(X509_REQ_INFO_seq_tt) / sizeof(ASN1_TEMPLATE), | ||
| 142 | .funcs = &X509_REQ_INFO_aux, | ||
| 143 | .size = sizeof(X509_REQ_INFO), | ||
| 144 | .sname = "X509_REQ_INFO", | ||
| 145 | }; | ||
| 104 | 146 | ||
| 105 | 147 | ||
| 106 | X509_REQ_INFO * | 148 | X509_REQ_INFO * |
| @@ -128,11 +170,47 @@ X509_REQ_INFO_free(X509_REQ_INFO *a) | |||
| 128 | ASN1_item_free((ASN1_VALUE *)a, &X509_REQ_INFO_it); | 170 | ASN1_item_free((ASN1_VALUE *)a, &X509_REQ_INFO_it); |
| 129 | } | 171 | } |
| 130 | 172 | ||
| 131 | ASN1_SEQUENCE_ref(X509_REQ, 0, CRYPTO_LOCK_X509_REQ) = { | 173 | static const ASN1_AUX X509_REQ_aux = { |
| 132 | ASN1_SIMPLE(X509_REQ, req_info, X509_REQ_INFO), | 174 | .app_data = NULL, |
| 133 | ASN1_SIMPLE(X509_REQ, sig_alg, X509_ALGOR), | 175 | .flags = ASN1_AFLG_REFCOUNT, |
| 134 | ASN1_SIMPLE(X509_REQ, signature, ASN1_BIT_STRING) | 176 | .ref_offset = offsetof(X509_REQ, references), |
| 135 | } ASN1_SEQUENCE_END_ref(X509_REQ, X509_REQ) | 177 | .ref_lock = CRYPTO_LOCK_X509_REQ, |
| 178 | .asn1_cb = 0, | ||
| 179 | .enc_offset = 0, | ||
| 180 | }; | ||
| 181 | static const ASN1_TEMPLATE X509_REQ_seq_tt[] = { | ||
| 182 | { | ||
| 183 | .flags = 0, | ||
| 184 | .tag = 0, | ||
| 185 | .offset = offsetof(X509_REQ, req_info), | ||
| 186 | .field_name = "req_info", | ||
| 187 | .item = &X509_REQ_INFO_it, | ||
| 188 | }, | ||
| 189 | { | ||
| 190 | .flags = 0, | ||
| 191 | .tag = 0, | ||
| 192 | .offset = offsetof(X509_REQ, sig_alg), | ||
| 193 | .field_name = "sig_alg", | ||
| 194 | .item = &X509_ALGOR_it, | ||
| 195 | }, | ||
| 196 | { | ||
| 197 | .flags = 0, | ||
| 198 | .tag = 0, | ||
| 199 | .offset = offsetof(X509_REQ, signature), | ||
| 200 | .field_name = "signature", | ||
| 201 | .item = &ASN1_BIT_STRING_it, | ||
| 202 | }, | ||
| 203 | }; | ||
| 204 | |||
| 205 | const ASN1_ITEM X509_REQ_it = { | ||
| 206 | .itype = ASN1_ITYPE_SEQUENCE, | ||
| 207 | .utype = V_ASN1_SEQUENCE, | ||
| 208 | .templates = X509_REQ_seq_tt, | ||
| 209 | .tcount = sizeof(X509_REQ_seq_tt) / sizeof(ASN1_TEMPLATE), | ||
| 210 | .funcs = &X509_REQ_aux, | ||
| 211 | .size = sizeof(X509_REQ), | ||
| 212 | .sname = "X509_REQ", | ||
| 213 | }; | ||
| 136 | 214 | ||
| 137 | 215 | ||
| 138 | X509_REQ * | 216 | X509_REQ * |
