hOpenPGP 3.0.2 → 3.0.2.1
raw patch · 2 files changed
+34/−21 lines, 2 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
Files
- hOpenPGP.cabal +2/−2
- tests/Tests/Encryption.hs +32/−19
hOpenPGP.cabal view
@@ -1,6 +1,6 @@ Cabal-version: 3.4 Name: hOpenPGP-Version: 3.0.2+Version: 3.0.2.1 Synopsis: native Haskell implementation of OpenPGP (RFC9580) Description: native Haskell implementation of OpenPGP (RFC9580), with some backwards compatibility Homepage: https://salsa.debian.org/clint/hOpenPGP@@ -332,4 +332,4 @@ source-repository this type: git location: https://salsa.debian.org/clint/hOpenPGP.git- tag: v3.0.2+ tag: v3.0.2.1
tests/Tests/Encryption.hs view
@@ -98,6 +98,7 @@ import qualified Crypto.PubKey.ECC.ECDSA as ECDSA import qualified Crypto.PubKey.ECC.Generate as ECCGen import qualified Crypto.PubKey.ECC.Types as ECCT+import Crypto.PubKey.ECC.Prim (pointBaseMul) import qualified Crypto.PubKey.RSA.PKCS15 as P15 import qualified Crypto.PubKey.RSA as RSA import Data.Binary.Get@@ -236,6 +237,18 @@ , ("strict policy AES256 iterated-salted S2K SEIPDv1", "encryption-sym-aes256.gpg", "symmetric-password.txt", "test\n") ] +mkSyntheticNISTP256 :: B.ByteString -> (ECDSA.PublicKey, ECDSA.PrivateKey)+mkSyntheticNISTP256 bs =+ let curve = ECCT.getCurveByName ECCT.SEC_p256r1+ d = os2ip (B.pack [1 .. 32])+ q = pointBaseMul curve d+ pub = ECDSA.PublicKey curve q+ priv = ECDSA.PrivateKey curve d+ in (pub, priv)++syntheticNISTP256Low = mkSyntheticNISTP256 $ B.pack [1 .. 32]+syntheticNISTP256High = mkSyntheticNISTP256 $ B.pack [101 .. 132]+ encryptionAndCompressionTests :: TestTree encryptionAndCompressionTests = testGroup@@ -1575,8 +1588,8 @@ testBuildPKESKv3PayloadForRecipientECDHInterop :: Assertion testBuildPKESKv3PayloadForRecipientECDHInterop = do- (recipientPub, recipientPriv) <- ECCGen.generate (ECCT.getCurveByName ECCT.SEC_p256r1)- let recipient =+ let (recipientPub, recipientPriv) = syntheticNISTP256Low+ recipient = PKPayload V4 (ThirtyTwoBitTimeStamp 0)@@ -1631,8 +1644,8 @@ -- old double-MPI encoding that caused interoperability failures. testPKESKv3ECDHWireFormat :: Assertion testPKESKv3ECDHWireFormat = do- (recipientPub, _) <- ECCGen.generate (ECCT.getCurveByName ECCT.SEC_p256r1)- let recipient =+ let (recipientPub, _) = syntheticNISTP256Low+ recipient = PKPayload V4 (ThirtyTwoBitTimeStamp 0)@@ -2947,8 +2960,8 @@ testBuildPKESKPayloadRejectsECDHSHA1 :: Assertion testBuildPKESKPayloadRejectsECDHSHA1 = do- (recipientPub, _) <- ECCGen.generate (ECCT.getCurveByName ECCT.SEC_p256r1)- let recipient =+ let (recipientPub, _) = syntheticNISTP256Low+ recipient = PKPayload V4 (ThirtyTwoBitTimeStamp 0)@@ -3445,9 +3458,9 @@ testConduitDecryptSEIPDv2WithPKESKECDHUnwrap :: Assertion testConduitDecryptSEIPDv2WithPKESKECDHUnwrap = do- (recipientPub, recipientPriv) <- ECCGen.generate (ECCT.getCurveByName ECCT.SEC_p256r1)- (ephPub, ephPriv) <- ECCGen.generate (ECCT.getCurveByName ECCT.SEC_p256r1)- let recipientPKP =+ let (recipientPub, recipientPriv) = syntheticNISTP256Low+ (ephPub, ephPriv) = syntheticNISTP256High+ recipientPKP = PKPayload V4 (ThirtyTwoBitTimeStamp 0)@@ -3513,9 +3526,9 @@ testConduitDecryptSEIPDv2RejectsECDHWrongEphemeralPointLength :: Assertion testConduitDecryptSEIPDv2RejectsECDHWrongEphemeralPointLength = do- (recipientPub, recipientPriv) <- ECCGen.generate (ECCT.getCurveByName ECCT.SEC_p256r1)- (ephPub, ephPriv) <- ECCGen.generate (ECCT.getCurveByName ECCT.SEC_p256r1)- let recipientPKP =+ let (recipientPub, recipientPriv) = syntheticNISTP256Low+ (ephPub, ephPriv) = syntheticNISTP256High+ recipientPKP = PKPayload V4 (ThirtyTwoBitTimeStamp 0)@@ -4290,7 +4303,7 @@ (EightOctetKeyId "\x12\x34\x56\x78\x90\xab\xcd\xef") X25519 (MPI (os2ip ephPublicRaw) :| [MPI (os2ip eskWithAlgo)])))- skeskS2K = Argon2 (Salt16 (B.pack [0x00 .. 0x0f])) 1 4 21+ skeskS2K = Argon2 (Salt16 (B.pack [0x00 .. 0x0f])) 1 4 15 skeskPassphrase = "correct horse battery staple" wrongPassphrase = "wrong passphrase" salt = Salt (B.pack [0x00 .. 0x1f])@@ -4349,7 +4362,7 @@ testConduitDecryptSEIPDv2FallsBackToEarlierArgon2SKESK :: Assertion testConduitDecryptSEIPDv2FallsBackToEarlierArgon2SKESK = do- let skeskS2K = Argon2 (Salt16 (B.pack [0x00 .. 0x0f])) 1 4 21+ let skeskS2K = Argon2 (Salt16 (B.pack [0x00 .. 0x0f])) 1 4 15 passphrase = "password" sessionKeyBytes = B.replicate 32 0x7b sessionKey = SessionKey sessionKeyBytes@@ -4407,9 +4420,9 @@ testConduitDecryptSEIPDv2RejectsECDHNonTable30Params :: Assertion testConduitDecryptSEIPDv2RejectsECDHNonTable30Params = do- (recipientPub, recipientPriv) <- ECCGen.generate (ECCT.getCurveByName ECCT.SEC_p256r1)- (ephPub, ephPriv) <- ECCGen.generate (ECCT.getCurveByName ECCT.SEC_p256r1)- let recipientPKP =+ let (recipientPub, recipientPriv) = syntheticNISTP256Low+ (ephPub, ephPriv) = syntheticNISTP256High+ recipientPKP = PKPayload V4 (ThirtyTwoBitTimeStamp 0)@@ -4924,7 +4937,7 @@ mapM_ assertRoundTrip [AES128, AES192, AES256] where passphrase = "password"- s2k = Argon2 (Salt16 (B.pack [0x00 .. 0x0f])) 1 4 21+ s2k = Argon2 (Salt16 (B.pack [0x00 .. 0x0f])) 1 4 15 assertRoundTrip sa = do keyLen <- case keySize sa of@@ -4962,7 +4975,7 @@ testSKESK4Argon2EncryptedSessionKeyRejectsTrailingChecksum = do let sa = AES128 passphrase = "password"- s2k = Argon2 (Salt16 (B.pack [0x00 .. 0x0f])) 1 4 21+ s2k = Argon2 (Salt16 (B.pack [0x00 .. 0x0f])) 1 4 15 sessionKey = B.pack (take 16 (cycle [0xaa, 0xbb, 0xcc, 0xdd])) keyLen <- case keySize sa of