summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/asn1/x_cinf.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libcrypto/asn1/x_cinf.c')
-rw-r--r--src/lib/libcrypto/asn1/x_cinf.c56
1 files changed, 30 insertions, 26 deletions
diff --git a/src/lib/libcrypto/asn1/x_cinf.c b/src/lib/libcrypto/asn1/x_cinf.c
index 4fc2cc9f6e..fe1b18a90f 100644
--- a/src/lib/libcrypto/asn1/x_cinf.c
+++ b/src/lib/libcrypto/asn1/x_cinf.c
@@ -58,16 +58,10 @@
58 58
59#include <stdio.h> 59#include <stdio.h>
60#include "cryptlib.h" 60#include "cryptlib.h"
61#include "asn1_mac.h" 61#include <openssl/asn1_mac.h>
62#include <openssl/x509.h>
62 63
63/* 64int i2d_X509_CINF(X509_CINF *a, unsigned char **pp)
64 * ASN1err(ASN1_F_D2I_X509_CINF,ASN1_R_LENGTH_MISMATCH);
65 * ASN1err(ASN1_F_X509_CINF_NEW,ASN1_R_LENGTH_MISMATCH);
66 */
67
68int i2d_X509_CINF(a,pp)
69X509_CINF *a;
70unsigned char **pp;
71 { 65 {
72 int v1=0,v2=0; 66 int v1=0,v2=0;
73 M_ASN1_I2D_vars(a); 67 M_ASN1_I2D_vars(a);
@@ -81,7 +75,9 @@ unsigned char **pp;
81 M_ASN1_I2D_len(a->key, i2d_X509_PUBKEY); 75 M_ASN1_I2D_len(a->key, i2d_X509_PUBKEY);
82 M_ASN1_I2D_len_IMP_opt(a->issuerUID, i2d_ASN1_BIT_STRING); 76 M_ASN1_I2D_len_IMP_opt(a->issuerUID, i2d_ASN1_BIT_STRING);
83 M_ASN1_I2D_len_IMP_opt(a->subjectUID, i2d_ASN1_BIT_STRING); 77 M_ASN1_I2D_len_IMP_opt(a->subjectUID, i2d_ASN1_BIT_STRING);
84 M_ASN1_I2D_len_EXP_set_opt(a->extensions,i2d_X509_EXTENSION,3,V_ASN1_SEQUENCE,v2); 78 M_ASN1_I2D_len_EXP_SEQUENCE_opt_type(X509_EXTENSION,a->extensions,
79 i2d_X509_EXTENSION,3,
80 V_ASN1_SEQUENCE,v2);
85 81
86 M_ASN1_I2D_seq_total(); 82 M_ASN1_I2D_seq_total();
87 83
@@ -94,15 +90,14 @@ unsigned char **pp;
94 M_ASN1_I2D_put(a->key, i2d_X509_PUBKEY); 90 M_ASN1_I2D_put(a->key, i2d_X509_PUBKEY);
95 M_ASN1_I2D_put_IMP_opt(a->issuerUID, i2d_ASN1_BIT_STRING,1); 91 M_ASN1_I2D_put_IMP_opt(a->issuerUID, i2d_ASN1_BIT_STRING,1);
96 M_ASN1_I2D_put_IMP_opt(a->subjectUID, i2d_ASN1_BIT_STRING,2); 92 M_ASN1_I2D_put_IMP_opt(a->subjectUID, i2d_ASN1_BIT_STRING,2);
97 M_ASN1_I2D_put_EXP_set_opt(a->extensions,i2d_X509_EXTENSION,3,V_ASN1_SEQUENCE,v2); 93 M_ASN1_I2D_put_EXP_SEQUENCE_opt_type(X509_EXTENSION,a->extensions,
94 i2d_X509_EXTENSION,3,
95 V_ASN1_SEQUENCE,v2);
98 96
99 M_ASN1_I2D_finish(); 97 M_ASN1_I2D_finish();
100 } 98 }
101 99
102X509_CINF *d2i_X509_CINF(a,pp,length) 100X509_CINF *d2i_X509_CINF(X509_CINF **a, unsigned char **pp, long length)
103X509_CINF **a;
104unsigned char **pp;
105long length;
106 { 101 {
107 int ver=0; 102 int ver=0;
108 M_ASN1_D2I_vars(a,X509_CINF *,X509_CINF_new); 103 M_ASN1_D2I_vars(a,X509_CINF *,X509_CINF_new);
@@ -140,28 +135,38 @@ long length;
140 if (ret->subjectUID != NULL) 135 if (ret->subjectUID != NULL)
141 { 136 {
142 ASN1_BIT_STRING_free(ret->subjectUID); 137 ASN1_BIT_STRING_free(ret->subjectUID);
143 ret->issuerUID=NULL; 138 ret->subjectUID=NULL;
144 } 139 }
145 M_ASN1_D2I_get_IMP_opt(ret->issuerUID,d2i_ASN1_BIT_STRING, 1, 140 M_ASN1_D2I_get_IMP_opt(ret->issuerUID,d2i_ASN1_BIT_STRING, 1,
146 V_ASN1_BIT_STRING); 141 V_ASN1_BIT_STRING);
147 M_ASN1_D2I_get_IMP_opt(ret->subjectUID,d2i_ASN1_BIT_STRING, 2, 142 M_ASN1_D2I_get_IMP_opt(ret->subjectUID,d2i_ASN1_BIT_STRING, 2,
148 V_ASN1_BIT_STRING); 143 V_ASN1_BIT_STRING);
149 } 144 }
145/* Note: some broken certificates include extensions but don't set
146 * the version number properly. By bypassing this check they can
147 * be parsed.
148 */
149
150#ifdef VERSION_EXT_CHECK
150 if (ver >= 2) /* version 3 extensions */ 151 if (ver >= 2) /* version 3 extensions */
152#endif
151 { 153 {
152 if (ret->extensions != NULL) 154 if (ret->extensions != NULL)
153 while (sk_num(ret->extensions)) 155 while (sk_X509_EXTENSION_num(ret->extensions))
154 X509_EXTENSION_free((X509_EXTENSION *) 156 X509_EXTENSION_free(
155 sk_pop(ret->extensions)); 157 sk_X509_EXTENSION_pop(ret->extensions));
156 M_ASN1_D2I_get_EXP_set_opt(ret->extensions,d2i_X509_EXTENSION,3, 158 M_ASN1_D2I_get_EXP_set_opt_type(X509_EXTENSION,ret->extensions,
157 V_ASN1_SEQUENCE); 159 d2i_X509_EXTENSION,
160 X509_EXTENSION_free,3,
161 V_ASN1_SEQUENCE);
158 } 162 }
159 M_ASN1_D2I_Finish(a,X509_CINF_free,ASN1_F_D2I_X509_CINF); 163 M_ASN1_D2I_Finish(a,X509_CINF_free,ASN1_F_D2I_X509_CINF);
160 } 164 }
161 165
162X509_CINF *X509_CINF_new() 166X509_CINF *X509_CINF_new(void)
163 { 167 {
164 X509_CINF *ret=NULL; 168 X509_CINF *ret=NULL;
169 ASN1_CTX c;
165 170
166 M_ASN1_New_Malloc(ret,X509_CINF); 171 M_ASN1_New_Malloc(ret,X509_CINF);
167 ret->version=NULL; 172 ret->version=NULL;
@@ -178,8 +183,7 @@ X509_CINF *X509_CINF_new()
178 M_ASN1_New_Error(ASN1_F_X509_CINF_NEW); 183 M_ASN1_New_Error(ASN1_F_X509_CINF_NEW);
179 } 184 }
180 185
181void X509_CINF_free(a) 186void X509_CINF_free(X509_CINF *a)
182X509_CINF *a;
183 { 187 {
184 if (a == NULL) return; 188 if (a == NULL) return;
185 ASN1_INTEGER_free(a->version); 189 ASN1_INTEGER_free(a->version);
@@ -191,7 +195,7 @@ X509_CINF *a;
191 X509_PUBKEY_free(a->key); 195 X509_PUBKEY_free(a->key);
192 ASN1_BIT_STRING_free(a->issuerUID); 196 ASN1_BIT_STRING_free(a->issuerUID);
193 ASN1_BIT_STRING_free(a->subjectUID); 197 ASN1_BIT_STRING_free(a->subjectUID);
194 sk_pop_free(a->extensions,X509_EXTENSION_free); 198 sk_X509_EXTENSION_pop_free(a->extensions,X509_EXTENSION_free);
195 Free((char *)a); 199 Free(a);
196 } 200 }
197 201