summaryrefslogtreecommitdiff
path: root/src/crypto/reflibs/Crypto/Random
diff options
context:
space:
mode:
authorRoman Smrž <roman.smrz@seznam.cz>2026-10-18 16:52:41 +0200
committerRoman Smrž <roman.smrz@seznam.cz>2026-10-25 21:27:38 +0100
commit0bb8daa7da52240a971a4ce83d97cfb62971ea78 (patch)
tree8e91ebd75f442384f2af4648847c2fdfe919f0b1 /src/crypto/reflibs/Crypto/Random
parente45b366ca8b9caa4fe0087e5c4fb1720472d9c23 (diff)
Add crypto backend using various reference librariesHEADmaster
Diffstat (limited to 'src/crypto/reflibs/Crypto/Random')
-rw-r--r--src/crypto/reflibs/Crypto/Random/Entropy.hs19
1 files changed, 19 insertions, 0 deletions
diff --git a/src/crypto/reflibs/Crypto/Random/Entropy.hs b/src/crypto/reflibs/Crypto/Random/Entropy.hs
new file mode 100644
index 0000000..d0685e4
--- /dev/null
+++ b/src/crypto/reflibs/Crypto/Random/Entropy.hs
@@ -0,0 +1,19 @@
+module Crypto.Random.Entropy (
+ getEntropy,
+) where
+
+import Foreign.C.Error
+import Foreign.C.Types
+import Foreign.Marshal.Alloc
+import Foreign.Ptr
+
+import Data.ByteString (ByteString)
+import Data.ByteString.Unsafe
+
+getEntropy :: Int -> IO ByteString
+getEntropy n = do
+ bytes <- mallocBytes n
+ throwErrnoIfMinus1_ "getentropy" $ c_getentropy bytes (fromIntegral n)
+ unsafePackMallocCStringLen ( bytes, n )
+
+foreign import ccall "unistd.h getentropy" c_getentropy :: Ptr CChar -> CSize -> IO CInt