summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Joey Hess <joeyh@joeyh.name>2015-04-19 10:57:14 -0400
committerGravatar Joey Hess <joeyh@joeyh.name>2015-04-19 10:57:14 -0400
commit85b079c4dfefac889d1a814e95390e29b575570d (patch)
treeaea7f0d947e54757fcc73ef5b80a275267839aed
parent5610389a6880a82947582842db2d762a353b1f33 (diff)
refactor
-rw-r--r--Types/Crypto.hs41
-rw-r--r--Utility/Hash.hs41
2 files changed, 40 insertions, 42 deletions
diff --git a/Types/Crypto.hs b/Types/Crypto.hs
index ec61f1c4b..79970c288 100644
--- a/Types/Crypto.hs
+++ b/Types/Crypto.hs
@@ -17,12 +17,7 @@ module Types.Crypto (
calcMac,
) where
-import qualified Data.Text as T
-import qualified Data.Text.Encoding as T
-import Data.Digest.Pure.SHA
-import qualified Data.ByteString as B
-import Crypto.Hash
-
+import Utility.Hash
import Utility.Gpg (KeyIds(..))
-- XXX ideally, this would be a locked memory region
@@ -34,13 +29,6 @@ data StorableCipher = EncryptedCipher String EncryptedCipherVariant KeyIds
data EncryptedCipherVariant = Hybrid | PubKey
deriving (Ord, Eq)
-{- File names are (client-side) MAC'ed on special remotes.
- - The chosen MAC algorithm needs to be same for all files stored on the
- - remote.
- -}
-data Mac = HmacSha1 | HmacSha224 | HmacSha256 | HmacSha384 | HmacSha512
- deriving (Eq)
-
defaultMac :: Mac
defaultMac = HmacSha1
@@ -60,30 +48,3 @@ readMac "HMACSHA256" = Just HmacSha256
readMac "HMACSHA384" = Just HmacSha384
readMac "HMACSHA512" = Just HmacSha512
readMac _ = Nothing
-
-calcMac
- :: Mac -- ^ MAC
- -> B.ByteString -- ^ secret key
- -> B.ByteString -- ^ message
- -> String -- ^ MAC'ed message, in hexadecimal
-calcMac mac = case mac of
- HmacSha1 -> use SHA1
- HmacSha224 -> use SHA224
- HmacSha256 -> use SHA256
- HmacSha384 -> use SHA384
- HmacSha512 -> use SHA512
- where
- use alg k m = show (hmacGetDigest (hmacAlg alg k m))
-
--- Check that all the MACs continue to produce the same.
-prop_mac_stable :: Bool
-prop_mac_stable = all (\(mac, result) -> calcMac mac key msg == result)
- [ (HmacSha1, "46b4ec586117154dacd49d664e5d63fdc88efb51")
- , (HmacSha224, "4c1f774863acb63b7f6e9daa9b5c543fa0d5eccf61e3ffc3698eacdd")
- , (HmacSha256, "f9320baf0249169e73850cd6156ded0106e2bb6ad8cab01b7bbbebe6d1065317")
- , (HmacSha384, "3d10d391bee2364df2c55cf605759373e1b5a4ca9355d8f3fe42970471eca2e422a79271a0e857a69923839015877fc6")
- , (HmacSha512, "114682914c5d017dfe59fdc804118b56a3a652a0b8870759cf9e792ed7426b08197076bf7d01640b1b0684df79e4b67e37485669e8ce98dbab60445f0db94fce")
- ]
- where
- key = T.encodeUtf8 $ T.pack "foo"
- msg = T.encodeUtf8 $ T.pack "bar"
diff --git a/Utility/Hash.hs b/Utility/Hash.hs
index 9881815bd..f960a134f 100644
--- a/Utility/Hash.hs
+++ b/Utility/Hash.hs
@@ -9,13 +9,16 @@ module Utility.Hash (
skein256,
skein512,
md5,
- prop_hashes_stable
+ prop_hashes_stable,
+ Mac(..),
+ calcMac,
+ prop_mac_stable,
) where
import qualified Data.ByteString.Lazy as L
import qualified Data.Text as T
import qualified Data.Text.Encoding as T
-
+import qualified Data.ByteString as S
import Crypto.Hash
sha1 :: L.ByteString -> Digest SHA1
@@ -60,3 +63,37 @@ prop_hashes_stable = all (\(hasher, result) -> hasher foo == result)
]
where
foo = L.fromChunks [T.encodeUtf8 $ T.pack "foo"]
+
+{- File names are (client-side) MAC'ed on special remotes.
+ - The chosen MAC algorithm needs to be same for all files stored on the
+ - remote.
+ -}
+data Mac = HmacSha1 | HmacSha224 | HmacSha256 | HmacSha384 | HmacSha512
+ deriving (Eq)
+
+calcMac
+ :: Mac -- ^ MAC
+ -> S.ByteString -- ^ secret key
+ -> S.ByteString -- ^ message
+ -> String -- ^ MAC'ed message, in hexadecimal
+calcMac mac = case mac of
+ HmacSha1 -> use SHA1
+ HmacSha224 -> use SHA224
+ HmacSha256 -> use SHA256
+ HmacSha384 -> use SHA384
+ HmacSha512 -> use SHA512
+ where
+ use alg k m = show (hmacGetDigest (hmacAlg alg k m))
+
+-- Check that all the MACs continue to produce the same.
+prop_mac_stable :: Bool
+prop_mac_stable = all (\(mac, result) -> calcMac mac key msg == result)
+ [ (HmacSha1, "46b4ec586117154dacd49d664e5d63fdc88efb51")
+ , (HmacSha224, "4c1f774863acb63b7f6e9daa9b5c543fa0d5eccf61e3ffc3698eacdd")
+ , (HmacSha256, "f9320baf0249169e73850cd6156ded0106e2bb6ad8cab01b7bbbebe6d1065317")
+ , (HmacSha384, "3d10d391bee2364df2c55cf605759373e1b5a4ca9355d8f3fe42970471eca2e422a79271a0e857a69923839015877fc6")
+ , (HmacSha512, "114682914c5d017dfe59fdc804118b56a3a652a0b8870759cf9e792ed7426b08197076bf7d01640b1b0684df79e4b67e37485669e8ce98dbab60445f0db94fce")
+ ]
+ where
+ key = T.encodeUtf8 $ T.pack "foo"
+ msg = T.encodeUtf8 $ T.pack "bar"