summaryrefslogtreecommitdiff
path: root/src/lib/libssl/ssl_asn1.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libssl/ssl_asn1.c')
-rw-r--r--src/lib/libssl/ssl_asn1.c33
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
118int 121int
@@ -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}