From 4a7145f57b080d8f59d24732ea8e0fb6f52fe205 Mon Sep 17 00:00:00 2001 From: miha-q <> Date: Wed, 16 Aug 2023 22:55:14 -0400 Subject: [PATCH] Wed Aug 16 10:55:14 PM EDT 2023 --- bin/CryptoFoleo.h | 1 - bin/CryptoFoleo.hs | 12 ----- bin/libCryptoFoleo.so | Bin 44816 -> 44904 bytes src/all.c | 3 +- src/auth.c | 35 ------------ src/dhke.c | 7 +-- src/headers.h | 1 - src/headers.hs | 12 ----- src/prigen.c | 13 ++--- src/rand.c | 123 ++++++++++++++++++++++++++++++++++++++++++ src/rsa.c | 12 +++-- 11 files changed, 143 insertions(+), 76 deletions(-) delete mode 100644 src/auth.c create mode 100644 src/rand.c diff --git a/bin/CryptoFoleo.h b/bin/CryptoFoleo.h index 5829a63..7c7e0e3 100644 --- a/bin/CryptoFoleo.h +++ b/bin/CryptoFoleo.h @@ -44,4 +44,3 @@ uint8_t* foleo_hmac_hkdf(uint8_t, uint32_t, uint8_t*, uint32_t, uint8_t*, uint32 uint8_t* foleo_hmac_prf(uint8_t, uint32_t, uint8_t*, uint32_t, uint8_t*, uint32_t, uint8_t*, uint32_t); uint8_t foleo_hash_size(uint8_t); -uint8_t foleo_auth(uint8_t*, uint8_t*); diff --git a/bin/CryptoFoleo.hs b/bin/CryptoFoleo.hs index 41753f3..9a3ba7a 100644 --- a/bin/CryptoFoleo.hs +++ b/bin/CryptoFoleo.hs @@ -1,7 +1,5 @@ module CryptoFoleo ( - auth, - dhke, chacha20, poly1305, @@ -42,9 +40,6 @@ import qualified Data.ByteString.Internal as BI import qualified Foreign.Marshal.Utils as MU import qualified Data.ByteString.Char8 as C8 -foreign import ccall unsafe "foleo_auth" - c_auth :: Ptr(CUChar) -> Ptr(CUChar) -> IO(CUChar) - foreign import ccall unsafe "foleo_rsa_keysize" c_rsa_keysize :: IO (CUShort) @@ -182,13 +177,6 @@ rsa_export keyBS = do rsa_free :: ByteString -> IO() rsa_free blob = useAsCString blob $ \ptr -> c_rsa_free (castPtr ptr) -auth :: String -> String -> IO (Bool) -auth u p = do - useAsCString (C8.pack u) $ \uPtr -> do - useAsCString (C8.pack p) $ \pPtr -> do - r <- c_auth (castPtr uPtr) (castPtr pPtr) - if (fromIntegral r) == 1 then return True else return False - dhke :: [ByteString] -> IO (ByteString) dhke v = do c_modSize <- c_dhke_modsize diff --git a/bin/libCryptoFoleo.so b/bin/libCryptoFoleo.so index b5387187cbd296f8ef1efb2213afe8a3af57d3ff..b885eda57b779e8852bbdff89734bff3f844473e 100755 GIT binary patch delta 11142 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 -#include -#include -#include -#include -#include -#include -#include - -uint8_t foleo_auth(uint8_t* username, uint8_t* password) -{ - struct spwd spw, *result; - char *buf; - size_t bufsize; - - bufsize = sysconf(_SC_GETPW_R_SIZE_MAX); - if (bufsize == -1) { - bufsize = 16384; // use a default size if sysconf returns indeterminate size - } - - buf = malloc(bufsize); - getspnam_r(username, &spw, buf, bufsize, &result); - if (result == NULL) - { - free(buf); - return 0; - } - - int status = strcmp(crypt(password, spw.sp_pwdp), spw.sp_pwdp) == 0; - free(buf); - return status; -} -#endif diff --git a/src/dhke.c b/src/dhke.c index 488bbba..4e939e7 100644 --- a/src/dhke.c +++ b/src/dhke.c @@ -4,6 +4,7 @@ #include #include #include +#include "rand.c" /* dhke(private, public) @@ -167,9 +168,9 @@ uint8_t* foleo_dhke(uint8_t* private, uint8_t* public) if (private == NULL && public == NULL) { - FILE* f = fopen(DEVICE, "r"); - fread(out, 1, 512, f); - fclose(f); + void* f = rand_begin(); + rand_get(f, out, 512); + rand_end(f); out[0] = out[0] & 0b01111111; } else if (private != NULL && public == NULL) diff --git a/src/headers.h b/src/headers.h index 5829a63..7c7e0e3 100644 --- a/src/headers.h +++ b/src/headers.h @@ -44,4 +44,3 @@ uint8_t* foleo_hmac_hkdf(uint8_t, uint32_t, uint8_t*, uint32_t, uint8_t*, uint32 uint8_t* foleo_hmac_prf(uint8_t, uint32_t, uint8_t*, uint32_t, uint8_t*, uint32_t, uint8_t*, uint32_t); uint8_t foleo_hash_size(uint8_t); -uint8_t foleo_auth(uint8_t*, uint8_t*); diff --git a/src/headers.hs b/src/headers.hs index 41753f3..9a3ba7a 100644 --- a/src/headers.hs +++ b/src/headers.hs @@ -1,7 +1,5 @@ module CryptoFoleo ( - auth, - dhke, chacha20, poly1305, @@ -42,9 +40,6 @@ import qualified Data.ByteString.Internal as BI import qualified Foreign.Marshal.Utils as MU import qualified Data.ByteString.Char8 as C8 -foreign import ccall unsafe "foleo_auth" - c_auth :: Ptr(CUChar) -> Ptr(CUChar) -> IO(CUChar) - foreign import ccall unsafe "foleo_rsa_keysize" c_rsa_keysize :: IO (CUShort) @@ -182,13 +177,6 @@ rsa_export keyBS = do rsa_free :: ByteString -> IO() rsa_free blob = useAsCString blob $ \ptr -> c_rsa_free (castPtr ptr) -auth :: String -> String -> IO (Bool) -auth u p = do - useAsCString (C8.pack u) $ \uPtr -> do - useAsCString (C8.pack p) $ \pPtr -> do - r <- c_auth (castPtr uPtr) (castPtr pPtr) - if (fromIntegral r) == 1 then return True else return False - dhke :: [ByteString] -> IO (ByteString) dhke v = do c_modSize <- c_dhke_modsize diff --git a/src/prigen.c b/src/prigen.c index a78187e..7b2d84d 100644 --- a/src/prigen.c +++ b/src/prigen.c @@ -4,14 +4,15 @@ #include #include #include +#include "rand.c" -static void FOLEO_PRIGEN_GetRandom(mpz_t n, uint16_t bytes, FILE *f) +static void FOLEO_PRIGEN_GetRandom(mpz_t n, uint16_t bytes, void* f) { mpz_set_ui(n, 0); for (uint16_t i = 0; i < bytes; i++) { mpz_mul_2exp(n, n, 8); - uint8_t c = fgetc(f); + uint8_t c = rand_getc(f); if (i == 0) c |= 0b10000000; if (i == bytes - 1) c |= 1; mpz_add_ui(n, n, c); @@ -103,19 +104,19 @@ static uint8_t FOLEO_PRIGEN_PrimeTest(mpz_t n) static void FOLEO_PRIGEN_GeneratePrime(mpz_t n, int bytes) { - FILE *f = fopen(DEVICE, "r"); + void* f = rand_begin(); do { FOLEO_PRIGEN_GetRandom(n, bytes, f); } while (!FOLEO_PRIGEN_PrimeTest(n)); - fclose(f); + rand_end(f); } /* Generate prime of X bytes */ static uint8_t* foleo_prigen(uint16_t bytes) { uint8_t* buffer = malloc(bytes); - FILE *f = fopen(DEVICE, "r"); + void* f = rand_begin(); mpz_t n, t; mpz_init(n); do @@ -124,7 +125,7 @@ static uint8_t* foleo_prigen(uint16_t bytes) } while (!FOLEO_PRIGEN_PrimeTest(n)); mpz_export(buffer, NULL, 1, 1, 0, 0, n); mpz_clear(n); - fclose(f); + rand_end(f); return buffer; } #endif diff --git a/src/rand.c b/src/rand.c new file mode 100644 index 0000000..fe463bb --- /dev/null +++ b/src/rand.c @@ -0,0 +1,123 @@ +#ifndef __RAND__ +#define __RAND__ + +#include +#include +#include +#include + +#define RAND_MODE_DEVR 1 +#define RAND_MODE_DEV 2 +#define RAND_MODE_X86 3 +uint8_t RAND_MODE = RAND_MODE_X86; +uint8_t* RAND_INFO = NULL; + +static void* rand_begin() +{ + if (RAND_MODE == RAND_MODE_DEVR) + { + FILE* f = fopen("/dev/random", "r"); + if (!f) + { + fprintf(stderr, "rand_begin(): RAND_MODE invalid.\n"); + return NULL; + } + return f; + } + else if (RAND_MODE == RAND_MODE_DEV) + { + FILE* f = fopen(RAND_INFO, "r"); + if (!f) + { + fprintf(stderr, "rand_begin(): RAND_MODE invalid.\n"); + return NULL; + } + return f; + } + else + { + return NULL; + } +} + +static void rand_get(void* context, uint8_t* buf, size_t bytes) +{ + if (RAND_MODE == RAND_MODE_DEVR || RAND_MODE == RAND_MODE_DEV) + { + if (context == NULL) + { + memset(buf, 0, bytes); + } + else + { + FILE* f = (FILE*)context; + fread(buf, 1, bytes, f); + } + } + else if (RAND_MODE == RAND_MODE_X86) + { + uint64_t r; + uint8_t avail = 0; + for (size_t i = 0; i < bytes; i++) + { + if (avail == 0) + { + __asm__ volatile ("1:;rdseed %0;;jnc 1b;" : "=r" (r)); + avail = 4; + } + buf[i] = r & 0xFF; + r >>= 8; + avail -= 1; + } + } +} + +static uint8_t rand_getc(void* context) +{ + if (RAND_MODE == RAND_MODE_DEVR || RAND_MODE == RAND_MODE_DEV) + { + if (context == NULL) + { + return 0; + } + else + { + return fgetc((FILE*)context); + } + } + else if (RAND_MODE == RAND_MODE_X86) + { + uint64_t r; + __asm__ volatile ("1:;rdseed %0;;jnc 1b;" : "=r" (r)); + return r & 0xFF; + } +} + +static void rand_end(void* context) +{ + if (RAND_MODE == RAND_MODE_DEVR || RAND_MODE == RAND_MODE_DEV) + { + fclose((FILE*)context); + } +} + +void rand_mode(uint8_t mode, uint8_t* info) +{ + if (mode == RAND_MODE_DEVR || mode == RAND_MODE_DEV || mode == RAND_MODE_X86) + { + if (mode == RAND_MODE_DEV) + { + if (info != NULL) + { + RAND_MODE = mode; + RAND_INFO = info; + } + } + else + { + RAND_MODE = mode; + } + } +} + +#endif \ No newline at end of file diff --git a/src/rsa.c b/src/rsa.c index 7774c56..b0354d3 100644 --- a/src/rsa.c +++ b/src/rsa.c @@ -6,6 +6,7 @@ #include #include "sha256.c" #include "prigen.c" +#include "rand.c" static void foleo_rsa_store(mpz_t n, uint8_t* b, uint32_t s) { @@ -422,8 +423,9 @@ static uint8_t* FOLEO_RSA_Pad(uint16_t size, uint8_t* buffer, uint16_t bufferSiz uint16_t psLen = size - (3 + bufferSizeInBytes); uint8_t* ps = malloc(psLen); - FILE* f = fopen(DEVICE, "r"); - fread(ps, 1, psLen, f); + void* f = rand_begin(); + rand_get(f, ps, psLen); + rand_end(f); for (uint16_t j = 0; j < psLen; j++) { @@ -564,8 +566,8 @@ static uint8_t* FOLEO_RSA_PadOAEP(uint16_t size, uint8_t* buffer, uint16_t mLen) //Build Seed uint8_t Seed[hLen]; - FILE* f = fopen(DEVICE, "r"); - fread(Seed, 1, hLen, f); + void* f = rand_begin(); + rand_get(f, Seed, hLen); fclose(f); //Build DB @@ -716,4 +718,6 @@ uint16_t foleo_rsa_keysize() { return sizeof(rsakey_t); } //get the size of the RSA modulus in bytes uint16_t foleo_rsa_modsize(rsakey_t* key) { return (key->bitWidth / 8) + (key->bitWidth % 8 != 0 ? 1 : 0); } +void rand_mode(uint8_t, uint8_t*); + #endif -- 2.39.5