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.c44
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
65typedef struct ssl_session_asn1_st 65typedef 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/* 78int 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
82int i2d_SSL_SESSION(in,pp)
83SSL_SESSION *in;
84unsigned 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
194SSL_SESSION *d2i_SSL_SESSION(a,pp,length) 195SSL_SESSION *d2i_SSL_SESSION(SSL_SESSION **a, unsigned char **pp,
195SSL_SESSION **a; 196 long length)
196unsigned char **pp;
197long 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