diff options
Diffstat (limited to 'src/lib/libcrypto/asn1/x_name.c')
-rw-r--r-- | src/lib/libcrypto/asn1/x_name.c | 96 |
1 files changed, 40 insertions, 56 deletions
diff --git a/src/lib/libcrypto/asn1/x_name.c b/src/lib/libcrypto/asn1/x_name.c index 28b9c34b58..b09fba33fb 100644 --- a/src/lib/libcrypto/asn1/x_name.c +++ b/src/lib/libcrypto/asn1/x_name.c | |||
@@ -58,25 +58,12 @@ | |||
58 | 58 | ||
59 | #include <stdio.h> | 59 | #include <stdio.h> |
60 | #include "cryptlib.h" | 60 | #include "cryptlib.h" |
61 | #include "objects.h" | 61 | #include <openssl/objects.h> |
62 | #include "asn1_mac.h" | 62 | #include <openssl/asn1_mac.h> |
63 | 63 | #include <openssl/x509.h> | |
64 | /* | ||
65 | * ASN1err(ASN1_F_D2I_X509_NAME,ASN1_R_LENGTH_MISMATCH); | ||
66 | * ASN1err(ASN1_F_X509_NAME_NEW,ASN1_R_UNKNOWN_ATTRIBUTE_TYPE); | ||
67 | * ASN1err(ASN1_F_D2I_X509_NAME_ENTRY,ASN1_R_LENGTH_MISMATCH); | ||
68 | * ASN1err(ASN1_F_X509_NAME_ENTRY_NEW,ASN1_R_UNKNOWN_ATTRIBUTE_TYPE); | ||
69 | */ | ||
70 | 64 | ||
71 | #ifndef NOPROTO | ||
72 | static int i2d_X509_NAME_entries(X509_NAME *a); | 65 | static int i2d_X509_NAME_entries(X509_NAME *a); |
73 | #else | 66 | int i2d_X509_NAME_ENTRY(X509_NAME_ENTRY *a, unsigned char **pp) |
74 | static int i2d_X509_NAME_entries(); | ||
75 | #endif | ||
76 | |||
77 | int i2d_X509_NAME_ENTRY(a,pp) | ||
78 | X509_NAME_ENTRY *a; | ||
79 | unsigned char **pp; | ||
80 | { | 67 | { |
81 | M_ASN1_I2D_vars(a); | 68 | M_ASN1_I2D_vars(a); |
82 | 69 | ||
@@ -91,10 +78,8 @@ unsigned char **pp; | |||
91 | M_ASN1_I2D_finish(); | 78 | M_ASN1_I2D_finish(); |
92 | } | 79 | } |
93 | 80 | ||
94 | X509_NAME_ENTRY *d2i_X509_NAME_ENTRY(a,pp,length) | 81 | X509_NAME_ENTRY *d2i_X509_NAME_ENTRY(X509_NAME_ENTRY **a, unsigned char **pp, |
95 | X509_NAME_ENTRY **a; | 82 | long length) |
96 | unsigned char **pp; | ||
97 | long length; | ||
98 | { | 83 | { |
99 | M_ASN1_D2I_vars(a,X509_NAME_ENTRY *,X509_NAME_ENTRY_new); | 84 | M_ASN1_D2I_vars(a,X509_NAME_ENTRY *,X509_NAME_ENTRY_new); |
100 | 85 | ||
@@ -106,9 +91,7 @@ long length; | |||
106 | M_ASN1_D2I_Finish(a,X509_NAME_ENTRY_free,ASN1_F_D2I_X509_NAME_ENTRY); | 91 | M_ASN1_D2I_Finish(a,X509_NAME_ENTRY_free,ASN1_F_D2I_X509_NAME_ENTRY); |
107 | } | 92 | } |
108 | 93 | ||
109 | int i2d_X509_NAME(a,pp) | 94 | int i2d_X509_NAME(X509_NAME *a, unsigned char **pp) |
110 | X509_NAME *a; | ||
111 | unsigned char **pp; | ||
112 | { | 95 | { |
113 | int ret; | 96 | int ret; |
114 | 97 | ||
@@ -128,11 +111,10 @@ unsigned char **pp; | |||
128 | return(ret); | 111 | return(ret); |
129 | } | 112 | } |
130 | 113 | ||
131 | static int i2d_X509_NAME_entries(a) | 114 | static int i2d_X509_NAME_entries(X509_NAME *a) |
132 | X509_NAME *a; | ||
133 | { | 115 | { |
134 | X509_NAME_ENTRY *ne,*fe=NULL; | 116 | X509_NAME_ENTRY *ne,*fe=NULL; |
135 | STACK *sk; | 117 | STACK_OF(X509_NAME_ENTRY) *sk; |
136 | BUF_MEM *buf=NULL; | 118 | BUF_MEM *buf=NULL; |
137 | int set=0,r,ret=0; | 119 | int set=0,r,ret=0; |
138 | int i; | 120 | int i; |
@@ -140,9 +122,9 @@ X509_NAME *a; | |||
140 | int size=0; | 122 | int size=0; |
141 | 123 | ||
142 | sk=a->entries; | 124 | sk=a->entries; |
143 | for (i=0; i<sk_num(sk); i++) | 125 | for (i=0; i<sk_X509_NAME_ENTRY_num(sk); i++) |
144 | { | 126 | { |
145 | ne=(X509_NAME_ENTRY *)sk_value(sk,i); | 127 | ne=sk_X509_NAME_ENTRY_value(sk,i); |
146 | if (fe == NULL) | 128 | if (fe == NULL) |
147 | { | 129 | { |
148 | fe=ne; | 130 | fe=ne; |
@@ -173,9 +155,9 @@ X509_NAME *a; | |||
173 | ASN1_put_object(&p,1,ret,V_ASN1_SEQUENCE,V_ASN1_UNIVERSAL); | 155 | ASN1_put_object(&p,1,ret,V_ASN1_SEQUENCE,V_ASN1_UNIVERSAL); |
174 | 156 | ||
175 | set= -1; | 157 | set= -1; |
176 | for (i=0; i<sk_num(sk); i++) | 158 | for (i=0; i<sk_X509_NAME_ENTRY_num(sk); i++) |
177 | { | 159 | { |
178 | ne=(X509_NAME_ENTRY *)sk_value(sk,i); | 160 | ne=sk_X509_NAME_ENTRY_value(sk,i); |
179 | if (set != ne->set) | 161 | if (set != ne->set) |
180 | { | 162 | { |
181 | set=ne->set; | 163 | set=ne->set; |
@@ -190,10 +172,7 @@ err: | |||
190 | return(-1); | 172 | return(-1); |
191 | } | 173 | } |
192 | 174 | ||
193 | X509_NAME *d2i_X509_NAME(a,pp,length) | 175 | X509_NAME *d2i_X509_NAME(X509_NAME **a, unsigned char **pp, long length) |
194 | X509_NAME **a; | ||
195 | unsigned char **pp; | ||
196 | long length; | ||
197 | { | 176 | { |
198 | int set=0,i; | 177 | int set=0,i; |
199 | int idx=0; | 178 | int idx=0; |
@@ -201,11 +180,11 @@ long length; | |||
201 | M_ASN1_D2I_vars(a,X509_NAME *,X509_NAME_new); | 180 | M_ASN1_D2I_vars(a,X509_NAME *,X509_NAME_new); |
202 | 181 | ||
203 | orig= *pp; | 182 | orig= *pp; |
204 | if (sk_num(ret->entries) > 0) | 183 | if (sk_X509_NAME_ENTRY_num(ret->entries) > 0) |
205 | { | 184 | { |
206 | while (sk_num(ret->entries) > 0) | 185 | while (sk_X509_NAME_ENTRY_num(ret->entries) > 0) |
207 | X509_NAME_ENTRY_free((X509_NAME_ENTRY *) | 186 | X509_NAME_ENTRY_free( |
208 | sk_pop(ret->entries)); | 187 | sk_X509_NAME_ENTRY_pop(ret->entries)); |
209 | } | 188 | } |
210 | 189 | ||
211 | M_ASN1_D2I_Init(); | 190 | M_ASN1_D2I_Init(); |
@@ -213,11 +192,12 @@ long length; | |||
213 | for (;;) | 192 | for (;;) |
214 | { | 193 | { |
215 | if (M_ASN1_D2I_end_sequence()) break; | 194 | if (M_ASN1_D2I_end_sequence()) break; |
216 | M_ASN1_D2I_get_set(ret->entries,d2i_X509_NAME_ENTRY); | 195 | M_ASN1_D2I_get_set_type(X509_NAME_ENTRY,ret->entries, |
217 | for (; idx < sk_num(ret->entries); idx++) | 196 | d2i_X509_NAME_ENTRY, |
197 | X509_NAME_ENTRY_free); | ||
198 | for (; idx < sk_X509_NAME_ENTRY_num(ret->entries); idx++) | ||
218 | { | 199 | { |
219 | ((X509_NAME_ENTRY *)sk_value(ret->entries,idx))->set= | 200 | sk_X509_NAME_ENTRY_value(ret->entries,idx)->set=set; |
220 | set; | ||
221 | } | 201 | } |
222 | set++; | 202 | set++; |
223 | } | 203 | } |
@@ -231,21 +211,24 @@ long length; | |||
231 | M_ASN1_D2I_Finish(a,X509_NAME_free,ASN1_F_D2I_X509_NAME); | 211 | M_ASN1_D2I_Finish(a,X509_NAME_free,ASN1_F_D2I_X509_NAME); |
232 | } | 212 | } |
233 | 213 | ||
234 | X509_NAME *X509_NAME_new() | 214 | X509_NAME *X509_NAME_new(void) |
235 | { | 215 | { |
236 | X509_NAME *ret=NULL; | 216 | X509_NAME *ret=NULL; |
217 | ASN1_CTX c; | ||
237 | 218 | ||
238 | M_ASN1_New_Malloc(ret,X509_NAME); | 219 | M_ASN1_New_Malloc(ret,X509_NAME); |
239 | if ((ret->entries=sk_new(NULL)) == NULL) goto err2; | 220 | if ((ret->entries=sk_X509_NAME_ENTRY_new(NULL)) == NULL) |
221 | { c.line=__LINE__; goto err2; } | ||
240 | M_ASN1_New(ret->bytes,BUF_MEM_new); | 222 | M_ASN1_New(ret->bytes,BUF_MEM_new); |
241 | ret->modified=1; | 223 | ret->modified=1; |
242 | return(ret); | 224 | return(ret); |
243 | M_ASN1_New_Error(ASN1_F_X509_NAME_NEW); | 225 | M_ASN1_New_Error(ASN1_F_X509_NAME_NEW); |
244 | } | 226 | } |
245 | 227 | ||
246 | X509_NAME_ENTRY *X509_NAME_ENTRY_new() | 228 | X509_NAME_ENTRY *X509_NAME_ENTRY_new(void) |
247 | { | 229 | { |
248 | X509_NAME_ENTRY *ret=NULL; | 230 | X509_NAME_ENTRY *ret=NULL; |
231 | ASN1_CTX c; | ||
249 | 232 | ||
250 | M_ASN1_New_Malloc(ret,X509_NAME_ENTRY); | 233 | M_ASN1_New_Malloc(ret,X509_NAME_ENTRY); |
251 | /* M_ASN1_New(ret->object,ASN1_OBJECT_new);*/ | 234 | /* M_ASN1_New(ret->object,ASN1_OBJECT_new);*/ |
@@ -256,26 +239,25 @@ X509_NAME_ENTRY *X509_NAME_ENTRY_new() | |||
256 | M_ASN1_New_Error(ASN1_F_X509_NAME_ENTRY_NEW); | 239 | M_ASN1_New_Error(ASN1_F_X509_NAME_ENTRY_NEW); |
257 | } | 240 | } |
258 | 241 | ||
259 | void X509_NAME_free(a) | 242 | void X509_NAME_free(X509_NAME *a) |
260 | X509_NAME *a; | ||
261 | { | 243 | { |
244 | if(a == NULL) | ||
245 | return; | ||
246 | |||
262 | BUF_MEM_free(a->bytes); | 247 | BUF_MEM_free(a->bytes); |
263 | sk_pop_free(a->entries,X509_NAME_ENTRY_free); | 248 | sk_X509_NAME_ENTRY_pop_free(a->entries,X509_NAME_ENTRY_free); |
264 | Free((char *)a); | 249 | Free(a); |
265 | } | 250 | } |
266 | 251 | ||
267 | void X509_NAME_ENTRY_free(a) | 252 | void X509_NAME_ENTRY_free(X509_NAME_ENTRY *a) |
268 | X509_NAME_ENTRY *a; | ||
269 | { | 253 | { |
270 | if (a == NULL) return; | 254 | if (a == NULL) return; |
271 | ASN1_OBJECT_free(a->object); | 255 | ASN1_OBJECT_free(a->object); |
272 | ASN1_BIT_STRING_free(a->value); | 256 | ASN1_BIT_STRING_free(a->value); |
273 | Free((char *)a); | 257 | Free(a); |
274 | } | 258 | } |
275 | 259 | ||
276 | int X509_NAME_set(xn,name) | 260 | int X509_NAME_set(X509_NAME **xn, X509_NAME *name) |
277 | X509_NAME **xn; | ||
278 | X509_NAME *name; | ||
279 | { | 261 | { |
280 | X509_NAME *in; | 262 | X509_NAME *in; |
281 | 263 | ||
@@ -293,3 +275,5 @@ X509_NAME *name; | |||
293 | return(*xn != NULL); | 275 | return(*xn != NULL); |
294 | } | 276 | } |
295 | 277 | ||
278 | IMPLEMENT_STACK_OF(X509_NAME_ENTRY) | ||
279 | IMPLEMENT_ASN1_SET_OF(X509_NAME_ENTRY) | ||