diff options
| author | beck <> | 2000-12-15 02:58:47 +0000 |
|---|---|---|
| committer | beck <> | 2000-12-15 02:58:47 +0000 |
| commit | 9200bb13d15da4b2a23e6bc92c20e95b74aa2113 (patch) | |
| tree | 5c52d628ec1e34be76e7ef2a4235d248b7c44d24 /src/lib/libcrypto/asn1/x_req.c | |
| parent | e131d25072e3d4197ba4b9bcc0d1b27d34d6488d (diff) | |
| download | openbsd-9200bb13d15da4b2a23e6bc92c20e95b74aa2113.tar.gz openbsd-9200bb13d15da4b2a23e6bc92c20e95b74aa2113.tar.bz2 openbsd-9200bb13d15da4b2a23e6bc92c20e95b74aa2113.zip | |
openssl-engine-0.9.6 merge
Diffstat (limited to 'src/lib/libcrypto/asn1/x_req.c')
| -rw-r--r-- | src/lib/libcrypto/asn1/x_req.c | 25 |
1 files changed, 23 insertions, 2 deletions
diff --git a/src/lib/libcrypto/asn1/x_req.c b/src/lib/libcrypto/asn1/x_req.c index 0cd572ee73..6dddd4f653 100644 --- a/src/lib/libcrypto/asn1/x_req.c +++ b/src/lib/libcrypto/asn1/x_req.c | |||
| @@ -65,6 +65,14 @@ int i2d_X509_REQ_INFO(X509_REQ_INFO *a, unsigned char **pp) | |||
| 65 | { | 65 | { |
| 66 | M_ASN1_I2D_vars(a); | 66 | M_ASN1_I2D_vars(a); |
| 67 | 67 | ||
| 68 | if(a->asn1) { | ||
| 69 | if(pp) { | ||
| 70 | memcpy(*pp, a->asn1, a->length); | ||
| 71 | *pp += a->length; | ||
| 72 | } | ||
| 73 | return a->length; | ||
| 74 | } | ||
| 75 | |||
| 68 | M_ASN1_I2D_len(a->version, i2d_ASN1_INTEGER); | 76 | M_ASN1_I2D_len(a->version, i2d_ASN1_INTEGER); |
| 69 | M_ASN1_I2D_len(a->subject, i2d_X509_NAME); | 77 | M_ASN1_I2D_len(a->subject, i2d_X509_NAME); |
| 70 | M_ASN1_I2D_len(a->pubkey, i2d_X509_PUBKEY); | 78 | M_ASN1_I2D_len(a->pubkey, i2d_X509_PUBKEY); |
| @@ -152,6 +160,7 @@ X509_REQ_INFO *X509_REQ_INFO_new(void) | |||
| 152 | M_ASN1_New(ret->pubkey,X509_PUBKEY_new); | 160 | M_ASN1_New(ret->pubkey,X509_PUBKEY_new); |
| 153 | M_ASN1_New(ret->attributes,sk_X509_ATTRIBUTE_new_null); | 161 | M_ASN1_New(ret->attributes,sk_X509_ATTRIBUTE_new_null); |
| 154 | ret->req_kludge=0; | 162 | ret->req_kludge=0; |
| 163 | ret->asn1 = NULL; | ||
| 155 | return(ret); | 164 | return(ret); |
| 156 | M_ASN1_New_Error(ASN1_F_X509_REQ_INFO_NEW); | 165 | M_ASN1_New_Error(ASN1_F_X509_REQ_INFO_NEW); |
| 157 | } | 166 | } |
| @@ -159,11 +168,12 @@ X509_REQ_INFO *X509_REQ_INFO_new(void) | |||
| 159 | void X509_REQ_INFO_free(X509_REQ_INFO *a) | 168 | void X509_REQ_INFO_free(X509_REQ_INFO *a) |
| 160 | { | 169 | { |
| 161 | if (a == NULL) return; | 170 | if (a == NULL) return; |
| 171 | if(a->asn1) OPENSSL_free(a->asn1); | ||
| 162 | M_ASN1_INTEGER_free(a->version); | 172 | M_ASN1_INTEGER_free(a->version); |
| 163 | X509_NAME_free(a->subject); | 173 | X509_NAME_free(a->subject); |
| 164 | X509_PUBKEY_free(a->pubkey); | 174 | X509_PUBKEY_free(a->pubkey); |
| 165 | sk_X509_ATTRIBUTE_pop_free(a->attributes,X509_ATTRIBUTE_free); | 175 | sk_X509_ATTRIBUTE_pop_free(a->attributes,X509_ATTRIBUTE_free); |
| 166 | Free(a); | 176 | OPENSSL_free(a); |
| 167 | } | 177 | } |
| 168 | 178 | ||
| 169 | int i2d_X509_REQ(X509_REQ *a, unsigned char **pp) | 179 | int i2d_X509_REQ(X509_REQ *a, unsigned char **pp) |
| @@ -189,6 +199,17 @@ X509_REQ *d2i_X509_REQ(X509_REQ **a, unsigned char **pp, long length) | |||
| 189 | M_ASN1_D2I_Init(); | 199 | M_ASN1_D2I_Init(); |
| 190 | M_ASN1_D2I_start_sequence(); | 200 | M_ASN1_D2I_start_sequence(); |
| 191 | M_ASN1_D2I_get(ret->req_info,d2i_X509_REQ_INFO); | 201 | M_ASN1_D2I_get(ret->req_info,d2i_X509_REQ_INFO); |
| 202 | |||
| 203 | /* Keep a copy of the original encoding for signature checking */ | ||
| 204 | ret->req_info->length = c.p - c.q; | ||
| 205 | if(!(ret->req_info->asn1 = OPENSSL_malloc(ret->req_info->length))) { | ||
| 206 | c.line=__LINE__; | ||
| 207 | c.error = ERR_R_MALLOC_FAILURE; | ||
| 208 | goto err; | ||
| 209 | } | ||
| 210 | |||
| 211 | memcpy(ret->req_info->asn1, c.q, ret->req_info->length); | ||
| 212 | |||
| 192 | M_ASN1_D2I_get(ret->sig_alg,d2i_X509_ALGOR); | 213 | M_ASN1_D2I_get(ret->sig_alg,d2i_X509_ALGOR); |
| 193 | M_ASN1_D2I_get(ret->signature,d2i_ASN1_BIT_STRING); | 214 | M_ASN1_D2I_get(ret->signature,d2i_ASN1_BIT_STRING); |
| 194 | M_ASN1_D2I_Finish(a,X509_REQ_free,ASN1_F_D2I_X509_REQ); | 215 | M_ASN1_D2I_Finish(a,X509_REQ_free,ASN1_F_D2I_X509_REQ); |
| @@ -230,7 +251,7 @@ void X509_REQ_free(X509_REQ *a) | |||
| 230 | X509_REQ_INFO_free(a->req_info); | 251 | X509_REQ_INFO_free(a->req_info); |
| 231 | X509_ALGOR_free(a->sig_alg); | 252 | X509_ALGOR_free(a->sig_alg); |
| 232 | M_ASN1_BIT_STRING_free(a->signature); | 253 | M_ASN1_BIT_STRING_free(a->signature); |
| 233 | Free(a); | 254 | OPENSSL_free(a); |
| 234 | } | 255 | } |
| 235 | 256 | ||
| 236 | 257 | ||
