packages feed

cryptoids 0.4.0.0 → 0.5.0.0

raw patch · 6 files changed

+95/−29 lines, 6 filesdep +cryptoids-classdep ~basedep ~binarydep ~bytestringPVP ok

version bump matches the API change (PVP)

Dependencies added: cryptoids-class

Dependency ranges changed: base, binary, bytestring, cryptoids-types, cryptonite, directory, exceptions, filepath

API changes (from Hackage documentation)

- Data.CryptoID.ByteString: CryptoID :: a -> CryptoID a
- Data.CryptoID.ByteString: [ciphertext] :: CryptoID a -> a
- Data.CryptoID.ByteString: newtype CryptoID (namespace :: Symbol) a :: Symbol -> * -> *
- Data.CryptoID.Poly: AlgorithmError :: CryptoError -> CryptoIDError
- Data.CryptoID.Poly: CiphertextConversionFailed :: ByteString -> CryptoIDError
- Data.CryptoID.Poly: CryptoID :: a -> CryptoID a
- Data.CryptoID.Poly: DeserializationError :: CryptoIDError
- Data.CryptoID.Poly: InvalidNamespaceDetected :: CryptoIDError
- Data.CryptoID.Poly: NamespaceHashIsWrongLength :: ByteString -> CryptoIDError
- Data.CryptoID.Poly: PlaintextIsWrongLength :: Int -> CryptoIDError
- Data.CryptoID.Poly: [ciphertext] :: CryptoID a -> a
- Data.CryptoID.Poly: data CryptoIDError
- Data.CryptoID.Poly: data CryptoIDKey
- Data.CryptoID.Poly: genKey :: MonadIO m => m CryptoIDKey
- Data.CryptoID.Poly: newtype CryptoID (namespace :: Symbol) a :: Symbol -> * -> *
- Data.CryptoID.Poly: readKeyFile :: MonadIO m => FilePath -> m CryptoIDKey
- Data.CryptoID.Poly: type CryptoCipher = Blowfish
- Data.CryptoID.Poly: type CryptoHash = SHAKE128 64
+ Data.CryptoID.ByteString: instance (Data.CryptoID.Class.MonadCrypto m, Data.CryptoID.Class.MonadCryptoKey m ~ Data.CryptoID.ByteString.CryptoIDKey, GHC.TypeLits.KnownSymbol namespace) => Data.CryptoID.Class.HasCryptoID namespace Data.ByteString.Internal.ByteString Data.ByteString.Internal.ByteString m
+ Data.CryptoID.ByteString: type CryptoByteString (namespace :: Symbol) = CryptoID namespace ByteString
+ Data.CryptoID.ByteString: type HasCryptoByteString (namespace :: Symbol) = HasCryptoID namespace ByteString
+ Data.CryptoID.ByteString.ImplicitNamespace: type CryptoByteString plaintext = CryptoID ByteString plaintext
+ Data.CryptoID.ByteString.ImplicitNamespace: type HasCryptoByteString plaintext = HasCryptoID ByteString plaintext
+ Data.CryptoID.Poly: instance (Data.CryptoID.Class.MonadCrypto m, Data.CryptoID.Class.MonadCryptoKey m ~ Data.CryptoID.ByteString.CryptoIDKey, GHC.TypeLits.KnownSymbol namespace, Data.Binary.Class.Binary a) => Data.CryptoID.Class.HasCryptoID namespace Data.ByteString.Internal.ByteString a m

Files

