summaryrefslogtreecommitdiff
path: root/src/lib/libssl/ssl_asn1.c
diff options
context:
space:
mode:
authorbeck <>2000-03-19 11:13:58 +0000
committerbeck <>2000-03-19 11:13:58 +0000
commit796d609550df3a33fc11468741c5d2f6d3df4c11 (patch)
tree6c6d539061caa20372dad0ac4ddb1dfae2fbe7fe /src/lib/libssl/ssl_asn1.c
parent5be3114c1fd7e0dfea1e38d3abb4cbba75244419 (diff)
downloadopenbsd-796d609550df3a33fc11468741c5d2f6d3df4c11.tar.gz
openbsd-796d609550df3a33fc11468741c5d2f6d3df4c11.tar.bz2
openbsd-796d609550df3a33fc11468741c5d2f6d3df4c11.zip
OpenSSL 0.9.5 merge
*warning* this bumps shared lib minors for libssl and libcrypto from 2.1 to 2.2 if you are using the ssl26 packages for ssh and other things to work you will need to get new ones (see ~beck/libsslsnap/<arch>) on cvs or ~beck/src-patent.tar.gz on cvs
Diffstat (limited to 'src/lib/libssl/ssl_asn1.c')
-rw-r--r--src/lib/libssl/ssl_asn1.c32
1 files changed, 27 insertions, 5 deletions
diff --git a/src/lib/libssl/ssl_asn1.c b/src/lib/libssl/ssl_asn1.c
index 0f6a0884e4..e77cdddfd3 100644
--- a/src/lib/libssl/ssl_asn1.c
+++ b/src/lib/libssl/ssl_asn1.c
@@ -60,6 +60,7 @@
60#include <stdlib.h> 60#include <stdlib.h>
61#include <openssl/asn1_mac.h> 61#include <openssl/asn1_mac.h>
62#include <openssl/objects.h> 62#include <openssl/objects.h>
63#include <openssl/x509.h>
63#include "ssl_locl.h" 64#include "ssl_locl.h"
64 65
65typedef struct ssl_session_asn1_st 66typedef struct ssl_session_asn1_st
@@ -73,14 +74,15 @@ typedef struct ssl_session_asn1_st
73 ASN1_OCTET_STRING key_arg; 74 ASN1_OCTET_STRING key_arg;
74 ASN1_INTEGER time; 75 ASN1_INTEGER time;
75 ASN1_INTEGER timeout; 76 ASN1_INTEGER timeout;
77 ASN1_INTEGER verify_result;
76 } SSL_SESSION_ASN1; 78 } SSL_SESSION_ASN1;
77 79
78int i2d_SSL_SESSION(SSL_SESSION *in, unsigned char **pp) 80int i2d_SSL_SESSION(SSL_SESSION *in, unsigned char **pp)
79 { 81 {
80#define LSIZE2 (sizeof(long)*2) 82#define LSIZE2 (sizeof(long)*2)
81 int v1=0,v2=0,v3=0,v4=0; 83 int v1=0,v2=0,v3=0,v4=0,v5=0;
82 unsigned char buf[4],ibuf1[LSIZE2],ibuf2[LSIZE2]; 84 unsigned char buf[4],ibuf1[LSIZE2],ibuf2[LSIZE2];
83 unsigned char ibuf3[LSIZE2],ibuf4[LSIZE2]; 85 unsigned char ibuf3[LSIZE2],ibuf4[LSIZE2],ibuf5[LSIZE2];
84 long l; 86 long l;
85 SSL_SESSION_ASN1 a; 87 SSL_SESSION_ASN1 a;
86 M_ASN1_I2D_vars(in); 88 M_ASN1_I2D_vars(in);
@@ -89,7 +91,7 @@ int i2d_SSL_SESSION(SSL_SESSION *in, unsigned char **pp)
89 return(0); 91 return(0);
90 92
91 /* Note that I cheat in the following 2 assignments. I know 93 /* Note that I cheat in the following 2 assignments. I know
92 * that if the ASN1_INTERGER passed to ASN1_INTEGER_set 94 * that if the ASN1_INTEGER passed to ASN1_INTEGER_set
93 * is > sizeof(long)+1, the buffer will not be re-Malloc()ed. 95 * is > sizeof(long)+1, the buffer will not be re-Malloc()ed.
94 * This is a bit evil but makes things simple, no dynamic allocation 96 * This is a bit evil but makes things simple, no dynamic allocation
95 * to clean up :-) */ 97 * to clean up :-) */
@@ -156,6 +158,14 @@ int i2d_SSL_SESSION(SSL_SESSION *in, unsigned char **pp)
156 ASN1_INTEGER_set(&(a.timeout),in->timeout); 158 ASN1_INTEGER_set(&(a.timeout),in->timeout);
157 } 159 }
158 160
161 if (in->verify_result != X509_V_OK)
162 {
163 a.verify_result.length=LSIZE2;
164 a.verify_result.type=V_ASN1_INTEGER;
165 a.verify_result.data=ibuf5;
166 ASN1_INTEGER_set(&a.verify_result,in->verify_result);
167 }
168
159 M_ASN1_I2D_len(&(a.version), i2d_ASN1_INTEGER); 169 M_ASN1_I2D_len(&(a.version), i2d_ASN1_INTEGER);
160 M_ASN1_I2D_len(&(a.ssl_version), i2d_ASN1_INTEGER); 170 M_ASN1_I2D_len(&(a.ssl_version), i2d_ASN1_INTEGER);
161 M_ASN1_I2D_len(&(a.cipher), i2d_ASN1_OCTET_STRING); 171 M_ASN1_I2D_len(&(a.cipher), i2d_ASN1_OCTET_STRING);
@@ -170,6 +180,8 @@ int i2d_SSL_SESSION(SSL_SESSION *in, unsigned char **pp)
170 if (in->peer != NULL) 180 if (in->peer != NULL)
171 M_ASN1_I2D_len_EXP_opt(in->peer,i2d_X509,3,v3); 181 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); 182 M_ASN1_I2D_len_EXP_opt(&a.session_id_context,i2d_ASN1_OCTET_STRING,4,v4);
183 if (in->verify_result != X509_V_OK)
184 M_ASN1_I2D_len_EXP_opt(&(a.verify_result),i2d_ASN1_INTEGER,5,v5);
173 185
174 M_ASN1_I2D_seq_total(); 186 M_ASN1_I2D_seq_total();
175 187
@@ -188,7 +200,8 @@ int i2d_SSL_SESSION(SSL_SESSION *in, unsigned char **pp)
188 M_ASN1_I2D_put_EXP_opt(in->peer,i2d_X509,3,v3); 200 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, 201 M_ASN1_I2D_put_EXP_opt(&a.session_id_context,i2d_ASN1_OCTET_STRING,4,
190 v4); 202 v4);
191 203 if (in->verify_result != X509_V_OK)
204 M_ASN1_I2D_put_EXP_opt(&a.verify_result,i2d_ASN1_INTEGER,5,v5);
192 M_ASN1_I2D_finish(); 205 M_ASN1_I2D_finish();
193 } 206 }
194 207
@@ -322,6 +335,15 @@ SSL_SESSION *d2i_SSL_SESSION(SSL_SESSION **a, unsigned char **pp,
322 else 335 else
323 ret->sid_ctx_length=0; 336 ret->sid_ctx_length=0;
324 337
338 ai.length=0;
339 M_ASN1_D2I_get_EXP_opt(aip,d2i_ASN1_INTEGER,5);
340 if (ai.data != NULL)
341 {
342 ret->verify_result=ASN1_INTEGER_get(aip);
343 Free(ai.data); ai.data=NULL; ai.length=0;
344 }
345 else
346 ret->verify_result=X509_V_OK;
347
325 M_ASN1_D2I_Finish(a,SSL_SESSION_free,SSL_F_D2I_SSL_SESSION); 348 M_ASN1_D2I_Finish(a,SSL_SESSION_free,SSL_F_D2I_SSL_SESSION);
326 } 349 }
327