diff options
author | James Crayne <jim.crayne@gmail.com> | 2019-09-28 13:43:29 -0400 |
---|---|---|
committer | Joe Crayne <joe@jerkface.net> | 2020-01-01 19:27:53 -0500 |
commit | 11987749fc6e6d3e53ea737d46d5ab13a16faeb8 (patch) | |
tree | 5716463275c2d3e902889db619908ded2a73971c /cryptonite-backport/Crypto/Error | |
parent | add2c76bced51fde5e9917e7449ef52be70faf87 (diff) |
Factor out some new libraries
word64-map:
Data.Word64Map
network-addr:
Network.Address
tox-crypto:
Crypto.Tox
lifted-concurrent:
Control.Concurrent.Lifted.Instrument
Control.Concurrent.Async.Lifted.Instrument
psq-wrap:
Data.Wrapper.PSQInt
Data.Wrapper.PSQ
minmax-psq:
Data.MinMaxPSQ
tasks:
Control.Concurrent.Tasks
kad:
Network.Kademlia
Network.Kademlia.Bootstrap
Network.Kademlia.Routing
Network.Kademlia.CommonAPI
Network.Kademlia.Persistence
Network.Kademlia.Search
Diffstat (limited to 'cryptonite-backport/Crypto/Error')
-rw-r--r-- | cryptonite-backport/Crypto/Error/Types.hs | 106 |
1 files changed, 0 insertions, 106 deletions
diff --git a/cryptonite-backport/Crypto/Error/Types.hs b/cryptonite-backport/Crypto/Error/Types.hs deleted file mode 100644 index 4aaf4e04..00000000 --- a/cryptonite-backport/Crypto/Error/Types.hs +++ /dev/null | |||
@@ -1,106 +0,0 @@ | |||
1 | -- | | ||
2 | -- Module : Crypto.Error.Types | ||
3 | -- License : BSD-style | ||
4 | -- Maintainer : Vincent Hanquez <vincent@snarc.org> | ||
5 | -- Stability : stable | ||
6 | -- Portability : Good | ||
7 | -- | ||
8 | -- Cryptographic Error enumeration and handling | ||
9 | -- | ||
10 | {-# LANGUAGE DeriveDataTypeable #-} | ||
11 | module Crypto.Error.Types | ||
12 | ( CryptoError(..) | ||
13 | , CryptoFailable(..) | ||
14 | , throwCryptoErrorIO | ||
15 | , throwCryptoError | ||
16 | , onCryptoFailure | ||
17 | , eitherCryptoError | ||
18 | , maybeCryptoError | ||
19 | ) where | ||
20 | |||
21 | import qualified Control.Exception as E | ||
22 | import Data.Data | ||
23 | |||
24 | import Crypto.Internal.Imports | ||
25 | |||
26 | -- | Enumeration of all possible errors that can be found in this library | ||
27 | data CryptoError = | ||
28 | -- symmetric cipher errors | ||
29 | CryptoError_KeySizeInvalid | ||
30 | | CryptoError_IvSizeInvalid | ||
31 | | CryptoError_AEADModeNotSupported | ||
32 | -- public key cryptography error | ||
33 | | CryptoError_SecretKeySizeInvalid | ||
34 | | CryptoError_SecretKeyStructureInvalid | ||
35 | | CryptoError_PublicKeySizeInvalid | ||
36 | | CryptoError_SharedSecretSizeInvalid | ||
37 | -- elliptic cryptography error | ||
38 | | CryptoError_EcScalarOutOfBounds | ||
39 | | CryptoError_PointSizeInvalid | ||
40 | | CryptoError_PointFormatInvalid | ||
41 | | CryptoError_PointFormatUnsupported | ||
42 | | CryptoError_PointCoordinatesInvalid | ||
43 | -- Message authentification error | ||
44 | | CryptoError_MacKeyInvalid | ||
45 | | CryptoError_AuthenticationTagSizeInvalid | ||
46 | deriving (Show,Eq,Enum,Data,Typeable) | ||
47 | |||
48 | instance E.Exception CryptoError | ||
49 | |||
50 | -- | A simple Either like type to represent a computation that can fail | ||
51 | -- | ||
52 | -- 2 possibles values are: | ||
53 | -- | ||
54 | -- * 'CryptoPassed' : The computation succeeded, and contains the result of the computation | ||
55 | -- | ||
56 | -- * 'CryptoFailed' : The computation failed, and contains the cryptographic error associated | ||
57 | -- | ||
58 | data CryptoFailable a = | ||
59 | CryptoPassed a | ||
60 | | CryptoFailed CryptoError | ||
61 | deriving (Show) | ||
62 | |||
63 | instance Eq a => Eq (CryptoFailable a) where | ||
64 | (==) (CryptoPassed a) (CryptoPassed b) = a == b | ||
65 | (==) (CryptoFailed e1) (CryptoFailed e2) = e1 == e2 | ||
66 | (==) _ _ = False | ||
67 | |||
68 | instance Functor CryptoFailable where | ||
69 | fmap f (CryptoPassed a) = CryptoPassed (f a) | ||
70 | fmap _ (CryptoFailed r) = CryptoFailed r | ||
71 | |||
72 | instance Applicative CryptoFailable where | ||
73 | pure a = CryptoPassed a | ||
74 | (<*>) fm m = fm >>= \p -> m >>= \r2 -> return (p r2) | ||
75 | instance Monad CryptoFailable where | ||
76 | return a = CryptoPassed a | ||
77 | (>>=) m1 m2 = do | ||
78 | case m1 of | ||
79 | CryptoPassed a -> m2 a | ||
80 | CryptoFailed e -> CryptoFailed e | ||
81 | |||
82 | -- | Throw an CryptoError as exception on CryptoFailed result, | ||
83 | -- otherwise return the computed value | ||
84 | throwCryptoErrorIO :: CryptoFailable a -> IO a | ||
85 | throwCryptoErrorIO (CryptoFailed e) = E.throwIO e | ||
86 | throwCryptoErrorIO (CryptoPassed r) = return r | ||
87 | |||
88 | -- | Same as 'throwCryptoErrorIO' but throw the error asynchronously. | ||
89 | throwCryptoError :: CryptoFailable a -> a | ||
90 | throwCryptoError (CryptoFailed e) = E.throw e | ||
91 | throwCryptoError (CryptoPassed r) = r | ||
92 | |||
93 | -- | Simple 'either' like combinator for CryptoFailable type | ||
94 | onCryptoFailure :: (CryptoError -> r) -> (a -> r) -> CryptoFailable a -> r | ||
95 | onCryptoFailure onError _ (CryptoFailed e) = onError e | ||
96 | onCryptoFailure _ onSuccess (CryptoPassed r) = onSuccess r | ||
97 | |||
98 | -- | Transform a CryptoFailable to an Either | ||
99 | eitherCryptoError :: CryptoFailable a -> Either CryptoError a | ||
100 | eitherCryptoError (CryptoFailed e) = Left e | ||
101 | eitherCryptoError (CryptoPassed a) = Right a | ||
102 | |||
103 | -- | Transform a CryptoFailable to a Maybe | ||
104 | maybeCryptoError :: CryptoFailable a -> Maybe a | ||
105 | maybeCryptoError (CryptoFailed _) = Nothing | ||
106 | maybeCryptoError (CryptoPassed r) = Just r | ||