Software /
code /
prosody
Comparison
util-src/hashes.c @ 12562:4f4d096a14cb
util.hashes: Refactor PBKDF2 to deduplicate code
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Thu, 10 Sep 2020 21:58:25 +0200 |
parent | 12561:adfb46a3e8a7 |
child | 12563:d9a4e28689eb |
comparison
equal
deleted
inserted
replaced
12561:adfb46a3e8a7 | 12562:4f4d096a14cb |
---|---|
188 static int Lhmac_md5(lua_State *L) { | 188 static int Lhmac_md5(lua_State *L) { |
189 return Levp_hmac(L, EVP_md5()); | 189 return Levp_hmac(L, EVP_md5()); |
190 } | 190 } |
191 | 191 |
192 | 192 |
193 static int Lpbkdf2_sha1(lua_State *L) { | 193 static int Levp_pbkdf2(lua_State *L, const EVP_MD *evp, size_t out_len) { |
194 unsigned char out[SHA_DIGEST_LENGTH]; | 194 unsigned char out[EVP_MAX_MD_SIZE]; |
195 | 195 |
196 size_t pass_len, salt_len; | 196 size_t pass_len, salt_len; |
197 const char *pass = luaL_checklstring(L, 1, &pass_len); | 197 const char *pass = luaL_checklstring(L, 1, &pass_len); |
198 const unsigned char *salt = (unsigned char *)luaL_checklstring(L, 2, &salt_len); | 198 const unsigned char *salt = (unsigned char *)luaL_checklstring(L, 2, &salt_len); |
199 const int iter = luaL_checkinteger(L, 3); | 199 const int iter = luaL_checkinteger(L, 3); |
200 | 200 |
201 if(PKCS5_PBKDF2_HMAC(pass, pass_len, salt, salt_len, iter, EVP_sha1(), SHA_DIGEST_LENGTH, out) == 0) { | 201 if(PKCS5_PBKDF2_HMAC(pass, pass_len, salt, salt_len, iter, evp, out_len, out) == 0) { |
202 return luaL_error(L, "PKCS5_PBKDF2_HMAC() failed"); | 202 return luaL_error(L, "PKCS5_PBKDF2_HMAC() failed"); |
203 } | 203 } |
204 | 204 |
205 lua_pushlstring(L, (char *)out, SHA_DIGEST_LENGTH); | 205 lua_pushlstring(L, (char *)out, out_len); |
206 | 206 |
207 return 1; | 207 return 1; |
208 } | 208 } |
209 | 209 |
210 static int Lpbkdf2_sha1(lua_State *L) { | |
211 return Levp_pbkdf2(L, EVP_sha1(), SHA_DIGEST_LENGTH); | |
212 } | |
210 | 213 |
211 static int Lpbkdf2_sha256(lua_State *L) { | 214 static int Lpbkdf2_sha256(lua_State *L) { |
212 unsigned char out[SHA256_DIGEST_LENGTH]; | 215 return Levp_pbkdf2(L, EVP_sha256(), SHA256_DIGEST_LENGTH); |
213 | |
214 size_t pass_len, salt_len; | |
215 const char *pass = luaL_checklstring(L, 1, &pass_len); | |
216 const unsigned char *salt = (unsigned char *)luaL_checklstring(L, 2, &salt_len); | |
217 const int iter = luaL_checkinteger(L, 3); | |
218 | |
219 if(PKCS5_PBKDF2_HMAC(pass, pass_len, salt, salt_len, iter, EVP_sha256(), SHA256_DIGEST_LENGTH, out) == 0) { | |
220 return luaL_error(L, "PKCS5_PBKDF2_HMAC() failed"); | |
221 } | |
222 | |
223 lua_pushlstring(L, (char *)out, SHA256_DIGEST_LENGTH); | |
224 return 1; | |
225 } | 216 } |
226 | 217 |
227 static int Lhash_equals(lua_State *L) { | 218 static int Lhash_equals(lua_State *L) { |
228 size_t len1, len2; | 219 size_t len1, len2; |
229 const char *s1 = luaL_checklstring(L, 1, &len1); | 220 const char *s1 = luaL_checklstring(L, 1, &len1); |