@@ -1,5 +1,6 @@
11module Crypto.Subtle.Key.Derive
22 ( deriveKey
3+ , deriveBits
34 , DeriveAlgorithm, ec, hkdf, pbkdf2
45 , DeriveTargetAlgorithm, hmac, aes
56 ) where
@@ -10,7 +11,7 @@ import Crypto.Subtle.EC (ECAlgorithm)
1011import Crypto.Subtle.AES (AESAlgorithm, AESBitLength)
1112
1213import Prelude ((<<<), (<$))
13−import Data.Function.Uncurried (Fn5, runFn5)
14+import Data.Function.Uncurried (Fn3, Fn5, runFn3, runFn5)
1415import Data.ArrayBuffer.Types (ArrayBuffer)
1516import Data.Either (Either (..))
1617import Effect.Promise (Promise, runPromise)
@@ -20,6 +21,7 @@ import Unsafe.Coerce (unsafeCoerce)
2021
2122
2223foreign import deriveKeyImpl :: Fn5 DeriveAlgorithm CryptoKey DeriveTargetAlgorithm Boolean (Array CryptoKeyUsage) (Promise CryptoKey)
24+foreign import deriveBitsImpl :: Fn3 DeriveAlgorithm CryptoKey Int (Promise ArrayBuffer)
2325
2426
2527deriveKey :: DeriveAlgorithm
@@ -31,6 +33,13 @@ deriveKey :: DeriveAlgorithm
3133deriveKey a k t e u = makeAff \resolve ->
3234 nonCanceler <$ runPromise (resolve <<< Right) (resolve <<< Left) (runFn5 deriveKeyImpl a k t e u)
3335
36+deriveBits :: DeriveAlgorithm
37+ -> CryptoKey -- ^ Base key
38+ -> Int -- ^ Length in bits
39+ -> Aff ArrayBuffer
40+deriveBits a k l = makeAff \resolve ->
41+ nonCanceler <$ runPromise (resolve <<< Right) (resolve <<< Left) (runFn3 deriveBitsImpl a k l)
42+
3443
3544foreign import data DeriveAlgorithm :: Type
3645foreign import data DeriveTargetAlgorithm :: Type