@@ -0,0 +1,57 @@
1+module Crypto.Subtle.Key
2+ ( CryptoKeyType
3+ , CryptoKeyUsage
4+ , encrypt, decrypt, sign, verify, deriveKey, deriveBits, unwrapKey, wrapKey
5+ , CryptoKey (..)
6+ , getType, getExtractable, getAlgorithm, getUsages
7+ ) where
8+
9+
10+import Foreign (Foreign)
11+
12+
13+
14+newtype CryptoKeyType = CryptoKeyType String
15+
16+newtype CryptoKeyUsage = CryptoKeyUsage String
17+
18+
19+encrypt :: CryptoKeyUsage
20+encrypt = CryptoKeyUsage "encrypt"
21+decrypt :: CryptoKeyUsage
22+decrypt = CryptoKeyUsage "decrypt"
23+sign :: CryptoKeyUsage
24+sign = CryptoKeyUsage "sign"
25+verify :: CryptoKeyUsage
26+verify = CryptoKeyUsage "verify"
27+deriveKey :: CryptoKeyUsage
28+deriveKey = CryptoKeyUsage "deriveKey"
29+deriveBits :: CryptoKeyUsage
30+deriveBits = CryptoKeyUsage "deriveBits"
31+wrapKey :: CryptoKeyUsage
32+wrapKey = CryptoKeyUsage "wrapKey"
33+unwrapKey :: CryptoKeyUsage
34+unwrapKey = CryptoKeyUsage "unwrapKey"
35+
36+
37+
38+
39+newtype CryptoKey = CryptoKey
40+ { "type" :: CryptoKeyType
41+ , extractable :: Boolean
42+ , algorithm :: Foreign
43+ , usages :: Array CryptoKeyUsage
44+ }
45+
46+
47+getType :: CryptoKey -> CryptoKeyType
48+getType (CryptoKey r) = r."type"
49+
50+getExtractable :: CryptoKey -> Boolean
51+getExtractable (CryptoKey r) = r.extractable
52+
53+getAlgorithm :: CryptoKey -> Foreign
54+getAlgorithm (CryptoKey r) = r.algorithm
55+
56+getUsages :: CryptoKey -> Array CryptoKeyUsage
57+getUsages (CryptoKey r) = r.usages