module Z.Crypto.KeyWrap where
import Z.Botan.FFI
import qualified Z.Data.Vector as V
import Z.Foreign
keyWrap :: V.Bytes
-> V.Bytes
-> IO V.Bytes
{-# INLINABLE keyWrap #-}
keyWrap :: Bytes -> Bytes -> IO Bytes
keyWrap Bytes
key Bytes
kek =
Bytes -> (BA# Word8 -> Int -> Int -> IO Bytes) -> IO Bytes
forall a b.
Prim a =>
PrimVector a -> (BA# Word8 -> Int -> Int -> IO b) -> IO b
withPrimVectorUnsafe Bytes
key ((BA# Word8 -> Int -> Int -> IO Bytes) -> IO Bytes)
-> (BA# Word8 -> Int -> Int -> IO Bytes) -> IO Bytes
forall a b. (a -> b) -> a -> b
$ \ BA# Word8
key' Int
keyOff Int
keyLen ->
Bytes -> (BA# Word8 -> Int -> Int -> IO Bytes) -> IO Bytes
forall a b.
Prim a =>
PrimVector a -> (BA# Word8 -> Int -> Int -> IO b) -> IO b
withPrimVectorUnsafe Bytes
kek ((BA# Word8 -> Int -> Int -> IO Bytes) -> IO Bytes)
-> (BA# Word8 -> Int -> Int -> IO Bytes) -> IO Bytes
forall a b. (a -> b) -> a -> b
$ \ BA# Word8
kek' Int
kekOff Int
kekLen ->
Int -> (MBA# Word8 -> MBA# Word8 -> IO CInt) -> IO Bytes
forall r.
(HasCallStack, Integral r) =>
Int -> (MBA# Word8 -> MBA# Word8 -> IO r) -> IO Bytes
allocBotanBufferUnsafe (Bytes -> Int
forall (v :: * -> *) a. Vec v a => v a -> Int
V.length Bytes
key Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
8) ((MBA# Word8 -> MBA# Word8 -> IO CInt) -> IO Bytes)
-> (MBA# Word8 -> MBA# Word8 -> IO CInt) -> IO Bytes
forall a b. (a -> b) -> a -> b
$
BA# Word8
-> Int
-> Int
-> BA# Word8
-> Int
-> Int
-> MBA# Word8
-> MBA# Word8
-> IO CInt
hs_botan_key_wrap3394 BA# Word8
key' Int
keyOff Int
keyLen BA# Word8
kek' Int
kekOff Int
kekLen
keyUnwrap :: V.Bytes
-> V.Bytes
-> IO V.Bytes
{-# INLINABLE keyUnwrap #-}
keyUnwrap :: Bytes -> Bytes -> IO Bytes
keyUnwrap Bytes
key Bytes
kek =
Bytes -> (BA# Word8 -> Int -> Int -> IO Bytes) -> IO Bytes
forall a b.
Prim a =>
PrimVector a -> (BA# Word8 -> Int -> Int -> IO b) -> IO b
withPrimVectorUnsafe Bytes
key ((BA# Word8 -> Int -> Int -> IO Bytes) -> IO Bytes)
-> (BA# Word8 -> Int -> Int -> IO Bytes) -> IO Bytes
forall a b. (a -> b) -> a -> b
$ \ BA# Word8
key' Int
keyOff Int
keyLen ->
Bytes -> (BA# Word8 -> Int -> Int -> IO Bytes) -> IO Bytes
forall a b.
Prim a =>
PrimVector a -> (BA# Word8 -> Int -> Int -> IO b) -> IO b
withPrimVectorUnsafe Bytes
kek ((BA# Word8 -> Int -> Int -> IO Bytes) -> IO Bytes)
-> (BA# Word8 -> Int -> Int -> IO Bytes) -> IO Bytes
forall a b. (a -> b) -> a -> b
$ \ BA# Word8
kek' Int
kekOff Int
kekLen ->
Int -> (MBA# Word8 -> MBA# Word8 -> IO CInt) -> IO Bytes
forall r.
(HasCallStack, Integral r) =>
Int -> (MBA# Word8 -> MBA# Word8 -> IO r) -> IO Bytes
allocBotanBufferUnsafe (Bytes -> Int
forall (v :: * -> *) a. Vec v a => v a -> Int
V.length Bytes
key Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
8) ((MBA# Word8 -> MBA# Word8 -> IO CInt) -> IO Bytes)
-> (MBA# Word8 -> MBA# Word8 -> IO CInt) -> IO Bytes
forall a b. (a -> b) -> a -> b
$
BA# Word8
-> Int
-> Int
-> BA# Word8
-> Int
-> Int
-> MBA# Word8
-> MBA# Word8
-> IO CInt
hs_botan_key_unwrap3394 BA# Word8
key' Int
keyOff Int
keyLen BA# Word8
kek' Int
kekOff Int
kekLen