diff options
author | Joey Hess <joeyh@joeyh.name> | 2016-08-07 19:18:52 -0400 |
---|---|---|
committer | Joey Hess <joeyh@joeyh.name> | 2016-08-07 19:18:52 -0400 |
commit | 730c54a40681776aaaab1b727af42559cf1592fe (patch) | |
tree | f3f2ffb6f65453d60bbbe30f5d87a2b359b657d6 /Serialization.hs | |
parent | d043057c6956b7cbc1abb3ea2d5d17bfae7abcc9 (diff) | |
download | keysafe-730c54a40681776aaaab1b727af42559cf1592fe.tar.gz |
serialization for tunings
Diffstat (limited to 'Serialization.hs')
-rw-r--r-- | Serialization.hs | 51 |
1 files changed, 45 insertions, 6 deletions
diff --git a/Serialization.hs b/Serialization.hs index 3c23137..172c6f9 100644 --- a/Serialization.hs +++ b/Serialization.hs @@ -1,15 +1,54 @@ {-# OPTIONS_GHC -fno-warn-orphans #-} +{-# LANGUAGE OverloadedStrings #-} module Serialization where import Types +import Cost import Raaz.Core.Encode +import qualified Crypto.Argon2 as Argon2 import qualified Data.ByteString as B import qualified Data.ByteString.Char8 as B8 import Data.Monoid import Data.Word import Text.Read +instance Encodable ExpensiveHashTunable where + toByteString (UseArgon2 o _) = B.intercalate (B.singleton sepChar) + [ showb (Argon2.hashIterations o) + , showb (Argon2.hashMemory o) + , showb (Argon2.hashParallelism o) + , case Argon2.hashVariant o of + Argon2.Argon2i -> "argon2i" + Argon2.Argon2d -> "argon2d" + ] + where + showb = B8.pack . show + fromByteString b = case B.split sepChar b of + (i:m:p:v:[]) -> do + o <- Argon2.HashOptions + <$> readb i + <*> readb m + <*> readb p + <*> case v of + "argon2i" -> return Argon2.Argon2i + "argon2d" -> return Argon2.Argon2d + _ -> Nothing + return $ UseArgon2 o unknownCost + _ -> Nothing + where + readb = readMaybe . B8.unpack + +instance Encodable EncryptionTunable where + toByteString UseAES256 = "AES" + fromByteString "AES" = Just UseAES256 + fromByteString _ = Nothing + +instance Encodable DecryptionPuzzleTunable where + toByteString (KeyBlindingLeftSide _) = ">" + fromByteString ">" = Just (KeyBlindingLeftSide unknownCost) + fromByteString _ = Nothing + -- TODO -- | An EncryptedSecretKey is serialized as first a md5sum of the rest -- of the content, and then a SelfDescription EncryptedSecretKey, @@ -22,8 +61,8 @@ import Text.Read -- For example "gpg Joey Hess" instance Encodable KeyIdent where toByteString (KeyIdent (KeyType t) (Name n)) = - t <> B.singleton identSepChar <> n - fromByteString b = case B.break (== identSepChar) b of + t <> B.singleton sepChar <> n + fromByteString b = case B.break (== sepChar) b of (t, n) | B.null n -> Nothing | otherwise -> Just $ @@ -33,8 +72,8 @@ instance Encodable KeyIdent where -- For example "1 gpg Joey Hess" instance Encodable ObjectIdent where toByteString (ObjectIdent (ShardNum n) keyident) = - B8.pack (show n) <> B.singleton identSepChar <> toByteString keyident - fromByteString b = case B.break (== identSepChar) b of + B8.pack (show n) <> B.singleton sepChar <> toByteString keyident + fromByteString b = case B.break (== sepChar) b of (ns, rest) | B.null ns -> Nothing | otherwise -> do @@ -42,5 +81,5 @@ instance Encodable ObjectIdent where n <- readMaybe (B8.unpack ns) return $ ObjectIdent (ShardNum n) keyident -identSepChar :: Word8 -identSepChar = 32 +sepChar :: Word8 +sepChar = 32 |