diff options
Diffstat (limited to 'src/lib/libcrypto/asn1/a_object.c')
-rw-r--r-- | src/lib/libcrypto/asn1/a_object.c | 139 |
1 files changed, 27 insertions, 112 deletions
diff --git a/src/lib/libcrypto/asn1/a_object.c b/src/lib/libcrypto/asn1/a_object.c index 5a7eeef8d8..b94b418ee8 100644 --- a/src/lib/libcrypto/asn1/a_object.c +++ b/src/lib/libcrypto/asn1/a_object.c | |||
@@ -58,18 +58,11 @@ | |||
58 | 58 | ||
59 | #include <stdio.h> | 59 | #include <stdio.h> |
60 | #include "cryptlib.h" | 60 | #include "cryptlib.h" |
61 | #include "buffer.h" | 61 | #include <openssl/buffer.h> |
62 | #include "asn1.h" | 62 | #include <openssl/asn1.h> |
63 | #include "objects.h" | 63 | #include <openssl/objects.h> |
64 | 64 | ||
65 | /* ASN1err(ASN1_F_ASN1_OBJECT_NEW,ASN1_R_EXPECTING_AN_OBJECT); | 65 | int i2d_ASN1_OBJECT(ASN1_OBJECT *a, unsigned char **pp) |
66 | * ASN1err(ASN1_F_D2I_ASN1_OBJECT,ASN1_R_BAD_OBJECT_HEADER); | ||
67 | * ASN1err(ASN1_F_I2T_ASN1_OBJECT,ASN1_R_BAD_OBJECT_HEADER); | ||
68 | */ | ||
69 | |||
70 | int i2d_ASN1_OBJECT(a, pp) | ||
71 | ASN1_OBJECT *a; | ||
72 | unsigned char **pp; | ||
73 | { | 66 | { |
74 | unsigned char *p; | 67 | unsigned char *p; |
75 | 68 | ||
@@ -87,14 +80,11 @@ unsigned char **pp; | |||
87 | return(a->length); | 80 | return(a->length); |
88 | } | 81 | } |
89 | 82 | ||
90 | int a2d_ASN1_OBJECT(out,olen,buf,num) | 83 | int a2d_ASN1_OBJECT(unsigned char *out, int olen, const char *buf, int num) |
91 | unsigned char *out; | ||
92 | int olen; | ||
93 | char *buf; | ||
94 | int num; | ||
95 | { | 84 | { |
96 | int i,first,len=0,c; | 85 | int i,first,len=0,c; |
97 | char tmp[24],*p; | 86 | char tmp[24]; |
87 | const char *p; | ||
98 | unsigned long l; | 88 | unsigned long l; |
99 | 89 | ||
100 | if (num == 0) | 90 | if (num == 0) |
@@ -180,85 +170,12 @@ err: | |||
180 | return(0); | 170 | return(0); |
181 | } | 171 | } |
182 | 172 | ||
183 | int i2t_ASN1_OBJECT(buf,buf_len,a) | 173 | int i2t_ASN1_OBJECT(char *buf, int buf_len, ASN1_OBJECT *a) |
184 | char *buf; | 174 | { |
185 | int buf_len; | 175 | return OBJ_obj2txt(buf, buf_len, a, 0); |
186 | ASN1_OBJECT *a; | 176 | } |
187 | { | ||
188 | int i,idx=0,n=0,len,nid; | ||
189 | unsigned long l; | ||
190 | unsigned char *p; | ||
191 | char *s; | ||
192 | char tbuf[32]; | ||
193 | |||
194 | if (buf_len <= 0) return(0); | ||
195 | |||
196 | if ((a == NULL) || (a->data == NULL)) | ||
197 | { | ||
198 | buf[0]='\0'; | ||
199 | return(0); | ||
200 | } | ||
201 | |||
202 | nid=OBJ_obj2nid(a); | ||
203 | if (nid == NID_undef) | ||
204 | { | ||
205 | len=a->length; | ||
206 | p=a->data; | ||
207 | |||
208 | idx=0; | ||
209 | l=0; | ||
210 | while (idx < a->length) | ||
211 | { | ||
212 | l|=(p[idx]&0x7f); | ||
213 | if (!(p[idx] & 0x80)) break; | ||
214 | l<<=7L; | ||
215 | idx++; | ||
216 | } | ||
217 | idx++; | ||
218 | i=(int)(l/40); | ||
219 | if (i > 2) i=2; | ||
220 | l-=(long)(i*40); | ||
221 | |||
222 | sprintf(tbuf,"%d.%ld",i,l); | ||
223 | i=strlen(tbuf); | ||
224 | strncpy(buf,tbuf,buf_len); | ||
225 | buf_len-=i; | ||
226 | buf+=i; | ||
227 | n+=i; | ||
228 | |||
229 | l=0; | ||
230 | for (; idx<len; idx++) | ||
231 | { | ||
232 | l|=p[idx]&0x7f; | ||
233 | if (!(p[idx] & 0x80)) | ||
234 | { | ||
235 | sprintf(tbuf,".%ld",l); | ||
236 | i=strlen(tbuf); | ||
237 | if (buf_len > 0) | ||
238 | strncpy(buf,tbuf,buf_len); | ||
239 | buf_len-=i; | ||
240 | buf+=i; | ||
241 | n+=i; | ||
242 | l=0; | ||
243 | } | ||
244 | l<<=7L; | ||
245 | } | ||
246 | } | ||
247 | else | ||
248 | { | ||
249 | s=(char *)OBJ_nid2ln(nid); | ||
250 | if (s == NULL) | ||
251 | s=(char *)OBJ_nid2sn(nid); | ||
252 | strncpy(buf,s,buf_len); | ||
253 | n=strlen(s); | ||
254 | } | ||
255 | buf[buf_len-1]='\0'; | ||
256 | return(n); | ||
257 | } | ||
258 | 177 | ||
259 | int i2a_ASN1_OBJECT(bp,a) | 178 | int i2a_ASN1_OBJECT(BIO *bp, ASN1_OBJECT *a) |
260 | BIO *bp; | ||
261 | ASN1_OBJECT *a; | ||
262 | { | 179 | { |
263 | char buf[80]; | 180 | char buf[80]; |
264 | int i; | 181 | int i; |
@@ -271,10 +188,8 @@ ASN1_OBJECT *a; | |||
271 | return(i); | 188 | return(i); |
272 | } | 189 | } |
273 | 190 | ||
274 | ASN1_OBJECT *d2i_ASN1_OBJECT(a, pp, length) | 191 | ASN1_OBJECT *d2i_ASN1_OBJECT(ASN1_OBJECT **a, unsigned char **pp, |
275 | ASN1_OBJECT **a; | 192 | long length) |
276 | unsigned char **pp; | ||
277 | long length; | ||
278 | { | 193 | { |
279 | ASN1_OBJECT *ret=NULL; | 194 | ASN1_OBJECT *ret=NULL; |
280 | unsigned char *p; | 195 | unsigned char *p; |
@@ -330,7 +245,7 @@ err: | |||
330 | return(NULL); | 245 | return(NULL); |
331 | } | 246 | } |
332 | 247 | ||
333 | ASN1_OBJECT *ASN1_OBJECT_new() | 248 | ASN1_OBJECT *ASN1_OBJECT_new(void) |
334 | { | 249 | { |
335 | ASN1_OBJECT *ret; | 250 | ASN1_OBJECT *ret; |
336 | 251 | ||
@@ -349,14 +264,15 @@ ASN1_OBJECT *ASN1_OBJECT_new() | |||
349 | return(ret); | 264 | return(ret); |
350 | } | 265 | } |
351 | 266 | ||
352 | void ASN1_OBJECT_free(a) | 267 | void ASN1_OBJECT_free(ASN1_OBJECT *a) |
353 | ASN1_OBJECT *a; | ||
354 | { | 268 | { |
355 | if (a == NULL) return; | 269 | if (a == NULL) return; |
356 | if (a->flags & ASN1_OBJECT_FLAG_DYNAMIC_STRINGS) | 270 | if (a->flags & ASN1_OBJECT_FLAG_DYNAMIC_STRINGS) |
357 | { | 271 | { |
358 | if (a->sn != NULL) Free(a->sn); | 272 | #ifndef CONST_STRICT /* disable purely for compile-time strict const checking. Doing this on a "real" compile will cause mempory leaks */ |
359 | if (a->ln != NULL) Free(a->ln); | 273 | if (a->sn != NULL) Free((void *)a->sn); |
274 | if (a->ln != NULL) Free((void *)a->ln); | ||
275 | #endif | ||
360 | a->sn=a->ln=NULL; | 276 | a->sn=a->ln=NULL; |
361 | } | 277 | } |
362 | if (a->flags & ASN1_OBJECT_FLAG_DYNAMIC_DATA) | 278 | if (a->flags & ASN1_OBJECT_FLAG_DYNAMIC_DATA) |
@@ -366,14 +282,11 @@ ASN1_OBJECT *a; | |||
366 | a->length=0; | 282 | a->length=0; |
367 | } | 283 | } |
368 | if (a->flags & ASN1_OBJECT_FLAG_DYNAMIC) | 284 | if (a->flags & ASN1_OBJECT_FLAG_DYNAMIC) |
369 | Free((char *)a); | 285 | Free(a); |
370 | } | 286 | } |
371 | 287 | ||
372 | ASN1_OBJECT *ASN1_OBJECT_create(nid,data,len,sn,ln) | 288 | ASN1_OBJECT *ASN1_OBJECT_create(int nid, unsigned char *data, int len, |
373 | int nid; | 289 | char *sn, char *ln) |
374 | unsigned char *data; | ||
375 | int len; | ||
376 | char *sn,*ln; | ||
377 | { | 290 | { |
378 | ASN1_OBJECT o; | 291 | ASN1_OBJECT o; |
379 | 292 | ||
@@ -382,8 +295,10 @@ char *sn,*ln; | |||
382 | o.data=data; | 295 | o.data=data; |
383 | o.nid=nid; | 296 | o.nid=nid; |
384 | o.length=len; | 297 | o.length=len; |
385 | o.flags=ASN1_OBJECT_FLAG_DYNAMIC| | 298 | o.flags=ASN1_OBJECT_FLAG_DYNAMIC|ASN1_OBJECT_FLAG_DYNAMIC_STRINGS| |
386 | ASN1_OBJECT_FLAG_DYNAMIC_STRINGS|ASN1_OBJECT_FLAG_DYNAMIC_DATA; | 299 | ASN1_OBJECT_FLAG_DYNAMIC_DATA; |
387 | return(OBJ_dup(&o)); | 300 | return(OBJ_dup(&o)); |
388 | } | 301 | } |
389 | 302 | ||
303 | IMPLEMENT_STACK_OF(ASN1_OBJECT) | ||
304 | IMPLEMENT_ASN1_SET_OF(ASN1_OBJECT) | ||