diff options
Diffstat (limited to 'src/lib/libcrypto/objects/obj_dat.c')
| -rw-r--r-- | src/lib/libcrypto/objects/obj_dat.c | 269 |
1 files changed, 172 insertions, 97 deletions
diff --git a/src/lib/libcrypto/objects/obj_dat.c b/src/lib/libcrypto/objects/obj_dat.c index 34866ebbd2..d47b874399 100644 --- a/src/lib/libcrypto/objects/obj_dat.c +++ b/src/lib/libcrypto/objects/obj_dat.c | |||
| @@ -59,23 +59,29 @@ | |||
| 59 | #include <stdio.h> | 59 | #include <stdio.h> |
| 60 | #include <ctype.h> | 60 | #include <ctype.h> |
| 61 | #include "cryptlib.h" | 61 | #include "cryptlib.h" |
| 62 | #include "lhash.h" | 62 | #include <openssl/lhash.h> |
| 63 | #include "asn1.h" | 63 | #include <openssl/asn1.h> |
| 64 | #include "objects.h" | 64 | #include <openssl/objects.h> |
| 65 | 65 | ||
| 66 | /* obj_dat.h is generated from objects.h by obj_dat.pl */ | 66 | /* obj_dat.h is generated from objects.h by obj_dat.pl */ |
| 67 | #ifndef NO_OBJECT | ||
| 67 | #include "obj_dat.h" | 68 | #include "obj_dat.h" |
| 69 | #else | ||
| 70 | /* You will have to load all the objects needed manually in the application */ | ||
| 71 | #define NUM_NID 0 | ||
| 72 | #define NUM_SN 0 | ||
| 73 | #define NUM_LN 0 | ||
| 74 | #define NUM_OBJ 0 | ||
| 75 | static unsigned char lvalues[1]; | ||
| 76 | static ASN1_OBJECT nid_objs[1]; | ||
| 77 | static ASN1_OBJECT *sn_objs[1]; | ||
| 78 | static ASN1_OBJECT *ln_objs[1]; | ||
| 79 | static ASN1_OBJECT *obj_objs[1]; | ||
| 80 | #endif | ||
| 68 | 81 | ||
| 69 | #ifndef NOPROTO | ||
| 70 | static int sn_cmp(ASN1_OBJECT **a, ASN1_OBJECT **b); | 82 | static int sn_cmp(ASN1_OBJECT **a, ASN1_OBJECT **b); |
| 71 | static int ln_cmp(ASN1_OBJECT **a, ASN1_OBJECT **b); | 83 | static int ln_cmp(ASN1_OBJECT **a, ASN1_OBJECT **b); |
| 72 | static int obj_cmp(ASN1_OBJECT **a, ASN1_OBJECT **b); | 84 | static int obj_cmp(ASN1_OBJECT **a, ASN1_OBJECT **b); |
| 73 | #else | ||
| 74 | static int sn_cmp(); | ||
| 75 | static int ln_cmp(); | ||
| 76 | static int obj_cmp(); | ||
| 77 | #endif | ||
| 78 | |||
| 79 | #define ADDED_DATA 0 | 85 | #define ADDED_DATA 0 |
| 80 | #define ADDED_SNAME 1 | 86 | #define ADDED_SNAME 1 |
| 81 | #define ADDED_LNAME 2 | 87 | #define ADDED_LNAME 2 |
| @@ -90,18 +96,13 @@ typedef struct added_obj_st | |||
| 90 | static int new_nid=NUM_NID; | 96 | static int new_nid=NUM_NID; |
| 91 | static LHASH *added=NULL; | 97 | static LHASH *added=NULL; |
| 92 | 98 | ||
| 93 | static int sn_cmp(ap,bp) | 99 | static int sn_cmp(ASN1_OBJECT **ap, ASN1_OBJECT **bp) |
| 94 | ASN1_OBJECT **ap; | ||
| 95 | ASN1_OBJECT **bp; | ||
| 96 | { return(strcmp((*ap)->sn,(*bp)->sn)); } | 100 | { return(strcmp((*ap)->sn,(*bp)->sn)); } |
| 97 | 101 | ||
| 98 | static int ln_cmp(ap,bp) | 102 | static int ln_cmp(ASN1_OBJECT **ap, ASN1_OBJECT **bp) |
| 99 | ASN1_OBJECT **ap; | ||
| 100 | ASN1_OBJECT **bp; | ||
| 101 | { return(strcmp((*ap)->ln,(*bp)->ln)); } | 103 | { return(strcmp((*ap)->ln,(*bp)->ln)); } |
| 102 | 104 | ||
| 103 | static unsigned long add_hash(ca) | 105 | static unsigned long add_hash(ADDED_OBJ *ca) |
| 104 | ADDED_OBJ *ca; | ||
| 105 | { | 106 | { |
| 106 | ASN1_OBJECT *a; | 107 | ASN1_OBJECT *a; |
| 107 | int i; | 108 | int i; |
| @@ -134,8 +135,7 @@ ADDED_OBJ *ca; | |||
| 134 | return(ret); | 135 | return(ret); |
| 135 | } | 136 | } |
| 136 | 137 | ||
| 137 | static int add_cmp(ca,cb) | 138 | static int add_cmp(ADDED_OBJ *ca, ADDED_OBJ *cb) |
| 138 | ADDED_OBJ *ca,*cb; | ||
| 139 | { | 139 | { |
| 140 | ASN1_OBJECT *a,*b; | 140 | ASN1_OBJECT *a,*b; |
| 141 | int i; | 141 | int i; |
| @@ -163,36 +163,35 @@ ADDED_OBJ *ca,*cb; | |||
| 163 | default: | 163 | default: |
| 164 | abort(); | 164 | abort(); |
| 165 | } | 165 | } |
| 166 | return(1); /* should not get here */ | ||
| 166 | } | 167 | } |
| 167 | 168 | ||
| 168 | static int init_added() | 169 | static int init_added(void) |
| 169 | { | 170 | { |
| 170 | if (added != NULL) return(1); | 171 | if (added != NULL) return(1); |
| 171 | added=lh_new(add_hash,add_cmp); | 172 | added=lh_new(add_hash,add_cmp); |
| 172 | return(added != NULL); | 173 | return(added != NULL); |
| 173 | } | 174 | } |
| 174 | 175 | ||
| 175 | static void cleanup1(a) | 176 | static void cleanup1(ADDED_OBJ *a) |
| 176 | ADDED_OBJ *a; | ||
| 177 | { | 177 | { |
| 178 | a->obj->nid=0; | 178 | a->obj->nid=0; |
| 179 | a->obj->flags|=ASN1_OBJECT_FLAG_DYNAMIC| | 179 | a->obj->flags|=ASN1_OBJECT_FLAG_DYNAMIC| |
| 180 | ASN1_OBJECT_FLAG_DYNAMIC_STRINGS; | 180 | ASN1_OBJECT_FLAG_DYNAMIC_STRINGS| |
| 181 | ASN1_OBJECT_FLAG_DYNAMIC_DATA; | ||
| 181 | } | 182 | } |
| 182 | 183 | ||
| 183 | static void cleanup2(a) | 184 | static void cleanup2(ADDED_OBJ *a) |
| 184 | ADDED_OBJ *a; | ||
| 185 | { a->obj->nid++; } | 185 | { a->obj->nid++; } |
| 186 | 186 | ||
| 187 | static void cleanup3(a) | 187 | static void cleanup3(ADDED_OBJ *a) |
| 188 | ADDED_OBJ *a; | ||
| 189 | { | 188 | { |
| 190 | if (--a->obj->nid == 0) | 189 | if (--a->obj->nid == 0) |
| 191 | ASN1_OBJECT_free(a->obj); | 190 | ASN1_OBJECT_free(a->obj); |
| 192 | Free(a); | 191 | Free(a); |
| 193 | } | 192 | } |
| 194 | 193 | ||
| 195 | void OBJ_cleanup() | 194 | void OBJ_cleanup(void) |
| 196 | { | 195 | { |
| 197 | if (added == NULL) return; | 196 | if (added == NULL) return; |
| 198 | added->down_load=0; | 197 | added->down_load=0; |
| @@ -203,8 +202,7 @@ void OBJ_cleanup() | |||
| 203 | added=NULL; | 202 | added=NULL; |
| 204 | } | 203 | } |
| 205 | 204 | ||
| 206 | int OBJ_new_nid(num) | 205 | int OBJ_new_nid(int num) |
| 207 | int num; | ||
| 208 | { | 206 | { |
| 209 | int i; | 207 | int i; |
| 210 | 208 | ||
| @@ -213,8 +211,7 @@ int num; | |||
| 213 | return(i); | 211 | return(i); |
| 214 | } | 212 | } |
| 215 | 213 | ||
| 216 | int OBJ_add_object(obj) | 214 | int OBJ_add_object(ASN1_OBJECT *obj) |
| 217 | ASN1_OBJECT *obj; | ||
| 218 | { | 215 | { |
| 219 | ASN1_OBJECT *o; | 216 | ASN1_OBJECT *o; |
| 220 | ADDED_OBJ *ao[4],*aop; | 217 | ADDED_OBJ *ao[4],*aop; |
| @@ -247,7 +244,9 @@ ASN1_OBJECT *obj; | |||
| 247 | Free(aop); | 244 | Free(aop); |
| 248 | } | 245 | } |
| 249 | } | 246 | } |
| 250 | o->flags&= ~(ASN1_OBJECT_FLAG_DYNAMIC|ASN1_OBJECT_FLAG_DYNAMIC_STRINGS); | 247 | o->flags&= ~(ASN1_OBJECT_FLAG_DYNAMIC|ASN1_OBJECT_FLAG_DYNAMIC_STRINGS| |
| 248 | ASN1_OBJECT_FLAG_DYNAMIC_DATA); | ||
| 249 | |||
| 251 | return(o->nid); | 250 | return(o->nid); |
| 252 | err: | 251 | err: |
| 253 | for (i=ADDED_DATA; i<=ADDED_NID; i++) | 252 | for (i=ADDED_DATA; i<=ADDED_NID; i++) |
| @@ -256,8 +255,7 @@ err: | |||
| 256 | return(NID_undef); | 255 | return(NID_undef); |
| 257 | } | 256 | } |
| 258 | 257 | ||
| 259 | ASN1_OBJECT *OBJ_nid2obj(n) | 258 | ASN1_OBJECT *OBJ_nid2obj(int n) |
| 260 | int n; | ||
| 261 | { | 259 | { |
| 262 | ADDED_OBJ ad,*adp; | 260 | ADDED_OBJ ad,*adp; |
| 263 | ASN1_OBJECT ob; | 261 | ASN1_OBJECT ob; |
| @@ -289,8 +287,7 @@ int n; | |||
| 289 | } | 287 | } |
| 290 | } | 288 | } |
| 291 | 289 | ||
| 292 | char *OBJ_nid2sn(n) | 290 | const char *OBJ_nid2sn(int n) |
| 293 | int n; | ||
| 294 | { | 291 | { |
| 295 | ADDED_OBJ ad,*adp; | 292 | ADDED_OBJ ad,*adp; |
| 296 | ASN1_OBJECT ob; | 293 | ASN1_OBJECT ob; |
| @@ -322,8 +319,7 @@ int n; | |||
| 322 | } | 319 | } |
| 323 | } | 320 | } |
| 324 | 321 | ||
| 325 | char *OBJ_nid2ln(n) | 322 | const char *OBJ_nid2ln(int n) |
| 326 | int n; | ||
| 327 | { | 323 | { |
| 328 | ADDED_OBJ ad,*adp; | 324 | ADDED_OBJ ad,*adp; |
| 329 | ASN1_OBJECT ob; | 325 | ASN1_OBJECT ob; |
| @@ -355,8 +351,7 @@ int n; | |||
| 355 | } | 351 | } |
| 356 | } | 352 | } |
| 357 | 353 | ||
| 358 | int OBJ_obj2nid(a) | 354 | int OBJ_obj2nid(ASN1_OBJECT *a) |
| 359 | ASN1_OBJECT *a; | ||
| 360 | { | 355 | { |
| 361 | ASN1_OBJECT **op; | 356 | ASN1_OBJECT **op; |
| 362 | ADDED_OBJ ad,*adp; | 357 | ADDED_OBJ ad,*adp; |
| @@ -380,45 +375,126 @@ ASN1_OBJECT *a; | |||
| 380 | return((*op)->nid); | 375 | return((*op)->nid); |
| 381 | } | 376 | } |
| 382 | 377 | ||
| 383 | int OBJ_txt2nid(s) | 378 | /* Convert an object name into an ASN1_OBJECT |
| 384 | char *s; | 379 | * if "noname" is not set then search for short and long names first. |
| 380 | * This will convert the "dotted" form into an object: unlike OBJ_txt2nid | ||
| 381 | * it can be used with any objects, not just registered ones. | ||
| 382 | */ | ||
| 383 | |||
| 384 | ASN1_OBJECT *OBJ_txt2obj(const char *s, int no_name) | ||
| 385 | { | 385 | { |
| 386 | int ret; | 386 | int nid = NID_undef; |
| 387 | ASN1_OBJECT *op=NULL; | ||
| 388 | unsigned char *buf,*p; | ||
| 389 | int i, j; | ||
| 387 | 390 | ||
| 388 | ret=OBJ_sn2nid(s); | 391 | if(!no_name) { |
| 389 | if (ret == NID_undef) | 392 | if( ((nid = OBJ_sn2nid(s)) != NID_undef) || |
| 390 | { | 393 | ((nid = OBJ_ln2nid(s)) != NID_undef) ) |
| 391 | ret=OBJ_ln2nid(s); | 394 | return OBJ_nid2obj(nid); |
| 392 | if (ret == NID_undef) | 395 | } |
| 393 | { | ||
| 394 | ASN1_OBJECT *op=NULL; | ||
| 395 | unsigned char *buf,*p; | ||
| 396 | int i; | ||
| 397 | 396 | ||
| 398 | i=a2d_ASN1_OBJECT(NULL,0,s,-1); | 397 | /* Work out size of content octets */ |
| 399 | if (i <= 0) | 398 | i=a2d_ASN1_OBJECT(NULL,0,s,-1); |
| 400 | { | 399 | if (i <= 0) { |
| 401 | /* clear the error */ | 400 | /* Clear the error */ |
| 402 | ERR_get_error(); | 401 | ERR_get_error(); |
| 403 | return(0); | 402 | return NULL; |
| 404 | } | 403 | } |
| 404 | /* Work out total size */ | ||
| 405 | j = ASN1_object_size(0,i,V_ASN1_OBJECT); | ||
| 406 | |||
| 407 | if((buf=(unsigned char *)Malloc(j)) == NULL) return NULL; | ||
| 408 | |||
| 409 | p = buf; | ||
| 410 | /* Write out tag+length */ | ||
| 411 | ASN1_put_object(&p,0,i,V_ASN1_OBJECT,V_ASN1_UNIVERSAL); | ||
| 412 | /* Write out contents */ | ||
| 413 | a2d_ASN1_OBJECT(p,i,s,-1); | ||
| 414 | |||
| 415 | p=buf; | ||
| 416 | op=d2i_ASN1_OBJECT(NULL,&p,i); | ||
| 417 | Free(buf); | ||
| 418 | return op; | ||
| 419 | } | ||
| 420 | |||
| 421 | int OBJ_obj2txt(char *buf, int buf_len, ASN1_OBJECT *a, int no_name) | ||
| 422 | { | ||
| 423 | int i,idx=0,n=0,len,nid; | ||
| 424 | unsigned long l; | ||
| 425 | unsigned char *p; | ||
| 426 | const char *s; | ||
| 427 | char tbuf[32]; | ||
| 428 | |||
| 429 | if (buf_len <= 0) return(0); | ||
| 430 | |||
| 431 | if ((a == NULL) || (a->data == NULL)) { | ||
| 432 | buf[0]='\0'; | ||
| 433 | return(0); | ||
| 434 | } | ||
| 405 | 435 | ||
| 406 | if ((buf=(unsigned char *)Malloc(i)) == NULL) | 436 | nid=OBJ_obj2nid(a); |
| 407 | return(NID_undef); | 437 | if ((nid == NID_undef) || no_name) { |
| 408 | a2d_ASN1_OBJECT(buf,i,s,-1); | 438 | len=a->length; |
| 409 | p=buf; | 439 | p=a->data; |
| 410 | op=d2i_ASN1_OBJECT(NULL,&p,i); | 440 | |
| 411 | if (op == NULL) return(NID_undef); | 441 | idx=0; |
| 412 | ret=OBJ_obj2nid(op); | 442 | l=0; |
| 413 | ASN1_OBJECT_free(op); | 443 | while (idx < a->length) { |
| 414 | Free(buf); | 444 | l|=(p[idx]&0x7f); |
| 445 | if (!(p[idx] & 0x80)) break; | ||
| 446 | l<<=7L; | ||
| 447 | idx++; | ||
| 448 | } | ||
| 449 | idx++; | ||
| 450 | i=(int)(l/40); | ||
| 451 | if (i > 2) i=2; | ||
| 452 | l-=(long)(i*40); | ||
| 453 | |||
| 454 | sprintf(tbuf,"%d.%lu",i,l); | ||
| 455 | i=strlen(tbuf); | ||
| 456 | strncpy(buf,tbuf,buf_len); | ||
| 457 | buf_len-=i; | ||
| 458 | buf+=i; | ||
| 459 | n+=i; | ||
| 460 | |||
| 461 | l=0; | ||
| 462 | for (; idx<len; idx++) { | ||
| 463 | l|=p[idx]&0x7f; | ||
| 464 | if (!(p[idx] & 0x80)) { | ||
| 465 | sprintf(tbuf,".%lu",l); | ||
| 466 | i=strlen(tbuf); | ||
| 467 | if (buf_len > 0) | ||
| 468 | strncpy(buf,tbuf,buf_len); | ||
| 469 | buf_len-=i; | ||
| 470 | buf+=i; | ||
| 471 | n+=i; | ||
| 472 | l=0; | ||
| 415 | } | 473 | } |
| 474 | l<<=7L; | ||
| 416 | } | 475 | } |
| 417 | return(ret); | 476 | } else { |
| 477 | s=OBJ_nid2ln(nid); | ||
| 478 | if (s == NULL) | ||
| 479 | s=OBJ_nid2sn(nid); | ||
| 480 | strncpy(buf,s,buf_len); | ||
| 481 | n=strlen(s); | ||
| 418 | } | 482 | } |
| 483 | buf[buf_len-1]='\0'; | ||
| 484 | return(n); | ||
| 485 | } | ||
| 419 | 486 | ||
| 420 | int OBJ_ln2nid(s) | 487 | int OBJ_txt2nid(char *s) |
| 421 | char *s; | 488 | { |
| 489 | ASN1_OBJECT *obj; | ||
| 490 | int nid; | ||
| 491 | obj = OBJ_txt2obj(s, 0); | ||
| 492 | nid = OBJ_obj2nid(obj); | ||
| 493 | ASN1_OBJECT_free(obj); | ||
| 494 | return nid; | ||
| 495 | } | ||
| 496 | |||
| 497 | int OBJ_ln2nid(const char *s) | ||
| 422 | { | 498 | { |
| 423 | ASN1_OBJECT o,*oo= &o,**op; | 499 | ASN1_OBJECT o,*oo= &o,**op; |
| 424 | ADDED_OBJ ad,*adp; | 500 | ADDED_OBJ ad,*adp; |
| @@ -437,8 +513,7 @@ char *s; | |||
| 437 | return((*op)->nid); | 513 | return((*op)->nid); |
| 438 | } | 514 | } |
| 439 | 515 | ||
| 440 | int OBJ_sn2nid(s) | 516 | int OBJ_sn2nid(const char *s) |
| 441 | char *s; | ||
| 442 | { | 517 | { |
| 443 | ASN1_OBJECT o,*oo= &o,**op; | 518 | ASN1_OBJECT o,*oo= &o,**op; |
| 444 | ADDED_OBJ ad,*adp; | 519 | ADDED_OBJ ad,*adp; |
| @@ -457,9 +532,7 @@ char *s; | |||
| 457 | return((*op)->nid); | 532 | return((*op)->nid); |
| 458 | } | 533 | } |
| 459 | 534 | ||
| 460 | static int obj_cmp(ap, bp) | 535 | static int obj_cmp(ASN1_OBJECT **ap, ASN1_OBJECT **bp) |
| 461 | ASN1_OBJECT **ap; | ||
| 462 | ASN1_OBJECT **bp; | ||
| 463 | { | 536 | { |
| 464 | int j; | 537 | int j; |
| 465 | ASN1_OBJECT *a= *ap; | 538 | ASN1_OBJECT *a= *ap; |
| @@ -470,12 +543,7 @@ ASN1_OBJECT **bp; | |||
| 470 | return(memcmp(a->data,b->data,a->length)); | 543 | return(memcmp(a->data,b->data,a->length)); |
| 471 | } | 544 | } |
| 472 | 545 | ||
| 473 | char *OBJ_bsearch(key,base,num,size,cmp) | 546 | char *OBJ_bsearch(char *key, char *base, int num, int size, int (*cmp)()) |
| 474 | char *key; | ||
| 475 | char *base; | ||
| 476 | int num; | ||
| 477 | int size; | ||
| 478 | int (*cmp)(); | ||
| 479 | { | 547 | { |
| 480 | int l,h,i,c; | 548 | int l,h,i,c; |
| 481 | char *p; | 549 | char *p; |
| @@ -495,14 +563,24 @@ int (*cmp)(); | |||
| 495 | else | 563 | else |
| 496 | return(p); | 564 | return(p); |
| 497 | } | 565 | } |
| 566 | #ifdef CHARSET_EBCDIC | ||
| 567 | /* THIS IS A KLUDGE - Because the *_obj is sorted in ASCII order, and | ||
| 568 | * I don't have perl (yet), we revert to a *LINEAR* search | ||
| 569 | * when the object wasn't found in the binary search. | ||
| 570 | */ | ||
| 571 | for (i=0; i<num; ++i) { | ||
| 572 | p= &(base[i*size]); | ||
| 573 | if ((*cmp)(key,p) == 0) | ||
| 574 | return p; | ||
| 575 | } | ||
| 576 | #endif | ||
| 498 | return(NULL); | 577 | return(NULL); |
| 499 | } | 578 | } |
| 500 | 579 | ||
| 501 | int OBJ_create_objects(in) | 580 | int OBJ_create_objects(BIO *in) |
| 502 | BIO *in; | ||
| 503 | { | 581 | { |
| 504 | MS_STATIC char buf[512]; | 582 | MS_STATIC char buf[512]; |
| 505 | int i,num= -1; | 583 | int i,num=0; |
| 506 | char *o,*s,*l=NULL; | 584 | char *o,*s,*l=NULL; |
| 507 | 585 | ||
| 508 | for (;;) | 586 | for (;;) |
| @@ -511,26 +589,26 @@ BIO *in; | |||
| 511 | i=BIO_gets(in,buf,512); | 589 | i=BIO_gets(in,buf,512); |
| 512 | if (i <= 0) return(num); | 590 | if (i <= 0) return(num); |
| 513 | buf[i-1]='\0'; | 591 | buf[i-1]='\0'; |
| 514 | if (!isalnum(buf[0])) return(num); | 592 | if (!isalnum((unsigned char)buf[0])) return(num); |
| 515 | o=s=buf; | 593 | o=s=buf; |
| 516 | while (isdigit(*s) || (*s == '.')) | 594 | while (isdigit((unsigned char)*s) || (*s == '.')) |
| 517 | s++; | 595 | s++; |
| 518 | if (*s != '\0') | 596 | if (*s != '\0') |
| 519 | { | 597 | { |
| 520 | *(s++)='\0'; | 598 | *(s++)='\0'; |
| 521 | while (isspace(*s)) | 599 | while (isspace((unsigned char)*s)) |
| 522 | s++; | 600 | s++; |
| 523 | if (*s == '\0') | 601 | if (*s == '\0') |
| 524 | s=NULL; | 602 | s=NULL; |
| 525 | else | 603 | else |
| 526 | { | 604 | { |
| 527 | l=s; | 605 | l=s; |
| 528 | while ((*l != '\0') && !isspace(*l)) | 606 | while ((*l != '\0') && !isspace((unsigned char)*l)) |
| 529 | l++; | 607 | l++; |
| 530 | if (*l != '\0') | 608 | if (*l != '\0') |
| 531 | { | 609 | { |
| 532 | *(l++)='\0'; | 610 | *(l++)='\0'; |
| 533 | while (isspace(*l)) | 611 | while (isspace((unsigned char)*l)) |
| 534 | l++; | 612 | l++; |
| 535 | if (*l == '\0') l=NULL; | 613 | if (*l == '\0') l=NULL; |
| 536 | } | 614 | } |
| @@ -544,13 +622,10 @@ BIO *in; | |||
| 544 | if (!OBJ_create(o,s,l)) return(num); | 622 | if (!OBJ_create(o,s,l)) return(num); |
| 545 | num++; | 623 | num++; |
| 546 | } | 624 | } |
| 547 | return(num); | 625 | /* return(num); */ |
| 548 | } | 626 | } |
| 549 | 627 | ||
| 550 | int OBJ_create(oid,sn,ln) | 628 | int OBJ_create(char *oid, char *sn, char *ln) |
| 551 | char *oid; | ||
| 552 | char *sn; | ||
| 553 | char *ln; | ||
| 554 | { | 629 | { |
| 555 | int ok=0; | 630 | int ok=0; |
| 556 | ASN1_OBJECT *op=NULL; | 631 | ASN1_OBJECT *op=NULL; |
