crypto-pubkey 0.1.2 → 0.1.3
raw patch · 8 files changed
+25/−21 lines, 8 filesdep ~crypto-pubkey-typesPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependency ranges changed: crypto-pubkey-types
API changes (from Hackage documentation)
- Crypto.PubKey.DH: type Params = (Integer, Integer)
- Crypto.PubKey.DSA: type Params = (Integer, Integer, Integer)
+ Crypto.PubKey.DH: Params :: Integer -> Integer -> Params
+ Crypto.PubKey.DH: data Params :: *
+ Crypto.PubKey.DH: params_g :: Params -> Integer
+ Crypto.PubKey.DH: params_p :: Params -> Integer
+ Crypto.PubKey.DSA: Params :: Integer -> Integer -> Integer -> Params
+ Crypto.PubKey.DSA: data Params :: *
+ Crypto.PubKey.DSA: params_g :: Params -> Integer
+ Crypto.PubKey.DSA: params_p :: Params -> Integer
+ Crypto.PubKey.DSA: params_q :: Params -> Integer
- Crypto.PubKey.DSA: PrivateKey :: Params -> Integer -> PrivateKey
+ Crypto.PubKey.DSA: PrivateKey :: Params -> PrivateNumber -> PrivateKey
- Crypto.PubKey.DSA: PublicKey :: Params -> Integer -> PublicKey
+ Crypto.PubKey.DSA: PublicKey :: Params -> PublicNumber -> PublicKey
- Crypto.PubKey.DSA: private_x :: PrivateKey -> Integer
+ Crypto.PubKey.DSA: private_x :: PrivateKey -> PrivateNumber
- Crypto.PubKey.DSA: public_y :: PublicKey -> Integer
+ Crypto.PubKey.DSA: public_y :: PublicKey -> PublicNumber
Files
- Benchs/PregenKeys.hs +1/−1
- Crypto/PubKey/DH.hs +4/−4
- Crypto/PubKey/DSA.hs +4/−4
- Crypto/PubKey/ElGamal.hs +7/−7
- Tests/KAT/DSA.hs +5/−1
- Tests/PregenKeys.hs +1/−1
- Tests/Tests.hs +1/−1
- crypto-pubkey.cabal +2/−2
Benchs/PregenKeys.hs view
@@ -20,7 +20,7 @@ , RSA.public_e = 65537 } -dsaParams = (p,g,q)+dsaParams = DSA.Params { DSA.params_p = p, DSA.params_g = g, DSA.params_q = q } where p = 0x00a8c44d7d0bbce69a39008948604b9c7b11951993a5a1a1fa995968da8bb27ad9101c5184bcde7c14fb79f7562a45791c3d80396cefb328e3e291932a17e22edd g = 0x0bf9fe6c75d2367b88912b2252d20fdcad06b3f3a234b92863a1e30a96a123afd8e8a4b1dd953e6f5583ef8e48fc7f47a6a1c8f24184c76dba577f0fec2fcd1c
Crypto/PubKey/DH.hs view
@@ -8,7 +8,7 @@ -- Portability : Good -- module Crypto.PubKey.DH- ( Params+ ( Params(..) , PublicNumber , PrivateNumber , SharedKey@@ -29,7 +29,7 @@ -- we generate a safe prime (a prime number of the form 2p+1 where p is also prime) generateParams :: CPRG g => g -> Int -> Integer -> (Params, g) generateParams rng bits generator =- first (\p -> (p, generator)) $ generateSafePrime rng bits+ first (\p -> Params p generator) $ generateSafePrime rng bits -- | generate a private number with no specific property -- this number is usually called X in DH text.@@ -39,8 +39,8 @@ -- | generate a public number that is for the other party benefits. -- this number is usually called Y in DH text. generatePublic :: Params -> PrivateNumber -> PublicNumber-generatePublic (p,g) (PrivateNumber x) = PublicNumber $ exponantiation g x p+generatePublic (Params p g) (PrivateNumber x) = PublicNumber $ exponantiation g x p -- | generate a shared key using our private number and the other party public number getShared :: Params -> PrivateNumber -> PublicNumber -> SharedKey-getShared (p,_) (PrivateNumber x) (PublicNumber y) = SharedKey $ exponantiation y x p+getShared (Params p _) (PrivateNumber x) (PublicNumber y) = SharedKey $ exponantiation y x p
Crypto/PubKey/DSA.hs view
@@ -7,7 +7,7 @@ -- module Crypto.PubKey.DSA- ( Params+ ( Params(..) , Signature , PublicKey(..) , PrivateKey(..)@@ -37,7 +37,7 @@ | r == 0 || s == 0 = Nothing | otherwise = Just (r,s) where -- parameters- (p,g,q) = private_params pk+ (Params p g q) = private_params pk x = private_x pk -- compute r,s kInv = fromJust $ inverse k q@@ -51,7 +51,7 @@ case signWith k pk hash msg of Nothing -> sign rng' pk hash msg Just sig -> (sig, rng')- where (_,_,q) = private_params pk+ where (Params _ _ q) = private_params pk (k, rng') = generateMax rng q -- | verify a bytestring using the public key.@@ -60,7 +60,7 @@ -- Reject the signature if either 0 < r < q or 0 < s < q is not satisfied. | r <= 0 || r >= q || s <= 0 || s >= q = False | otherwise = v == r- where (p,g,q) = public_params pk+ where (Params p g q) = public_params pk y = public_y pk hm = os2ip $ hash m
Crypto/PubKey/ElGamal.hs view
@@ -66,12 +66,12 @@ -- | generate a public number that is for the other party benefits. -- this number is usually called h=g^a generatePublic :: Params -> PrivateNumber -> PublicNumber-generatePublic (p,g) (PrivateNumber a) = PublicNumber $ exponantiation g a p+generatePublic (Params p g) (PrivateNumber a) = PublicNumber $ exponantiation g a p -- | encrypt with a specified ephemeral key -- do not reuse ephemeral key. encryptWith :: EphemeralKey -> Params -> PublicNumber -> Integer -> (Integer,Integer)-encryptWith (EphemeralKey b) (p,g) (PublicNumber h) m = (c1,c2)+encryptWith (EphemeralKey b) (Params p g) (PublicNumber h) m = (c1,c2) where s = exponantiation h b p c1 = exponantiation g b p c2 = (s * m) `mod` p@@ -79,12 +79,12 @@ -- | encrypt a message using params and public keys -- will generate b (called the ephemeral key) encrypt :: CPRG g => g -> Params -> PublicNumber -> Integer -> ((Integer,Integer), g)-encrypt rng params@(p,_) public m = first (\b -> encryptWith b params public m) $ generateEphemeral rng q+encrypt rng params@(Params p _) public m = first (\b -> encryptWith b params public m) $ generateEphemeral rng q where q = p-1 -- p is prime, hence order of the group is p-1 -- | decrypt message decrypt :: Params -> PrivateNumber -> (Integer, Integer) -> Integer-decrypt (p,_) (PrivateNumber a) (c1,c2) = (c2 * sm1) `mod` p+decrypt (Params p _) (PrivateNumber a) (c1,c2) = (c2 * sm1) `mod` p where s = exponantiation c1 a p sm1 = fromJust $ inverse s p -- always inversible in Zp @@ -101,7 +101,7 @@ -> HashFunction -- ^ collision resistant hash function -> ByteString -- ^ message to sign -> Maybe Signature-signWith k (p,g) (PrivateNumber x) hashF msg+signWith k (Params p g) (PrivateNumber x) hashF msg | k >= p-1 || d > 1 = Nothing -- gcd(k,p-1) is not 1 | s == 0 = Nothing | otherwise = Just $ Signature (r,s)@@ -123,7 +123,7 @@ -> HashFunction -- ^ collision resistant hash function -> ByteString -- ^ message to sign -> (Signature, g)-sign rng params@(p,_) priv hashF msg =+sign rng params@(Params p _) priv hashF msg = let (k, rng') = generateMax rng (p-1) in case signWith k params priv hashF msg of Nothing -> sign rng' params priv hashF msg@@ -136,7 +136,7 @@ -> ByteString -> Signature -> Bool-verify (p,g) (PublicNumber y) hashF msg (Signature (r,s))+verify (Params p g) (PublicNumber y) hashF msg (Signature (r,s)) | or [r <= 0,r >= p,s <= 0,s >= (p-1)] = False | otherwise = lhs == rhs where h = os2ip $ hashF msg
Tests/KAT/DSA.hs view
@@ -115,7 +115,11 @@ } ] where -- (p,g,q)- dsaParams = (0xa8f9cd201e5e35d892f85f80e4db2599a5676a3b1d4f190330ed3256b26d0e80a0e49a8fffaaad2a24f472d2573241d4d6d6c7480c80b4c67bb4479c15ada7ea8424d2502fa01472e760241713dab025ae1b02e1703a1435f62ddf4ee4c1b664066eb22f2e3bf28bb70a2a76e4fd5ebe2d1229681b5b06439ac9c7e9d8bde283,0x2b3152ff6c62f14622b8f48e59f8af46883b38e79b8c74deeae9df131f8b856e3ad6c8455dab87cc0da8ac973417ce4f7878557d6cdf40b35b4a0ca3eb310c6a95d68ce284ad4e25ea28591611ee08b8444bd64b25f3f7c572410ddfb39cc728b9c936f85f419129869929cdb909a6a3a99bbe089216368171bd0ba81de4fe33, 0xf85f0f83ac4df7ea0cdf8f469bfeeaea14156495)+ dsaParams = DSA.Params+ { DSA.params_p = 0xa8f9cd201e5e35d892f85f80e4db2599a5676a3b1d4f190330ed3256b26d0e80a0e49a8fffaaad2a24f472d2573241d4d6d6c7480c80b4c67bb4479c15ada7ea8424d2502fa01472e760241713dab025ae1b02e1703a1435f62ddf4ee4c1b664066eb22f2e3bf28bb70a2a76e4fd5ebe2d1229681b5b06439ac9c7e9d8bde283+ , DSA.params_g = 0x2b3152ff6c62f14622b8f48e59f8af46883b38e79b8c74deeae9df131f8b856e3ad6c8455dab87cc0da8ac973417ce4f7878557d6cdf40b35b4a0ca3eb310c6a95d68ce284ad4e25ea28591611ee08b8444bd64b25f3f7c572410ddfb39cc728b9c936f85f419129869929cdb909a6a3a99bbe089216368171bd0ba81de4fe33+ , DSA.params_q = 0xf85f0f83ac4df7ea0cdf8f469bfeeaea14156495+ } vectorToPrivate :: VectorDSA -> DSA.PrivateKey vectorToPrivate vector = DSA.PrivateKey
Tests/PregenKeys.hs view
@@ -20,7 +20,7 @@ , RSA.public_e = 65537 } -dsaParams = (p,g,q)+dsaParams = DSA.Params { DSA.params_p = p, DSA.params_g = g, DSA.params_q = q } where p = 0x00a8c44d7d0bbce69a39008948604b9c7b11951993a5a1a1fa995968da8bb27ad9101c5184bcde7c14fb79f7562a45791c3d80396cefb328e3e291932a17e22edd g = 0x0bf9fe6c75d2367b88912b2252d20fdcad06b3f3a234b92863a1e30a96a123afd8e8a4b1dd953e6f5583ef8e48fc7f47a6a1c8f24184c76dba577f0fec2fcd1c
Tests/Tests.hs view
@@ -125,7 +125,7 @@ sb = DH.getShared dhparams xb ya yb = DH.generatePublic dhparams xb ya = DH.generatePublic dhparams xa- dhparams = (11, 7)+ dhparams = DH.Params { DH.params_p = 11, DH.params_g = 7 } asymEncryptionTests = testGroup "assymmetric cipher encryption"
crypto-pubkey.cabal view
@@ -1,5 +1,5 @@ Name: crypto-pubkey-Version: 0.1.2+Version: 0.1.3 Description: Public Key cryptography .@@ -28,7 +28,7 @@ Build-Depends: base >= 4 && < 5 , bytestring , crypto-random-api >= 0.2 && < 0.3- , crypto-pubkey-types >= 0.2 && < 0.3+ , crypto-pubkey-types >= 0.3 && < 0.4 , cryptohash >= 0.8 , crypto-numbers Exposed-modules: Crypto.PubKey.RSA