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 },