cacophony-0.6.0: src/Crypto/Noise/Types.hs
----------------------------------------------------------------
-- |
-- Module : Crypto.Noise.Types
-- Maintainer : John Galt <jgalt@centromere.net>
-- Stability : experimental
-- Portability : POSIX
--
module Crypto.Noise.Types
( -- * Types
NoiseException(..),
Plaintext(..)
) where
import Control.DeepSeq (NFData(..))
import Control.Exception (Exception)
import Data.ByteString.Char8 (pack)
import Data.String (IsString(..))
import Data.ByteArray.Extend
-- | Represents exceptions which can occur. 'DecryptionFailure' is thrown
-- if a symmetric decryption operation fails, which is usually the result
-- of an invalid authentication tag. 'HandshakeStateFailure' is thrown if
-- the 'Crypto.Noise.Handshake.HandshakeState' is improperly initialized
-- for the given handshake type. 'HandshakeAborted' is thrown if the
-- handshake is aborted by the 'Crypto.Noise.Handshake.hscbStaticIn'
-- function.
--
-- If your goal is to detect an invalid PSK, prologue, etc, you'll want
-- to catch 'DecryptionFailure'.
data NoiseException = DecryptionFailure String
| HandshakeStateFailure String
| HandshakeAborted String
deriving (Show)
instance Exception NoiseException
-- | Represents plaintext which can be encrypted.
newtype Plaintext = Plaintext ScrubbedBytes
instance IsString Plaintext where
fromString = Plaintext . convert . pack
instance Eq Plaintext where
(Plaintext pt1) == (Plaintext pt2) = pt1 `sbEq` pt2
instance Show Plaintext where
show (Plaintext pt) = show . sbToBS' $ pt
instance NFData Plaintext where
rnf (Plaintext p) = rnf p