]> foleosoft.com Git - CryptoFoleo.git/commitdiff
Thu Aug 10 04:30:19 PM EDT 2023
authorserver <[email protected]>
Thu, 10 Aug 2023 20:30:19 +0000 (16:30 -0400)
committerserver <[email protected]>
Thu, 10 Aug 2023 20:30:19 +0000 (16:30 -0400)
bin/CryptoFoleo.hi
bin/CryptoFoleo.hs
bin/CryptoFoleo.o
bin/Main.hi
bin/Main.hs
bin/Main.o
bin/main

index 79305a37f5334811f5f6d59f6d96df94f7e2765a..19308d77017ea69c7a402144408541a51b943eb7 100644 (file)
Binary files a/bin/CryptoFoleo.hi and b/bin/CryptoFoleo.hi differ
index 85264edcf0c9a76aef5af88c1b0fa0042cb0e182..f6014c096dd7c4d99ee95d745b7f1d10ba47a73b 100644 (file)
@@ -4,6 +4,7 @@ module CryptoFoleo
         rsa_import,
         rsa_export,
         rsa_encrypt,
+        rsa_decrypt,
 
         rsa_padding_none,
         rsa_padding_encryption,
@@ -46,30 +47,51 @@ foreign import ccall unsafe "foleo_rsa_free"
 foreign import ccall unsafe "foleo_rsa_encrypt"
     c_rsa_encrypt :: Ptr () -> CUChar -> Ptr (CUChar) -> CUShort -> IO (Ptr (CUChar))
 
+foreign import ccall unsafe "foleo_rsa_decrypt"
+    c_rsa_decrypt :: Ptr () -> CUChar -> Ptr (CUChar) -> Ptr (CUShort) -> IO (Ptr (CUChar))
+
 --uint8_t* foleo_rsa_encrypt(rsakey_t* key, uint8_t padding, uint8_t* buffer, uint16_t bufferSize)
 
 foreign import ccall unsafe "free"
     c_free :: Ptr a -> IO ()
 
+
+rsa_padding_none :: Int
 rsa_padding_none = 99
+
+rsa_padding_encryption :: Int
 rsa_padding_encryption = 1
+
+rsa_padding_signature :: Int
 rsa_padding_signature = 2
 
 rsa_padding_oaep :: Int
 rsa_padding_oaep = 3
 
+rsa_padding_pss :: Int
 rsa_padding_pss = 4
 
-rsa_encrypt :: ByteString -> Int  -> ByteString-> IO (ByteString)
-rsa_encrypt bsKey padType bsMsg = do
-    useAsCString bsKey $ \keyPtr -> do
-        useAsCString bsMsg $ \msgPtr -> do
+rsa_encrypt :: ByteString -> Int -> ByteString-> IO (ByteString)
+rsa_encrypt keyBS padType ptBS = do
+    useAsCString keyBS $ \keyPtr -> do
+        useAsCString ptBS $ \ptPtr -> do
+            sModSize <- c_rsa_modsize (castPtr keyPtr)
+            ctPtr <- c_rsa_encrypt (castPtr keyPtr) (fromIntegral padType) (castPtr ptPtr) (fromIntegral (BS.length ptBS))
+            ctBS <- BI.create (fromIntegral sModSize) (\ptr -> MU.copyBytes ptr (castPtr ctPtr) (fromIntegral sModSize))
+            c_free ctPtr
+            return ctBS
+
+rsa_decrypt :: ByteString -> Int -> ByteString -> IO (ByteString)
+rsa_decrypt keyBS padType ctBS = do
+    useAsCString keyBS $ \keyPtr -> do
+        useAsCString ctBS $ \ctPtr -> do
             sModSize <- c_rsa_modsize (castPtr keyPtr)
-            ptrCT <- c_rsa_encrypt (castPtr keyPtr) (fromIntegral padType) (castPtr msgPtr) (fromIntegral (BS.length bsMsg))
-            bsCT <- BI.create (fromIntegral sModSize) (\ptr -> MU.copyBytes ptr (castPtr ptrCT) (fromIntegral sModSize))
-            c_free ptrCT
-            return bsCT
+            allocaBytes 2 $ \sizePtr -> do
+                ptPtr <- c_rsa_decrypt (castPtr keyPtr) (fromIntegral padType) (castPtr ctPtr) (castPtr sizePtr)
+                ptSize <- peek sizePtr
+                ptBS <- BI.create ptSize (\ptr -> MU.copyBytes ptr (castPtr ptPtr) ptSize)
+                c_free ptPtr
+                return ptBS
 
 rsa_keygen :: Word16 -> (ByteString -> ByteString -> IO ()) -> IO ()
 rsa_keygen n fn = do
@@ -98,8 +120,8 @@ rsa_import n fn = do
             rsa_free key
 
 rsa_export :: ByteString -> IO(String)
-rsa_export bsKey = do
-    useAsCString bsKey $ \keyPtr -> do
+rsa_export keyBS = do
+    useAsCString keyBS $ \keyPtr -> do
         cStrPtr <- c_rsa_export (castPtr keyPtr)
         cStr <- peekCString (castPtr cStrPtr)
         c_free cStrPtr
index cdeac85b18f6898239c024b52299bd1eb760d913..ce7906bce7b0ece77920b5c920f1ea876d373dc0 100644 (file)
Binary files a/bin/CryptoFoleo.o and b/bin/CryptoFoleo.o differ
index ae5c363c8169b66dc5b199b687df053fca22d44c..764fd94d1efc56e46e8f4782549bad83f31f6c40 100644 (file)
Binary files a/bin/Main.hi and b/bin/Main.hi differ
index 95ef9df2db55213f5bbe6d628a6fb68a6ecb09d4..893bd81ccce162da5d1260e48b8fb3b82f78f007 100644 (file)
@@ -7,7 +7,7 @@ import qualified Data.ByteString.Char8 as C8
 
 main :: IO()
 main = do
-    --generate key files if the ydon't exist
+    --generate key files if the don't exist
     existsPub <- doesFileExist "pub.key"
     existsPrv <- doesFileExist "prv.key"
     unless (existsPub && existsPrv) $ do
@@ -21,11 +21,12 @@ main = do
     spub <- readFile "pub.key"
     sprv <- readFile "prv.key"
     rsa_import spub $ \pubKey -> do
-        let msg = C8.pack "my message"
-        ct <- rsa_encrypt pubKey rsa_padding_oaep msg 
-        print msg
-        print ct
-        --rsa_import sprv $ \prvKey -> do
-        --putStrLn "hi"
+        rsa_import sprv $ \prvKey -> do
+            let pt = C8.pack "one two three it's photosynthesis you see"
+            ct <- rsa_encrypt pubKey rsa_padding_oaep pt
+            dt <- rsa_decrypt prvKey rsa_padding_oaep ct
+            putStrLn $ "Plaintext:\n\t" ++ (show pt)
+            putStrLn $ "Ciphertext:\n\t" ++ (show ct)
+            putStrLn $ "Decrypted message:\n\t" ++ (show dt)
 
 
index 5aed240672c9ddf4261c667575996dad7ad2cb90..669f3de5e8e915f46e4dd53a35c192f73ddff547 100644 (file)
Binary files a/bin/Main.o and b/bin/Main.o differ
index ea361b382db51036c194ac719e2ff140b683347d..dc273fa7c6d6a88a8a1232f50523550103118117 100755 (executable)
Binary files a/bin/main and b/bin/main differ