diff options
Diffstat (limited to 'src/lib/libcrypto')
-rw-r--r-- | src/lib/libcrypto/asn1/n_pkey.c | 78 | ||||
-rw-r--r-- | src/lib/libcrypto/asn1/nsseq.c | 40 | ||||
-rw-r--r-- | src/lib/libcrypto/asn1/p5_pbe.c | 32 | ||||
-rw-r--r-- | src/lib/libcrypto/asn1/p5_pbev2.c | 78 | ||||
-rw-r--r-- | src/lib/libcrypto/asn1/p8_pkey.c | 56 | ||||
-rw-r--r-- | src/lib/libcrypto/asn1/x_algor.c | 32 | ||||
-rw-r--r-- | src/lib/libcrypto/asn1/x_crl.c | 164 | ||||
-rw-r--r-- | src/lib/libcrypto/asn1/x_exten.c | 40 | ||||
-rw-r--r-- | src/lib/libcrypto/asn1/x_name.c | 32 | ||||
-rw-r--r-- | src/lib/libcrypto/asn1/x_nx509.c | 32 | ||||
-rw-r--r-- | src/lib/libcrypto/asn1/x_pubkey.c | 40 | ||||
-rw-r--r-- | src/lib/libcrypto/asn1/x_req.c | 102 | ||||
-rw-r--r-- | src/lib/libcrypto/asn1/x_sig.c | 32 | ||||
-rw-r--r-- | src/lib/libcrypto/asn1/x_spki.c | 70 | ||||
-rw-r--r-- | src/lib/libcrypto/asn1/x_val.c | 32 | ||||
-rw-r--r-- | src/lib/libcrypto/asn1/x_x509.c | 150 | ||||
-rw-r--r-- | src/lib/libcrypto/asn1/x_x509a.c | 86 |
17 files changed, 950 insertions, 146 deletions
diff --git a/src/lib/libcrypto/asn1/n_pkey.c b/src/lib/libcrypto/asn1/n_pkey.c index 198ca97c09..8f65a4b926 100644 --- a/src/lib/libcrypto/asn1/n_pkey.c +++ b/src/lib/libcrypto/asn1/n_pkey.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: n_pkey.c,v 1.23 2015/02/10 04:01:26 jsing Exp $ */ | 1 | /* $OpenBSD: n_pkey.c,v 1.24 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 | * |
@@ -87,10 +87,40 @@ typedef struct netscape_encrypted_pkey_st { | |||
87 | } NETSCAPE_ENCRYPTED_PKEY; | 87 | } NETSCAPE_ENCRYPTED_PKEY; |
88 | 88 | ||
89 | 89 | ||
90 | ASN1_BROKEN_SEQUENCE(NETSCAPE_ENCRYPTED_PKEY) = { | 90 | static const ASN1_AUX NETSCAPE_ENCRYPTED_PKEY_aux = { |
91 | ASN1_SIMPLE(NETSCAPE_ENCRYPTED_PKEY, os, ASN1_OCTET_STRING), | 91 | .app_data = NULL, |
92 | ASN1_SIMPLE(NETSCAPE_ENCRYPTED_PKEY, enckey, X509_SIG) | 92 | .flags = ASN1_AFLG_BROKEN, |
93 | } ASN1_BROKEN_SEQUENCE_END(NETSCAPE_ENCRYPTED_PKEY) | 93 | .ref_offset = 0, |
94 | .ref_lock = 0, | ||
95 | .asn1_cb = NULL, | ||
96 | .enc_offset = 0, | ||
97 | }; | ||
98 | static const ASN1_TEMPLATE NETSCAPE_ENCRYPTED_PKEY_seq_tt[] = { | ||
99 | { | ||
100 | .flags = 0, | ||
101 | .tag = 0, | ||
102 | .offset = offsetof(NETSCAPE_ENCRYPTED_PKEY, os), | ||
103 | .field_name = "os", | ||
104 | .item = &ASN1_OCTET_STRING_it, | ||
105 | }, | ||
106 | { | ||
107 | .flags = 0, | ||
108 | .tag = 0, | ||
109 | .offset = offsetof(NETSCAPE_ENCRYPTED_PKEY, enckey), | ||
110 | .field_name = "enckey", | ||
111 | .item = &X509_SIG_it, | ||
112 | }, | ||
113 | }; | ||
114 | |||
115 | const ASN1_ITEM NETSCAPE_ENCRYPTED_PKEY_it = { | ||
116 | .itype = ASN1_ITYPE_SEQUENCE, | ||
117 | .utype = V_ASN1_SEQUENCE, | ||
118 | .templates = NETSCAPE_ENCRYPTED_PKEY_seq_tt, | ||
119 | .tcount = sizeof(NETSCAPE_ENCRYPTED_PKEY_seq_tt) / sizeof(ASN1_TEMPLATE), | ||
120 | .funcs = &NETSCAPE_ENCRYPTED_PKEY_aux, | ||
121 | .size = sizeof(NETSCAPE_ENCRYPTED_PKEY), | ||
122 | .sname = "NETSCAPE_ENCRYPTED_PKEY", | ||
123 | }; | ||
94 | 124 | ||
95 | DECLARE_ASN1_FUNCTIONS_const(NETSCAPE_ENCRYPTED_PKEY) | 125 | DECLARE_ASN1_FUNCTIONS_const(NETSCAPE_ENCRYPTED_PKEY) |
96 | DECLARE_ASN1_ENCODE_FUNCTIONS_const(NETSCAPE_ENCRYPTED_PKEY, NETSCAPE_ENCRYPTED_PKEY) | 126 | DECLARE_ASN1_ENCODE_FUNCTIONS_const(NETSCAPE_ENCRYPTED_PKEY, NETSCAPE_ENCRYPTED_PKEY) |
@@ -120,11 +150,39 @@ NETSCAPE_ENCRYPTED_PKEY_free(NETSCAPE_ENCRYPTED_PKEY *a) | |||
120 | ASN1_item_free((ASN1_VALUE *)a, &NETSCAPE_ENCRYPTED_PKEY_it); | 150 | ASN1_item_free((ASN1_VALUE *)a, &NETSCAPE_ENCRYPTED_PKEY_it); |
121 | } | 151 | } |
122 | 152 | ||
123 | ASN1_SEQUENCE(NETSCAPE_PKEY) = { | 153 | static const ASN1_TEMPLATE NETSCAPE_PKEY_seq_tt[] = { |
124 | ASN1_SIMPLE(NETSCAPE_PKEY, version, LONG), | 154 | { |
125 | ASN1_SIMPLE(NETSCAPE_PKEY, algor, X509_ALGOR), | 155 | .flags = 0, |
126 | ASN1_SIMPLE(NETSCAPE_PKEY, private_key, ASN1_OCTET_STRING) | 156 | .tag = 0, |
127 | } ASN1_SEQUENCE_END(NETSCAPE_PKEY) | 157 | .offset = offsetof(NETSCAPE_PKEY, version), |
158 | .field_name = "version", | ||
159 | .item = &LONG_it, | ||
160 | }, | ||
161 | { | ||
162 | .flags = 0, | ||
163 | .tag = 0, | ||
164 | .offset = offsetof(NETSCAPE_PKEY, algor), | ||
165 | .field_name = "algor", | ||
166 | .item = &X509_ALGOR_it, | ||
167 | }, | ||
168 | { | ||
169 | .flags = 0, | ||
170 | .tag = 0, | ||
171 | .offset = offsetof(NETSCAPE_PKEY, private_key), | ||
172 | .field_name = "private_key", | ||
173 | .item = &ASN1_OCTET_STRING_it, | ||
174 | }, | ||
175 | }; | ||
176 | |||
177 | const ASN1_ITEM NETSCAPE_PKEY_it = { | ||
178 | .itype = ASN1_ITYPE_SEQUENCE, | ||
179 | .utype = V_ASN1_SEQUENCE, | ||
180 | .templates = NETSCAPE_PKEY_seq_tt, | ||
181 | .tcount = sizeof(NETSCAPE_PKEY_seq_tt) / sizeof(ASN1_TEMPLATE), | ||
182 | .funcs = NULL, | ||
183 | .size = sizeof(NETSCAPE_PKEY), | ||
184 | .sname = "NETSCAPE_PKEY", | ||
185 | }; | ||
128 | 186 | ||
129 | DECLARE_ASN1_FUNCTIONS_const(NETSCAPE_PKEY) | 187 | DECLARE_ASN1_FUNCTIONS_const(NETSCAPE_PKEY) |
130 | DECLARE_ASN1_ENCODE_FUNCTIONS_const(NETSCAPE_PKEY, NETSCAPE_PKEY) | 188 | DECLARE_ASN1_ENCODE_FUNCTIONS_const(NETSCAPE_PKEY, NETSCAPE_PKEY) |
diff --git a/src/lib/libcrypto/asn1/nsseq.c b/src/lib/libcrypto/asn1/nsseq.c index ceab3992fd..dff9b189d9 100644 --- a/src/lib/libcrypto/asn1/nsseq.c +++ b/src/lib/libcrypto/asn1/nsseq.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: nsseq.c,v 1.8 2015/02/09 15:05:59 jsing Exp $ */ | 1 | /* $OpenBSD: nsseq.c,v 1.9 2015/02/11 03:39:51 jsing Exp $ */ |
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 1999. | 3 | * project 1999. |
4 | */ | 4 | */ |
@@ -75,10 +75,40 @@ nsseq_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it, void *exarg) | |||
75 | 75 | ||
76 | /* Netscape certificate sequence structure */ | 76 | /* Netscape certificate sequence structure */ |
77 | 77 | ||
78 | ASN1_SEQUENCE_cb(NETSCAPE_CERT_SEQUENCE, nsseq_cb) = { | 78 | static const ASN1_AUX NETSCAPE_CERT_SEQUENCE_aux = { |
79 | ASN1_SIMPLE(NETSCAPE_CERT_SEQUENCE, type, ASN1_OBJECT), | 79 | .app_data = NULL, |
80 | ASN1_EXP_SEQUENCE_OF_OPT(NETSCAPE_CERT_SEQUENCE, certs, X509, 0) | 80 | .flags = 0, |
81 | } ASN1_SEQUENCE_END_cb(NETSCAPE_CERT_SEQUENCE, NETSCAPE_CERT_SEQUENCE) | 81 | .ref_offset = 0, |
82 | .ref_lock = 0, | ||
83 | .asn1_cb = nsseq_cb, | ||
84 | .enc_offset = 0, | ||
85 | }; | ||
86 | static const ASN1_TEMPLATE NETSCAPE_CERT_SEQUENCE_seq_tt[] = { | ||
87 | { | ||
88 | .flags = 0, | ||
89 | .tag = 0, | ||
90 | .offset = offsetof(NETSCAPE_CERT_SEQUENCE, type), | ||
91 | .field_name = "type", | ||
92 | .item = &ASN1_OBJECT_it, | ||
93 | }, | ||
94 | { | ||
95 | .flags = ASN1_TFLG_EXPLICIT | ASN1_TFLG_SEQUENCE_OF | ASN1_TFLG_OPTIONAL, | ||
96 | .tag = 0, | ||
97 | .offset = offsetof(NETSCAPE_CERT_SEQUENCE, certs), | ||
98 | .field_name = "certs", | ||
99 | .item = &X509_it, | ||
100 | }, | ||
101 | }; | ||
102 | |||
103 | const ASN1_ITEM NETSCAPE_CERT_SEQUENCE_it = { | ||
104 | .itype = ASN1_ITYPE_SEQUENCE, | ||
105 | .utype = V_ASN1_SEQUENCE, | ||
106 | .templates = NETSCAPE_CERT_SEQUENCE_seq_tt, | ||
107 | .tcount = sizeof(NETSCAPE_CERT_SEQUENCE_seq_tt) / sizeof(ASN1_TEMPLATE), | ||
108 | .funcs = &NETSCAPE_CERT_SEQUENCE_aux, | ||
109 | .size = sizeof(NETSCAPE_CERT_SEQUENCE), | ||
110 | .sname = "NETSCAPE_CERT_SEQUENCE", | ||
111 | }; | ||
82 | 112 | ||
83 | 113 | ||
84 | NETSCAPE_CERT_SEQUENCE * | 114 | NETSCAPE_CERT_SEQUENCE * |
diff --git a/src/lib/libcrypto/asn1/p5_pbe.c b/src/lib/libcrypto/asn1/p5_pbe.c index 7491a5bdc7..6d08cb28a1 100644 --- a/src/lib/libcrypto/asn1/p5_pbe.c +++ b/src/lib/libcrypto/asn1/p5_pbe.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: p5_pbe.c,v 1.18 2015/02/09 15:05:59 jsing Exp $ */ | 1 | /* $OpenBSD: p5_pbe.c,v 1.19 2015/02/11 03:39:51 jsing Exp $ */ |
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 1999. | 3 | * project 1999. |
4 | */ | 4 | */ |
@@ -66,10 +66,32 @@ | |||
66 | 66 | ||
67 | /* PKCS#5 password based encryption structure */ | 67 | /* PKCS#5 password based encryption structure */ |
68 | 68 | ||
69 | ASN1_SEQUENCE(PBEPARAM) = { | 69 | static const ASN1_TEMPLATE PBEPARAM_seq_tt[] = { |
70 | ASN1_SIMPLE(PBEPARAM, salt, ASN1_OCTET_STRING), | 70 | { |
71 | ASN1_SIMPLE(PBEPARAM, iter, ASN1_INTEGER) | 71 | .flags = 0, |
72 | } ASN1_SEQUENCE_END(PBEPARAM) | 72 | .tag = 0, |
73 | .offset = offsetof(PBEPARAM, salt), | ||
74 | .field_name = "salt", | ||
75 | .item = &ASN1_OCTET_STRING_it, | ||
76 | }, | ||
77 | { | ||
78 | .flags = 0, | ||
79 | .tag = 0, | ||
80 | .offset = offsetof(PBEPARAM, iter), | ||
81 | .field_name = "iter", | ||
82 | .item = &ASN1_INTEGER_it, | ||
83 | }, | ||
84 | }; | ||
85 | |||
86 | const ASN1_ITEM PBEPARAM_it = { | ||
87 | .itype = ASN1_ITYPE_SEQUENCE, | ||
88 | .utype = V_ASN1_SEQUENCE, | ||
89 | .templates = PBEPARAM_seq_tt, | ||
90 | .tcount = sizeof(PBEPARAM_seq_tt) / sizeof(ASN1_TEMPLATE), | ||
91 | .funcs = NULL, | ||
92 | .size = sizeof(PBEPARAM), | ||
93 | .sname = "PBEPARAM", | ||
94 | }; | ||
73 | 95 | ||
74 | 96 | ||
75 | PBEPARAM * | 97 | PBEPARAM * |
diff --git a/src/lib/libcrypto/asn1/p5_pbev2.c b/src/lib/libcrypto/asn1/p5_pbev2.c index 1189e7e26b..f967f25d3d 100644 --- a/src/lib/libcrypto/asn1/p5_pbev2.c +++ b/src/lib/libcrypto/asn1/p5_pbev2.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: p5_pbev2.c,v 1.19 2015/02/09 15:05:59 jsing Exp $ */ | 1 | /* $OpenBSD: p5_pbev2.c,v 1.20 2015/02/11 03:39:51 jsing Exp $ */ |
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 1999-2004. | 3 | * project 1999-2004. |
4 | */ | 4 | */ |
@@ -66,10 +66,32 @@ | |||
66 | 66 | ||
67 | /* PKCS#5 v2.0 password based encryption structures */ | 67 | /* PKCS#5 v2.0 password based encryption structures */ |
68 | 68 | ||
69 | ASN1_SEQUENCE(PBE2PARAM) = { | 69 | static const ASN1_TEMPLATE PBE2PARAM_seq_tt[] = { |
70 | ASN1_SIMPLE(PBE2PARAM, keyfunc, X509_ALGOR), | 70 | { |
71 | ASN1_SIMPLE(PBE2PARAM, encryption, X509_ALGOR) | 71 | .flags = 0, |
72 | } ASN1_SEQUENCE_END(PBE2PARAM) | 72 | .tag = 0, |
73 | .offset = offsetof(PBE2PARAM, keyfunc), | ||
74 | .field_name = "keyfunc", | ||
75 | .item = &X509_ALGOR_it, | ||
76 | }, | ||
77 | { | ||
78 | .flags = 0, | ||
79 | .tag = 0, | ||
80 | .offset = offsetof(PBE2PARAM, encryption), | ||
81 | .field_name = "encryption", | ||
82 | .item = &X509_ALGOR_it, | ||
83 | }, | ||
84 | }; | ||
85 | |||
86 | const ASN1_ITEM PBE2PARAM_it = { | ||
87 | .itype = ASN1_ITYPE_SEQUENCE, | ||
88 | .utype = V_ASN1_SEQUENCE, | ||
89 | .templates = PBE2PARAM_seq_tt, | ||
90 | .tcount = sizeof(PBE2PARAM_seq_tt) / sizeof(ASN1_TEMPLATE), | ||
91 | .funcs = NULL, | ||
92 | .size = sizeof(PBE2PARAM), | ||
93 | .sname = "PBE2PARAM", | ||
94 | }; | ||
73 | 95 | ||
74 | 96 | ||
75 | PBE2PARAM * | 97 | PBE2PARAM * |
@@ -97,12 +119,46 @@ PBE2PARAM_free(PBE2PARAM *a) | |||
97 | ASN1_item_free((ASN1_VALUE *)a, &PBE2PARAM_it); | 119 | ASN1_item_free((ASN1_VALUE *)a, &PBE2PARAM_it); |
98 | } | 120 | } |
99 | 121 | ||
100 | ASN1_SEQUENCE(PBKDF2PARAM) = { | 122 | static const ASN1_TEMPLATE PBKDF2PARAM_seq_tt[] = { |
101 | ASN1_SIMPLE(PBKDF2PARAM, salt, ASN1_ANY), | 123 | { |
102 | ASN1_SIMPLE(PBKDF2PARAM, iter, ASN1_INTEGER), | 124 | .flags = 0, |
103 | ASN1_OPT(PBKDF2PARAM, keylength, ASN1_INTEGER), | 125 | .tag = 0, |
104 | ASN1_OPT(PBKDF2PARAM, prf, X509_ALGOR) | 126 | .offset = offsetof(PBKDF2PARAM, salt), |
105 | } ASN1_SEQUENCE_END(PBKDF2PARAM) | 127 | .field_name = "salt", |
128 | .item = &ASN1_ANY_it, | ||
129 | }, | ||
130 | { | ||
131 | .flags = 0, | ||
132 | .tag = 0, | ||
133 | .offset = offsetof(PBKDF2PARAM, iter), | ||
134 | .field_name = "iter", | ||
135 | .item = &ASN1_INTEGER_it, | ||
136 | }, | ||
137 | { | ||
138 | .flags = ASN1_TFLG_OPTIONAL, | ||
139 | .tag = 0, | ||
140 | .offset = offsetof(PBKDF2PARAM, keylength), | ||
141 | .field_name = "keylength", | ||
142 | .item = &ASN1_INTEGER_it, | ||
143 | }, | ||
144 | { | ||
145 | .flags = ASN1_TFLG_OPTIONAL, | ||
146 | .tag = 0, | ||
147 | .offset = offsetof(PBKDF2PARAM, prf), | ||
148 | .field_name = "prf", | ||
149 | .item = &X509_ALGOR_it, | ||
150 | }, | ||
151 | }; | ||
152 | |||
153 | const ASN1_ITEM PBKDF2PARAM_it = { | ||
154 | .itype = ASN1_ITYPE_SEQUENCE, | ||
155 | .utype = V_ASN1_SEQUENCE, | ||
156 | .templates = PBKDF2PARAM_seq_tt, | ||
157 | .tcount = sizeof(PBKDF2PARAM_seq_tt) / sizeof(ASN1_TEMPLATE), | ||
158 | .funcs = NULL, | ||
159 | .size = sizeof(PBKDF2PARAM), | ||
160 | .sname = "PBKDF2PARAM", | ||
161 | }; | ||
106 | 162 | ||
107 | 163 | ||
108 | PBKDF2PARAM * | 164 | PBKDF2PARAM * |
diff --git a/src/lib/libcrypto/asn1/p8_pkey.c b/src/lib/libcrypto/asn1/p8_pkey.c index f8688ebc17..486aa8d42c 100644 --- a/src/lib/libcrypto/asn1/p8_pkey.c +++ b/src/lib/libcrypto/asn1/p8_pkey.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: p8_pkey.c,v 1.13 2015/02/09 15:05:59 jsing Exp $ */ | 1 | /* $OpenBSD: p8_pkey.c,v 1.14 2015/02/11 03:39:51 jsing Exp $ */ |
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 1999. | 3 | * project 1999. |
4 | */ | 4 | */ |
@@ -75,12 +75,54 @@ pkey_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it, void *exarg) | |||
75 | return 1; | 75 | return 1; |
76 | } | 76 | } |
77 | 77 | ||
78 | ASN1_SEQUENCE_cb(PKCS8_PRIV_KEY_INFO, pkey_cb) = { | 78 | static const ASN1_AUX PKCS8_PRIV_KEY_INFO_aux = { |
79 | ASN1_SIMPLE(PKCS8_PRIV_KEY_INFO, version, ASN1_INTEGER), | 79 | .app_data = NULL, |
80 | ASN1_SIMPLE(PKCS8_PRIV_KEY_INFO, pkeyalg, X509_ALGOR), | 80 | .flags = 0, |
81 | ASN1_SIMPLE(PKCS8_PRIV_KEY_INFO, pkey, ASN1_ANY), | 81 | .ref_offset = 0, |
82 | ASN1_IMP_SET_OF_OPT(PKCS8_PRIV_KEY_INFO, attributes, X509_ATTRIBUTE, 0) | 82 | .ref_lock = 0, |
83 | } ASN1_SEQUENCE_END_cb(PKCS8_PRIV_KEY_INFO, PKCS8_PRIV_KEY_INFO) | 83 | .asn1_cb = pkey_cb, |
84 | .enc_offset = 0, | ||
85 | }; | ||
86 | static const ASN1_TEMPLATE PKCS8_PRIV_KEY_INFO_seq_tt[] = { | ||
87 | { | ||
88 | .flags = 0, | ||
89 | .tag = 0, | ||
90 | .offset = offsetof(PKCS8_PRIV_KEY_INFO, version), | ||
91 | .field_name = "version", | ||
92 | .item = &ASN1_INTEGER_it, | ||
93 | }, | ||
94 | { | ||
95 | .flags = 0, | ||
96 | .tag = 0, | ||
97 | .offset = offsetof(PKCS8_PRIV_KEY_INFO, pkeyalg), | ||
98 | .field_name = "pkeyalg", | ||
99 | .item = &X509_ALGOR_it, | ||
100 | }, | ||
101 | { | ||
102 | .flags = 0, | ||
103 | .tag = 0, | ||
104 | .offset = offsetof(PKCS8_PRIV_KEY_INFO, pkey), | ||
105 | .field_name = "pkey", | ||
106 | .item = &ASN1_ANY_it, | ||
107 | }, | ||
108 | { | ||
109 | .flags = ASN1_TFLG_IMPLICIT | ASN1_TFLG_SET_OF | ASN1_TFLG_OPTIONAL, | ||
110 | .tag = 0, | ||
111 | .offset = offsetof(PKCS8_PRIV_KEY_INFO, attributes), | ||
112 | .field_name = "attributes", | ||
113 | .item = &X509_ATTRIBUTE_it, | ||
114 | }, | ||
115 | }; | ||
116 | |||
117 | const ASN1_ITEM PKCS8_PRIV_KEY_INFO_it = { | ||
118 | .itype = ASN1_ITYPE_SEQUENCE, | ||
119 | .utype = V_ASN1_SEQUENCE, | ||
120 | .templates = PKCS8_PRIV_KEY_INFO_seq_tt, | ||
121 | .tcount = sizeof(PKCS8_PRIV_KEY_INFO_seq_tt) / sizeof(ASN1_TEMPLATE), | ||
122 | .funcs = &PKCS8_PRIV_KEY_INFO_aux, | ||
123 | .size = sizeof(PKCS8_PRIV_KEY_INFO), | ||
124 | .sname = "PKCS8_PRIV_KEY_INFO", | ||
125 | }; | ||
84 | 126 | ||
85 | 127 | ||
86 | PKCS8_PRIV_KEY_INFO * | 128 | PKCS8_PRIV_KEY_INFO * |
diff --git a/src/lib/libcrypto/asn1/x_algor.c b/src/lib/libcrypto/asn1/x_algor.c index f7cae9499a..c10e114318 100644 --- a/src/lib/libcrypto/asn1/x_algor.c +++ b/src/lib/libcrypto/asn1/x_algor.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: x_algor.c,v 1.18 2015/02/10 08:33:10 jsing Exp $ */ | 1 | /* $OpenBSD: x_algor.c,v 1.19 2015/02/11 03:39:51 jsing Exp $ */ |
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 | */ |
@@ -61,10 +61,32 @@ | |||
61 | #include <openssl/asn1.h> | 61 | #include <openssl/asn1.h> |
62 | #include <openssl/asn1t.h> | 62 | #include <openssl/asn1t.h> |
63 | 63 | ||
64 | ASN1_SEQUENCE(X509_ALGOR) = { | 64 | static const ASN1_TEMPLATE X509_ALGOR_seq_tt[] = { |
65 | ASN1_SIMPLE(X509_ALGOR, algorithm, ASN1_OBJECT), | 65 | { |
66 | ASN1_OPT(X509_ALGOR, parameter, ASN1_ANY) | 66 | .flags = 0, |
67 | } ASN1_SEQUENCE_END(X509_ALGOR) | 67 | .tag = 0, |
68 | .offset = offsetof(X509_ALGOR, algorithm), | ||
69 | .field_name = "algorithm", | ||
70 | .item = &ASN1_OBJECT_it, | ||
71 | }, | ||
72 | { | ||
73 | .flags = ASN1_TFLG_OPTIONAL, | ||
74 | .tag = 0, | ||
75 | .offset = offsetof(X509_ALGOR, parameter), | ||
76 | .field_name = "parameter", | ||
77 | .item = &ASN1_ANY_it, | ||
78 | }, | ||
79 | }; | ||
80 | |||
81 | const ASN1_ITEM X509_ALGOR_it = { | ||
82 | .itype = ASN1_ITYPE_SEQUENCE, | ||
83 | .utype = V_ASN1_SEQUENCE, | ||
84 | .templates = X509_ALGOR_seq_tt, | ||
85 | .tcount = sizeof(X509_ALGOR_seq_tt) / sizeof(ASN1_TEMPLATE), | ||
86 | .funcs = NULL, | ||
87 | .size = sizeof(X509_ALGOR), | ||
88 | .sname = "X509_ALGOR", | ||
89 | }; | ||
68 | 90 | ||
69 | ASN1_ITEM_TEMPLATE(X509_ALGORS) = | 91 | ASN1_ITEM_TEMPLATE(X509_ALGORS) = |
70 | ASN1_EX_TEMPLATE_TYPE(ASN1_TFLG_SEQUENCE_OF, 0, algorithms, X509_ALGOR) | 92 | ASN1_EX_TEMPLATE_TYPE(ASN1_TFLG_SEQUENCE_OF, 0, algorithms, X509_ALGOR) |
diff --git a/src/lib/libcrypto/asn1/x_crl.c b/src/lib/libcrypto/asn1/x_crl.c index 536aa74e00..338a784189 100644 --- a/src/lib/libcrypto/asn1/x_crl.c +++ b/src/lib/libcrypto/asn1/x_crl.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: x_crl.c,v 1.22 2015/02/10 08:33:10 jsing Exp $ */ | 1 | /* $OpenBSD: x_crl.c,v 1.23 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 | * |
@@ -71,11 +71,39 @@ static int X509_REVOKED_cmp(const X509_REVOKED * const *a, | |||
71 | const X509_REVOKED * const *b); | 71 | const X509_REVOKED * const *b); |
72 | static void setup_idp(X509_CRL *crl, ISSUING_DIST_POINT *idp); | 72 | static void setup_idp(X509_CRL *crl, ISSUING_DIST_POINT *idp); |
73 | 73 | ||
74 | ASN1_SEQUENCE(X509_REVOKED) = { | 74 | static const ASN1_TEMPLATE X509_REVOKED_seq_tt[] = { |
75 | ASN1_SIMPLE(X509_REVOKED, serialNumber, ASN1_INTEGER), | 75 | { |
76 | ASN1_SIMPLE(X509_REVOKED, revocationDate, ASN1_TIME), | 76 | .flags = 0, |
77 | ASN1_SEQUENCE_OF_OPT(X509_REVOKED, extensions, X509_EXTENSION) | 77 | .tag = 0, |
78 | } ASN1_SEQUENCE_END(X509_REVOKED) | 78 | .offset = offsetof(X509_REVOKED, serialNumber), |
79 | .field_name = "serialNumber", | ||
80 | .item = &ASN1_INTEGER_it, | ||
81 | }, | ||
82 | { | ||
83 | .flags = 0, | ||
84 | .tag = 0, | ||
85 | .offset = offsetof(X509_REVOKED, revocationDate), | ||
86 | .field_name = "revocationDate", | ||
87 | .item = &ASN1_TIME_it, | ||
88 | }, | ||
89 | { | ||
90 | .flags = ASN1_TFLG_SEQUENCE_OF | ASN1_TFLG_OPTIONAL, | ||
91 | .tag = 0, | ||
92 | .offset = offsetof(X509_REVOKED, extensions), | ||
93 | .field_name = "extensions", | ||
94 | .item = &X509_EXTENSION_it, | ||
95 | }, | ||
96 | }; | ||
97 | |||
98 | const ASN1_ITEM X509_REVOKED_it = { | ||
99 | .itype = ASN1_ITYPE_SEQUENCE, | ||
100 | .utype = V_ASN1_SEQUENCE, | ||
101 | .templates = X509_REVOKED_seq_tt, | ||
102 | .tcount = sizeof(X509_REVOKED_seq_tt) / sizeof(ASN1_TEMPLATE), | ||
103 | .funcs = NULL, | ||
104 | .size = sizeof(X509_REVOKED), | ||
105 | .sname = "X509_REVOKED", | ||
106 | }; | ||
79 | 107 | ||
80 | static int def_crl_verify(X509_CRL *crl, EVP_PKEY *r); | 108 | static int def_crl_verify(X509_CRL *crl, EVP_PKEY *r); |
81 | static int def_crl_lookup(X509_CRL *crl, X509_REVOKED **ret, | 109 | static int def_crl_lookup(X509_CRL *crl, X509_REVOKED **ret, |
@@ -111,15 +139,75 @@ crl_inf_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it, void *exarg) | |||
111 | } | 139 | } |
112 | 140 | ||
113 | 141 | ||
114 | ASN1_SEQUENCE_enc(X509_CRL_INFO, enc, crl_inf_cb) = { | 142 | static const ASN1_AUX X509_CRL_INFO_aux = { |
115 | ASN1_OPT(X509_CRL_INFO, version, ASN1_INTEGER), | 143 | .app_data = NULL, |
116 | ASN1_SIMPLE(X509_CRL_INFO, sig_alg, X509_ALGOR), | 144 | .flags = ASN1_AFLG_ENCODING, |
117 | ASN1_SIMPLE(X509_CRL_INFO, issuer, X509_NAME), | 145 | .ref_offset = 0, |
118 | ASN1_SIMPLE(X509_CRL_INFO, lastUpdate, ASN1_TIME), | 146 | .ref_lock = 0, |
119 | ASN1_OPT(X509_CRL_INFO, nextUpdate, ASN1_TIME), | 147 | .asn1_cb = crl_inf_cb, |
120 | ASN1_SEQUENCE_OF_OPT(X509_CRL_INFO, revoked, X509_REVOKED), | 148 | .enc_offset = offsetof(X509_CRL_INFO, enc), |
121 | ASN1_EXP_SEQUENCE_OF_OPT(X509_CRL_INFO, extensions, X509_EXTENSION, 0) | 149 | }; |
122 | } ASN1_SEQUENCE_END_enc(X509_CRL_INFO, X509_CRL_INFO) | 150 | static const ASN1_TEMPLATE X509_CRL_INFO_seq_tt[] = { |
151 | { | ||
152 | .flags = ASN1_TFLG_OPTIONAL, | ||
153 | .tag = 0, | ||
154 | .offset = offsetof(X509_CRL_INFO, version), | ||
155 | .field_name = "version", | ||
156 | .item = &ASN1_INTEGER_it, | ||
157 | }, | ||
158 | { | ||
159 | .flags = 0, | ||
160 | .tag = 0, | ||
161 | .offset = offsetof(X509_CRL_INFO, sig_alg), | ||
162 | .field_name = "sig_alg", | ||
163 | .item = &X509_ALGOR_it, | ||
164 | }, | ||
165 | { | ||
166 | .flags = 0, | ||
167 | .tag = 0, | ||
168 | .offset = offsetof(X509_CRL_INFO, issuer), | ||
169 | .field_name = "issuer", | ||
170 | .item = &X509_NAME_it, | ||
171 | }, | ||
172 | { | ||
173 | .flags = 0, | ||
174 | .tag = 0, | ||
175 | .offset = offsetof(X509_CRL_INFO, lastUpdate), | ||
176 | .field_name = "lastUpdate", | ||
177 | .item = &ASN1_TIME_it, | ||
178 | }, | ||
179 | { | ||
180 | .flags = ASN1_TFLG_OPTIONAL, | ||
181 | .tag = 0, | ||
182 | .offset = offsetof(X509_CRL_INFO, nextUpdate), | ||
183 | .field_name = "nextUpdate", | ||
184 | .item = &ASN1_TIME_it, | ||
185 | }, | ||
186 | { | ||
187 | .flags = ASN1_TFLG_SEQUENCE_OF | ASN1_TFLG_OPTIONAL, | ||
188 | .tag = 0, | ||
189 | .offset = offsetof(X509_CRL_INFO, revoked), | ||
190 | .field_name = "revoked", | ||
191 | .item = &X509_REVOKED_it, | ||
192 | }, | ||
193 | { | ||
194 | .flags = ASN1_TFLG_EXPLICIT | ASN1_TFLG_SEQUENCE_OF | ASN1_TFLG_OPTIONAL, | ||
195 | .tag = 0, | ||
196 | .offset = offsetof(X509_CRL_INFO, extensions), | ||
197 | .field_name = "extensions", | ||
198 | .item = &X509_EXTENSION_it, | ||
199 | }, | ||
200 | }; | ||
201 | |||
202 | const ASN1_ITEM X509_CRL_INFO_it = { | ||
203 | .itype = ASN1_ITYPE_SEQUENCE, | ||
204 | .utype = V_ASN1_SEQUENCE, | ||
205 | .templates = X509_CRL_INFO_seq_tt, | ||
206 | .tcount = sizeof(X509_CRL_INFO_seq_tt) / sizeof(ASN1_TEMPLATE), | ||
207 | .funcs = &X509_CRL_INFO_aux, | ||
208 | .size = sizeof(X509_CRL_INFO), | ||
209 | .sname = "X509_CRL_INFO", | ||
210 | }; | ||
123 | 211 | ||
124 | /* Set CRL entry issuer according to CRL certificate issuer extension. | 212 | /* Set CRL entry issuer according to CRL certificate issuer extension. |
125 | * Check for unhandled critical CRL entry extensions. | 213 | * Check for unhandled critical CRL entry extensions. |
@@ -331,11 +419,47 @@ setup_idp(X509_CRL *crl, ISSUING_DIST_POINT *idp) | |||
331 | DIST_POINT_set_dpname(idp->distpoint, X509_CRL_get_issuer(crl)); | 419 | DIST_POINT_set_dpname(idp->distpoint, X509_CRL_get_issuer(crl)); |
332 | } | 420 | } |
333 | 421 | ||
334 | ASN1_SEQUENCE_ref(X509_CRL, crl_cb, CRYPTO_LOCK_X509_CRL) = { | 422 | static const ASN1_AUX X509_CRL_aux = { |
335 | ASN1_SIMPLE(X509_CRL, crl, X509_CRL_INFO), | 423 | .app_data = NULL, |
336 | ASN1_SIMPLE(X509_CRL, sig_alg, X509_ALGOR), | 424 | .flags = ASN1_AFLG_REFCOUNT, |
337 | ASN1_SIMPLE(X509_CRL, signature, ASN1_BIT_STRING) | 425 | .ref_offset = offsetof(X509_CRL, references), |
338 | } ASN1_SEQUENCE_END_ref(X509_CRL, X509_CRL) | 426 | .ref_lock = CRYPTO_LOCK_X509_CRL, |
427 | .asn1_cb = crl_cb, | ||
428 | .enc_offset = 0, | ||
429 | }; | ||
430 | static const ASN1_TEMPLATE X509_CRL_seq_tt[] = { | ||
431 | { | ||
432 | .flags = 0, | ||
433 | .tag = 0, | ||
434 | .offset = offsetof(X509_CRL, crl), | ||
435 | .field_name = "crl", | ||
436 | .item = &X509_CRL_INFO_it, | ||
437 | }, | ||
438 | { | ||
439 | .flags = 0, | ||
440 | .tag = 0, | ||
441 | .offset = offsetof(X509_CRL, sig_alg), | ||
442 | .field_name = "sig_alg", | ||
443 | .item = &X509_ALGOR_it, | ||
444 | }, | ||
445 | { | ||
446 | .flags = 0, | ||
447 | .tag = 0, | ||
448 | .offset = offsetof(X509_CRL, signature), | ||
449 | .field_name = "signature", | ||
450 | .item = &ASN1_BIT_STRING_it, | ||
451 | }, | ||
452 | }; | ||
453 | |||
454 | const ASN1_ITEM X509_CRL_it = { | ||
455 | .itype = ASN1_ITYPE_SEQUENCE, | ||
456 | .utype = V_ASN1_SEQUENCE, | ||
457 | .templates = X509_CRL_seq_tt, | ||
458 | .tcount = sizeof(X509_CRL_seq_tt) / sizeof(ASN1_TEMPLATE), | ||
459 | .funcs = &X509_CRL_aux, | ||
460 | .size = sizeof(X509_CRL), | ||
461 | .sname = "X509_CRL", | ||
462 | }; | ||
339 | 463 | ||
340 | 464 | ||
341 | X509_REVOKED * | 465 | X509_REVOKED * |
diff --git a/src/lib/libcrypto/asn1/x_exten.c b/src/lib/libcrypto/asn1/x_exten.c index 755faebeba..6f82a71d68 100644 --- a/src/lib/libcrypto/asn1/x_exten.c +++ b/src/lib/libcrypto/asn1/x_exten.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: x_exten.c,v 1.13 2015/02/10 06:36:30 jsing Exp $ */ | 1 | /* $OpenBSD: x_exten.c,v 1.14 2015/02/11 03:39:51 jsing Exp $ */ |
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 | */ |
@@ -61,11 +61,39 @@ | |||
61 | #include <openssl/asn1.h> | 61 | #include <openssl/asn1.h> |
62 | #include <openssl/asn1t.h> | 62 | #include <openssl/asn1t.h> |
63 | 63 | ||
64 | ASN1_SEQUENCE(X509_EXTENSION) = { | 64 | static const ASN1_TEMPLATE X509_EXTENSION_seq_tt[] = { |
65 | ASN1_SIMPLE(X509_EXTENSION, object, ASN1_OBJECT), | 65 | { |
66 | ASN1_OPT(X509_EXTENSION, critical, ASN1_BOOLEAN), | 66 | .flags = 0, |
67 | ASN1_SIMPLE(X509_EXTENSION, value, ASN1_OCTET_STRING) | 67 | .tag = 0, |
68 | } ASN1_SEQUENCE_END(X509_EXTENSION) | 68 | .offset = offsetof(X509_EXTENSION, object), |
69 | .field_name = "object", | ||
70 | .item = &ASN1_OBJECT_it, | ||
71 | }, | ||
72 | { | ||
73 | .flags = ASN1_TFLG_OPTIONAL, | ||
74 | .tag = 0, | ||
75 | .offset = offsetof(X509_EXTENSION, critical), | ||
76 | .field_name = "critical", | ||
77 | .item = &ASN1_BOOLEAN_it, | ||
78 | }, | ||
79 | { | ||
80 | .flags = 0, | ||
81 | .tag = 0, | ||
82 | .offset = offsetof(X509_EXTENSION, value), | ||
83 | .field_name = "value", | ||
84 | .item = &ASN1_OCTET_STRING_it, | ||
85 | }, | ||
86 | }; | ||
87 | |||
88 | const ASN1_ITEM X509_EXTENSION_it = { | ||
89 | .itype = ASN1_ITYPE_SEQUENCE, | ||
90 | .utype = V_ASN1_SEQUENCE, | ||
91 | .templates = X509_EXTENSION_seq_tt, | ||
92 | .tcount = sizeof(X509_EXTENSION_seq_tt) / sizeof(ASN1_TEMPLATE), | ||
93 | .funcs = NULL, | ||
94 | .size = sizeof(X509_EXTENSION), | ||
95 | .sname = "X509_EXTENSION", | ||
96 | }; | ||
69 | 97 | ||
70 | ASN1_ITEM_TEMPLATE(X509_EXTENSIONS) = | 98 | ASN1_ITEM_TEMPLATE(X509_EXTENSIONS) = |
71 | ASN1_EX_TEMPLATE_TYPE(ASN1_TFLG_SEQUENCE_OF, 0, Extension, X509_EXTENSION) | 99 | ASN1_EX_TEMPLATE_TYPE(ASN1_TFLG_SEQUENCE_OF, 0, Extension, X509_EXTENSION) |
diff --git a/src/lib/libcrypto/asn1/x_name.c b/src/lib/libcrypto/asn1/x_name.c index a985cf19ce..d6d5bea369 100644 --- a/src/lib/libcrypto/asn1/x_name.c +++ b/src/lib/libcrypto/asn1/x_name.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: x_name.c,v 1.24 2015/02/10 08:33:10 jsing Exp $ */ | 1 | /* $OpenBSD: x_name.c,v 1.25 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 | * |
@@ -87,10 +87,32 @@ static int i2d_name_canon(STACK_OF(STACK_OF_X509_NAME_ENTRY) *intname, | |||
87 | static int x509_name_ex_print(BIO *out, ASN1_VALUE **pval, int indent, | 87 | static int x509_name_ex_print(BIO *out, ASN1_VALUE **pval, int indent, |
88 | const char *fname, const ASN1_PCTX *pctx); | 88 | const char *fname, const ASN1_PCTX *pctx); |
89 | 89 | ||
90 | ASN1_SEQUENCE(X509_NAME_ENTRY) = { | 90 | static const ASN1_TEMPLATE X509_NAME_ENTRY_seq_tt[] = { |
91 | ASN1_SIMPLE(X509_NAME_ENTRY, object, ASN1_OBJECT), | 91 | { |
92 | ASN1_SIMPLE(X509_NAME_ENTRY, value, ASN1_PRINTABLE) | 92 | .flags = 0, |
93 | } ASN1_SEQUENCE_END(X509_NAME_ENTRY) | 93 | .tag = 0, |
94 | .offset = offsetof(X509_NAME_ENTRY, object), | ||
95 | .field_name = "object", | ||
96 | .item = &ASN1_OBJECT_it, | ||
97 | }, | ||
98 | { | ||
99 | .flags = 0, | ||
100 | .tag = 0, | ||
101 | .offset = offsetof(X509_NAME_ENTRY, value), | ||
102 | .field_name = "value", | ||
103 | .item = &ASN1_PRINTABLE_it, | ||
104 | }, | ||
105 | }; | ||
106 | |||
107 | const ASN1_ITEM X509_NAME_ENTRY_it = { | ||
108 | .itype = ASN1_ITYPE_SEQUENCE, | ||
109 | .utype = V_ASN1_SEQUENCE, | ||
110 | .templates = X509_NAME_ENTRY_seq_tt, | ||
111 | .tcount = sizeof(X509_NAME_ENTRY_seq_tt) / sizeof(ASN1_TEMPLATE), | ||
112 | .funcs = NULL, | ||
113 | .size = sizeof(X509_NAME_ENTRY), | ||
114 | .sname = "X509_NAME_ENTRY", | ||
115 | }; | ||
94 | 116 | ||
95 | 117 | ||
96 | X509_NAME_ENTRY * | 118 | X509_NAME_ENTRY * |
diff --git a/src/lib/libcrypto/asn1/x_nx509.c b/src/lib/libcrypto/asn1/x_nx509.c index 9738560c19..f36f1d9eca 100644 --- a/src/lib/libcrypto/asn1/x_nx509.c +++ b/src/lib/libcrypto/asn1/x_nx509.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: x_nx509.c,v 1.4 2015/02/09 15:05:59 jsing Exp $ */ | 1 | /* $OpenBSD: x_nx509.c,v 1.5 2015/02/11 03:39:51 jsing Exp $ */ |
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 2005. | 3 | * project 2005. |
4 | */ | 4 | */ |
@@ -63,10 +63,32 @@ | |||
63 | 63 | ||
64 | /* Old netscape certificate wrapper format */ | 64 | /* Old netscape certificate wrapper format */ |
65 | 65 | ||
66 | ASN1_SEQUENCE(NETSCAPE_X509) = { | 66 | static const ASN1_TEMPLATE NETSCAPE_X509_seq_tt[] = { |
67 | ASN1_SIMPLE(NETSCAPE_X509, header, ASN1_OCTET_STRING), | 67 | { |
68 | ASN1_OPT(NETSCAPE_X509, cert, X509) | 68 | .flags = 0, |
69 | } ASN1_SEQUENCE_END(NETSCAPE_X509) | 69 | .tag = 0, |
70 | .offset = offsetof(NETSCAPE_X509, header), | ||
71 | .field_name = "header", | ||
72 | .item = &ASN1_OCTET_STRING_it, | ||
73 | }, | ||
74 | { | ||
75 | .flags = ASN1_TFLG_OPTIONAL, | ||
76 | .tag = 0, | ||
77 | .offset = offsetof(NETSCAPE_X509, cert), | ||
78 | .field_name = "cert", | ||
79 | .item = &X509_it, | ||
80 | }, | ||
81 | }; | ||
82 | |||
83 | const ASN1_ITEM NETSCAPE_X509_it = { | ||
84 | .itype = ASN1_ITYPE_SEQUENCE, | ||
85 | .utype = V_ASN1_SEQUENCE, | ||
86 | .templates = NETSCAPE_X509_seq_tt, | ||
87 | .tcount = sizeof(NETSCAPE_X509_seq_tt) / sizeof(ASN1_TEMPLATE), | ||
88 | .funcs = NULL, | ||
89 | .size = sizeof(NETSCAPE_X509), | ||
90 | .sname = "NETSCAPE_X509", | ||
91 | }; | ||
70 | 92 | ||
71 | 93 | ||
72 | NETSCAPE_X509 * | 94 | NETSCAPE_X509 * |
diff --git a/src/lib/libcrypto/asn1/x_pubkey.c b/src/lib/libcrypto/asn1/x_pubkey.c index 0c7d01e60d..55084182cc 100644 --- a/src/lib/libcrypto/asn1/x_pubkey.c +++ b/src/lib/libcrypto/asn1/x_pubkey.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: x_pubkey.c,v 1.23 2015/02/09 15:05:59 jsing Exp $ */ | 1 | /* $OpenBSD: x_pubkey.c,v 1.24 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 | * |
@@ -84,10 +84,40 @@ pubkey_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it, void *exarg) | |||
84 | return 1; | 84 | return 1; |
85 | } | 85 | } |
86 | 86 | ||
87 | ASN1_SEQUENCE_cb(X509_PUBKEY, pubkey_cb) = { | 87 | static const ASN1_AUX X509_PUBKEY_aux = { |
88 | ASN1_SIMPLE(X509_PUBKEY, algor, X509_ALGOR), | 88 | .app_data = NULL, |
89 | ASN1_SIMPLE(X509_PUBKEY, public_key, ASN1_BIT_STRING) | 89 | .flags = 0, |
90 | } ASN1_SEQUENCE_END_cb(X509_PUBKEY, X509_PUBKEY) | 90 | .ref_offset = 0, |
91 | .ref_lock = 0, | ||
92 | .asn1_cb = pubkey_cb, | ||
93 | .enc_offset = 0, | ||
94 | }; | ||
95 | static const ASN1_TEMPLATE X509_PUBKEY_seq_tt[] = { | ||
96 | { | ||
97 | .flags = 0, | ||
98 | .tag = 0, | ||
99 | .offset = offsetof(X509_PUBKEY, algor), | ||
100 | .field_name = "algor", | ||
101 | .item = &X509_ALGOR_it, | ||
102 | }, | ||
103 | { | ||
104 | .flags = 0, | ||
105 | .tag = 0, | ||
106 | .offset = offsetof(X509_PUBKEY, public_key), | ||
107 | .field_name = "public_key", | ||
108 | .item = &ASN1_BIT_STRING_it, | ||
109 | }, | ||
110 | }; | ||
111 | |||
112 | const ASN1_ITEM X509_PUBKEY_it = { | ||
113 | .itype = ASN1_ITYPE_SEQUENCE, | ||
114 | .utype = V_ASN1_SEQUENCE, | ||
115 | .templates = X509_PUBKEY_seq_tt, | ||
116 | .tcount = sizeof(X509_PUBKEY_seq_tt) / sizeof(ASN1_TEMPLATE), | ||
117 | .funcs = &X509_PUBKEY_aux, | ||
118 | .size = sizeof(X509_PUBKEY), | ||
119 | .sname = "X509_PUBKEY", | ||
120 | }; | ||
91 | 121 | ||
92 | 122 | ||
93 | X509_PUBKEY * | 123 | X509_PUBKEY * |
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 * |
diff --git a/src/lib/libcrypto/asn1/x_sig.c b/src/lib/libcrypto/asn1/x_sig.c index 7c4c8c9c55..090a454ffb 100644 --- a/src/lib/libcrypto/asn1/x_sig.c +++ b/src/lib/libcrypto/asn1/x_sig.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: x_sig.c,v 1.9 2015/02/09 15:05:59 jsing Exp $ */ | 1 | /* $OpenBSD: x_sig.c,v 1.10 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 | * |
@@ -61,10 +61,32 @@ | |||
61 | #include <openssl/asn1t.h> | 61 | #include <openssl/asn1t.h> |
62 | #include <openssl/x509.h> | 62 | #include <openssl/x509.h> |
63 | 63 | ||
64 | ASN1_SEQUENCE(X509_SIG) = { | 64 | static const ASN1_TEMPLATE X509_SIG_seq_tt[] = { |
65 | ASN1_SIMPLE(X509_SIG, algor, X509_ALGOR), | 65 | { |
66 | ASN1_SIMPLE(X509_SIG, digest, ASN1_OCTET_STRING) | 66 | .flags = 0, |
67 | } ASN1_SEQUENCE_END(X509_SIG) | 67 | .tag = 0, |
68 | .offset = offsetof(X509_SIG, algor), | ||
69 | .field_name = "algor", | ||
70 | .item = &X509_ALGOR_it, | ||
71 | }, | ||
72 | { | ||
73 | .flags = 0, | ||
74 | .tag = 0, | ||
75 | .offset = offsetof(X509_SIG, digest), | ||
76 | .field_name = "digest", | ||
77 | .item = &ASN1_OCTET_STRING_it, | ||
78 | }, | ||
79 | }; | ||
80 | |||
81 | const ASN1_ITEM X509_SIG_it = { | ||
82 | .itype = ASN1_ITYPE_SEQUENCE, | ||
83 | .utype = V_ASN1_SEQUENCE, | ||
84 | .templates = X509_SIG_seq_tt, | ||
85 | .tcount = sizeof(X509_SIG_seq_tt) / sizeof(ASN1_TEMPLATE), | ||
86 | .funcs = NULL, | ||
87 | .size = sizeof(X509_SIG), | ||
88 | .sname = "X509_SIG", | ||
89 | }; | ||
68 | 90 | ||
69 | 91 | ||
70 | X509_SIG * | 92 | X509_SIG * |
diff --git a/src/lib/libcrypto/asn1/x_spki.c b/src/lib/libcrypto/asn1/x_spki.c index fc056ff53b..6250c1343b 100644 --- a/src/lib/libcrypto/asn1/x_spki.c +++ b/src/lib/libcrypto/asn1/x_spki.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: x_spki.c,v 1.9 2015/02/09 15:05:59 jsing Exp $ */ | 1 | /* $OpenBSD: x_spki.c,v 1.10 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 | * |
@@ -65,10 +65,32 @@ | |||
65 | #include <openssl/x509.h> | 65 | #include <openssl/x509.h> |
66 | #include <openssl/asn1t.h> | 66 | #include <openssl/asn1t.h> |
67 | 67 | ||
68 | ASN1_SEQUENCE(NETSCAPE_SPKAC) = { | 68 | static const ASN1_TEMPLATE NETSCAPE_SPKAC_seq_tt[] = { |
69 | ASN1_SIMPLE(NETSCAPE_SPKAC, pubkey, X509_PUBKEY), | 69 | { |
70 | ASN1_SIMPLE(NETSCAPE_SPKAC, challenge, ASN1_IA5STRING) | 70 | .flags = 0, |
71 | } ASN1_SEQUENCE_END(NETSCAPE_SPKAC) | 71 | .tag = 0, |
72 | .offset = offsetof(NETSCAPE_SPKAC, pubkey), | ||
73 | .field_name = "pubkey", | ||
74 | .item = &X509_PUBKEY_it, | ||
75 | }, | ||
76 | { | ||
77 | .flags = 0, | ||
78 | .tag = 0, | ||
79 | .offset = offsetof(NETSCAPE_SPKAC, challenge), | ||
80 | .field_name = "challenge", | ||
81 | .item = &ASN1_IA5STRING_it, | ||
82 | }, | ||
83 | }; | ||
84 | |||
85 | const ASN1_ITEM NETSCAPE_SPKAC_it = { | ||
86 | .itype = ASN1_ITYPE_SEQUENCE, | ||
87 | .utype = V_ASN1_SEQUENCE, | ||
88 | .templates = NETSCAPE_SPKAC_seq_tt, | ||
89 | .tcount = sizeof(NETSCAPE_SPKAC_seq_tt) / sizeof(ASN1_TEMPLATE), | ||
90 | .funcs = NULL, | ||
91 | .size = sizeof(NETSCAPE_SPKAC), | ||
92 | .sname = "NETSCAPE_SPKAC", | ||
93 | }; | ||
72 | 94 | ||
73 | 95 | ||
74 | NETSCAPE_SPKAC * | 96 | NETSCAPE_SPKAC * |
@@ -96,11 +118,39 @@ NETSCAPE_SPKAC_free(NETSCAPE_SPKAC *a) | |||
96 | ASN1_item_free((ASN1_VALUE *)a, &NETSCAPE_SPKAC_it); | 118 | ASN1_item_free((ASN1_VALUE *)a, &NETSCAPE_SPKAC_it); |
97 | } | 119 | } |
98 | 120 | ||
99 | ASN1_SEQUENCE(NETSCAPE_SPKI) = { | 121 | static const ASN1_TEMPLATE NETSCAPE_SPKI_seq_tt[] = { |
100 | ASN1_SIMPLE(NETSCAPE_SPKI, spkac, NETSCAPE_SPKAC), | 122 | { |
101 | ASN1_SIMPLE(NETSCAPE_SPKI, sig_algor, X509_ALGOR), | 123 | .flags = 0, |
102 | ASN1_SIMPLE(NETSCAPE_SPKI, signature, ASN1_BIT_STRING) | 124 | .tag = 0, |
103 | } ASN1_SEQUENCE_END(NETSCAPE_SPKI) | 125 | .offset = offsetof(NETSCAPE_SPKI, spkac), |
126 | .field_name = "spkac", | ||
127 | .item = &NETSCAPE_SPKAC_it, | ||
128 | }, | ||
129 | { | ||
130 | .flags = 0, | ||
131 | .tag = 0, | ||
132 | .offset = offsetof(NETSCAPE_SPKI, sig_algor), | ||
133 | .field_name = "sig_algor", | ||
134 | .item = &X509_ALGOR_it, | ||
135 | }, | ||
136 | { | ||
137 | .flags = 0, | ||
138 | .tag = 0, | ||
139 | .offset = offsetof(NETSCAPE_SPKI, signature), | ||
140 | .field_name = "signature", | ||
141 | .item = &ASN1_BIT_STRING_it, | ||
142 | }, | ||
143 | }; | ||
144 | |||
145 | const ASN1_ITEM NETSCAPE_SPKI_it = { | ||
146 | .itype = ASN1_ITYPE_SEQUENCE, | ||
147 | .utype = V_ASN1_SEQUENCE, | ||
148 | .templates = NETSCAPE_SPKI_seq_tt, | ||
149 | .tcount = sizeof(NETSCAPE_SPKI_seq_tt) / sizeof(ASN1_TEMPLATE), | ||
150 | .funcs = NULL, | ||
151 | .size = sizeof(NETSCAPE_SPKI), | ||
152 | .sname = "NETSCAPE_SPKI", | ||
153 | }; | ||
104 | 154 | ||
105 | 155 | ||
106 | NETSCAPE_SPKI * | 156 | NETSCAPE_SPKI * |
diff --git a/src/lib/libcrypto/asn1/x_val.c b/src/lib/libcrypto/asn1/x_val.c index 27835e94da..3f1d830d3e 100644 --- a/src/lib/libcrypto/asn1/x_val.c +++ b/src/lib/libcrypto/asn1/x_val.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: x_val.c,v 1.9 2015/02/09 15:05:59 jsing Exp $ */ | 1 | /* $OpenBSD: x_val.c,v 1.10 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 | * |
@@ -61,10 +61,32 @@ | |||
61 | #include <openssl/asn1t.h> | 61 | #include <openssl/asn1t.h> |
62 | #include <openssl/x509.h> | 62 | #include <openssl/x509.h> |
63 | 63 | ||
64 | ASN1_SEQUENCE(X509_VAL) = { | 64 | static const ASN1_TEMPLATE X509_VAL_seq_tt[] = { |
65 | ASN1_SIMPLE(X509_VAL, notBefore, ASN1_TIME), | 65 | { |
66 | ASN1_SIMPLE(X509_VAL, notAfter, ASN1_TIME) | 66 | .flags = 0, |
67 | } ASN1_SEQUENCE_END(X509_VAL) | 67 | .tag = 0, |
68 | .offset = offsetof(X509_VAL, notBefore), | ||
69 | .field_name = "notBefore", | ||
70 | .item = &ASN1_TIME_it, | ||
71 | }, | ||
72 | { | ||
73 | .flags = 0, | ||
74 | .tag = 0, | ||
75 | .offset = offsetof(X509_VAL, notAfter), | ||
76 | .field_name = "notAfter", | ||
77 | .item = &ASN1_TIME_it, | ||
78 | }, | ||
79 | }; | ||
80 | |||
81 | const ASN1_ITEM X509_VAL_it = { | ||
82 | .itype = ASN1_ITYPE_SEQUENCE, | ||
83 | .utype = V_ASN1_SEQUENCE, | ||
84 | .templates = X509_VAL_seq_tt, | ||
85 | .tcount = sizeof(X509_VAL_seq_tt) / sizeof(ASN1_TEMPLATE), | ||
86 | .funcs = NULL, | ||
87 | .size = sizeof(X509_VAL), | ||
88 | .sname = "X509_VAL", | ||
89 | }; | ||
68 | 90 | ||
69 | 91 | ||
70 | X509_VAL * | 92 | X509_VAL * |
diff --git a/src/lib/libcrypto/asn1/x_x509.c b/src/lib/libcrypto/asn1/x_x509.c index 756848fe19..1f29d5498a 100644 --- a/src/lib/libcrypto/asn1/x_x509.c +++ b/src/lib/libcrypto/asn1/x_x509.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: x_x509.c,v 1.21 2015/02/10 13:28:17 jsing Exp $ */ | 1 | /* $OpenBSD: x_x509.c,v 1.22 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 | * |
@@ -65,18 +65,96 @@ | |||
65 | #include <openssl/x509.h> | 65 | #include <openssl/x509.h> |
66 | #include <openssl/x509v3.h> | 66 | #include <openssl/x509v3.h> |
67 | 67 | ||
68 | ASN1_SEQUENCE_enc(X509_CINF, enc, 0) = { | 68 | static const ASN1_AUX X509_CINF_aux = { |
69 | ASN1_EXP_OPT(X509_CINF, version, ASN1_INTEGER, 0), | 69 | .app_data = NULL, |
70 | ASN1_SIMPLE(X509_CINF, serialNumber, ASN1_INTEGER), | 70 | .flags = ASN1_AFLG_ENCODING, |
71 | ASN1_SIMPLE(X509_CINF, signature, X509_ALGOR), | 71 | .ref_offset = 0, |
72 | ASN1_SIMPLE(X509_CINF, issuer, X509_NAME), | 72 | .ref_lock = 0, |
73 | ASN1_SIMPLE(X509_CINF, validity, X509_VAL), | 73 | .asn1_cb = 0, |
74 | ASN1_SIMPLE(X509_CINF, subject, X509_NAME), | 74 | .enc_offset = offsetof(X509_CINF, enc), |
75 | ASN1_SIMPLE(X509_CINF, key, X509_PUBKEY), | 75 | }; |
76 | ASN1_IMP_OPT(X509_CINF, issuerUID, ASN1_BIT_STRING, 1), | 76 | static const ASN1_TEMPLATE X509_CINF_seq_tt[] = { |
77 | ASN1_IMP_OPT(X509_CINF, subjectUID, ASN1_BIT_STRING, 2), | 77 | { |
78 | ASN1_EXP_SEQUENCE_OF_OPT(X509_CINF, extensions, X509_EXTENSION, 3) | 78 | .flags = ASN1_TFLG_EXPLICIT | ASN1_TFLG_OPTIONAL, |
79 | } ASN1_SEQUENCE_END_enc(X509_CINF, X509_CINF) | 79 | .tag = 0, |
80 | .offset = offsetof(X509_CINF, version), | ||
81 | .field_name = "version", | ||
82 | .item = &ASN1_INTEGER_it, | ||
83 | }, | ||
84 | { | ||
85 | .flags = 0, | ||
86 | .tag = 0, | ||
87 | .offset = offsetof(X509_CINF, serialNumber), | ||
88 | .field_name = "serialNumber", | ||
89 | .item = &ASN1_INTEGER_it, | ||
90 | }, | ||
91 | { | ||
92 | .flags = 0, | ||
93 | .tag = 0, | ||
94 | .offset = offsetof(X509_CINF, signature), | ||
95 | .field_name = "signature", | ||
96 | .item = &X509_ALGOR_it, | ||
97 | }, | ||
98 | { | ||
99 | .flags = 0, | ||
100 | .tag = 0, | ||
101 | .offset = offsetof(X509_CINF, issuer), | ||
102 | .field_name = "issuer", | ||
103 | .item = &X509_NAME_it, | ||
104 | }, | ||
105 | { | ||
106 | .flags = 0, | ||
107 | .tag = 0, | ||
108 | .offset = offsetof(X509_CINF, validity), | ||
109 | .field_name = "validity", | ||
110 | .item = &X509_VAL_it, | ||
111 | }, | ||
112 | { | ||
113 | .flags = 0, | ||
114 | .tag = 0, | ||
115 | .offset = offsetof(X509_CINF, subject), | ||
116 | .field_name = "subject", | ||
117 | .item = &X509_NAME_it, | ||
118 | }, | ||
119 | { | ||
120 | .flags = 0, | ||
121 | .tag = 0, | ||
122 | .offset = offsetof(X509_CINF, key), | ||
123 | .field_name = "key", | ||
124 | .item = &X509_PUBKEY_it, | ||
125 | }, | ||
126 | { | ||
127 | .flags = ASN1_TFLG_IMPLICIT | ASN1_TFLG_OPTIONAL, | ||
128 | .tag = 1, | ||
129 | .offset = offsetof(X509_CINF, issuerUID), | ||
130 | .field_name = "issuerUID", | ||
131 | .item = &ASN1_BIT_STRING_it, | ||
132 | }, | ||
133 | { | ||
134 | .flags = ASN1_TFLG_IMPLICIT | ASN1_TFLG_OPTIONAL, | ||
135 | .tag = 2, | ||
136 | .offset = offsetof(X509_CINF, subjectUID), | ||
137 | .field_name = "subjectUID", | ||
138 | .item = &ASN1_BIT_STRING_it, | ||
139 | }, | ||
140 | { | ||
141 | .flags = ASN1_TFLG_EXPLICIT | ASN1_TFLG_SEQUENCE_OF | ASN1_TFLG_OPTIONAL, | ||
142 | .tag = 3, | ||
143 | .offset = offsetof(X509_CINF, extensions), | ||
144 | .field_name = "extensions", | ||
145 | .item = &X509_EXTENSION_it, | ||
146 | }, | ||
147 | }; | ||
148 | |||
149 | const ASN1_ITEM X509_CINF_it = { | ||
150 | .itype = ASN1_ITYPE_SEQUENCE, | ||
151 | .utype = V_ASN1_SEQUENCE, | ||
152 | .templates = X509_CINF_seq_tt, | ||
153 | .tcount = sizeof(X509_CINF_seq_tt) / sizeof(ASN1_TEMPLATE), | ||
154 | .funcs = &X509_CINF_aux, | ||
155 | .size = sizeof(X509_CINF), | ||
156 | .sname = "X509_CINF", | ||
157 | }; | ||
80 | 158 | ||
81 | 159 | ||
82 | X509_CINF * | 160 | X509_CINF * |
@@ -148,11 +226,47 @@ x509_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it, void *exarg) | |||
148 | return 1; | 226 | return 1; |
149 | } | 227 | } |
150 | 228 | ||
151 | ASN1_SEQUENCE_ref(X509, x509_cb, CRYPTO_LOCK_X509) = { | 229 | static const ASN1_AUX X509_aux = { |
152 | ASN1_SIMPLE(X509, cert_info, X509_CINF), | 230 | .app_data = NULL, |
153 | ASN1_SIMPLE(X509, sig_alg, X509_ALGOR), | 231 | .flags = ASN1_AFLG_REFCOUNT, |
154 | ASN1_SIMPLE(X509, signature, ASN1_BIT_STRING) | 232 | .ref_offset = offsetof(X509, references), |
155 | } ASN1_SEQUENCE_END_ref(X509, X509) | 233 | .ref_lock = CRYPTO_LOCK_X509, |
234 | .asn1_cb = x509_cb, | ||
235 | .enc_offset = 0, | ||
236 | }; | ||
237 | static const ASN1_TEMPLATE X509_seq_tt[] = { | ||
238 | { | ||
239 | .flags = 0, | ||
240 | .tag = 0, | ||
241 | .offset = offsetof(X509, cert_info), | ||
242 | .field_name = "cert_info", | ||
243 | .item = &X509_CINF_it, | ||
244 | }, | ||
245 | { | ||
246 | .flags = 0, | ||
247 | .tag = 0, | ||
248 | .offset = offsetof(X509, sig_alg), | ||
249 | .field_name = "sig_alg", | ||
250 | .item = &X509_ALGOR_it, | ||
251 | }, | ||
252 | { | ||
253 | .flags = 0, | ||
254 | .tag = 0, | ||
255 | .offset = offsetof(X509, signature), | ||
256 | .field_name = "signature", | ||
257 | .item = &ASN1_BIT_STRING_it, | ||
258 | }, | ||
259 | }; | ||
260 | |||
261 | const ASN1_ITEM X509_it = { | ||
262 | .itype = ASN1_ITYPE_SEQUENCE, | ||
263 | .utype = V_ASN1_SEQUENCE, | ||
264 | .templates = X509_seq_tt, | ||
265 | .tcount = sizeof(X509_seq_tt) / sizeof(ASN1_TEMPLATE), | ||
266 | .funcs = &X509_aux, | ||
267 | .size = sizeof(X509), | ||
268 | .sname = "X509", | ||
269 | }; | ||
156 | 270 | ||
157 | 271 | ||
158 | X509 * | 272 | X509 * |
diff --git a/src/lib/libcrypto/asn1/x_x509a.c b/src/lib/libcrypto/asn1/x_x509a.c index 8a3561e882..be8ebbdcbb 100644 --- a/src/lib/libcrypto/asn1/x_x509a.c +++ b/src/lib/libcrypto/asn1/x_x509a.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: x_x509a.c,v 1.11 2015/02/09 15:05:59 jsing Exp $ */ | 1 | /* $OpenBSD: x_x509a.c,v 1.12 2015/02/11 03:39:51 jsing Exp $ */ |
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 1999. | 3 | * project 1999. |
4 | */ | 4 | */ |
@@ -71,13 +71,53 @@ | |||
71 | 71 | ||
72 | static X509_CERT_AUX *aux_get(X509 *x); | 72 | static X509_CERT_AUX *aux_get(X509 *x); |
73 | 73 | ||
74 | ASN1_SEQUENCE(X509_CERT_AUX) = { | 74 | static const ASN1_TEMPLATE X509_CERT_AUX_seq_tt[] = { |
75 | ASN1_SEQUENCE_OF_OPT(X509_CERT_AUX, trust, ASN1_OBJECT), | 75 | { |
76 | ASN1_IMP_SEQUENCE_OF_OPT(X509_CERT_AUX, reject, ASN1_OBJECT, 0), | 76 | .flags = ASN1_TFLG_SEQUENCE_OF | ASN1_TFLG_OPTIONAL, |
77 | ASN1_OPT(X509_CERT_AUX, alias, ASN1_UTF8STRING), | 77 | .tag = 0, |
78 | ASN1_OPT(X509_CERT_AUX, keyid, ASN1_OCTET_STRING), | 78 | .offset = offsetof(X509_CERT_AUX, trust), |
79 | ASN1_IMP_SEQUENCE_OF_OPT(X509_CERT_AUX, other, X509_ALGOR, 1) | 79 | .field_name = "trust", |
80 | } ASN1_SEQUENCE_END(X509_CERT_AUX) | 80 | .item = &ASN1_OBJECT_it, |
81 | }, | ||
82 | { | ||
83 | .flags = ASN1_TFLG_IMPLICIT | ASN1_TFLG_SEQUENCE_OF | ASN1_TFLG_OPTIONAL, | ||
84 | .tag = 0, | ||
85 | .offset = offsetof(X509_CERT_AUX, reject), | ||
86 | .field_name = "reject", | ||
87 | .item = &ASN1_OBJECT_it, | ||
88 | }, | ||
89 | { | ||
90 | .flags = ASN1_TFLG_OPTIONAL, | ||
91 | .tag = 0, | ||
92 | .offset = offsetof(X509_CERT_AUX, alias), | ||
93 | .field_name = "alias", | ||
94 | .item = &ASN1_UTF8STRING_it, | ||
95 | }, | ||
96 | { | ||
97 | .flags = ASN1_TFLG_OPTIONAL, | ||
98 | .tag = 0, | ||
99 | .offset = offsetof(X509_CERT_AUX, keyid), | ||
100 | .field_name = "keyid", | ||
101 | .item = &ASN1_OCTET_STRING_it, | ||
102 | }, | ||
103 | { | ||
104 | .flags = ASN1_TFLG_IMPLICIT | ASN1_TFLG_SEQUENCE_OF | ASN1_TFLG_OPTIONAL, | ||
105 | .tag = 1, | ||
106 | .offset = offsetof(X509_CERT_AUX, other), | ||
107 | .field_name = "other", | ||
108 | .item = &X509_ALGOR_it, | ||
109 | }, | ||
110 | }; | ||
111 | |||
112 | const ASN1_ITEM X509_CERT_AUX_it = { | ||
113 | .itype = ASN1_ITYPE_SEQUENCE, | ||
114 | .utype = V_ASN1_SEQUENCE, | ||
115 | .templates = X509_CERT_AUX_seq_tt, | ||
116 | .tcount = sizeof(X509_CERT_AUX_seq_tt) / sizeof(ASN1_TEMPLATE), | ||
117 | .funcs = NULL, | ||
118 | .size = sizeof(X509_CERT_AUX), | ||
119 | .sname = "X509_CERT_AUX", | ||
120 | }; | ||
81 | 121 | ||
82 | 122 | ||
83 | X509_CERT_AUX * | 123 | X509_CERT_AUX * |
@@ -217,10 +257,32 @@ X509_reject_clear(X509 *x) | |||
217 | } | 257 | } |
218 | } | 258 | } |
219 | 259 | ||
220 | ASN1_SEQUENCE(X509_CERT_PAIR) = { | 260 | static const ASN1_TEMPLATE X509_CERT_PAIR_seq_tt[] = { |
221 | ASN1_EXP_OPT(X509_CERT_PAIR, forward, X509, 0), | 261 | { |
222 | ASN1_EXP_OPT(X509_CERT_PAIR, reverse, X509, 1) | 262 | .flags = ASN1_TFLG_EXPLICIT | ASN1_TFLG_OPTIONAL, |
223 | } ASN1_SEQUENCE_END(X509_CERT_PAIR) | 263 | .tag = 0, |
264 | .offset = offsetof(X509_CERT_PAIR, forward), | ||
265 | .field_name = "forward", | ||
266 | .item = &X509_it, | ||
267 | }, | ||
268 | { | ||
269 | .flags = ASN1_TFLG_EXPLICIT | ASN1_TFLG_OPTIONAL, | ||
270 | .tag = 1, | ||
271 | .offset = offsetof(X509_CERT_PAIR, reverse), | ||
272 | .field_name = "reverse", | ||
273 | .item = &X509_it, | ||
274 | }, | ||
275 | }; | ||
276 | |||
277 | const ASN1_ITEM X509_CERT_PAIR_it = { | ||
278 | .itype = ASN1_ITYPE_SEQUENCE, | ||
279 | .utype = V_ASN1_SEQUENCE, | ||
280 | .templates = X509_CERT_PAIR_seq_tt, | ||
281 | .tcount = sizeof(X509_CERT_PAIR_seq_tt) / sizeof(ASN1_TEMPLATE), | ||
282 | .funcs = NULL, | ||
283 | .size = sizeof(X509_CERT_PAIR), | ||
284 | .sname = "X509_CERT_PAIR", | ||
285 | }; | ||
224 | 286 | ||
225 | 287 | ||
226 | X509_CERT_PAIR * | 288 | X509_CERT_PAIR * |