Comparison

util-src/crypto.c @ 12702:f63176781940

util.crypto: More digests for sign/verify, use macros for clarity/consistency
author Matthew Wild <mwild1@gmail.com>
date Sat, 02 Jul 2022 14:59:52 +0100
parent 12698:999663b4e39d
child 12714:82bca7191f13
comparison
equal deleted inserted replaced
12701:8e402a2ae1b8 12702:f63176781940
199 lua_pushnil(L); 199 lua_pushnil(L);
200 } 200 }
201 return 1; 201 return 1;
202 } 202 }
203 203
204 /* ecdsa_sha256_sign(key, data) */
205 static int Lecdsa_sha256_sign(lua_State *L) {
206 return base_evp_sign(L, NID_X9_62_id_ecPublicKey, EVP_sha256());
207 }
208
209 /* ecdsa_sha256_verify(key, data, sig) */
210 static int Lecdsa_sha256_verify(lua_State *L) {
211 return base_evp_verify(L, NID_X9_62_id_ecPublicKey, EVP_sha256());
212 }
213
214 static int push_pkey(lua_State *L, EVP_PKEY *pkey, const int type, const int privkey) { 204 static int push_pkey(lua_State *L, EVP_PKEY *pkey, const int type, const int privkey) {
215 EVP_PKEY **ud = lua_newuserdata(L, sizeof(EVP_PKEY*)); 205 EVP_PKEY **ud = lua_newuserdata(L, sizeof(EVP_PKEY*));
216 *ud = pkey; 206 *ud = pkey;
217 luaL_newmetatable(L, PKEY_MT_TAG); 207 luaL_newmetatable(L, PKEY_MT_TAG);
218 lua_setmetatable(L, -2); 208 lua_setmetatable(L, -2);
288 return base_evp_sign(L, NID_ED25519, NULL); 278 return base_evp_sign(L, NID_ED25519, NULL);
289 } 279 }
290 280
291 static int Led25519_verify(lua_State *L) { 281 static int Led25519_verify(lua_State *L) {
292 return base_evp_verify(L, NID_ED25519, NULL); 282 return base_evp_verify(L, NID_ED25519, NULL);
293 }
294
295 static int Lrsassa_pkcs1_256_sign(lua_State *L) {
296 return base_evp_sign(L, NID_rsaEncryption, EVP_sha256());
297 }
298
299 static int Lrsassa_pkcs1_256_verify(lua_State *L) {
300 return base_evp_verify(L, NID_rsaEncryption, EVP_sha256());
301 }
302
303 static int Lrsassa_pss_256_sign(lua_State *L) {
304 return base_evp_sign(L, NID_rsassaPss, EVP_sha256());
305 }
306
307 static int Lrsassa_pss_256_verify(lua_State *L) {
308 return base_evp_verify(L, NID_rsassaPss, EVP_sha256());
309 } 283 }
310 284
311 /* gcm_encrypt(key, iv, plaintext) */ 285 /* gcm_encrypt(key, iv, plaintext) */
312 static int Laes_gcm_encrypt(lua_State *L, const EVP_CIPHER *cipher, const unsigned char expected_key_len) { 286 static int Laes_gcm_encrypt(lua_State *L, const EVP_CIPHER *cipher, const unsigned char expected_key_len) {
313 EVP_CIPHER_CTX *ctx; 287 EVP_CIPHER_CTX *ctx;
527 ECDSA_SIG_free(sig); 501 ECDSA_SIG_free(sig);
528 502
529 return 1; 503 return 1;
530 } 504 }
531 505
506 #define REG_SIGN_VERIFY(algorithm, digest) \
507 { #algorithm "_" #digest "_sign", L ## algorithm ## _ ## digest ## _sign },\
508 { #algorithm "_" #digest "_verify", L ## algorithm ## _ ## digest ## _verify },
509
510 #define IMPL_SIGN_VERIFY(algorithm, key_type, digest) \
511 static int L ## algorithm ## _ ## digest ## _sign(lua_State *L) { \
512 return base_evp_sign(L, key_type, EVP_ ## digest()); \
513 } \
514 static int L ## algorithm ## _ ## digest ## _verify(lua_State *L) { \
515 return base_evp_verify(L, key_type, EVP_ ## digest()); \
516 }
517
518 IMPL_SIGN_VERIFY(ecdsa, NID_X9_62_id_ecPublicKey, sha256)
519 IMPL_SIGN_VERIFY(ecdsa, NID_X9_62_id_ecPublicKey, sha384)
520 IMPL_SIGN_VERIFY(ecdsa, NID_X9_62_id_ecPublicKey, sha512)
521
522 IMPL_SIGN_VERIFY(rsassa_pkcs1, NID_rsaEncryption, sha256)
523 IMPL_SIGN_VERIFY(rsassa_pkcs1, NID_rsaEncryption, sha384)
524 IMPL_SIGN_VERIFY(rsassa_pkcs1, NID_rsaEncryption, sha512)
525
526 IMPL_SIGN_VERIFY(rsassa_pss, NID_rsassaPss, sha256)
527 IMPL_SIGN_VERIFY(rsassa_pss, NID_rsassaPss, sha384)
528 IMPL_SIGN_VERIFY(rsassa_pss, NID_rsassaPss, sha512)
529
532 static const luaL_Reg Reg[] = { 530 static const luaL_Reg Reg[] = {
533 { "ed25519_sign", Led25519_sign }, 531 { "ed25519_sign", Led25519_sign },
534 { "ed25519_verify", Led25519_verify }, 532 { "ed25519_verify", Led25519_verify },
535 { "rsassa_pkcs1_256_sign", Lrsassa_pkcs1_256_sign }, 533
536 { "rsassa_pkcs1_256_verify", Lrsassa_pkcs1_256_verify }, 534 REG_SIGN_VERIFY(ecdsa, sha256)
537 { "rsassa_pss_256_sign", Lrsassa_pss_256_sign }, 535 REG_SIGN_VERIFY(ecdsa, sha384)
538 { "rsassa_pss_256_verify", Lrsassa_pss_256_verify }, 536 REG_SIGN_VERIFY(ecdsa, sha512)
537
538 REG_SIGN_VERIFY(rsassa_pkcs1, sha256)
539 REG_SIGN_VERIFY(rsassa_pkcs1, sha384)
540 REG_SIGN_VERIFY(rsassa_pkcs1, sha512)
541
542 REG_SIGN_VERIFY(rsassa_pss, sha256)
543 REG_SIGN_VERIFY(rsassa_pss, sha384)
544 REG_SIGN_VERIFY(rsassa_pss, sha512)
545
539 { "aes_128_gcm_encrypt", Laes_128_gcm_encrypt }, 546 { "aes_128_gcm_encrypt", Laes_128_gcm_encrypt },
540 { "aes_128_gcm_decrypt", Laes_128_gcm_decrypt }, 547 { "aes_128_gcm_decrypt", Laes_128_gcm_decrypt },
541 { "aes_256_gcm_encrypt", Laes_256_gcm_encrypt }, 548 { "aes_256_gcm_encrypt", Laes_256_gcm_encrypt },
542 { "aes_256_gcm_decrypt", Laes_256_gcm_decrypt }, 549 { "aes_256_gcm_decrypt", Laes_256_gcm_decrypt },
543 { "ecdsa_sha256_sign", Lecdsa_sha256_sign }, 550
544 { "ecdsa_sha256_verify", Lecdsa_sha256_verify },
545 { "generate_ed25519_keypair", Lgenerate_ed25519_keypair }, 551 { "generate_ed25519_keypair", Lgenerate_ed25519_keypair },
552
546 { "import_private_pem", Limport_private_pem }, 553 { "import_private_pem", Limport_private_pem },
547 { "import_public_pem", Limport_public_pem }, 554 { "import_public_pem", Limport_public_pem },
555
548 { "parse_ecdsa_signature", Lparse_ecdsa_signature }, 556 { "parse_ecdsa_signature", Lparse_ecdsa_signature },
549 { "build_ecdsa_signature", Lbuild_ecdsa_signature }, 557 { "build_ecdsa_signature", Lbuild_ecdsa_signature },
550 { NULL, NULL } 558 { NULL, NULL }
551 }; 559 };
552 560