changes.md view
@@ -1,3 +1,6 @@+# 0.5.0.0+    - Add support for 'cryptoids-class'+ # 0.4.0.0     - Expose 'cipherBlockSize'     - Adjust 'Data.CryptoID.Poly' to allow for more dynamic padding
cryptoids.cabal view
@@ -1,38 +1,43 @@ name: cryptoids-version: 0.4.0.0+version: 0.5.0.0 cabal-version: >=1.10 build-type: Simple license: BSD3 license-file: LICENSE-maintainer: aethoago@141.li+maintainer: Gregor Kleen <aethoago@141.li> synopsis: Reversable and secure encoding of object ids as a bytestring category: cryptography-author: Gregor Kleen+author: Gregor Kleen <aethoago@141.li> extra-source-files:     changes.md  source-repository head     type: git-    location: https://git.rheperire.org/cryptoids-    subdir: cryptoids+    location: https://git.rheperire.org/cryptoids/cryptoids  library     exposed-modules:         Data.CryptoID.Poly+        Data.CryptoID.Poly.ImplicitNamespace         Data.CryptoID.ByteString+        Data.CryptoID.ByteString.ImplicitNamespace     build-depends:-        base >=4.9.1.0 && <4.11,-        cryptoids-types ==0.0.0,-        cryptonite >=0.23 && <0.25,-        bytestring >=0.10.8.1 && <0.11,-        binary >=0.8.3.0 && <0.9,-        memory >=0.14.6 && <0.15,+        base >=4.10.1.0 && <4.11,+        binary >=0.8.5.1 && <0.9,+        bytestring >=0.10.8.2 && <0.11,+        cryptoids-class >=0.0.0 && <0.1,+        cryptoids-types >=0.0.0 && <0.1,+        cryptonite ==0.24.*,+        directory >=1.3.0.2 && <1.4,         exceptions >=0.8.3 && <0.9,-        filepath >=1.4.1.1 && <1.5,-        directory >=1.3.0.0 && <1.4+        filepath >=1.4.1.2 && <1.5,+        memory >=0.14.11 && <0.15     default-language: Haskell2010     default-extensions: RankNTypes DataKinds GeneralizedNewtypeDeriving-                        ViewPatterns RecordWildCards FlexibleContexts+                        ViewPatterns RecordWildCards FlexibleContexts FlexibleInstances+                        MultiParamTypeClasses TypeFamilies ConstraintKinds     hs-source-dirs: src+    other-modules:+        Paths_cryptoids     ghc-options: -Wall -fno-warn-name-shadowing 
src/Data/CryptoID/ByteString.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE ScopedTypeVariables #-}+{-# OPTIONS_GHC -fno-warn-orphans #-}  {-| Description: Encryption of bytestrings using a type level nonce for determinism@@ -13,7 +14,8 @@ payloads within all 'ByteString's of the correct length. -} module Data.CryptoID.ByteString-  ( CryptoID(..)+  ( CryptoByteString+  , HasCryptoByteString   , CryptoIDKey   , genKey, readKeyFile   , encrypt@@ -21,9 +23,13 @@   , CryptoIDError(..)   , CryptoCipher, CryptoHash   , cipherBlockSize+  , module Data.CryptoID+  , module Data.CryptoID.Class   ) where  import Data.CryptoID+import Data.CryptoID.Class hiding (encrypt, decrypt)+import qualified Data.CryptoID.Class as Class (encrypt, decrypt)  import Data.Binary import Data.Binary.Put@@ -174,7 +180,12 @@           return key       | otherwise = throw e ++type CryptoByteString (namespace :: Symbol) = CryptoID namespace ByteString++type HasCryptoByteString (namespace :: Symbol) = HasCryptoID namespace ByteString   + -- | Use 'CryptoHash' to generate a 'Digest' of the Symbol passed as proxy type namespace' :: forall proxy namespace m.               ( KnownSymbol namespace, MonadThrow m@@ -192,9 +203,9 @@  -- | Encrypt a serialized value encrypt :: forall m namespace.-           ( KnownSymbol namespace-           , MonadThrow m-           ) => CryptoIDKey -> ByteString -> m (CryptoID namespace ByteString)+             ( KnownSymbol namespace+             , MonadThrow m+             ) => CryptoIDKey -> ByteString -> m (CryptoID namespace ByteString) encrypt (keyMaterial -> key) plaintext = do   cipher <- cryptoFailable (cipherInit key :: CryptoFailable CryptoCipher)   namespace <- namespace' (Proxy :: Proxy namespace)@@ -205,10 +216,20 @@  -- | Decrypt a serialized value decrypt :: forall m namespace.-           ( KnownSymbol namespace-           , MonadThrow m-           ) => CryptoIDKey -> CryptoID namespace ByteString -> m ByteString+             ( KnownSymbol namespace+             , MonadThrow m+             ) => CryptoIDKey -> CryptoID namespace ByteString -> m ByteString decrypt (keyMaterial -> key) CryptoID{..} = do   cipher <- cryptoFailable (cipherInit key :: CryptoFailable CryptoCipher)   namespace <- namespace' (Proxy :: Proxy namespace)   return $ cbcDecrypt cipher namespace ciphertext++-- | This instance is somewhat improper in that it works only for plaintexts whose length is a multiple of 'cipherBlockSize'+--+-- Improper plaintext lengths throw 'PlaintextIsWrongLength'+instance ( MonadCrypto m+         , MonadCryptoKey m ~ CryptoIDKey+         , KnownSymbol namespace+         ) => HasCryptoID namespace ByteString ByteString m where+  encrypt = cryptoIDKey . flip encrypt+  decrypt = cryptoIDKey . flip decrypt
+ src/Data/CryptoID/ByteString/ImplicitNamespace.hs view
@@ -0,0 +1,19 @@+{-|+Description: Encryption of bytestrings with implicit type level nonces+License: BSD3+-}+module Data.CryptoID.ByteString.ImplicitNamespace+  ( CryptoByteString+  , HasCryptoByteString+  , module Data.CryptoID.ByteString+  , module Data.CryptoID.Class.ImplicitNamespace+  ) where++import Data.CryptoID.Class.ImplicitNamespace++import Data.CryptoID.ByteString hiding (encrypt, decrypt, CryptoID, HasCryptoID, CryptoByteString, HasCryptoByteString)++import Data.ByteString (ByteString)++type CryptoByteString plaintext = CryptoID ByteString plaintext+type HasCryptoByteString plaintext = HasCryptoID ByteString plaintext
src/Data/CryptoID/Poly.hs view
@@ -1,7 +1,8 @@ {-# LANGUAGE ScopedTypeVariables #-}+{-# OPTIONS_GHC -fno-warn-orphans #-}  {-|-Description: Encryption of bytestrings using a type level nonce for determinism+Description: Encryption of serializable values using a type level nonce for determinism License: BSD3  Given a value of an arbitrary serializable type (like 'Int') we perform@@ -18,18 +19,15 @@ \text{mod} \ 64}\) where \(l\) is the length of the serialized payload in bits. -} module Data.CryptoID.Poly-  ( CryptoID(..)-  , CryptoIDKey-  , genKey, readKeyFile-  , encrypt+  ( encrypt   , decrypt-  , CryptoIDError(..)-  , CryptoCipher, CryptoHash+  , module Data.CryptoID.ByteString   ) where -import Data.CryptoID import Data.CryptoID.ByteString hiding (encrypt, decrypt) import qualified Data.CryptoID.ByteString as ByteString (encrypt, decrypt)+import Data.CryptoID.Class (HasCryptoID)+import qualified Data.CryptoID.Class as Class (HasCryptoID(..))  import Data.Binary @@ -87,3 +85,11 @@     Right (rem, _, res)       | Lazy.ByteString.all (== 0) rem -> return res       | otherwise -> throwM InvalidNamespaceDetected++instance ( MonadCrypto m+         , MonadCryptoKey m ~ CryptoIDKey+         , KnownSymbol namespace+         , Binary a+         ) => HasCryptoID namespace ByteString a m where+  encrypt = cryptoIDKey . flip (encrypt (const $ return Nothing) return)+  decrypt = cryptoIDKey . flip (decrypt return)
+ src/Data/CryptoID/Poly/ImplicitNamespace.hs view
@@ -0,0 +1,12 @@+{-|+Description: Encryption of serializable values with implicit type level nonces+License: BSD3+-}+module Data.CryptoID.Poly.ImplicitNamespace+  ( module Data.CryptoID.Poly+  , module Data.CryptoID.Class.ImplicitNamespace+  ) where++import Data.CryptoID.Class.ImplicitNamespace++import Data.CryptoID.Poly hiding (encrypt, decrypt, CryptoID, HasCryptoID)