summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/ct/ct_b64.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libcrypto/ct/ct_b64.c')
-rw-r--r--src/lib/libcrypto/ct/ct_b64.c35
1 files changed, 19 insertions, 16 deletions
diff --git a/src/lib/libcrypto/ct/ct_b64.c b/src/lib/libcrypto/ct/ct_b64.c
index 8ca5f469df..da182c9626 100644
--- a/src/lib/libcrypto/ct/ct_b64.c
+++ b/src/lib/libcrypto/ct/ct_b64.c
@@ -34,19 +34,22 @@ ct_base64_decode(const char *in, unsigned char **out)
34 } 34 }
35 35
36 outlen = (inlen / 4) * 3; 36 outlen = (inlen / 4) * 3;
37 outbuf = OPENSSL_malloc(outlen); 37 outbuf = malloc(outlen);
38 if (outbuf == NULL) { 38 if (outbuf == NULL) {
39 CTerr(CT_F_CT_BASE64_DECODE, ERR_R_MALLOC_FAILURE); 39 CTerror(ERR_R_MALLOC_FAILURE);
40 goto err; 40 goto err;
41 } 41 }
42 42
43 outlen = EVP_DecodeBlock(outbuf, (unsigned char *)in, inlen); 43 outlen = EVP_DecodeBlock(outbuf, (unsigned char *)in, inlen);
44 if (outlen < 0) { 44 if (outlen < 0) {
45 CTerr(CT_F_CT_BASE64_DECODE, CT_R_BASE64_DECODE_ERROR); 45 CTerror(CT_R_BASE64_DECODE_ERROR);
46 goto err; 46 goto err;
47 } 47 }
48 48
49 /* Subtract padding bytes from |outlen|. Any more than 2 is malformed. */ 49 /*
50 * Subtract padding bytes from |outlen|.
51 * Any more than 2 is malformed.
52 */
50 i = 0; 53 i = 0;
51 while (in[--inlen] == '=') { 54 while (in[--inlen] == '=') {
52 --outlen; 55 --outlen;
@@ -57,7 +60,7 @@ ct_base64_decode(const char *in, unsigned char **out)
57 *out = outbuf; 60 *out = outbuf;
58 return outlen; 61 return outlen;
59 err: 62 err:
60 OPENSSL_free(outbuf); 63 free(outbuf);
61 return -1; 64 return -1;
62} 65}
63 66
@@ -72,7 +75,7 @@ SCT_new_from_base64(unsigned char version, const char *logid_base64,
72 int declen; 75 int declen;
73 76
74 if (sct == NULL) { 77 if (sct == NULL) {
75 CTerr(CT_F_SCT_NEW_FROM_BASE64, ERR_R_MALLOC_FAILURE); 78 CTerror(ERR_R_MALLOC_FAILURE);
76 return NULL; 79 return NULL;
77 } 80 }
78 81
@@ -81,13 +84,13 @@ SCT_new_from_base64(unsigned char version, const char *logid_base64,
81 * can only construct SCT versions that have been defined. 84 * can only construct SCT versions that have been defined.
82 */ 85 */
83 if (!SCT_set_version(sct, version)) { 86 if (!SCT_set_version(sct, version)) {
84 CTerr(CT_F_SCT_NEW_FROM_BASE64, CT_R_SCT_UNSUPPORTED_VERSION); 87 CTerror(CT_R_SCT_UNSUPPORTED_VERSION);
85 goto err; 88 goto err;
86 } 89 }
87 90
88 declen = ct_base64_decode(logid_base64, &dec); 91 declen = ct_base64_decode(logid_base64, &dec);
89 if (declen < 0) { 92 if (declen < 0) {
90 CTerr(CT_F_SCT_NEW_FROM_BASE64, X509_R_BASE64_DECODE_ERROR); 93 CTerror(X509_R_BASE64_DECODE_ERROR);
91 goto err; 94 goto err;
92 } 95 }
93 if (!SCT_set0_log_id(sct, dec, declen)) 96 if (!SCT_set0_log_id(sct, dec, declen))
@@ -96,7 +99,7 @@ SCT_new_from_base64(unsigned char version, const char *logid_base64,
96 99
97 declen = ct_base64_decode(extensions_base64, &dec); 100 declen = ct_base64_decode(extensions_base64, &dec);
98 if (declen < 0) { 101 if (declen < 0) {
99 CTerr(CT_F_SCT_NEW_FROM_BASE64, X509_R_BASE64_DECODE_ERROR); 102 CTerror(X509_R_BASE64_DECODE_ERROR);
100 goto err; 103 goto err;
101 } 104 }
102 SCT_set0_extensions(sct, dec, declen); 105 SCT_set0_extensions(sct, dec, declen);
@@ -104,14 +107,14 @@ SCT_new_from_base64(unsigned char version, const char *logid_base64,
104 107
105 declen = ct_base64_decode(signature_base64, &dec); 108 declen = ct_base64_decode(signature_base64, &dec);
106 if (declen < 0) { 109 if (declen < 0) {
107 CTerr(CT_F_SCT_NEW_FROM_BASE64, X509_R_BASE64_DECODE_ERROR); 110 CTerror(X509_R_BASE64_DECODE_ERROR);
108 goto err; 111 goto err;
109 } 112 }
110 113
111 p = dec; 114 p = dec;
112 if (o2i_SCT_signature(sct, &p, declen) <= 0) 115 if (o2i_SCT_signature(sct, &p, declen) <= 0)
113 goto err; 116 goto err;
114 OPENSSL_free(dec); 117 free(dec);
115 dec = NULL; 118 dec = NULL;
116 119
117 SCT_set_timestamp(sct, timestamp); 120 SCT_set_timestamp(sct, timestamp);
@@ -122,7 +125,7 @@ SCT_new_from_base64(unsigned char version, const char *logid_base64,
122 return sct; 125 return sct;
123 126
124 err: 127 err:
125 OPENSSL_free(dec); 128 free(dec);
126 SCT_free(sct); 129 SCT_free(sct);
127 return NULL; 130 return NULL;
128} 131}
@@ -142,21 +145,21 @@ CTLOG_new_from_base64(CTLOG **ct_log, const char *pkey_base64, const char *name)
142 EVP_PKEY *pkey = NULL; 145 EVP_PKEY *pkey = NULL;
143 146
144 if (ct_log == NULL) { 147 if (ct_log == NULL) {
145 CTerr(CT_F_CTLOG_NEW_FROM_BASE64, ERR_R_PASSED_INVALID_ARGUMENT); 148 CTerror(ERR_R_PASSED_NULL_PARAMETER);
146 return 0; 149 return 0;
147 } 150 }
148 151
149 pkey_der_len = ct_base64_decode(pkey_base64, &pkey_der); 152 pkey_der_len = ct_base64_decode(pkey_base64, &pkey_der);
150 if (pkey_der_len < 0) { 153 if (pkey_der_len < 0) {
151 CTerr(CT_F_CTLOG_NEW_FROM_BASE64, CT_R_LOG_CONF_INVALID_KEY); 154 CTerror(CT_R_LOG_CONF_INVALID_KEY);
152 return 0; 155 return 0;
153 } 156 }
154 157
155 p = pkey_der; 158 p = pkey_der;
156 pkey = d2i_PUBKEY(NULL, &p, pkey_der_len); 159 pkey = d2i_PUBKEY(NULL, &p, pkey_der_len);
157 OPENSSL_free(pkey_der); 160 free(pkey_der);
158 if (pkey == NULL) { 161 if (pkey == NULL) {
159 CTerr(CT_F_CTLOG_NEW_FROM_BASE64, CT_R_LOG_CONF_INVALID_KEY); 162 CTerror(CT_R_LOG_CONF_INVALID_KEY);
160 return 0; 163 return 0;
161 } 164 }
162 165