DSA 1.0.0 → 1.0.1
raw patch · 3 files changed
+14/−13 lines, 3 filesPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
API changes (from Hackage documentation)
- Codec.Crypto.DSA.Exceptions: ProbablePrimesEvidence :: Integer -> Integer -> (ByteString -> ByteString) -> ProbablePrimesEvidence
+ Codec.Crypto.DSA.Exceptions: ProbablePrimesEvidence :: ByteString -> Integer -> (ByteString -> ByteString) -> ProbablePrimesEvidence
- Codec.Crypto.DSA.Exceptions: prpeDomainParameterSeed :: ProbablePrimesEvidence -> Integer
+ Codec.Crypto.DSA.Exceptions: prpeDomainParameterSeed :: ProbablePrimesEvidence -> ByteString
- Codec.Crypto.DSA.Pure: ProbablePrimesEvidence :: Integer -> Integer -> (ByteString -> ByteString) -> ProbablePrimesEvidence
+ Codec.Crypto.DSA.Pure: ProbablePrimesEvidence :: ByteString -> Integer -> (ByteString -> ByteString) -> ProbablePrimesEvidence
- Codec.Crypto.DSA.Pure: prpeDomainParameterSeed :: ProbablePrimesEvidence -> Integer
+ Codec.Crypto.DSA.Pure: prpeDomainParameterSeed :: ProbablePrimesEvidence -> ByteString
Files
- DSA.cabal +1/−1
- src/Codec/Crypto/DSA/Pure.hs +12/−11
- src/Test.hs +1/−1
DSA.cabal view
@@ -1,6 +1,6 @@ name: DSA category: Cryptography, Codec-version: 1.0.0+version: 1.0.1 license: BSD3 license-file: LICENSE author: Adam Wick <awick@galois.com>
src/Codec/Crypto/DSA/Pure.hs view
@@ -346,7 +346,7 @@ -- be used to ensure that the /p/ and /q/ values provided were generated -- appropriately. data ProbablePrimesEvidence = ProbablePrimesEvidence {- prpeDomainParameterSeed :: Integer+ prpeDomainParameterSeed :: ByteString , prpeCounter :: Integer , prpeHash :: ByteString -> ByteString }@@ -392,14 +392,13 @@ find_q g' | isLeft dpsEth = Left (DSARandomGenerationError err) | isLeft primeEth = Left primeErr- | isPrime = find_p g''' 1 0 q dpsI+ | isPrime = find_p g''' 1 0 q domParamSeed | otherwise = find_q g''' where dpsEth = genBytes (fromIntegral ((seedlen + 7) `div` 8)) g' Left err = dpsEth Right (dpsBS, g'') = dpsEth domParamSeed = BS.fromStrict dpsBS- dpsI = bs2int domParamSeed mask = 2 ^ (bigN - 1) bigU = bs2int (hash domParamSeed) `mod` mask q = mask + bigU + 1 - (bigU `mod` 2)@@ -407,13 +406,15 @@ Left primeErr = primeEth Right (isPrime, g''') = primeEth --- find_p g' !off !ctr !q !dps+ find_p g' !off !ctr !q !dpsBS | ctr == fourTimesL = find_q g'- | p < twoLm1 = find_p g' off' ctr' q dps+ | p < twoLm1 = find_p g' off' ctr' q dpsBS | isLeft primeEth = Left primeErr- | isPrime = Right (p, q, ProbablePrimesEvidence dps ctr hash, g'')- | otherwise = find_p g'' off' ctr' q dps+ | isPrime = let ev = ProbablePrimesEvidence dpsBS ctr hash+ in Right (p, q, ev, g'')+ | otherwise = find_p g'' off' ctr' q dpsBS where+ dps = bs2int (dpsBS :: ByteString) :: Integer !bigW = computeW hash dps off n b seedlen bigX = bigW + (2 ^ (bigL - 1)) c = bigX `mod` (2 * q)@@ -471,11 +472,11 @@ -- 4. If (counter > (4L – 1)), then return INVALID. -- [See the second line above] -- 5. seedlen = len (domain_parameter_seed).- seedlen = intlen dps * 8+ seedlen = fromIntegral (BS.length dps * 8) -- 6. If (seedlen < N), then return INVALID. -- [See the third line above] -- 7. U = Hash(domain_parameter_seed) mod 2N–1- bigU = bs2int (hash (int2bs dps)) `mod` (2 ^ (bigN - 1))+ bigU = bs2int (hash dps) `mod` (2 ^ (bigN - 1)) -- 8. computed_q = 2^(N–1) + U + 1 – ( U mod 2). computed_q = (2 ^ (bigN - 1)) + bigU + 1 - (bigU `mod` 2) -- 9. Test whether or not computed_q is prime as specified in Appendix C.3.@@ -500,7 +501,7 @@ | isPrime = step14 gen i computed_p isPrime | otherwise = loop gen' (i + 1) off' where- bigW = computeW hash dps off n b seedlen+ bigW = computeW hash (bs2int dps) off n b seedlen bigX = bigW + (2 ^ (bigL - 1)) c = bigX `mod` (2 * q) computed_p = bigX - (c - 1)@@ -677,7 +678,7 @@ instance GenerationEvidence ProbablePrimesEvidence where getHash = prpeHash- getDomainParameterSeed = int2bs . prpeDomainParameterSeed+ getDomainParameterSeed = prpeDomainParameterSeed instance GenerationEvidence ProvablePrimesEvidence where getHash = pvpeHash
src/Test.hs view
@@ -183,7 +183,7 @@ Right (p, q, ev, g') -> let (res, _) = validateProbablePrimes g' p q ev in if not res- then trace ("FAIL p = " ++ show p ++ " q = " ++ show q) False+ then trace ("FAIL p = " ++ show p ++ " q = " ++ show q ++ " dps = " ++ show (prpeDomainParameterSeed ev) ++ " counter: " ++ show (prpeCounter ev)) False else True where mseedlen' = fmap (\ x -> (getPositive x * 8) + getN params) mseedlen