summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/asn1/x_name.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libcrypto/asn1/x_name.c')
-rw-r--r--src/lib/libcrypto/asn1/x_name.c96
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
72static int i2d_X509_NAME_entries(X509_NAME *a); 65static int i2d_X509_NAME_entries(X509_NAME *a);
73#else 66int i2d_X509_NAME_ENTRY(X509_NAME_ENTRY *a, unsigned char **pp)
74static int i2d_X509_NAME_entries();
75#endif
76
77int i2d_X509_NAME_ENTRY(a,pp)
78X509_NAME_ENTRY *a;
79unsigned 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
94X509_NAME_ENTRY *d2i_X509_NAME_ENTRY(a,pp,length) 81X509_NAME_ENTRY *d2i_X509_NAME_ENTRY(X509_NAME_ENTRY **a, unsigned char **pp,
95X509_NAME_ENTRY **a; 82 long length)
96unsigned char **pp;
97long 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
109int i2d_X509_NAME(a,pp) 94int i2d_X509_NAME(X509_NAME *a, unsigned char **pp)
110X509_NAME *a;
111unsigned 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
131static int i2d_X509_NAME_entries(a) 114static int i2d_X509_NAME_entries(X509_NAME *a)
132X509_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
193X509_NAME *d2i_X509_NAME(a,pp,length) 175X509_NAME *d2i_X509_NAME(X509_NAME **a, unsigned char **pp, long length)
194X509_NAME **a;
195unsigned char **pp;
196long 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
234X509_NAME *X509_NAME_new() 214X509_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
246X509_NAME_ENTRY *X509_NAME_ENTRY_new() 228X509_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
259void X509_NAME_free(a) 242void X509_NAME_free(X509_NAME *a)
260X509_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
267void X509_NAME_ENTRY_free(a) 252void X509_NAME_ENTRY_free(X509_NAME_ENTRY *a)
268X509_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
276int X509_NAME_set(xn,name) 260int X509_NAME_set(X509_NAME **xn, X509_NAME *name)
277X509_NAME **xn;
278X509_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
278IMPLEMENT_STACK_OF(X509_NAME_ENTRY)
279IMPLEMENT_ASN1_SET_OF(X509_NAME_ENTRY)