summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/asn1/a_object.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libcrypto/asn1/a_object.c')
-rw-r--r--src/lib/libcrypto/asn1/a_object.c139
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); 65int 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
70int i2d_ASN1_OBJECT(a, pp)
71ASN1_OBJECT *a;
72unsigned 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
90int a2d_ASN1_OBJECT(out,olen,buf,num) 83int a2d_ASN1_OBJECT(unsigned char *out, int olen, const char *buf, int num)
91unsigned char *out;
92int olen;
93char *buf;
94int 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
183int i2t_ASN1_OBJECT(buf,buf_len,a) 173int i2t_ASN1_OBJECT(char *buf, int buf_len, ASN1_OBJECT *a)
184char *buf; 174{
185int buf_len; 175 return OBJ_obj2txt(buf, buf_len, a, 0);
186ASN1_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
259int i2a_ASN1_OBJECT(bp,a) 178int i2a_ASN1_OBJECT(BIO *bp, ASN1_OBJECT *a)
260BIO *bp;
261ASN1_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
274ASN1_OBJECT *d2i_ASN1_OBJECT(a, pp, length) 191ASN1_OBJECT *d2i_ASN1_OBJECT(ASN1_OBJECT **a, unsigned char **pp,
275ASN1_OBJECT **a; 192 long length)
276unsigned char **pp;
277long 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
333ASN1_OBJECT *ASN1_OBJECT_new() 248ASN1_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
352void ASN1_OBJECT_free(a) 267void ASN1_OBJECT_free(ASN1_OBJECT *a)
353ASN1_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
372ASN1_OBJECT *ASN1_OBJECT_create(nid,data,len,sn,ln) 288ASN1_OBJECT *ASN1_OBJECT_create(int nid, unsigned char *data, int len,
373int nid; 289 char *sn, char *ln)
374unsigned char *data;
375int len;
376char *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
303IMPLEMENT_STACK_OF(ASN1_OBJECT)
304IMPLEMENT_ASN1_SET_OF(ASN1_OBJECT)