Cleanup functions. Import GetHardRandom from https.h

This commit is contained in:
Miguel Terron 2025-05-20 08:35:14 +12:00
parent ed0c6c5757
commit 45389d9b23

View file

@ -16,26 +16,17 @@
TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE. PERFORMANCE OF THIS SOFTWARE.
*/ */
#include "libc/assert.h"
#include "libc/log/check.h" // lrsa.c - RSA key generation, encryption, decryption, signing, and
// verification for redbean
#include "libc/log/log.h" #include "libc/log/log.h"
#include "libc/stdio/rand.h" #include "net/https/https.h"
#include "libc/str/str.h"
#include "third_party/lua/lauxlib.h" #include "third_party/lua/lauxlib.h"
#include "third_party/mbedtls/ctr_drbg.h"
#include "third_party/mbedtls/error.h" #include "third_party/mbedtls/error.h"
#include "third_party/mbedtls/pk.h" #include "third_party/mbedtls/pk.h"
#include "third_party/mbedtls/rsa.h" #include "third_party/mbedtls/rsa.h"
int GenerateHardRandom(void *ctx, unsigned char *p, size_t n) {
size_t i;
ssize_t rc;
for (i = 0; i < n; i += (size_t)rc) {
npassert((rc = getrandom(p + i, n - i, 0)) != -1);
}
return 0;
}
static bool GenerateKeyPair(char **private_key_pem, size_t *private_key_len, static bool GenerateKeyPair(char **private_key_pem, size_t *private_key_len,
char **public_key_pem, size_t *public_key_len, char **public_key_pem, size_t *public_key_len,
unsigned int key_length) { unsigned int key_length) {
@ -95,7 +86,7 @@ static bool GenerateKeyPair(char **private_key_pem, size_t *private_key_len,
* @return 2 on success (private_key, public_key), 2 on failure (nil, * @return 2 on success (private_key, public_key), 2 on failure (nil,
* error_message) * error_message)
*/ */
int LuaGenerateKeyPair(lua_State *L) { static int LuaGenerateKeyPair(lua_State *L) {
char *private_key, *public_key; char *private_key, *public_key;
size_t private_len, public_len; size_t private_len, public_len;
int key_length = 2048; // Default RSA key length int key_length = 2048; // Default RSA key length
@ -177,7 +168,7 @@ static char *Encrypt(const char *public_key_pem, const unsigned char *data,
mbedtls_pk_free(&key); mbedtls_pk_free(&key);
return (char *)output; return (char *)output;
} }
int LuaEncrypt(lua_State *L) { static int LuaEncrypt(lua_State *L) {
const char *public_key = luaL_checkstring(L, 1); const char *public_key = luaL_checkstring(L, 1);
size_t data_len; size_t data_len;
const unsigned char *data = const unsigned char *data =
@ -242,7 +233,7 @@ static char *Decrypt(const char *private_key_pem,
mbedtls_pk_free(&key); mbedtls_pk_free(&key);
return (char *)output; return (char *)output;
} }
int LuaDecrypt(lua_State *L) { static int LuaDecrypt(lua_State *L) {
const char *private_key = luaL_checkstring(L, 1); const char *private_key = luaL_checkstring(L, 1);
size_t encrypted_len; size_t encrypted_len;
const unsigned char *encrypted_data = const unsigned char *encrypted_data =
@ -321,7 +312,7 @@ static char *Sign(const char *private_key_pem, const unsigned char *data,
// Sign the hash // Sign the hash
if ((rc = mbedtls_pk_sign(&key, hash_algo, hash, hash_len, signature, sig_len, if ((rc = mbedtls_pk_sign(&key, hash_algo, hash, hash_len, signature, sig_len,
GenerateHardRandom, NULL)) != 0) { GenerateHardRandom, 0)) != 0) {
free(signature); free(signature);
mbedtls_pk_free(&key); mbedtls_pk_free(&key);
return NULL; return NULL;
@ -332,7 +323,7 @@ static char *Sign(const char *private_key_pem, const unsigned char *data,
return (char *)signature; return (char *)signature;
} }
int LuaSign(lua_State *L) { static int LuaSign(lua_State *L) {
size_t msg_len, key_len; size_t msg_len, key_len;
const char *msg, *key_pem, *hash_algo_str = NULL; const char *msg, *key_pem, *hash_algo_str = NULL;
unsigned char *signature; unsigned char *signature;
@ -421,7 +412,7 @@ static int Verify(const char *public_key_pem, const unsigned char *data,
return rc; // 0 means success (valid signature) return rc; // 0 means success (valid signature)
} }
int LuaVerify(lua_State *L) { static int LuaVerify(lua_State *L) {
size_t msg_len, key_len, sig_len; size_t msg_len, key_len, sig_len;
const char *msg, *key_pem, *signature, *hash_algo_str = NULL; const char *msg, *key_pem, *signature, *hash_algo_str = NULL;
int result; int result;