diff options
-rw-r--r-- | Arbitrary.patch | 9 | ||||
-rw-r--r-- | Data/OpenPGP.hs | 30 |
2 files changed, 39 insertions, 0 deletions
diff --git a/Arbitrary.patch b/Arbitrary.patch index 9c753cb..6d855f1 100644 --- a/Arbitrary.patch +++ b/Arbitrary.patch | |||
@@ -10,6 +10,15 @@ | |||
10 | 1 -> do x1 <- arbitrary | 10 | 1 -> do x1 <- arbitrary |
11 | x2 <- arbitrary | 11 | x2 <- arbitrary |
12 | x3 <- arbitrary | 12 | x3 <- arbitrary |
13 | @@ -108,7 +107,7 @@ | ||
14 | 6 -> return AES192 | ||
15 | 7 -> return AES256 | ||
16 | 8 -> return Twofish | ||
17 | - 9 -> do x1 <- arbitrary | ||
18 | + 9 -> do x1 <- suchThat arbitrary (`notElem` [00,01,02,03,04,07,08,09,10]) | ||
19 | return (SymmetricAlgorithm x1) | ||
20 | _ -> error "FATAL ERROR: Arbitrary instance, logic bug" | ||
21 | |||
13 | @@ -116,7 +115,7 @@ | 22 | @@ -116,7 +115,7 @@ |
14 | 23 | ||
15 | instance Arbitrary MPI where | 24 | instance Arbitrary MPI where |
diff --git a/Data/OpenPGP.hs b/Data/OpenPGP.hs index acf5fb6..878fb99 100644 --- a/Data/OpenPGP.hs +++ b/Data/OpenPGP.hs | |||
@@ -46,6 +46,7 @@ module Data.OpenPGP ( | |||
46 | SignatureSubpacket(..), | 46 | SignatureSubpacket(..), |
47 | HashAlgorithm(..), | 47 | HashAlgorithm(..), |
48 | KeyAlgorithm(..), | 48 | KeyAlgorithm(..), |
49 | SymmetricAlgorithm(..), | ||
49 | CompressionAlgorithm(..), | 50 | CompressionAlgorithm(..), |
50 | MPI(..), | 51 | MPI(..), |
51 | find_key, | 52 | find_key, |
@@ -590,6 +591,35 @@ instance BINARY_CLASS KeyAlgorithm where | |||
590 | put = put . enum_to_word8 | 591 | put = put . enum_to_word8 |
591 | get = fmap enum_from_word8 get | 592 | get = fmap enum_from_word8 get |
592 | 593 | ||
594 | data SymmetricAlgorithm = Unencrypted | IDEA | TripleDES | CAST5 | Blowfish | AES128 | AES192 | AES256 | Twofish | SymmetricAlgorithm Word8 | ||
595 | deriving (Show, Read, Eq) | ||
596 | |||
597 | instance Enum SymmetricAlgorithm where | ||
598 | toEnum 00 = Unencrypted | ||
599 | toEnum 01 = IDEA | ||
600 | toEnum 02 = TripleDES | ||
601 | toEnum 03 = CAST5 | ||
602 | toEnum 04 = Blowfish | ||
603 | toEnum 07 = AES128 | ||
604 | toEnum 08 = AES192 | ||
605 | toEnum 09 = AES256 | ||
606 | toEnum 10 = Twofish | ||
607 | toEnum x = SymmetricAlgorithm $ fromIntegral x | ||
608 | fromEnum Unencrypted = 00 | ||
609 | fromEnum IDEA = 01 | ||
610 | fromEnum TripleDES = 02 | ||
611 | fromEnum CAST5 = 03 | ||
612 | fromEnum Blowfish = 04 | ||
613 | fromEnum AES128 = 07 | ||
614 | fromEnum AES192 = 08 | ||
615 | fromEnum AES256 = 09 | ||
616 | fromEnum Twofish = 10 | ||
617 | fromEnum (SymmetricAlgorithm x) = fromIntegral x | ||
618 | |||
619 | instance BINARY_CLASS SymmetricAlgorithm where | ||
620 | put = put . enum_to_word8 | ||
621 | get = fmap enum_from_word8 get | ||
622 | |||
593 | data CompressionAlgorithm = Uncompressed | ZIP | ZLIB | BZip2 | CompressionAlgorithm Word8 | 623 | data CompressionAlgorithm = Uncompressed | ZIP | ZLIB | BZip2 | CompressionAlgorithm Word8 |
594 | deriving (Show, Read, Eq) | 624 | deriving (Show, Read, Eq) |
595 | 625 | ||