summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/ct/ct_sct.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libcrypto/ct/ct_sct.c')
-rw-r--r--src/lib/libcrypto/ct/ct_sct.c74
1 files changed, 40 insertions, 34 deletions
diff --git a/src/lib/libcrypto/ct/ct_sct.c b/src/lib/libcrypto/ct/ct_sct.c
index ca915b763e..5108f39d66 100644
--- a/src/lib/libcrypto/ct/ct_sct.c
+++ b/src/lib/libcrypto/ct/ct_sct.c
@@ -17,15 +17,17 @@
17#include <openssl/tls1.h> 17#include <openssl/tls1.h>
18#include <openssl/x509.h> 18#include <openssl/x509.h>
19 19
20#include <string.h>
21
20#include "ct_local.h" 22#include "ct_local.h"
21 23
22SCT * 24SCT *
23SCT_new(void) 25SCT_new(void)
24{ 26{
25 SCT *sct = OPENSSL_zalloc(sizeof(*sct)); 27 SCT *sct = calloc(1, sizeof(*sct));
26 28
27 if (sct == NULL) { 29 if (sct == NULL) {
28 CTerr(CT_F_SCT_NEW, ERR_R_MALLOC_FAILURE); 30 CTerror(ERR_R_MALLOC_FAILURE);
29 return NULL; 31 return NULL;
30 } 32 }
31 33
@@ -40,11 +42,11 @@ SCT_free(SCT *sct)
40 if (sct == NULL) 42 if (sct == NULL)
41 return; 43 return;
42 44
43 OPENSSL_free(sct->log_id); 45 free(sct->log_id);
44 OPENSSL_free(sct->ext); 46 free(sct->ext);
45 OPENSSL_free(sct->sig); 47 free(sct->sig);
46 OPENSSL_free(sct->sct); 48 free(sct->sct);
47 OPENSSL_free(sct); 49 free(sct);
48} 50}
49 51
50void 52void
@@ -57,7 +59,7 @@ int
57SCT_set_version(SCT *sct, sct_version_t version) 59SCT_set_version(SCT *sct, sct_version_t version)
58{ 60{
59 if (version != SCT_VERSION_V1) { 61 if (version != SCT_VERSION_V1) {
60 CTerr(CT_F_SCT_SET_VERSION, CT_R_UNSUPPORTED_VERSION); 62 CTerror(CT_R_UNSUPPORTED_VERSION);
61 return 0; 63 return 0;
62 } 64 }
63 sct->version = version; 65 sct->version = version;
@@ -78,7 +80,7 @@ SCT_set_log_entry_type(SCT *sct, ct_log_entry_type_t entry_type)
78 case CT_LOG_ENTRY_TYPE_NOT_SET: 80 case CT_LOG_ENTRY_TYPE_NOT_SET:
79 break; 81 break;
80 } 82 }
81 CTerr(CT_F_SCT_SET_LOG_ENTRY_TYPE, CT_R_UNSUPPORTED_ENTRY_TYPE); 83 CTerror(CT_R_UNSUPPORTED_ENTRY_TYPE);
82 return 0; 84 return 0;
83} 85}
84 86
@@ -86,11 +88,11 @@ int
86SCT_set0_log_id(SCT *sct, unsigned char *log_id, size_t log_id_len) 88SCT_set0_log_id(SCT *sct, unsigned char *log_id, size_t log_id_len)
87{ 89{
88 if (sct->version == SCT_VERSION_V1 && log_id_len != CT_V1_HASHLEN) { 90 if (sct->version == SCT_VERSION_V1 && log_id_len != CT_V1_HASHLEN) {
89 CTerr(CT_F_SCT_SET0_LOG_ID, CT_R_INVALID_LOG_ID_LENGTH); 91 CTerror(CT_R_INVALID_LOG_ID_LENGTH);
90 return 0; 92 return 0;
91 } 93 }
92 94
93 OPENSSL_free(sct->log_id); 95 free(sct->log_id);
94 sct->log_id = log_id; 96 sct->log_id = log_id;
95 sct->log_id_len = log_id_len; 97 sct->log_id_len = log_id_len;
96 sct->validation_status = SCT_VALIDATION_STATUS_NOT_SET; 98 sct->validation_status = SCT_VALIDATION_STATUS_NOT_SET;
@@ -101,21 +103,22 @@ int
101SCT_set1_log_id(SCT *sct, const unsigned char *log_id, size_t log_id_len) 103SCT_set1_log_id(SCT *sct, const unsigned char *log_id, size_t log_id_len)
102{ 104{
103 if (sct->version == SCT_VERSION_V1 && log_id_len != CT_V1_HASHLEN) { 105 if (sct->version == SCT_VERSION_V1 && log_id_len != CT_V1_HASHLEN) {
104 CTerr(CT_F_SCT_SET1_LOG_ID, CT_R_INVALID_LOG_ID_LENGTH); 106 CTerror(CT_R_INVALID_LOG_ID_LENGTH);
105 return 0; 107 return 0;
106 } 108 }
107 109
108 OPENSSL_free(sct->log_id); 110 free(sct->log_id);
109 sct->log_id = NULL; 111 sct->log_id = NULL;
110 sct->log_id_len = 0; 112 sct->log_id_len = 0;
111 sct->validation_status = SCT_VALIDATION_STATUS_NOT_SET; 113 sct->validation_status = SCT_VALIDATION_STATUS_NOT_SET;
112 114
113 if (log_id != NULL && log_id_len > 0) { 115 if (log_id != NULL && log_id_len > 0) {
114 sct->log_id = OPENSSL_memdup(log_id, log_id_len); 116 sct->log_id = malloc(log_id_len);
115 if (sct->log_id == NULL) { 117 if (sct->log_id == NULL) {
116 CTerr(CT_F_SCT_SET1_LOG_ID, ERR_R_MALLOC_FAILURE); 118 CTerror(ERR_R_MALLOC_FAILURE);
117 return 0; 119 return 0;
118 } 120 }
121 memcpy(sct->log_id, log_id, log_id_len);
119 sct->log_id_len = log_id_len; 122 sct->log_id_len = log_id_len;
120 } 123 }
121 return 1; 124 return 1;
@@ -134,17 +137,17 @@ SCT_set_signature_nid(SCT *sct, int nid)
134{ 137{
135 switch (nid) { 138 switch (nid) {
136 case NID_sha256WithRSAEncryption: 139 case NID_sha256WithRSAEncryption:
137 sct->hash_alg = TLSEXT_hash_sha256; 140 sct->hash_alg = 4; /* XXX */
138 sct->sig_alg = TLSEXT_signature_rsa; 141 sct->sig_alg = 1; /* XXX */
139 sct->validation_status = SCT_VALIDATION_STATUS_NOT_SET; 142 sct->validation_status = SCT_VALIDATION_STATUS_NOT_SET;
140 return 1; 143 return 1;
141 case NID_ecdsa_with_SHA256: 144 case NID_ecdsa_with_SHA256:
142 sct->hash_alg = TLSEXT_hash_sha256; 145 sct->hash_alg = 4; /* XXX */
143 sct->sig_alg = TLSEXT_signature_ecdsa; 146 sct->sig_alg = 3; /* XXX */
144 sct->validation_status = SCT_VALIDATION_STATUS_NOT_SET; 147 sct->validation_status = SCT_VALIDATION_STATUS_NOT_SET;
145 return 1; 148 return 1;
146 default: 149 default:
147 CTerr(CT_F_SCT_SET_SIGNATURE_NID, CT_R_UNRECOGNIZED_SIGNATURE_NID); 150 CTerror(CT_R_UNRECOGNIZED_SIGNATURE_NID);
148 return 0; 151 return 0;
149 } 152 }
150} 153}
@@ -152,7 +155,7 @@ SCT_set_signature_nid(SCT *sct, int nid)
152void 155void
153SCT_set0_extensions(SCT *sct, unsigned char *ext, size_t ext_len) 156SCT_set0_extensions(SCT *sct, unsigned char *ext, size_t ext_len)
154{ 157{
155 OPENSSL_free(sct->ext); 158 free(sct->ext);
156 sct->ext = ext; 159 sct->ext = ext;
157 sct->ext_len = ext_len; 160 sct->ext_len = ext_len;
158 sct->validation_status = SCT_VALIDATION_STATUS_NOT_SET; 161 sct->validation_status = SCT_VALIDATION_STATUS_NOT_SET;
@@ -161,17 +164,18 @@ SCT_set0_extensions(SCT *sct, unsigned char *ext, size_t ext_len)
161int 164int
162SCT_set1_extensions(SCT *sct, const unsigned char *ext, size_t ext_len) 165SCT_set1_extensions(SCT *sct, const unsigned char *ext, size_t ext_len)
163{ 166{
164 OPENSSL_free(sct->ext); 167 free(sct->ext);
165 sct->ext = NULL; 168 sct->ext = NULL;
166 sct->ext_len = 0; 169 sct->ext_len = 0;
167 sct->validation_status = SCT_VALIDATION_STATUS_NOT_SET; 170 sct->validation_status = SCT_VALIDATION_STATUS_NOT_SET;
168 171
169 if (ext != NULL && ext_len > 0) { 172 if (ext != NULL && ext_len > 0) {
170 sct->ext = OPENSSL_memdup(ext, ext_len); 173 sct->ext = malloc(ext_len);
171 if (sct->ext == NULL) { 174 if (sct->ext == NULL) {
172 CTerr(CT_F_SCT_SET1_EXTENSIONS, ERR_R_MALLOC_FAILURE); 175 CTerror(ERR_R_MALLOC_FAILURE);
173 return 0; 176 return 0;
174 } 177 }
178 memcpy(sct->ext, ext, ext_len);
175 sct->ext_len = ext_len; 179 sct->ext_len = ext_len;
176 } 180 }
177 return 1; 181 return 1;
@@ -180,7 +184,7 @@ SCT_set1_extensions(SCT *sct, const unsigned char *ext, size_t ext_len)
180void 184void
181SCT_set0_signature(SCT *sct, unsigned char *sig, size_t sig_len) 185SCT_set0_signature(SCT *sct, unsigned char *sig, size_t sig_len)
182{ 186{
183 OPENSSL_free(sct->sig); 187 free(sct->sig);
184 sct->sig = sig; 188 sct->sig = sig;
185 sct->sig_len = sig_len; 189 sct->sig_len = sig_len;
186 sct->validation_status = SCT_VALIDATION_STATUS_NOT_SET; 190 sct->validation_status = SCT_VALIDATION_STATUS_NOT_SET;
@@ -189,17 +193,18 @@ SCT_set0_signature(SCT *sct, unsigned char *sig, size_t sig_len)
189int 193int
190SCT_set1_signature(SCT *sct, const unsigned char *sig, size_t sig_len) 194SCT_set1_signature(SCT *sct, const unsigned char *sig, size_t sig_len)
191{ 195{
192 OPENSSL_free(sct->sig); 196 free(sct->sig);
193 sct->sig = NULL; 197 sct->sig = NULL;
194 sct->sig_len = 0; 198 sct->sig_len = 0;
195 sct->validation_status = SCT_VALIDATION_STATUS_NOT_SET; 199 sct->validation_status = SCT_VALIDATION_STATUS_NOT_SET;
196 200
197 if (sig != NULL && sig_len > 0) { 201 if (sig != NULL && sig_len > 0) {
198 sct->sig = OPENSSL_memdup(sig, sig_len); 202 sct->sig = malloc(sig_len);
199 if (sct->sig == NULL) { 203 if (sct->sig == NULL) {
200 CTerr(CT_F_SCT_SET1_SIGNATURE, ERR_R_MALLOC_FAILURE); 204 CTerror(ERR_R_MALLOC_FAILURE);
201 return 0; 205 return 0;
202 } 206 }
207 memcpy(sct->sig, sig, sig_len);
203 sct->sig_len = sig_len; 208 sct->sig_len = sig_len;
204 } 209 }
205 return 1; 210 return 1;
@@ -234,14 +239,15 @@ int
234SCT_get_signature_nid(const SCT *sct) 239SCT_get_signature_nid(const SCT *sct)
235{ 240{
236 if (sct->version == SCT_VERSION_V1) { 241 if (sct->version == SCT_VERSION_V1) {
237 if (sct->hash_alg == TLSEXT_hash_sha256) { 242 /* XXX sigalg numbers */
243 if (sct->hash_alg == 4) {
238 switch (sct->sig_alg) { 244 switch (sct->sig_alg) {
239 case TLSEXT_signature_ecdsa: 245 case 3:
240 return NID_ecdsa_with_SHA256; 246 return NID_ecdsa_with_SHA256;
241 case TLSEXT_signature_rsa: 247 case 1:
242 return NID_sha256WithRSAEncryption; 248 return NID_sha256WithRSAEncryption;
243 default: 249 default:
244 return NID_undef; 250 return NID_undef;
245 } 251 }
246 } 252 }
247 } 253 }
@@ -278,8 +284,8 @@ SCT_is_complete(const SCT *sct)
278int 284int
279SCT_signature_is_complete(const SCT *sct) 285SCT_signature_is_complete(const SCT *sct)
280{ 286{
281 return SCT_get_signature_nid(sct) != NID_undef && sct->sig != NULL && 287 return SCT_get_signature_nid(sct) != NID_undef &&
282 sct->sig_len > 0; 288 sct->sig != NULL && sct->sig_len > 0;
283} 289}
284 290
285sct_source_t 291sct_source_t