diff options
Diffstat (limited to 'src/lib/libcrypto/ct/ct_b64.c')
-rw-r--r-- | src/lib/libcrypto/ct/ct_b64.c | 35 |
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 | ||