summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/asn1/asn_pack.c
diff options
context:
space:
mode:
authorjsing <>2018-10-24 17:57:22 +0000
committerjsing <>2018-10-24 17:57:22 +0000
commit4110681dbe8efbf5d13eeff4afa956673068e8fd (patch)
treec4bde435c9466178df1c42e0747e9ccbe096ea27 /src/lib/libcrypto/asn1/asn_pack.c
parente8a59701f7438ac9a23dda80591f6a625f5d6054 (diff)
downloadopenbsd-4110681dbe8efbf5d13eeff4afa956673068e8fd.tar.gz
openbsd-4110681dbe8efbf5d13eeff4afa956673068e8fd.tar.bz2
openbsd-4110681dbe8efbf5d13eeff4afa956673068e8fd.zip
Remove a bunch of ancient and highly crufty ASN.1 related code from
libcrypto (the "new" stuff replaced this back around 2000 or so...). ok tb@
Diffstat (limited to 'src/lib/libcrypto/asn1/asn_pack.c')
-rw-r--r--src/lib/libcrypto/asn1/asn_pack.c112
1 files changed, 3 insertions, 109 deletions
diff --git a/src/lib/libcrypto/asn1/asn_pack.c b/src/lib/libcrypto/asn1/asn_pack.c
index 1a5420e42b..090beff0f0 100644
--- a/src/lib/libcrypto/asn1/asn_pack.c
+++ b/src/lib/libcrypto/asn1/asn_pack.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: asn_pack.c,v 1.17 2018/04/25 11:48:21 tb Exp $ */ 1/* $OpenBSD: asn_pack.c,v 1.18 2018/10/24 17:57:22 jsing Exp $ */
2/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL 2/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
3 * project 1999. 3 * project 1999.
4 */ 4 */
@@ -61,112 +61,7 @@
61#include <openssl/asn1.h> 61#include <openssl/asn1.h>
62#include <openssl/err.h> 62#include <openssl/err.h>
63 63
64#ifndef NO_ASN1_OLD 64/* Pack an ASN1 object into an ASN1_STRING. */
65
66/* ASN1 packing and unpacking functions */
67
68/* Turn an ASN1 encoded SEQUENCE OF into a STACK of structures */
69
70STACK_OF(OPENSSL_BLOCK) *
71ASN1_seq_unpack(const unsigned char *buf, int len, d2i_of_void *d2i,
72 void (*free_func)(OPENSSL_BLOCK))
73{
74 STACK_OF(OPENSSL_BLOCK) *sk;
75 const unsigned char *pbuf;
76
77 pbuf = buf;
78 if (!(sk = d2i_ASN1_SET(NULL, &pbuf, len, d2i, free_func,
79 V_ASN1_SEQUENCE, V_ASN1_UNIVERSAL)))
80 ASN1error(ASN1_R_DECODE_ERROR);
81 return sk;
82}
83
84/* Turn a STACK structures into an ASN1 encoded SEQUENCE OF structure in a
85 * OPENSSL_malloc'ed buffer
86 */
87
88unsigned char *
89ASN1_seq_pack(STACK_OF(OPENSSL_BLOCK) *safes, i2d_of_void *i2d,
90 unsigned char **buf, int *len)
91{
92 int safelen;
93 unsigned char *safe, *p;
94
95 if (!(safelen = i2d_ASN1_SET(safes, NULL, i2d, V_ASN1_SEQUENCE,
96 V_ASN1_UNIVERSAL, IS_SEQUENCE))) {
97 ASN1error(ASN1_R_ENCODE_ERROR);
98 return NULL;
99 }
100 if (!(safe = malloc(safelen))) {
101 ASN1error(ERR_R_MALLOC_FAILURE);
102 return NULL;
103 }
104 p = safe;
105 i2d_ASN1_SET(safes, &p, i2d, V_ASN1_SEQUENCE, V_ASN1_UNIVERSAL,
106 IS_SEQUENCE);
107 if (len)
108 *len = safelen;
109 if (buf)
110 *buf = safe;
111 return safe;
112}
113
114/* Extract an ASN1 object from an ASN1_STRING */
115
116void *
117ASN1_unpack_string(ASN1_STRING *oct, d2i_of_void *d2i)
118{
119 const unsigned char *p;
120 char *ret;
121
122 p = oct->data;
123 if (!(ret = d2i(NULL, &p, oct->length)))
124 ASN1error(ASN1_R_DECODE_ERROR);
125 return ret;
126}
127
128/* Pack an ASN1 object into an ASN1_STRING */
129
130ASN1_STRING *
131ASN1_pack_string(void *obj, i2d_of_void *i2d, ASN1_STRING **oct)
132{
133 unsigned char *p;
134 ASN1_STRING *octmp;
135
136 if (!oct || !*oct) {
137 if (!(octmp = ASN1_STRING_new())) {
138 ASN1error(ERR_R_MALLOC_FAILURE);
139 return NULL;
140 }
141 } else
142 octmp = *oct;
143
144 if (!(octmp->length = i2d(obj, NULL))) {
145 ASN1error(ASN1_R_ENCODE_ERROR);
146 goto err;
147 }
148 if (!(p = malloc (octmp->length))) {
149 ASN1error(ERR_R_MALLOC_FAILURE);
150 goto err;
151 }
152 octmp->data = p;
153 i2d (obj, &p);
154 if (oct)
155 *oct = octmp;
156 return octmp;
157err:
158 if (!oct || octmp != *oct) {
159 ASN1_STRING_free(octmp);
160 if (oct)
161 *oct = NULL;
162 }
163 return NULL;
164}
165
166#endif
167
168/* ASN1_ITEM versions of the above */
169
170ASN1_STRING * 65ASN1_STRING *
171ASN1_item_pack(void *obj, const ASN1_ITEM *it, ASN1_STRING **oct) 66ASN1_item_pack(void *obj, const ASN1_ITEM *it, ASN1_STRING **oct)
172{ 67{
@@ -200,8 +95,7 @@ err:
200 return NULL; 95 return NULL;
201} 96}
202 97
203/* Extract an ASN1 object from an ASN1_STRING */ 98/* Extract an ASN1 object from an ASN1_STRING. */
204
205void * 99void *
206ASN1_item_unpack(const ASN1_STRING *oct, const ASN1_ITEM *it) 100ASN1_item_unpack(const ASN1_STRING *oct, const ASN1_ITEM *it)
207{ 101{