diff options
author | William Ahern <william@25thandclement.com> | 2016-10-29 16:58:34 -0700 |
---|---|---|
committer | William Ahern <william@25thandclement.com> | 2016-10-29 16:58:34 -0700 |
commit | 38e4043d735f406c81173322f30e2a37d97101f5 (patch) | |
tree | 1c81611454c2756a8786bd22f528b12bbf3a49be /src/openssl.c | |
parent | 8aa467e04b93b62fef6a1b225944d82f00ff2168 (diff) | |
download | luaossl-38e4043d735f406c81173322f30e2a37d97101f5.tar.gz luaossl-38e4043d735f406c81173322f30e2a37d97101f5.tar.bz2 luaossl-38e4043d735f406c81173322f30e2a37d97101f5.zip |
add and use pkey:getDefaultDigestName because the old digest type names used in examples/vrfy.sig are not accepted by OpenSSL 1.1
Diffstat (limited to 'src/openssl.c')
-rw-r--r-- | src/openssl.c | 37 |
1 files changed, 28 insertions, 9 deletions
diff --git a/src/openssl.c b/src/openssl.c index 2fb7367..88c34d8 100644 --- a/src/openssl.c +++ b/src/openssl.c | |||
@@ -1336,7 +1336,7 @@ static int compat_EVP_PKEY_get_default_digest_nid(EVP_PKEY *key, int *nid) { | |||
1336 | *nid = EVP_MD_nid(EVP_ecdsa()); | 1336 | *nid = EVP_MD_nid(EVP_ecdsa()); |
1337 | break; | 1337 | break; |
1338 | default: | 1338 | default: |
1339 | *nid = EVP_MD_nid(EVP_md_null()); | 1339 | *nid = EVP_MD_nid(EVP_sha1()); |
1340 | break; | 1340 | break; |
1341 | } | 1341 | } |
1342 | 1342 | ||
@@ -3391,6 +3391,26 @@ static int pk_toPEM(lua_State *L) { | |||
3391 | } /* pk_toPEM() */ | 3391 | } /* pk_toPEM() */ |
3392 | 3392 | ||
3393 | 3393 | ||
3394 | static int pk_getDefaultDigestName(lua_State *L) { | ||
3395 | EVP_PKEY *key = checksimple(L, 1, PKEY_CLASS); | ||
3396 | int nid; | ||
3397 | char txt[256]; | ||
3398 | size_t len; | ||
3399 | |||
3400 | if (!(EVP_PKEY_get_default_digest_nid(key, &nid) > 0)) | ||
3401 | return auxL_error(L, auxL_EOPENSSL, "pkey:getDefaultDigestName"); | ||
3402 | |||
3403 | if (!(len = auxS_nid2txt(txt, sizeof txt, nid))) | ||
3404 | return auxL_error(L, auxL_EOPENSSL, "pkey:getDefaultDigestName"); | ||
3405 | if (len > sizeof txt) | ||
3406 | return auxL_error(L, EOVERFLOW, "pkey:getDefaultDigestName"); | ||
3407 | |||
3408 | lua_pushlstring(L, txt, len); | ||
3409 | |||
3410 | return 1; | ||
3411 | } /* pk_getDefaultDigestName() */ | ||
3412 | |||
3413 | |||
3394 | enum pk_param { | 3414 | enum pk_param { |
3395 | #define PK_RSA_OPTLIST { "n", "e", "d", "p", "q", "dmp1", "dmq1", "iqmp", NULL } | 3415 | #define PK_RSA_OPTLIST { "n", "e", "d", "p", "q", "dmp1", "dmq1", "iqmp", NULL } |
3396 | #define PK_RSA_OPTOFFSET PK_RSA_N | 3416 | #define PK_RSA_OPTOFFSET PK_RSA_N |
@@ -3944,6 +3964,7 @@ static const auxL_Reg pk_methods[] = { | |||
3944 | { "setPrivateKey", &pk_setPrivateKey }, | 3964 | { "setPrivateKey", &pk_setPrivateKey }, |
3945 | { "sign", &pk_sign }, | 3965 | { "sign", &pk_sign }, |
3946 | { "verify", &pk_verify }, | 3966 | { "verify", &pk_verify }, |
3967 | { "getDefaultDigestName", &pk_getDefaultDigestName }, | ||
3947 | { "toPEM", &pk_toPEM }, | 3968 | { "toPEM", &pk_toPEM }, |
3948 | { "getParameters", &pk_getParameters }, | 3969 | { "getParameters", &pk_getParameters }, |
3949 | { "setParameters", &pk_setParameters }, | 3970 | { "setParameters", &pk_setParameters }, |
@@ -5730,18 +5751,16 @@ static const EVP_MD *xc_signature(lua_State *L, int index, EVP_PKEY *key) { | |||
5730 | if ((id = luaL_optstring(L, index, NULL))) { | 5751 | if ((id = luaL_optstring(L, index, NULL))) { |
5731 | if (!(md = EVP_get_digestbyname(id))) | 5752 | if (!(md = EVP_get_digestbyname(id))) |
5732 | goto unknown; | 5753 | goto unknown; |
5733 | 5754 | } else { | |
5734 | return md; | 5755 | if (!(EVP_PKEY_get_default_digest_nid(key, &nid) > 0)) |
5756 | goto unknown; | ||
5757 | if (!(md = EVP_get_digestbynid(nid))) | ||
5758 | goto unknown; | ||
5735 | } | 5759 | } |
5736 | 5760 | ||
5737 | if (!(EVP_PKEY_get_default_digest_nid(key, &nid) > 0)) | ||
5738 | goto unknown; | ||
5739 | if (!(md = EVP_get_digestbynid(nid))) | ||
5740 | goto unknown; | ||
5741 | |||
5742 | return md; | 5761 | return md; |
5743 | unknown: | 5762 | unknown: |
5744 | return EVP_md_null(); | 5763 | return EVP_sha1(); |
5745 | } /* xc_signature() */ | 5764 | } /* xc_signature() */ |
5746 | 5765 | ||
5747 | static int xc_sign(lua_State *L) { | 5766 | static int xc_sign(lua_State *L) { |