summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWilliam Ahern <william@25thandclement.com>2016-11-23 18:53:01 -0800
committerWilliam Ahern <william@25thandclement.com>2016-11-23 18:53:01 -0800
commit06a5b0529ea8d86072b7b759347f2c25e1e1b92c (patch)
tree3d22a4a74d0a09e86e6b07b3c6bf6a131046de72
parent1e71520fd53ff8735707e2f9c91b4551d6c9a88e (diff)
downloadluaossl-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.c35
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
3285static int pk_decrypt(lua_State *L) { 3293static 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;
3332sslerr: 3340sslerr:
@@ -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
3343static int pk_encrypt(lua_State *L) { 3352static 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;
3390sslerr: 3399sslerr:
@@ -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
3401static int pk_sign(lua_State *L) { 3410static 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