summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Cady <d@jerkface.net>2017-08-29 05:36:11 -0400
committerAndrew Cady <d@jerkface.net>2017-08-29 05:36:11 -0400
commitb78f7c78c3a6bcc2fddf3603336ccfc7c5e8ea50 (patch)
tree2a210f1b1acc779f6f7e76ff2c4e47d7db18ad41
parent85129e4a9b97e7fe27ea1c560ad43603ad5133bc (diff)
Include derived file Arbitrary.hs in repo
This allows the git repo to be used as a dependency for stack builds.
-rw-r--r--.gitignore1
-rw-r--r--Data/OpenPGP/Arbitrary.hs272
2 files changed, 272 insertions, 1 deletions
diff --git a/.gitignore b/.gitignore
index 9929e9d..dc2835a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,7 +3,6 @@
3*.swp* 3*.swp*
4*.orig 4*.orig
5*.rej 5*.rej
6Data/OpenPGP/Arbitrary.hs
7verify 6verify
8sign 7sign
9keygen 8keygen
diff --git a/Data/OpenPGP/Arbitrary.hs b/Data/OpenPGP/Arbitrary.hs
new file mode 100644
index 0000000..48e43c9
--- /dev/null
+++ b/Data/OpenPGP/Arbitrary.hs
@@ -0,0 +1,272 @@
1{-# OPTIONS_GHC -fno-warn-orphans -fno-warn-unused-imports #-}
2module Data.OpenPGP.Arbitrary where
3import Data.OpenPGP
4import Data.OpenPGP.Internal
5import Test.QuickCheck
6import Test.QuickCheck.Instances
7import Data.Word
8
9instance () => Arbitrary Packet where
10 arbitrary
11 = do x <- choose (0 :: Int, 13)
12 case x of
13 0 -> do x1 <- arbitrary
14 x2 <- arbitrary
15 x3 <- arbitrary
16 x4 <- arbitrary
17 return (AsymmetricSessionKeyPacket x1 x2 x3 x4)
18 1 -> do x1 <- arbitrary
19 x2 <- arbitrary
20 x3 <- arbitrary
21 x4 <- resize 10 (listOf arbitrary)
22 x5 <- resize 10 (listOf arbitrary)
23 x6 <- arbitrary
24 x7 <- arbitrary
25 version <- choose (2 :: Word8, 4)
26 case version of
27 4 ->
28 return (signaturePacket 4 x1 x2 x3 x4 x5 x6 x7)
29 _ -> do
30 creation_time <- arbitrary
31 keyid <- vectorOf 16 (elements (['0'..'9'] ++ ['A'..'F']))
32 return (signaturePacket version x1 x2 x3 [] [SignatureCreationTimePacket creation_time, IssuerPacket keyid] x6 x7)
33 2 -> do x1 <- arbitrary
34 x2 <- arbitrary
35 x3 <- arbitrary
36 x4 <- arbitrary
37 return (SymmetricSessionKeyPacket x1 x2 x3 x4)
38 3 -> do x1 <- arbitrary
39 x2 <- arbitrary
40 x3 <- arbitrary
41 x4 <- arbitrary
42 x5 <- arbitrary
43 x6 <- arbitrary
44 return (OnePassSignaturePacket x1 x2 x3 x4 x5 x6)
45 4 -> do x1 <- arbitrary
46 x2 <- arbitrary
47 x3 <- arbitrary
48 x4 <- arbitrary
49 x5 <- arbitrary
50 x6 <- arbitrary
51 return (PublicKeyPacket x1 x2 x3 x4 x5 x6)
52 5 -> do x1 <- arbitrary
53 x2 <- arbitrary
54 x3 <- arbitrary
55 x4 <- arbitrary
56 x5 <- arbitrary
57 x6 <- arbitrary
58 x7 <- arbitrary
59 x8 <- arbitrary
60 x9 <- arbitrary
61 return (SecretKeyPacket x1 x2 x3 x4 x5 x6 x7 x8 x9)
62 6 -> do x1 <- arbitrary
63 x2 <- arbitrary
64 return (CompressedDataPacket x1 x2)
65 7 -> return MarkerPacket
66 8 -> do x1 <- arbitrary
67 x2 <- arbitrary
68 x3 <- arbitrary
69 x4 <- arbitrary
70 return (LiteralDataPacket x1 x2 x3 x4)
71 9 -> do x1 <- arbitrary
72 return (TrustPacket x1)
73 10 -> do x1 <- arbitrary
74 return (UserIDPacket x1)
75 11 -> do x1 <- arbitrary
76 x2 <- arbitrary
77 return (EncryptedDataPacket x1 x2)
78 12 -> do x1 <- arbitrary
79 return (ModificationDetectionCodePacket x1)
80 13 -> do x1 <- arbitrary
81 x2 <- arbitrary
82 return (UnsupportedPacket x1 x2)
83 _ -> error "FATAL ERROR: Arbitrary instance, logic bug"
84
85instance () => Arbitrary S2K where
86 arbitrary
87 = do x <- choose (0 :: Int, 3)
88 case x of
89 0 -> do x1 <- arbitrary
90 return (SimpleS2K x1)
91 1 -> do x1 <- arbitrary
92 x2 <- arbitrary
93 return (SaltedS2K x1 x2)
94 2 -> do x1 <- arbitrary
95 x2 <- arbitrary
96 x3 <- fmap decode_s2k_count arbitrary
97 return (IteratedSaltedS2K x1 x2 x3)
98 3 -> do x1 <- suchThat arbitrary (`notElem` [0,1,3])
99 x2 <- arbitrary
100 return (S2K x1 x2)
101 _ -> error "FATAL ERROR: Arbitrary instance, logic bug"
102
103instance () => Arbitrary HashAlgorithm where
104 arbitrary
105 = do x <- choose (0 :: Int, 7)
106 case x of
107 0 -> return MD5
108 1 -> return SHA1
109 2 -> return RIPEMD160
110 3 -> return SHA256
111 4 -> return SHA384
112 5 -> return SHA512
113 6 -> return SHA224
114 7 -> do x1 <- suchThat arbitrary (`notElem` [01,02,03,08,09,10,11])
115 return (HashAlgorithm x1)
116 _ -> error "FATAL ERROR: Arbitrary instance, logic bug"
117
118instance () => Arbitrary KeyAlgorithm where
119 arbitrary
120 = do x <- choose (0 :: Int, 8)
121 case x of
122 0 -> return RSA
123 1 -> return RSA_E
124 2 -> return RSA_S
125 3 -> return ELGAMAL
126 4 -> return DSA
127 5 -> return ECC
128 6 -> return ECDSA
129 7 -> return DH
130 8 -> do x1 <- suchThat arbitrary (`notElem` [01,02,03,16,17,18,19,21])
131 return (KeyAlgorithm x1)
132 _ -> error "FATAL ERROR: Arbitrary instance, logic bug"
133
134instance () => Arbitrary SymmetricAlgorithm where
135 arbitrary
136 = do x <- choose (0 :: Int, 9)
137 case x of
138 0 -> return Unencrypted
139 1 -> return IDEA
140 2 -> return TripleDES
141 3 -> return CAST5
142 4 -> return Blowfish
143 5 -> return AES128
144 6 -> return AES192
145 7 -> return AES256
146 8 -> return Twofish
147 9 -> do x1 <- suchThat arbitrary (`notElem` [00,01,02,03,04,07,08,09,10])
148 return (SymmetricAlgorithm x1)
149 _ -> error "FATAL ERROR: Arbitrary instance, logic bug"
150
151instance () => Arbitrary CompressionAlgorithm where
152 arbitrary
153 = do x <- choose (0 :: Int, 4)
154 case x of
155 0 -> return Uncompressed
156 1 -> return ZIP
157 2 -> return ZLIB
158 3 -> return BZip2
159 4 -> do x1 <- suchThat arbitrary (`notElem` [0,1,2,3])
160 return (CompressionAlgorithm x1)
161 _ -> error "FATAL ERROR: Arbitrary instance, logic bug"
162
163instance () => Arbitrary RevocationCode where
164 arbitrary
165 = do x <- choose (0 :: Int, 5)
166 case x of
167 0 -> return NoReason
168 1 -> return KeySuperseded
169 2 -> return KeyCompromised
170 3 -> return KeyRetired
171 4 -> return UserIDInvalid
172 5 -> do x1 <- suchThat arbitrary (`notElem` [00,01,02,03,32])
173 return (RevocationCode x1)
174 _ -> error "FATAL ERROR: Arbitrary instance, logic bug"
175
176instance () => Arbitrary Message where
177 arbitrary
178 = do x1 <- arbitrary
179 return (Message x1)
180
181instance () => Arbitrary SignatureOver where
182 arbitrary
183 = do x <- choose (0 :: Int, 3)
184 case x of
185 0 -> do x1 <- arbitrary
186 x2 <- arbitrary
187 return (DataSignature x1 x2)
188 1 -> do x1 <- arbitrary
189 x2 <- arbitrary
190 return (KeySignature x1 x2)
191 2 -> do x1 <- arbitrary
192 x2 <- arbitrary
193 x3 <- arbitrary
194 return (SubkeySignature x1 x2 x3)
195 3 -> do x1 <- arbitrary
196 x2 <- arbitrary
197 x3 <- arbitrary
198 return (CertificationSignature x1 x2 x3)
199 _ -> error "FATAL ERROR: Arbitrary instance, logic bug"
200
201instance () => Arbitrary MPI where
202 arbitrary
203 = do x1 <- suchThat arbitrary (>=0)
204 return (MPI x1)
205
206instance () => Arbitrary SignatureSubpacket where
207 arbitrary
208 = do x <- choose (0 :: Int, 23)
209 case x of
210 0 -> do x1 <- arbitrary
211 return (SignatureCreationTimePacket x1)
212 1 -> do x1 <- arbitrary
213 return (SignatureExpirationTimePacket x1)
214 2 -> do x1 <- arbitrary
215 return (ExportableCertificationPacket x1)
216 3 -> do x1 <- arbitrary
217 x2 <- arbitrary
218 return (TrustSignaturePacket x1 x2)
219 4 -> do x1 <- arbitrary
220 return (RegularExpressionPacket x1)
221 5 -> do x1 <- arbitrary
222 return (RevocablePacket x1)
223 6 -> do x1 <- arbitrary
224 return (KeyExpirationTimePacket x1)
225 7 -> do x1 <- arbitrary
226 return (PreferredSymmetricAlgorithmsPacket x1)
227 8 -> do x1 <- arbitrary
228 x2 <- arbitrary
229 x3 <- vectorOf 40 (elements (['0'..'9'] ++ ['A'..'F']))
230 return (RevocationKeyPacket x1 x2 x3)
231 9 -> do x1 <- vectorOf 16 (elements (['0'..'9'] ++ ['A'..'F']))
232 return (IssuerPacket x1)
233 10 -> do x1 <- arbitrary
234 x2 <- arbitrary
235 x3 <- arbitrary
236 return (NotationDataPacket x1 x2 x3)
237 11 -> do x1 <- arbitrary
238 return (PreferredHashAlgorithmsPacket x1)
239 12 -> do x1 <- arbitrary
240 return (PreferredCompressionAlgorithmsPacket x1)
241 13 -> do x1 <- arbitrary
242 return (KeyServerPreferencesPacket x1)
243 14 -> do x1 <- arbitrary
244 return (PreferredKeyServerPacket x1)
245 15 -> do x1 <- arbitrary
246 return (PrimaryUserIDPacket x1)
247 16 -> do x1 <- arbitrary
248 return (PolicyURIPacket x1)
249 17 -> do x1 <- arbitrary
250 x2 <- arbitrary
251 x3 <- arbitrary
252 x4 <- arbitrary
253 x5 <- arbitrary
254 x6 <- arbitrary
255 x7 <- arbitrary
256 return (KeyFlagsPacket x1 x2 x3 x4 x5 x6 x7)
257 18 -> do x1 <- arbitrary
258 return (SignerUserIDPacket x1)
259 19 -> do x1 <- arbitrary
260 x2 <- arbitrary
261 return (ReasonForRevocationPacket x1 x2)
262 20 -> do x1 <- arbitrary
263 return (FeaturesPacket x1)
264 21 -> do x1 <- arbitrary
265 x2 <- arbitrary
266 x3 <- arbitrary
267 return (SignatureTargetPacket x1 x2 x3)
268 22 -> do x1 <- suchThat arbitrary isSignaturePacket
269 return (EmbeddedSignaturePacket x1)
270 23 -> do x1 <- arbitrary
271 return (UnsupportedSignatureSubpacket 105 x1)
272 _ -> error "FATAL ERROR: Arbitrary instance, logic bug"