static int hmac_clone(lua_State *L) { HMAC_CTX *c = (HMAC_CTX*)luaL_checkudata(L, 1, LUACRYPTO_HMACNAME); HMAC_CTX *d = hmac_pnew(L); *d = *c; return 1; }
static int hmac_clone(lua_State *L) { HMAC_CTX *c = hmac_pget(L, 1); HMAC_CTX *d = hmac_pnew(L); *d = *c; return 1; }
static int hmac_clone(lua_State *L) { HANDLER_HMAC *c = hmac_pget(L, 1); HANDLER_HMAC *d = hmac_pnew(L); #if CRYPTO_OPENSSL *d = *c; #elif CRYPTO_GCRYPT gcry_md_copy(d, *c); #endif return 1; }
static int hmac_fnew(lua_State *L) { HMAC_CTX *c = hmac_pnew(L); const char *s = luaL_checkstring(L, 1); const char *k = luaL_checkstring(L, 2); const EVP_MD *type = EVP_get_digestbyname(s); if (type == NULL) return luaL_argerror(L, 1, "invalid digest type"); HMAC_CTX_init(c); HMAC_Init_ex(c, k, (int)lua_strlen(L, 2), type, NULL); return 1; }
static int hmac_fnew(lua_State *L) { HANDLER_HMAC *c = hmac_pnew(L); const char *s = luaL_checkstring(L, 1); size_t k_len; const char *k = luaL_checklstring(L, 2, &k_len); DIGEST_TYPE type = DIGEST_BY_NAME(s); if (IS_DIGEST_INVALID(type)) { luaL_argerror(L, 1, "invalid digest type"); return 0; } #if CRYPTO_OPENSSL HMAC_CTX_init(c); HMAC_Init_ex(c, k, k_len, type, NULL); #elif CRYPTO_GCRYPT gcry_md_open(c, type, GCRY_MD_FLAG_HMAC); gcry_md_setkey(*c, k, k_len); #endif return 1; }