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 +3/−0
- cryptoids.cabal +19/−14
- src/Data/CryptoID/ByteString.hs +28/−7
- src/Data/CryptoID/ByteString/ImplicitNamespace.hs +19/−0
- src/Data/CryptoID/Poly.hs +14/−8
- src/Data/CryptoID/Poly/ImplicitNamespace.hs +12/−0
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)