diff options
| author | beck <> | 1999-09-29 04:37:45 +0000 |
|---|---|---|
| committer | beck <> | 1999-09-29 04:37:45 +0000 |
| commit | de8f24ea083384bb66b32ec105dc4743c5663cdf (patch) | |
| tree | 1412176ae62a3cab2cf2b0b92150fcbceaac6092 /src/lib/libssl/ssl_asn1.c | |
| parent | cb929d29896bcb87c2a97417fbd03e50078fc178 (diff) | |
| download | openbsd-de8f24ea083384bb66b32ec105dc4743c5663cdf.tar.gz openbsd-de8f24ea083384bb66b32ec105dc4743c5663cdf.tar.bz2 openbsd-de8f24ea083384bb66b32ec105dc4743c5663cdf.zip | |
OpenSSL 0.9.4 merge
Diffstat (limited to '')
| -rw-r--r-- | src/lib/libssl/ssl_asn1.c | 44 |
1 files changed, 29 insertions, 15 deletions
diff --git a/src/lib/libssl/ssl_asn1.c b/src/lib/libssl/ssl_asn1.c index 116a83de64..0f6a0884e4 100644 --- a/src/lib/libssl/ssl_asn1.c +++ b/src/lib/libssl/ssl_asn1.c | |||
| @@ -58,8 +58,8 @@ | |||
| 58 | 58 | ||
| 59 | #include <stdio.h> | 59 | #include <stdio.h> |
| 60 | #include <stdlib.h> | 60 | #include <stdlib.h> |
| 61 | #include "asn1_mac.h" | 61 | #include <openssl/asn1_mac.h> |
| 62 | #include "objects.h" | 62 | #include <openssl/objects.h> |
| 63 | #include "ssl_locl.h" | 63 | #include "ssl_locl.h" |
| 64 | 64 | ||
| 65 | typedef struct ssl_session_asn1_st | 65 | typedef struct ssl_session_asn1_st |
| @@ -69,22 +69,16 @@ typedef struct ssl_session_asn1_st | |||
| 69 | ASN1_OCTET_STRING cipher; | 69 | ASN1_OCTET_STRING cipher; |
| 70 | ASN1_OCTET_STRING master_key; | 70 | ASN1_OCTET_STRING master_key; |
| 71 | ASN1_OCTET_STRING session_id; | 71 | ASN1_OCTET_STRING session_id; |
| 72 | ASN1_OCTET_STRING session_id_context; | ||
| 72 | ASN1_OCTET_STRING key_arg; | 73 | ASN1_OCTET_STRING key_arg; |
| 73 | ASN1_INTEGER time; | 74 | ASN1_INTEGER time; |
| 74 | ASN1_INTEGER timeout; | 75 | ASN1_INTEGER timeout; |
| 75 | } SSL_SESSION_ASN1; | 76 | } SSL_SESSION_ASN1; |
| 76 | 77 | ||
| 77 | /* | 78 | int i2d_SSL_SESSION(SSL_SESSION *in, unsigned char **pp) |
| 78 | * SSLerr(SSL_F_I2D_SSL_SESSION,SSL_R_CIPHER_CODE_WRONG_LENGTH); | ||
| 79 | * SSLerr(SSL_F_D2I_SSL_SESSION,SSL_R_UNSUPPORTED_CIPHER); | ||
| 80 | */ | ||
| 81 | |||
| 82 | int i2d_SSL_SESSION(in,pp) | ||
| 83 | SSL_SESSION *in; | ||
| 84 | unsigned char **pp; | ||
| 85 | { | 79 | { |
| 86 | #define LSIZE2 (sizeof(long)*2) | 80 | #define LSIZE2 (sizeof(long)*2) |
| 87 | int v1=0,v2=0,v3=0; | 81 | int v1=0,v2=0,v3=0,v4=0; |
| 88 | unsigned char buf[4],ibuf1[LSIZE2],ibuf2[LSIZE2]; | 82 | unsigned char buf[4],ibuf1[LSIZE2],ibuf2[LSIZE2]; |
| 89 | unsigned char ibuf3[LSIZE2],ibuf4[LSIZE2]; | 83 | unsigned char ibuf3[LSIZE2],ibuf4[LSIZE2]; |
| 90 | long l; | 84 | long l; |
| @@ -138,6 +132,10 @@ unsigned char **pp; | |||
| 138 | a.session_id.type=V_ASN1_OCTET_STRING; | 132 | a.session_id.type=V_ASN1_OCTET_STRING; |
| 139 | a.session_id.data=in->session_id; | 133 | a.session_id.data=in->session_id; |
| 140 | 134 | ||
| 135 | a.session_id_context.length=in->sid_ctx_length; | ||
| 136 | a.session_id_context.type=V_ASN1_OCTET_STRING; | ||
| 137 | a.session_id_context.data=in->sid_ctx; | ||
| 138 | |||
| 141 | a.key_arg.length=in->key_arg_length; | 139 | a.key_arg.length=in->key_arg_length; |
| 142 | a.key_arg.type=V_ASN1_OCTET_STRING; | 140 | a.key_arg.type=V_ASN1_OCTET_STRING; |
| 143 | a.key_arg.data=in->key_arg; | 141 | a.key_arg.data=in->key_arg; |
| @@ -171,6 +169,7 @@ unsigned char **pp; | |||
| 171 | M_ASN1_I2D_len_EXP_opt(&(a.timeout),i2d_ASN1_INTEGER,2,v2); | 169 | M_ASN1_I2D_len_EXP_opt(&(a.timeout),i2d_ASN1_INTEGER,2,v2); |
| 172 | if (in->peer != NULL) | 170 | if (in->peer != NULL) |
| 173 | M_ASN1_I2D_len_EXP_opt(in->peer,i2d_X509,3,v3); | 171 | M_ASN1_I2D_len_EXP_opt(in->peer,i2d_X509,3,v3); |
| 172 | M_ASN1_I2D_len_EXP_opt(&a.session_id_context,i2d_ASN1_OCTET_STRING,4,v4); | ||
| 174 | 173 | ||
| 175 | M_ASN1_I2D_seq_total(); | 174 | M_ASN1_I2D_seq_total(); |
| 176 | 175 | ||
| @@ -187,14 +186,14 @@ unsigned char **pp; | |||
| 187 | M_ASN1_I2D_put_EXP_opt(&(a.timeout),i2d_ASN1_INTEGER,2,v2); | 186 | M_ASN1_I2D_put_EXP_opt(&(a.timeout),i2d_ASN1_INTEGER,2,v2); |
| 188 | if (in->peer != NULL) | 187 | if (in->peer != NULL) |
| 189 | M_ASN1_I2D_put_EXP_opt(in->peer,i2d_X509,3,v3); | 188 | M_ASN1_I2D_put_EXP_opt(in->peer,i2d_X509,3,v3); |
| 189 | M_ASN1_I2D_put_EXP_opt(&a.session_id_context,i2d_ASN1_OCTET_STRING,4, | ||
| 190 | v4); | ||
| 190 | 191 | ||
| 191 | M_ASN1_I2D_finish(); | 192 | M_ASN1_I2D_finish(); |
| 192 | } | 193 | } |
| 193 | 194 | ||
| 194 | SSL_SESSION *d2i_SSL_SESSION(a,pp,length) | 195 | SSL_SESSION *d2i_SSL_SESSION(SSL_SESSION **a, unsigned char **pp, |
| 195 | SSL_SESSION **a; | 196 | long length) |
| 196 | unsigned char **pp; | ||
| 197 | long length; | ||
| 198 | { | 197 | { |
| 199 | int version,ssl_version=0,i; | 198 | int version,ssl_version=0,i; |
| 200 | long id; | 199 | long id; |
| @@ -308,6 +307,21 @@ long length; | |||
| 308 | } | 307 | } |
| 309 | M_ASN1_D2I_get_EXP_opt(ret->peer,d2i_X509,3); | 308 | M_ASN1_D2I_get_EXP_opt(ret->peer,d2i_X509,3); |
| 310 | 309 | ||
| 310 | os.length=0; | ||
| 311 | os.data=NULL; | ||
| 312 | M_ASN1_D2I_get_EXP_opt(osp,d2i_ASN1_OCTET_STRING,4); | ||
| 313 | |||
| 314 | if(os.data != NULL) | ||
| 315 | { | ||
| 316 | if (os.length > SSL_MAX_SID_CTX_LENGTH) | ||
| 317 | SSLerr(SSL_F_D2I_SSL_SESSION,SSL_R_BAD_LENGTH); | ||
| 318 | ret->sid_ctx_length=os.length; | ||
| 319 | memcpy(ret->sid_ctx,os.data,os.length); | ||
| 320 | Free(os.data); os.data=NULL; os.length=0; | ||
| 321 | } | ||
| 322 | else | ||
| 323 | ret->sid_ctx_length=0; | ||
| 324 | |||
| 311 | M_ASN1_D2I_Finish(a,SSL_SESSION_free,SSL_F_D2I_SSL_SESSION); | 325 | M_ASN1_D2I_Finish(a,SSL_SESSION_free,SSL_F_D2I_SSL_SESSION); |
| 312 | } | 326 | } |
| 313 | 327 | ||
