Skip to content

Commit 6bfa704

Browse files
committed
some extra b64url and crypto stuff
1 parent a39dea4 commit 6bfa704

File tree

2 files changed

+59
-18
lines changed

2 files changed

+59
-18
lines changed

pub/functora/src/aes/Functora/Aes.hs

Lines changed: 32 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
module Functora.Aes
22
( Crypto,
33
encryptHmac,
4+
unsafeEncrypt,
45
unHmacDecrypt,
6+
unsafeDecrypt,
57
SomeAesKey,
68
drvSomeAesKey,
79
Word128,
@@ -39,20 +41,29 @@ encryptHmac ::
3941
SomeAesKey ->
4042
a ->
4143
Crypto
42-
encryptHmac (SomeAesKey cipher hmacer) plain =
44+
encryptHmac aes@(SomeAesKey _ hmacer) plain =
4345
Crypto
4446
{ cryptoValue = value,
4547
cryptoValueHmac = sha256Hmac (unOkm hmacer) value
4648
}
4749
where
48-
value =
49-
from @[Word8] @ByteString
50-
. Utils.listToOctets
51-
. Modes.cbc AES.encrypt 0 cipher
52-
. Utils.listFromOctets
53-
. from @ByteString @[Word8]
54-
. PKCS7.padBytesN bytesPerBlock
55-
$ from @a @ByteString plain
50+
value = unsafeEncrypt @a aes plain
51+
52+
unsafeEncrypt ::
53+
forall a.
54+
( From a ByteString
55+
) =>
56+
SomeAesKey ->
57+
a ->
58+
ByteString
59+
unsafeEncrypt (SomeAesKey cipher _) =
60+
from @[Word8] @ByteString
61+
. Utils.listToOctets
62+
. Modes.cbc AES.encrypt 0 cipher
63+
. Utils.listFromOctets
64+
. from @ByteString @[Word8]
65+
. PKCS7.padBytesN bytesPerBlock
66+
. from @a @ByteString
5667

5768
unHmacDecrypt ::
5869
forall a.
@@ -61,17 +72,27 @@ unHmacDecrypt ::
6172
SomeAesKey ->
6273
Crypto ->
6374
Maybe a
64-
unHmacDecrypt (SomeAesKey cipher hmacer) (Crypto value valueHmac) = do
75+
unHmacDecrypt aes@(SomeAesKey _ hmacer) (Crypto value valueHmac) = do
6576
if sha256Hmac (unOkm hmacer) value == valueHmac
6677
then Just ()
6778
else Nothing
79+
unsafeDecrypt aes value
80+
81+
unsafeDecrypt ::
82+
forall a.
83+
( From ByteString a
84+
) =>
85+
SomeAesKey ->
86+
ByteString ->
87+
Maybe a
88+
unsafeDecrypt (SomeAesKey cipher _) =
6889
fmap (from @ByteString @a)
6990
. PKCS7.unpadBytesN bytesPerBlock
7091
. from @[Word8] @ByteString
7192
. Utils.listToOctets
7293
. Modes.unCbc AES.decrypt 0 cipher
7394
. Utils.listFromOctets
74-
$ from @ByteString @[Word8] value
95+
. from @ByteString @[Word8]
7596

7697
bytesPerBlock :: Int
7798
bytesPerBlock = 16

pub/functora/src/cfg/Functora/Cfg.hs

Lines changed: 27 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ module Functora.Cfg
2323
encodeBinary,
2424
decodeBinaryB64Url,
2525
encodeBinaryB64Url,
26+
decodeB64Url,
27+
encodeB64Url,
2628
)
2729
where
2830

@@ -202,11 +204,7 @@ decodeBinaryB64Url ::
202204
str ->
203205
Either (BL.ByteString, Binary.ByteOffset, String) typ
204206
decodeBinaryB64Url b64 = do
205-
bin <-
206-
first (mempty,0,)
207-
. B64URL.decode
208-
. unTagged
209-
$ via @Text @str @(UTF_8 ByteString) b64
207+
bin <- first (mempty,0,) $ decodeB64Url @ByteString b64
210208
decodeBinary bin
211209

212210
encodeBinaryB64Url ::
@@ -217,9 +215,31 @@ encodeBinaryB64Url ::
217215
typ ->
218216
str
219217
encodeBinaryB64Url =
218+
encodeB64Url . Binary.encode
219+
220+
decodeB64Url ::
221+
forall bin str.
222+
( From str Text,
223+
From ByteString bin
224+
) =>
225+
str ->
226+
Either String bin
227+
decodeB64Url =
228+
fmap (from @ByteString @bin)
229+
. B64URL.decode
230+
. unTagged
231+
. via @Text @str @(UTF_8 ByteString)
232+
233+
encodeB64Url ::
234+
forall str bin.
235+
( From Text str,
236+
From bin ByteString
237+
) =>
238+
bin ->
239+
str
240+
encodeB64Url =
220241
from @Text @str
221242
. unsafeFrom @(UTF_8 ByteString) @Text
222243
. from @ByteString @(UTF_8 ByteString)
223244
. B64URL.encode
224-
. from @BL.ByteString @ByteString
225-
. Binary.encode
245+
. from @bin @ByteString

0 commit comments

Comments
 (0)