util-src/hashes.c
changeset 9973 61bc5c52c941
parent 9972 d536796a305f
child 9974 4a43feb9ab15
equal deleted inserted replaced
9972:d536796a305f 9973:61bc5c52c941
    98 MAKE_HMAC_FUNCTION(Lhmac_sha256, EVP_sha256, SHA256_DIGEST_LENGTH, SHA256_CTX)
    98 MAKE_HMAC_FUNCTION(Lhmac_sha256, EVP_sha256, SHA256_DIGEST_LENGTH, SHA256_CTX)
    99 MAKE_HMAC_FUNCTION(Lhmac_sha512, EVP_sha512, SHA512_DIGEST_LENGTH, SHA512_CTX)
    99 MAKE_HMAC_FUNCTION(Lhmac_sha512, EVP_sha512, SHA512_DIGEST_LENGTH, SHA512_CTX)
   100 MAKE_HMAC_FUNCTION(Lhmac_md5, EVP_md5, MD5_DIGEST_LENGTH, MD5_CTX)
   100 MAKE_HMAC_FUNCTION(Lhmac_md5, EVP_md5, MD5_DIGEST_LENGTH, MD5_CTX)
   101 
   101 
   102 static int Lpbkdf2_sha1(lua_State *L) {
   102 static int Lpbkdf2_sha1(lua_State *L) {
   103 	unsigned char out[SHA_DIGEST_LENGTH];
       
   104 
       
   105 	size_t pass_len, salt_len;
   103 	size_t pass_len, salt_len;
   106 	const char *pass = luaL_checklstring(L, 1, &pass_len);
   104 	const char *pass = luaL_checklstring(L, 1, &pass_len);
   107 	const unsigned char *salt = (unsigned char *)luaL_checklstring(L, 2, &salt_len);
   105 	const unsigned char *salt = (unsigned char *)luaL_checklstring(L, 2, &salt_len);
   108 	const int iter = luaL_checkinteger(L, 3);
   106 	const int iter = luaL_checkinteger(L, 3);
       
   107 	const size_t len = luaL_optinteger(L, 4, SHA_DIGEST_LENGTH);
   109 
   108 
   110 	if(PKCS5_PBKDF2_HMAC(pass, pass_len, salt, salt_len, iter, EVP_sha1(), SHA_DIGEST_LENGTH, out) == 0) {
   109 	luaL_Buffer b;
       
   110 	unsigned char *out = (unsigned char *)luaL_buffinitsize(L, &b, len);
       
   111 
       
   112 	if(PKCS5_PBKDF2_HMAC(pass, pass_len, salt, salt_len, iter, EVP_sha1(), len, out) == 0) {
   111 		return luaL_error(L, "PKCS5_PBKDF2_HMAC() failed");
   113 		return luaL_error(L, "PKCS5_PBKDF2_HMAC() failed");
   112 	}
   114 	}
   113 
   115 
   114 	lua_pushlstring(L, (char *)out, SHA_DIGEST_LENGTH);
   116 	luaL_pushresultsize(&b, len);
   115 
       
   116 	return 1;
   117 	return 1;
   117 }
   118 }
   118 
   119 
   119 
   120 
   120 static int Lpbkdf2_sha256(lua_State *L) {
   121 static int Lpbkdf2_sha256(lua_State *L) {
   121 	unsigned char out[SHA256_DIGEST_LENGTH];
       
   122 
       
   123 	size_t pass_len, salt_len;
   122 	size_t pass_len, salt_len;
   124 	const char *pass = luaL_checklstring(L, 1, &pass_len);
   123 	const char *pass = luaL_checklstring(L, 1, &pass_len);
   125 	const unsigned char *salt = (unsigned char *)luaL_checklstring(L, 2, &salt_len);
   124 	const unsigned char *salt = (unsigned char *)luaL_checklstring(L, 2, &salt_len);
   126 	const int iter = luaL_checkinteger(L, 3);
   125 	const int iter = luaL_checkinteger(L, 3);
       
   126 	const int len = luaL_optinteger(L, 4, SHA256_DIGEST_LENGTH);
   127 
   127 
   128 	if(PKCS5_PBKDF2_HMAC(pass, pass_len, salt, salt_len, iter, EVP_sha256(), SHA256_DIGEST_LENGTH, out) == 0) {
   128 	luaL_Buffer b;
       
   129 	unsigned char *out = (unsigned char *)luaL_buffinitsize(L, &b, len);
       
   130 
       
   131 	if(PKCS5_PBKDF2_HMAC(pass, pass_len, salt, salt_len, iter, EVP_sha256(), len, out) == 0) {
   129 		return luaL_error(L, "PKCS5_PBKDF2_HMAC() failed");
   132 		return luaL_error(L, "PKCS5_PBKDF2_HMAC() failed");
   130 	}
   133 	}
   131 
   134 
   132 	lua_pushlstring(L, (char *)out, SHA_DIGEST_LENGTH);
   135 	luaL_pushresultsize(&b, len);
   133 	return 1;
   136 	return 1;
   134 }
   137 }
   135 
   138 
   136 static const luaL_Reg Reg[] = {
   139 static const luaL_Reg Reg[] = {
   137 	{ "sha1",		Lsha1		},
   140 	{ "sha1",		Lsha1		},