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 | } |
