Software /
code /
prosody
Comparison
util-src/hashes.c @ 9970:4a43feb9ab15
Backed out changeset 61bc5c52c941
luaL_buffinitsize is only available in Lua 5.2+
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Sun, 21 Apr 2019 00:59:36 +0200 |
parent | 9969:61bc5c52c941 |
child | 10480:94cacf9fd0ae |
comparison
equal
deleted
inserted
replaced
9969:61bc5c52c941 | 9970:4a43feb9ab15 |
---|---|
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 | |
103 size_t pass_len, salt_len; | 105 size_t pass_len, salt_len; |
104 const char *pass = luaL_checklstring(L, 1, &pass_len); | 106 const char *pass = luaL_checklstring(L, 1, &pass_len); |
105 const unsigned char *salt = (unsigned char *)luaL_checklstring(L, 2, &salt_len); | 107 const unsigned char *salt = (unsigned char *)luaL_checklstring(L, 2, &salt_len); |
106 const int iter = luaL_checkinteger(L, 3); | 108 const int iter = luaL_checkinteger(L, 3); |
107 const size_t len = luaL_optinteger(L, 4, SHA_DIGEST_LENGTH); | |
108 | 109 |
109 luaL_Buffer b; | 110 if(PKCS5_PBKDF2_HMAC(pass, pass_len, salt, salt_len, iter, EVP_sha1(), SHA_DIGEST_LENGTH, out) == 0) { |
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) { | |
113 return luaL_error(L, "PKCS5_PBKDF2_HMAC() failed"); | 111 return luaL_error(L, "PKCS5_PBKDF2_HMAC() failed"); |
114 } | 112 } |
115 | 113 |
116 luaL_pushresultsize(&b, len); | 114 lua_pushlstring(L, (char *)out, SHA_DIGEST_LENGTH); |
115 | |
117 return 1; | 116 return 1; |
118 } | 117 } |
119 | 118 |
120 | 119 |
121 static int Lpbkdf2_sha256(lua_State *L) { | 120 static int Lpbkdf2_sha256(lua_State *L) { |
121 unsigned char out[SHA256_DIGEST_LENGTH]; | |
122 | |
122 size_t pass_len, salt_len; | 123 size_t pass_len, salt_len; |
123 const char *pass = luaL_checklstring(L, 1, &pass_len); | 124 const char *pass = luaL_checklstring(L, 1, &pass_len); |
124 const unsigned char *salt = (unsigned char *)luaL_checklstring(L, 2, &salt_len); | 125 const unsigned char *salt = (unsigned char *)luaL_checklstring(L, 2, &salt_len); |
125 const int iter = luaL_checkinteger(L, 3); | 126 const int iter = luaL_checkinteger(L, 3); |
126 const int len = luaL_optinteger(L, 4, SHA256_DIGEST_LENGTH); | |
127 | 127 |
128 luaL_Buffer b; | 128 if(PKCS5_PBKDF2_HMAC(pass, pass_len, salt, salt_len, iter, EVP_sha256(), SHA256_DIGEST_LENGTH, out) == 0) { |
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) { | |
132 return luaL_error(L, "PKCS5_PBKDF2_HMAC() failed"); | 129 return luaL_error(L, "PKCS5_PBKDF2_HMAC() failed"); |
133 } | 130 } |
134 | 131 |
135 luaL_pushresultsize(&b, len); | 132 lua_pushlstring(L, (char *)out, SHA_DIGEST_LENGTH); |
136 return 1; | 133 return 1; |
137 } | 134 } |
138 | 135 |
139 static const luaL_Reg Reg[] = { | 136 static const luaL_Reg Reg[] = { |
140 { "sha1", Lsha1 }, | 137 { "sha1", Lsha1 }, |