cryptoids 0.5.0.0 → 0.5.1.0
raw patch · 3 files changed
+63/−38 lines, 3 filesdep ~binarydep ~cryptoids-typesdep ~cryptonitePVP ok
version bump matches the API change (PVP)
Dependency ranges changed: binary, cryptoids-types, cryptonite, memory
API changes (from Hackage documentation)
+ Data.CryptoID.ByteString: CiphertextIsWrongLength :: ByteString -> CryptoIDError
+ Data.CryptoID.ByteString: class MonadCrypto m => HasCryptoID (namespace :: Symbol) ciphertext plaintext (m :: * -> *)
+ Data.CryptoID.ByteString: class MonadThrow m => MonadCrypto (m :: * -> *) where {
+ Data.CryptoID.ByteString: cryptoIDKey :: MonadCrypto m => MonadCryptoKey m -> m a -> m a
+ Data.CryptoID.ByteString: type family MonadCryptoKey (m :: * -> *) :: *;
+ Data.CryptoID.ByteString: }
+ Data.CryptoID.ByteString.ImplicitNamespace: AlgorithmError :: CryptoError -> CryptoIDError
+ Data.CryptoID.ByteString.ImplicitNamespace: CiphertextConversionFailed :: ByteString -> CryptoIDError
+ Data.CryptoID.ByteString.ImplicitNamespace: CiphertextIsWrongLength :: ByteString -> CryptoIDError
+ Data.CryptoID.ByteString.ImplicitNamespace: DeserializationError :: CryptoIDError
+ Data.CryptoID.ByteString.ImplicitNamespace: InvalidNamespaceDetected :: CryptoIDError
+ Data.CryptoID.ByteString.ImplicitNamespace: NamespaceHashIsWrongLength :: ByteString -> CryptoIDError
+ Data.CryptoID.ByteString.ImplicitNamespace: PlaintextIsWrongLength :: Int -> CryptoIDError
+ Data.CryptoID.ByteString.ImplicitNamespace: cipherBlockSize :: Int
+ Data.CryptoID.ByteString.ImplicitNamespace: ciphertext :: CryptoID namespace a -> a
+ Data.CryptoID.ByteString.ImplicitNamespace: class MonadThrow m => MonadCrypto (m :: * -> *) where {
+ Data.CryptoID.ByteString.ImplicitNamespace: cryptoIDKey :: MonadCrypto m => MonadCryptoKey m -> m a -> m a
+ Data.CryptoID.ByteString.ImplicitNamespace: data CryptoIDError
+ Data.CryptoID.ByteString.ImplicitNamespace: data CryptoIDKey
+ Data.CryptoID.ByteString.ImplicitNamespace: genKey :: MonadIO m => m CryptoIDKey
+ Data.CryptoID.ByteString.ImplicitNamespace: readKeyFile :: MonadIO m => FilePath -> m CryptoIDKey
+ Data.CryptoID.ByteString.ImplicitNamespace: type CryptoCipher = Blowfish
+ Data.CryptoID.ByteString.ImplicitNamespace: type CryptoHash = SHAKE128 64
+ Data.CryptoID.ByteString.ImplicitNamespace: type family MonadCryptoKey (m :: * -> *) :: *;
+ Data.CryptoID.ByteString.ImplicitNamespace: }
+ Data.CryptoID.Poly: AlgorithmError :: CryptoError -> CryptoIDError
+ Data.CryptoID.Poly: CiphertextConversionFailed :: ByteString -> CryptoIDError
+ Data.CryptoID.Poly: CiphertextIsWrongLength :: 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: cipherBlockSize :: Int
+ Data.CryptoID.Poly: class MonadCrypto m => HasCryptoID (namespace :: Symbol) ciphertext plaintext (m :: * -> *)
+ Data.CryptoID.Poly: class MonadThrow m => MonadCrypto (m :: * -> *) where {
+ Data.CryptoID.Poly: cryptoIDKey :: MonadCrypto m => MonadCryptoKey m -> m a -> m 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
+ Data.CryptoID.Poly: readKeyFile :: MonadIO m => FilePath -> m CryptoIDKey
+ Data.CryptoID.Poly: type CryptoByteString (namespace :: Symbol) = CryptoID namespace ByteString
+ Data.CryptoID.Poly: type CryptoCipher = Blowfish
+ Data.CryptoID.Poly: type CryptoHash = SHAKE128 64
+ Data.CryptoID.Poly: type HasCryptoByteString (namespace :: Symbol) = HasCryptoID namespace ByteString
+ Data.CryptoID.Poly: type family MonadCryptoKey (m :: * -> *) :: *;
+ Data.CryptoID.Poly: }
+ Data.CryptoID.Poly.ImplicitNamespace: AlgorithmError :: CryptoError -> CryptoIDError
+ Data.CryptoID.Poly.ImplicitNamespace: CiphertextConversionFailed :: ByteString -> CryptoIDError
+ Data.CryptoID.Poly.ImplicitNamespace: CiphertextIsWrongLength :: ByteString -> CryptoIDError
+ Data.CryptoID.Poly.ImplicitNamespace: DeserializationError :: CryptoIDError
+ Data.CryptoID.Poly.ImplicitNamespace: InvalidNamespaceDetected :: CryptoIDError
+ Data.CryptoID.Poly.ImplicitNamespace: NamespaceHashIsWrongLength :: ByteString -> CryptoIDError
+ Data.CryptoID.Poly.ImplicitNamespace: PlaintextIsWrongLength :: Int -> CryptoIDError
+ Data.CryptoID.Poly.ImplicitNamespace: cipherBlockSize :: Int
+ Data.CryptoID.Poly.ImplicitNamespace: ciphertext :: CryptoID namespace a -> a
+ Data.CryptoID.Poly.ImplicitNamespace: class MonadThrow m => MonadCrypto (m :: * -> *) where {
+ Data.CryptoID.Poly.ImplicitNamespace: cryptoIDKey :: MonadCrypto m => MonadCryptoKey m -> m a -> m a
+ Data.CryptoID.Poly.ImplicitNamespace: data CryptoIDError
+ Data.CryptoID.Poly.ImplicitNamespace: data CryptoIDKey
+ Data.CryptoID.Poly.ImplicitNamespace: genKey :: MonadIO m => m CryptoIDKey
+ Data.CryptoID.Poly.ImplicitNamespace: readKeyFile :: MonadIO m => FilePath -> m CryptoIDKey
+ Data.CryptoID.Poly.ImplicitNamespace: type CryptoByteString (namespace :: Symbol) = CryptoID namespace ByteString
+ Data.CryptoID.Poly.ImplicitNamespace: type CryptoCipher = Blowfish
+ Data.CryptoID.Poly.ImplicitNamespace: type CryptoHash = SHAKE128 64
+ Data.CryptoID.Poly.ImplicitNamespace: type HasCryptoByteString (namespace :: Symbol) = HasCryptoID namespace ByteString
+ Data.CryptoID.Poly.ImplicitNamespace: type family MonadCryptoKey (m :: * -> *) :: *;
+ Data.CryptoID.Poly.ImplicitNamespace: }
Files
- changes.md +11/−0
- cryptoids.cabal +41/−37
- src/Data/CryptoID/ByteString.hs +11/−1
changes.md view
@@ -1,22 +1,33 @@+# 0.5.1.0++ - Add 'CiphertextIsWrongLength'+ - Bump version bound on 'cryptonite'+ # 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 # 0.3.0.0+ - Better exception type (does no longer leak private information) - 'Data.CryptoID.Poly' now supports padding the plaintext to a certain length before encryption # 0.2.0.0+ - Rename 'Data.CryptoID.Poly' to 'Data.CryptoID.ByteString' - Introduce 'Data.CryptoID.Poly' doing actual serialization # 0.1.0.1+ - Correct mistakes in the documentation # 0.1.0+ - Switch to using 'MonadThrow' instead of 'MonadError' - Introduce 'readKeyFile'
cryptoids.cabal view
@@ -1,43 +1,47 @@-name: cryptoids-version: 0.5.0.0-cabal-version: >=1.10-build-type: Simple-license: BSD3-license-file: LICENSE-maintainer: Gregor Kleen <aethoago@141.li>-synopsis: Reversable and secure encoding of object ids as a bytestring-category: cryptography-author: Gregor Kleen <aethoago@141.li>+-- This file has been generated from package.yaml by hpack version 0.28.2.+--+-- see: https://github.com/sol/hpack+--+-- hash: 2089e71d5c8505cf30f7eb17988883c373302227642b65199d4544ddf18541ab++name: cryptoids+version: 0.5.1.0+synopsis: Reversable and secure encoding of object ids as a bytestring+category: cryptography+author: Gregor Kleen <aethoago@141.li>+maintainer: Gregor Kleen <aethoago@141.li>+license: BSD3+license-file: LICENSE+build-type: Simple+cabal-version: >= 1.10 extra-source-files: changes.md source-repository head- type: git- location: https://git.rheperire.org/cryptoids/cryptoids+ type: git+ 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.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.2 && <1.5,- memory >=0.14.11 && <0.15- default-language: Haskell2010- default-extensions: RankNTypes DataKinds GeneralizedNewtypeDeriving- ViewPatterns RecordWildCards FlexibleContexts FlexibleInstances- MultiParamTypeClasses TypeFamilies ConstraintKinds- hs-source-dirs: src- other-modules:- Paths_cryptoids- ghc-options: -Wall -fno-warn-name-shadowing-+ exposed-modules:+ Data.CryptoID.Poly+ Data.CryptoID.Poly.ImplicitNamespace+ Data.CryptoID.ByteString+ Data.CryptoID.ByteString.ImplicitNamespace+ other-modules:+ Paths_cryptoids+ hs-source-dirs:+ src+ default-extensions: RankNTypes DataKinds GeneralizedNewtypeDeriving ViewPatterns RecordWildCards FlexibleContexts FlexibleInstances MultiParamTypeClasses TypeFamilies ConstraintKinds+ ghc-options: -Wall -fno-warn-name-shadowing+ build-depends:+ base >=4.9 && <5+ , binary >=0.8.3 && <0.9+ , bytestring >=0.10.8 && <0.11+ , cryptoids-class >=0.0 && <0.1+ , cryptoids-types >=0.0 && <0.1+ , cryptonite >=0.23 && <0.26+ , directory >=1.3.0 && <1.4+ , exceptions >=0.8.3 && <0.11+ , filepath >=1.4.1 && <1.5+ , memory >=0.14.6 && <0.15+ default-language: Haskell2010
src/Data/CryptoID/ByteString.hs view
@@ -123,6 +123,11 @@ -- 'CryptoCipher' -- -- The length of the offending plaintext is included.+ | CiphertextIsWrongLength ByteString+ -- ^ The length of the ciphertext is not a multiple of the block size of+ -- 'CryptoCipher'+ --+ -- The offending ciphertext is included. | NamespaceHashIsWrongLength ByteString -- ^ The length of the digest produced by 'CryptoHash' does -- not match the block size of 'CryptoCipher'.@@ -222,11 +227,16 @@ decrypt (keyMaterial -> key) CryptoID{..} = do cipher <- cryptoFailable (cipherInit key :: CryptoFailable CryptoCipher) namespace <- namespace' (Proxy :: Proxy namespace)+ when (ByteString.length ciphertext `mod` blockSize cipher /= 0) $+ throwM $ CiphertextIsWrongLength ciphertext return $ cbcDecrypt cipher namespace ciphertext --- | This instance is somewhat improper in that it works only for plaintexts whose length is a multiple of 'cipherBlockSize'+-- | This instance is somewhat improper in that it works only for plain- and+-- ciphertexts whose length is a multiple of 'cipherBlockSize' -- -- Improper plaintext lengths throw 'PlaintextIsWrongLength'+--+-- Improper ciphertext lengths throw 'CiphertextIsWrongLength' instance ( MonadCrypto m , MonadCryptoKey m ~ CryptoIDKey , KnownSymbol namespace