diff options
Diffstat (limited to 'src/lib/libcrypto/asn1/x_cinf.c')
-rw-r--r-- | src/lib/libcrypto/asn1/x_cinf.c | 56 |
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 | /* | 64 | int 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 | |||
68 | int i2d_X509_CINF(a,pp) | ||
69 | X509_CINF *a; | ||
70 | unsigned 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 | ||
102 | X509_CINF *d2i_X509_CINF(a,pp,length) | 100 | X509_CINF *d2i_X509_CINF(X509_CINF **a, unsigned char **pp, long length) |
103 | X509_CINF **a; | ||
104 | unsigned char **pp; | ||
105 | long 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 | ||
162 | X509_CINF *X509_CINF_new() | 166 | X509_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 | ||
181 | void X509_CINF_free(a) | 186 | void X509_CINF_free(X509_CINF *a) |
182 | X509_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 | ||