diff options
Diffstat (limited to 'src/lib/libssl/ssl_asn1.c')
-rw-r--r-- | src/lib/libssl/ssl_asn1.c | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/src/lib/libssl/ssl_asn1.c b/src/lib/libssl/ssl_asn1.c index d7f4c6087e..38540be1e5 100644 --- a/src/lib/libssl/ssl_asn1.c +++ b/src/lib/libssl/ssl_asn1.c | |||
@@ -114,6 +114,9 @@ typedef struct ssl_session_asn1_st | |||
114 | ASN1_OCTET_STRING psk_identity_hint; | 114 | ASN1_OCTET_STRING psk_identity_hint; |
115 | ASN1_OCTET_STRING psk_identity; | 115 | ASN1_OCTET_STRING psk_identity; |
116 | #endif /* OPENSSL_NO_PSK */ | 116 | #endif /* OPENSSL_NO_PSK */ |
117 | #ifndef OPENSSL_NO_SRP | ||
118 | ASN1_OCTET_STRING srp_username; | ||
119 | #endif /* OPENSSL_NO_SRP */ | ||
117 | } SSL_SESSION_ASN1; | 120 | } SSL_SESSION_ASN1; |
118 | 121 | ||
119 | int i2d_SSL_SESSION(SSL_SESSION *in, unsigned char **pp) | 122 | int i2d_SSL_SESSION(SSL_SESSION *in, unsigned char **pp) |
@@ -130,6 +133,9 @@ int i2d_SSL_SESSION(SSL_SESSION *in, unsigned char **pp) | |||
130 | unsigned char cbuf; | 133 | unsigned char cbuf; |
131 | int v11=0; | 134 | int v11=0; |
132 | #endif | 135 | #endif |
136 | #ifndef OPENSSL_NO_SRP | ||
137 | int v12=0; | ||
138 | #endif | ||
133 | long l; | 139 | long l; |
134 | SSL_SESSION_ASN1 a; | 140 | SSL_SESSION_ASN1 a; |
135 | M_ASN1_I2D_vars(in); | 141 | M_ASN1_I2D_vars(in); |
@@ -267,6 +273,14 @@ int i2d_SSL_SESSION(SSL_SESSION *in, unsigned char **pp) | |||
267 | a.psk_identity.data=(unsigned char *)(in->psk_identity); | 273 | a.psk_identity.data=(unsigned char *)(in->psk_identity); |
268 | } | 274 | } |
269 | #endif /* OPENSSL_NO_PSK */ | 275 | #endif /* OPENSSL_NO_PSK */ |
276 | #ifndef OPENSSL_NO_SRP | ||
277 | if (in->srp_username) | ||
278 | { | ||
279 | a.srp_username.length=strlen(in->srp_username); | ||
280 | a.srp_username.type=V_ASN1_OCTET_STRING; | ||
281 | a.srp_username.data=(unsigned char *)(in->srp_username); | ||
282 | } | ||
283 | #endif /* OPENSSL_NO_SRP */ | ||
270 | 284 | ||
271 | M_ASN1_I2D_len(&(a.version), i2d_ASN1_INTEGER); | 285 | M_ASN1_I2D_len(&(a.version), i2d_ASN1_INTEGER); |
272 | M_ASN1_I2D_len(&(a.ssl_version), i2d_ASN1_INTEGER); | 286 | M_ASN1_I2D_len(&(a.ssl_version), i2d_ASN1_INTEGER); |
@@ -307,6 +321,10 @@ int i2d_SSL_SESSION(SSL_SESSION *in, unsigned char **pp) | |||
307 | if (in->psk_identity) | 321 | if (in->psk_identity) |
308 | M_ASN1_I2D_len_EXP_opt(&(a.psk_identity), i2d_ASN1_OCTET_STRING,8,v8); | 322 | M_ASN1_I2D_len_EXP_opt(&(a.psk_identity), i2d_ASN1_OCTET_STRING,8,v8); |
309 | #endif /* OPENSSL_NO_PSK */ | 323 | #endif /* OPENSSL_NO_PSK */ |
324 | #ifndef OPENSSL_NO_SRP | ||
325 | if (in->srp_username) | ||
326 | M_ASN1_I2D_len_EXP_opt(&(a.srp_username), i2d_ASN1_OCTET_STRING,12,v12); | ||
327 | #endif /* OPENSSL_NO_SRP */ | ||
310 | 328 | ||
311 | M_ASN1_I2D_seq_total(); | 329 | M_ASN1_I2D_seq_total(); |
312 | 330 | ||
@@ -351,6 +369,10 @@ int i2d_SSL_SESSION(SSL_SESSION *in, unsigned char **pp) | |||
351 | if (in->compress_meth) | 369 | if (in->compress_meth) |
352 | M_ASN1_I2D_put_EXP_opt(&(a.comp_id), i2d_ASN1_OCTET_STRING,11,v11); | 370 | M_ASN1_I2D_put_EXP_opt(&(a.comp_id), i2d_ASN1_OCTET_STRING,11,v11); |
353 | #endif | 371 | #endif |
372 | #ifndef OPENSSL_NO_SRP | ||
373 | if (in->srp_username) | ||
374 | M_ASN1_I2D_put_EXP_opt(&(a.srp_username), i2d_ASN1_OCTET_STRING,12,v12); | ||
375 | #endif /* OPENSSL_NO_SRP */ | ||
354 | M_ASN1_I2D_finish(); | 376 | M_ASN1_I2D_finish(); |
355 | } | 377 | } |
356 | 378 | ||
@@ -549,6 +571,19 @@ SSL_SESSION *d2i_SSL_SESSION(SSL_SESSION **a, const unsigned char **pp, | |||
549 | } | 571 | } |
550 | else | 572 | else |
551 | ret->psk_identity_hint=NULL; | 573 | ret->psk_identity_hint=NULL; |
574 | |||
575 | os.length=0; | ||
576 | os.data=NULL; | ||
577 | M_ASN1_D2I_get_EXP_opt(osp,d2i_ASN1_OCTET_STRING,8); | ||
578 | if (os.data) | ||
579 | { | ||
580 | ret->psk_identity = BUF_strndup((char *)os.data, os.length); | ||
581 | OPENSSL_free(os.data); | ||
582 | os.data = NULL; | ||
583 | os.length = 0; | ||
584 | } | ||
585 | else | ||
586 | ret->psk_identity=NULL; | ||
552 | #endif /* OPENSSL_NO_PSK */ | 587 | #endif /* OPENSSL_NO_PSK */ |
553 | 588 | ||
554 | #ifndef OPENSSL_NO_TLSEXT | 589 | #ifndef OPENSSL_NO_TLSEXT |
@@ -588,5 +623,20 @@ SSL_SESSION *d2i_SSL_SESSION(SSL_SESSION **a, const unsigned char **pp, | |||
588 | } | 623 | } |
589 | #endif | 624 | #endif |
590 | 625 | ||
626 | #ifndef OPENSSL_NO_SRP | ||
627 | os.length=0; | ||
628 | os.data=NULL; | ||
629 | M_ASN1_D2I_get_EXP_opt(osp,d2i_ASN1_OCTET_STRING,12); | ||
630 | if (os.data) | ||
631 | { | ||
632 | ret->srp_username = BUF_strndup((char *)os.data, os.length); | ||
633 | OPENSSL_free(os.data); | ||
634 | os.data = NULL; | ||
635 | os.length = 0; | ||
636 | } | ||
637 | else | ||
638 | ret->srp_username=NULL; | ||
639 | #endif /* OPENSSL_NO_SRP */ | ||
640 | |||
591 | M_ASN1_D2I_Finish(a,SSL_SESSION_free,SSL_F_D2I_SSL_SESSION); | 641 | M_ASN1_D2I_Finish(a,SSL_SESSION_free,SSL_F_D2I_SSL_SESSION); |
592 | } | 642 | } |