|
1 | | -/* $OpenBSD: a_object.c,v 1.43 2022/03/19 17:49:32 jsing Exp $ */ |
| 1 | +/* $OpenBSD: a_object.c,v 1.44 2022/03/20 13:27:23 jsing Exp $ */ |
2 | 2 | /* Copyright (C) 1995-1998 Eric Young ([email protected]) |
3 | 3 | * All rights reserved. |
4 | 4 | * |
@@ -123,28 +123,6 @@ ASN1_OBJECT_create(int nid, unsigned char *data, int len, |
123 | 123 | return (OBJ_dup(&o)); |
124 | 124 | } |
125 | 125 |
|
126 | | -int |
127 | | -i2d_ASN1_OBJECT(const ASN1_OBJECT *a, unsigned char **pp) |
128 | | -{ |
129 | | - unsigned char *p; |
130 | | - int objsize; |
131 | | - |
132 | | - if ((a == NULL) || (a->data == NULL)) |
133 | | - return (0); |
134 | | - |
135 | | - objsize = ASN1_object_size(0, a->length, V_ASN1_OBJECT); |
136 | | - if (pp == NULL) |
137 | | - return objsize; |
138 | | - |
139 | | - p = *pp; |
140 | | - ASN1_put_object(&p, 0, a->length, V_ASN1_OBJECT, V_ASN1_UNIVERSAL); |
141 | | - memcpy(p, a->data, a->length); |
142 | | - p += a->length; |
143 | | - |
144 | | - *pp = p; |
145 | | - return (objsize); |
146 | | -} |
147 | | - |
148 | 126 | static int |
149 | 127 | oid_add_arc(CBB *cbb, uint64_t arc) |
150 | 128 | { |
@@ -541,36 +519,6 @@ i2a_ASN1_OBJECT(BIO *bp, const ASN1_OBJECT *aobj) |
541 | 519 | return ret; |
542 | 520 | } |
543 | 521 |
|
544 | | -ASN1_OBJECT * |
545 | | -d2i_ASN1_OBJECT(ASN1_OBJECT **a, const unsigned char **pp, long length) |
546 | | -{ |
547 | | - const unsigned char *p; |
548 | | - long len; |
549 | | - int tag, xclass; |
550 | | - int inf, i; |
551 | | - ASN1_OBJECT *ret = NULL; |
552 | | - |
553 | | - p = *pp; |
554 | | - inf = ASN1_get_object(&p, &len, &tag, &xclass, length); |
555 | | - if (inf & 0x80) { |
556 | | - i = ASN1_R_BAD_OBJECT_HEADER; |
557 | | - goto err; |
558 | | - } |
559 | | - |
560 | | - if (tag != V_ASN1_OBJECT) { |
561 | | - i = ASN1_R_EXPECTING_AN_OBJECT; |
562 | | - goto err; |
563 | | - } |
564 | | - ret = c2i_ASN1_OBJECT(a, &p, len); |
565 | | - if (ret) |
566 | | - *pp = p; |
567 | | - return ret; |
568 | | - |
569 | | - err: |
570 | | - ASN1error(i); |
571 | | - return (NULL); |
572 | | -} |
573 | | - |
574 | 522 | ASN1_OBJECT * |
575 | 523 | c2i_ASN1_OBJECT(ASN1_OBJECT **a, const unsigned char **pp, long len) |
576 | 524 | { |
@@ -646,3 +594,55 @@ c2i_ASN1_OBJECT(ASN1_OBJECT **a, const unsigned char **pp, long len) |
646 | 594 | ASN1_OBJECT_free(ret); |
647 | 595 | return (NULL); |
648 | 596 | } |
| 597 | + |
| 598 | +int |
| 599 | +i2d_ASN1_OBJECT(const ASN1_OBJECT *a, unsigned char **pp) |
| 600 | +{ |
| 601 | + unsigned char *p; |
| 602 | + int objsize; |
| 603 | + |
| 604 | + if ((a == NULL) || (a->data == NULL)) |
| 605 | + return (0); |
| 606 | + |
| 607 | + objsize = ASN1_object_size(0, a->length, V_ASN1_OBJECT); |
| 608 | + if (pp == NULL) |
| 609 | + return objsize; |
| 610 | + |
| 611 | + p = *pp; |
| 612 | + ASN1_put_object(&p, 0, a->length, V_ASN1_OBJECT, V_ASN1_UNIVERSAL); |
| 613 | + memcpy(p, a->data, a->length); |
| 614 | + p += a->length; |
| 615 | + |
| 616 | + *pp = p; |
| 617 | + return (objsize); |
| 618 | +} |
| 619 | + |
| 620 | +ASN1_OBJECT * |
| 621 | +d2i_ASN1_OBJECT(ASN1_OBJECT **a, const unsigned char **pp, long length) |
| 622 | +{ |
| 623 | + const unsigned char *p; |
| 624 | + long len; |
| 625 | + int tag, xclass; |
| 626 | + int inf, i; |
| 627 | + ASN1_OBJECT *ret = NULL; |
| 628 | + |
| 629 | + p = *pp; |
| 630 | + inf = ASN1_get_object(&p, &len, &tag, &xclass, length); |
| 631 | + if (inf & 0x80) { |
| 632 | + i = ASN1_R_BAD_OBJECT_HEADER; |
| 633 | + goto err; |
| 634 | + } |
| 635 | + |
| 636 | + if (tag != V_ASN1_OBJECT) { |
| 637 | + i = ASN1_R_EXPECTING_AN_OBJECT; |
| 638 | + goto err; |
| 639 | + } |
| 640 | + ret = c2i_ASN1_OBJECT(a, &p, len); |
| 641 | + if (ret) |
| 642 | + *pp = p; |
| 643 | + return ret; |
| 644 | + |
| 645 | + err: |
| 646 | + ASN1error(i); |
| 647 | + return (NULL); |
| 648 | +} |
0 commit comments