diff options
Diffstat (limited to 'src/lib/libssl/ssl_asn1.c')
-rw-r--r-- | src/lib/libssl/ssl_asn1.c | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/src/lib/libssl/ssl_asn1.c b/src/lib/libssl/ssl_asn1.c index b1a3876c91..28e295f6a4 100644 --- a/src/lib/libssl/ssl_asn1.c +++ b/src/lib/libssl/ssl_asn1.c | |||
@@ -113,6 +113,9 @@ typedef struct ssl_session_asn1_st { | |||
113 | ASN1_OCTET_STRING psk_identity_hint; | 113 | ASN1_OCTET_STRING psk_identity_hint; |
114 | ASN1_OCTET_STRING psk_identity; | 114 | ASN1_OCTET_STRING psk_identity; |
115 | #endif /* OPENSSL_NO_PSK */ | 115 | #endif /* OPENSSL_NO_PSK */ |
116 | #ifndef OPENSSL_NO_SRP | ||
117 | ASN1_OCTET_STRING srp_username; | ||
118 | #endif /* OPENSSL_NO_SRP */ | ||
116 | } SSL_SESSION_ASN1; | 119 | } SSL_SESSION_ASN1; |
117 | 120 | ||
118 | int | 121 | int |
@@ -130,6 +133,9 @@ 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); |
@@ -247,6 +253,13 @@ i2d_SSL_SESSION(SSL_SESSION *in, unsigned char **pp) | |||
247 | a.psk_identity.data = (unsigned char *)(in->psk_identity); | 253 | a.psk_identity.data = (unsigned char *)(in->psk_identity); |
248 | } | 254 | } |
249 | #endif /* OPENSSL_NO_PSK */ | 255 | #endif /* OPENSSL_NO_PSK */ |
256 | #ifndef OPENSSL_NO_SRP | ||
257 | if (in->srp_username) { | ||
258 | a.srp_username.length = strlen(in->srp_username); | ||
259 | a.srp_username.type = V_ASN1_OCTET_STRING; | ||
260 | a.srp_username.data = (unsigned char *)(in->srp_username); | ||
261 | } | ||
262 | #endif /* OPENSSL_NO_SRP */ | ||
250 | 263 | ||
251 | M_ASN1_I2D_len(&(a.version), i2d_ASN1_INTEGER); | 264 | M_ASN1_I2D_len(&(a.version), i2d_ASN1_INTEGER); |
252 | M_ASN1_I2D_len(&(a.ssl_version), i2d_ASN1_INTEGER); | 265 | M_ASN1_I2D_len(&(a.ssl_version), i2d_ASN1_INTEGER); |
@@ -287,6 +300,10 @@ i2d_SSL_SESSION(SSL_SESSION *in, unsigned char **pp) | |||
287 | if (in->psk_identity) | 300 | if (in->psk_identity) |
288 | M_ASN1_I2D_len_EXP_opt(&(a.psk_identity), i2d_ASN1_OCTET_STRING, 8, v8); | 301 | M_ASN1_I2D_len_EXP_opt(&(a.psk_identity), i2d_ASN1_OCTET_STRING, 8, v8); |
289 | #endif /* OPENSSL_NO_PSK */ | 302 | #endif /* OPENSSL_NO_PSK */ |
303 | #ifndef OPENSSL_NO_SRP | ||
304 | if (in->srp_username) | ||
305 | M_ASN1_I2D_len_EXP_opt(&(a.srp_username), i2d_ASN1_OCTET_STRING, 12, v12); | ||
306 | #endif /* OPENSSL_NO_SRP */ | ||
290 | 307 | ||
291 | M_ASN1_I2D_seq_total(); | 308 | M_ASN1_I2D_seq_total(); |
292 | 309 | ||
@@ -331,6 +348,10 @@ i2d_SSL_SESSION(SSL_SESSION *in, unsigned char **pp) | |||
331 | if (in->compress_meth) | 348 | if (in->compress_meth) |
332 | M_ASN1_I2D_put_EXP_opt(&(a.comp_id), i2d_ASN1_OCTET_STRING, 11, v11); | 349 | M_ASN1_I2D_put_EXP_opt(&(a.comp_id), i2d_ASN1_OCTET_STRING, 11, v11); |
333 | #endif | 350 | #endif |
351 | #ifndef OPENSSL_NO_SRP | ||
352 | if (in->srp_username) | ||
353 | M_ASN1_I2D_put_EXP_opt(&(a.srp_username), i2d_ASN1_OCTET_STRING, 12, v12); | ||
354 | #endif /* OPENSSL_NO_SRP */ | ||
334 | M_ASN1_I2D_finish(); | 355 | M_ASN1_I2D_finish(); |
335 | } | 356 | } |
336 | 357 | ||
@@ -559,6 +580,18 @@ long length) | |||
559 | } | 580 | } |
560 | #endif | 581 | #endif |
561 | 582 | ||
583 | #ifndef OPENSSL_NO_SRP | ||
584 | os.length = 0; | ||
585 | os.data = NULL; | ||
586 | M_ASN1_D2I_get_EXP_opt(osp, d2i_ASN1_OCTET_STRING, 12); | ||
587 | if (os.data) { | ||
588 | ret->srp_username = BUF_strndup((char *)os.data, os.length); | ||
589 | OPENSSL_free(os.data); | ||
590 | os.data = NULL; | ||
591 | os.length = 0; | ||
592 | } else | ||
593 | ret->srp_username = NULL; | ||
594 | #endif /* OPENSSL_NO_SRP */ | ||
562 | 595 | ||
563 | M_ASN1_D2I_Finish(a, SSL_SESSION_free, SSL_F_D2I_SSL_SESSION); | 596 | M_ASN1_D2I_Finish(a, SSL_SESSION_free, SSL_F_D2I_SSL_SESSION); |
564 | } | 597 | } |