diff options
Diffstat (limited to 'src/lib/libcrypto/asn1/asn_pack.c')
-rw-r--r-- | src/lib/libcrypto/asn1/asn_pack.c | 48 |
1 files changed, 47 insertions, 1 deletions
diff --git a/src/lib/libcrypto/asn1/asn_pack.c b/src/lib/libcrypto/asn1/asn_pack.c index bdf5f130b3..e6051db2dc 100644 --- a/src/lib/libcrypto/asn1/asn_pack.c +++ b/src/lib/libcrypto/asn1/asn_pack.c | |||
@@ -60,6 +60,8 @@ | |||
60 | #include "cryptlib.h" | 60 | #include "cryptlib.h" |
61 | #include <openssl/asn1.h> | 61 | #include <openssl/asn1.h> |
62 | 62 | ||
63 | #ifndef NO_ASN1_OLD | ||
64 | |||
63 | /* ASN1 packing and unpacking functions */ | 65 | /* ASN1 packing and unpacking functions */ |
64 | 66 | ||
65 | /* Turn an ASN1 encoded SEQUENCE OF into a STACK of structures */ | 67 | /* Turn an ASN1 encoded SEQUENCE OF into a STACK of structures */ |
@@ -117,7 +119,7 @@ void *ASN1_unpack_string (ASN1_STRING *oct, char *(*d2i)()) | |||
117 | 119 | ||
118 | /* Pack an ASN1 object into an ASN1_STRING */ | 120 | /* Pack an ASN1 object into an ASN1_STRING */ |
119 | 121 | ||
120 | ASN1_STRING *ASN1_pack_string (void *obj, int (*i2d)(), ASN1_STRING **oct) | 122 | ASN1_STRING *ASN1_pack_string(void *obj, int (*i2d)(), ASN1_STRING **oct) |
121 | { | 123 | { |
122 | unsigned char *p; | 124 | unsigned char *p; |
123 | ASN1_STRING *octmp; | 125 | ASN1_STRING *octmp; |
@@ -143,3 +145,47 @@ ASN1_STRING *ASN1_pack_string (void *obj, int (*i2d)(), ASN1_STRING **oct) | |||
143 | return octmp; | 145 | return octmp; |
144 | } | 146 | } |
145 | 147 | ||
148 | #endif | ||
149 | |||
150 | /* ASN1_ITEM versions of the above */ | ||
151 | |||
152 | ASN1_STRING *ASN1_item_pack(void *obj, const ASN1_ITEM *it, ASN1_STRING **oct) | ||
153 | { | ||
154 | ASN1_STRING *octmp; | ||
155 | |||
156 | if (!oct || !*oct) { | ||
157 | if (!(octmp = ASN1_STRING_new ())) { | ||
158 | ASN1err(ASN1_F_ASN1_PACK_STRING,ERR_R_MALLOC_FAILURE); | ||
159 | return NULL; | ||
160 | } | ||
161 | if (oct) *oct = octmp; | ||
162 | } else octmp = *oct; | ||
163 | |||
164 | if(octmp->data) { | ||
165 | OPENSSL_free(octmp->data); | ||
166 | octmp->data = NULL; | ||
167 | } | ||
168 | |||
169 | if (!(octmp->length = ASN1_item_i2d(obj, &octmp->data, it))) { | ||
170 | ASN1err(ASN1_F_ASN1_PACK_STRING,ASN1_R_ENCODE_ERROR); | ||
171 | return NULL; | ||
172 | } | ||
173 | if (!octmp->data) { | ||
174 | ASN1err(ASN1_F_ASN1_PACK_STRING,ERR_R_MALLOC_FAILURE); | ||
175 | return NULL; | ||
176 | } | ||
177 | return octmp; | ||
178 | } | ||
179 | |||
180 | /* Extract an ASN1 object from an ASN1_STRING */ | ||
181 | |||
182 | void *ASN1_item_unpack(ASN1_STRING *oct, const ASN1_ITEM *it) | ||
183 | { | ||
184 | unsigned char *p; | ||
185 | void *ret; | ||
186 | |||
187 | p = oct->data; | ||
188 | if(!(ret = ASN1_item_d2i(NULL, &p, oct->length, it))) | ||
189 | ASN1err(ASN1_F_ASN1_UNPACK_STRING,ASN1_R_DECODE_ERROR); | ||
190 | return ret; | ||
191 | } | ||