diff options
author | William Ahern <william@25thandclement.com> | 2016-11-23 18:53:01 -0800 |
---|---|---|
committer | William Ahern <william@25thandclement.com> | 2016-11-23 18:53:01 -0800 |
commit | 06a5b0529ea8d86072b7b759347f2c25e1e1b92c (patch) | |
tree | 3d22a4a74d0a09e86e6b07b3c6bf6a131046de72 | |
parent | 1e71520fd53ff8735707e2f9c91b4551d6c9a88e (diff) | |
download | luaossl-06a5b0529ea8d86072b7b759347f2c25e1e1b92c.tar.gz luaossl-06a5b0529ea8d86072b7b759347f2c25e1e1b92c.tar.bz2 luaossl-06a5b0529ea8d86072b7b759347f2c25e1e1b92c.zip |
fix OpenSSL 0.9.8 build (lacks EVP_PKEY_CTX interfaces), fix use of BIO_reset, fix signedness warnings for EVP_PKEY_encrypt and EVP_PKEY_decrypt
-rw-r--r-- | src/openssl.c | 35 |
1 files changed, 24 insertions, 11 deletions
diff --git a/src/openssl.c b/src/openssl.c index 8cf79c0..38c9888 100644 --- a/src/openssl.c +++ b/src/openssl.c | |||
@@ -193,6 +193,10 @@ | |||
193 | #define HAVE_EVP_PKEY_BASE_ID OPENSSL_PREREQ(1,1,0) | 193 | #define HAVE_EVP_PKEY_BASE_ID OPENSSL_PREREQ(1,1,0) |
194 | #endif | 194 | #endif |
195 | 195 | ||
196 | #ifndef HAVE_EVP_PKEY_CTX_NEW | ||
197 | #define HAVE_EVP_PKEY_CTX_NEW (OPENSSL_PREREQ(1,0,0) || LIBRESSL_PREREQ(2,0,0)) | ||
198 | #endif | ||
199 | |||
196 | #ifndef HAVE_EVP_PKEY_GET0 | 200 | #ifndef HAVE_EVP_PKEY_GET0 |
197 | #define HAVE_EVP_PKEY_GET0 OPENSSL_PREREQ(1,1,0) | 201 | #define HAVE_EVP_PKEY_GET0 OPENSSL_PREREQ(1,1,0) |
198 | #endif | 202 | #endif |
@@ -225,6 +229,10 @@ | |||
225 | #define HAVE_RSA_GET0_KEY OPENSSL_PREREQ(1,1,0) | 229 | #define HAVE_RSA_GET0_KEY OPENSSL_PREREQ(1,1,0) |
226 | #endif | 230 | #endif |
227 | 231 | ||
232 | #ifndef HAVE_RSA_PKCS1_PSS_PADDING | ||
233 | #define HAVE_RSA_PKCS1_PSS_PADDING (defined RSA_PKCS1_PSS_PADDING || OPENSSL_PREREQ(1,0,0) || LIBRESSL_PREREQ(2,0,0)) | ||
234 | #endif | ||
235 | |||
228 | #ifndef HAVE_RSA_SET0_CRT_PARAMS | 236 | #ifndef HAVE_RSA_SET0_CRT_PARAMS |
229 | #define HAVE_RSA_SET0_CRT_PARAMS OPENSSL_PREREQ(1,1,0) | 237 | #define HAVE_RSA_SET0_CRT_PARAMS OPENSSL_PREREQ(1,1,0) |
230 | #endif | 238 | #endif |
@@ -3281,7 +3289,7 @@ static int pk_setPrivateKey(lua_State *L) { | |||
3281 | return 1; | 3289 | return 1; |
3282 | } /* pk_setPrivateKey() */ | 3290 | } /* pk_setPrivateKey() */ |
3283 | 3291 | ||
3284 | 3292 | #if HAVE_EVP_PKEY_CTX_NEW | |
3285 | static int pk_decrypt(lua_State *L) { | 3293 | static int pk_decrypt(lua_State *L) { |
3286 | size_t outlen, inlen; | 3294 | size_t outlen, inlen; |
3287 | EVP_PKEY *key = checksimple(L, 1, PKEY_CLASS); | 3295 | EVP_PKEY *key = checksimple(L, 1, PKEY_CLASS); |
@@ -3312,13 +3320,13 @@ static int pk_decrypt(lua_State *L) { | |||
3312 | if (base_type == EVP_PKEY_RSA && !EVP_PKEY_CTX_set_rsa_padding(ctx, rsaPadding)) | 3320 | if (base_type == EVP_PKEY_RSA && !EVP_PKEY_CTX_set_rsa_padding(ctx, rsaPadding)) |
3313 | goto sslerr; | 3321 | goto sslerr; |
3314 | 3322 | ||
3315 | if (EVP_PKEY_decrypt(ctx, NULL, &outlen, str, inlen) <= 0) | 3323 | if (EVP_PKEY_decrypt(ctx, NULL, &outlen, (const unsigned char *)str, inlen) <= 0) |
3316 | goto sslerr; | 3324 | goto sslerr; |
3317 | 3325 | ||
3318 | if (!BUF_MEM_grow_clean(buf, outlen)) | 3326 | if (!BUF_MEM_grow_clean(buf, outlen)) |
3319 | goto sslerr; | 3327 | goto sslerr; |
3320 | 3328 | ||
3321 | if (EVP_PKEY_decrypt(ctx, buf->data, &outlen, str, inlen) <= 0) | 3329 | if (EVP_PKEY_decrypt(ctx, (unsigned char *)buf->data, &outlen, (const unsigned char *)str, inlen) <= 0) |
3322 | goto sslerr; | 3330 | goto sslerr; |
3323 | 3331 | ||
3324 | EVP_PKEY_CTX_free(ctx); | 3332 | EVP_PKEY_CTX_free(ctx); |
@@ -3326,7 +3334,7 @@ static int pk_decrypt(lua_State *L) { | |||
3326 | 3334 | ||
3327 | lua_pushlstring(L, buf->data, outlen); | 3335 | lua_pushlstring(L, buf->data, outlen); |
3328 | 3336 | ||
3329 | BIO_reset(*bio); | 3337 | BIO_reset(bio); |
3330 | 3338 | ||
3331 | return 1; | 3339 | return 1; |
3332 | sslerr: | 3340 | sslerr: |
@@ -3334,12 +3342,13 @@ sslerr: | |||
3334 | EVP_PKEY_CTX_free(ctx); | 3342 | EVP_PKEY_CTX_free(ctx); |
3335 | ctx = NULL; | 3343 | ctx = NULL; |
3336 | } | 3344 | } |
3337 | BIO_reset(*bio); | 3345 | BIO_reset(bio); |
3338 | 3346 | ||
3339 | return auxL_error(L, auxL_EOPENSSL, "pkey:decrypt"); | 3347 | return auxL_error(L, auxL_EOPENSSL, "pkey:decrypt"); |
3340 | } /* pk_decrypt() */ | 3348 | } /* pk_decrypt() */ |
3349 | #endif | ||
3341 | 3350 | ||
3342 | 3351 | #if HAVE_EVP_PKEY_CTX_NEW | |
3343 | static int pk_encrypt(lua_State *L) { | 3352 | static int pk_encrypt(lua_State *L) { |
3344 | size_t outlen, inlen; | 3353 | size_t outlen, inlen; |
3345 | EVP_PKEY *key = checksimple(L, 1, PKEY_CLASS); | 3354 | EVP_PKEY *key = checksimple(L, 1, PKEY_CLASS); |
@@ -3370,13 +3379,13 @@ static int pk_encrypt(lua_State *L) { | |||
3370 | if (base_type == EVP_PKEY_RSA && !EVP_PKEY_CTX_set_rsa_padding(ctx, rsaPadding)) | 3379 | if (base_type == EVP_PKEY_RSA && !EVP_PKEY_CTX_set_rsa_padding(ctx, rsaPadding)) |
3371 | goto sslerr; | 3380 | goto sslerr; |
3372 | 3381 | ||
3373 | if (EVP_PKEY_encrypt(ctx, NULL, &outlen, str, inlen) <= 0) | 3382 | if (EVP_PKEY_encrypt(ctx, NULL, &outlen, (const unsigned char *)str, inlen) <= 0) |
3374 | goto sslerr; | 3383 | goto sslerr; |
3375 | 3384 | ||
3376 | if (!BUF_MEM_grow_clean(buf, outlen)) | 3385 | if (!BUF_MEM_grow_clean(buf, outlen)) |
3377 | goto sslerr; | 3386 | goto sslerr; |
3378 | 3387 | ||
3379 | if (EVP_PKEY_encrypt(ctx, buf->data, &outlen, str, inlen) <= 0) | 3388 | if (EVP_PKEY_encrypt(ctx, (unsigned char *)buf->data, &outlen, (const unsigned char *)str, inlen) <= 0) |
3380 | goto sslerr; | 3389 | goto sslerr; |
3381 | 3390 | ||
3382 | EVP_PKEY_CTX_free(ctx); | 3391 | EVP_PKEY_CTX_free(ctx); |
@@ -3384,7 +3393,7 @@ static int pk_encrypt(lua_State *L) { | |||
3384 | 3393 | ||
3385 | lua_pushlstring(L, buf->data, outlen); | 3394 | lua_pushlstring(L, buf->data, outlen); |
3386 | 3395 | ||
3387 | BIO_reset(*bio); | 3396 | BIO_reset(bio); |
3388 | 3397 | ||
3389 | return 1; | 3398 | return 1; |
3390 | sslerr: | 3399 | sslerr: |
@@ -3392,11 +3401,11 @@ sslerr: | |||
3392 | EVP_PKEY_CTX_free(ctx); | 3401 | EVP_PKEY_CTX_free(ctx); |
3393 | ctx = NULL; | 3402 | ctx = NULL; |
3394 | } | 3403 | } |
3395 | BIO_reset(*bio); | 3404 | BIO_reset(bio); |
3396 | 3405 | ||
3397 | return auxL_error(L, auxL_EOPENSSL, "pkey:encrypt"); | 3406 | return auxL_error(L, auxL_EOPENSSL, "pkey:encrypt"); |
3398 | } /* pk_encrypt() */ | 3407 | } /* pk_encrypt() */ |
3399 | 3408 | #endif | |
3400 | 3409 | ||
3401 | static int pk_sign(lua_State *L) { | 3410 | static int pk_sign(lua_State *L) { |
3402 | EVP_PKEY *key = checksimple(L, 1, PKEY_CLASS); | 3411 | EVP_PKEY *key = checksimple(L, 1, PKEY_CLASS); |
@@ -4117,8 +4126,10 @@ static const auxL_Reg pk_methods[] = { | |||
4117 | { "type", &pk_type }, | 4126 | { "type", &pk_type }, |
4118 | { "setPublicKey", &pk_setPublicKey }, | 4127 | { "setPublicKey", &pk_setPublicKey }, |
4119 | { "setPrivateKey", &pk_setPrivateKey }, | 4128 | { "setPrivateKey", &pk_setPrivateKey }, |
4129 | #if HAVE_EVP_PKEY_CTX_NEW | ||
4120 | { "decrypt", &pk_decrypt }, | 4130 | { "decrypt", &pk_decrypt }, |
4121 | { "encrypt", &pk_encrypt }, | 4131 | { "encrypt", &pk_encrypt }, |
4132 | #endif | ||
4122 | { "sign", &pk_sign }, | 4133 | { "sign", &pk_sign }, |
4123 | { "verify", &pk_verify }, | 4134 | { "verify", &pk_verify }, |
4124 | { "getDefaultDigestName", &pk_getDefaultDigestName }, | 4135 | { "getDefaultDigestName", &pk_getDefaultDigestName }, |
@@ -4163,7 +4174,9 @@ static const auxL_IntegerReg pk_rsa_pad_opts[] = { | |||
4163 | { "RSA_NO_PADDING", RSA_NO_PADDING }, // no padding | 4174 | { "RSA_NO_PADDING", RSA_NO_PADDING }, // no padding |
4164 | { "RSA_PKCS1_OAEP_PADDING", RSA_PKCS1_OAEP_PADDING }, // OAEP padding (encrypt and decrypt only) | 4175 | { "RSA_PKCS1_OAEP_PADDING", RSA_PKCS1_OAEP_PADDING }, // OAEP padding (encrypt and decrypt only) |
4165 | { "RSA_X931_PADDING", RSA_X931_PADDING }, // (signature operations only) | 4176 | { "RSA_X931_PADDING", RSA_X931_PADDING }, // (signature operations only) |
4177 | #if HAVE_RSA_PKCS1_PSS_PADDING | ||
4166 | { "RSA_PKCS1_PSS_PADDING", RSA_PKCS1_PSS_PADDING }, // (sign and verify only) | 4178 | { "RSA_PKCS1_PSS_PADDING", RSA_PKCS1_PSS_PADDING }, // (sign and verify only) |
4179 | #endif | ||
4167 | { NULL, 0 }, | 4180 | { NULL, 0 }, |
4168 | }; | 4181 | }; |
4169 | 4182 | ||