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 * |