haskoin-core 0.14.0 → 0.14.1
raw patch · 22 files changed
+615/−1650 lines, 22 filesdep ~haskoin-core
Dependency ranges changed: haskoin-core
Files
- CHANGELOG.md +5/−0
- haskoin-core.cabal +4/−3
- src/Haskoin/Address.hs +1/−2
- src/Haskoin/Block/Common.hs +3/−3
- src/Haskoin/Block/Headers.hs +13/−9
- src/Haskoin/Constants.hs +2/−2
- src/Haskoin/Keys/Common.hs +9/−14
- src/Haskoin/Keys/Extended.hs +2/−2
- src/Haskoin/Util/Arbitrary/Address.hs +22/−2
- src/Haskoin/Util/Arbitrary/Block.hs +26/−2
- src/Haskoin/Util/Arbitrary/Script.hs +10/−0
- src/Haskoin/Util/Arbitrary/Util.hs +165/−4
- test/Haskoin/AddressSpec.hs +31/−34
- test/Haskoin/BlockSpec.hs +53/−44
- test/Haskoin/Crypto/HashSpec.hs +52/−1255
- test/Haskoin/Crypto/SignatureSpec.hs +0/−2
- test/Haskoin/Keys/ExtendedSpec.hs +58/−75
- test/Haskoin/KeysSpec.hs +19/−30
- test/Haskoin/NetworkSpec.hs +33/−43
- test/Haskoin/ScriptSpec.hs +35/−25
- test/Haskoin/TransactionSpec.hs +58/−50
- test/Haskoin/UtilSpec.hs +14/−49
CHANGELOG.md view
@@ -4,6 +4,11 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). +## 0.14.1+### Fixed+- Correct some Bitcoin Cash Testnet3 seeds.+- Add helpers for writing Data.Serialize and Data.Aeson identity tests+ ## 0.14.0 ### Changed - Expose all modules for tests.
haskoin-core.cabal view
@@ -4,10 +4,10 @@ -- -- see: https://github.com/sol/hpack ----- hash: cd8ec1d089e181beb14b72be0d419691ab2b792fd59cb7cb9f2b884c5a649e40+-- hash: 26dbdf73274ee98d645964af8eced9a7fa589a0e625153f6056626fc0d48a7cd name: haskoin-core-version: 0.14.0+version: 0.14.1 synopsis: Bitcoin & Bitcoin Cash library for Haskell description: Please see the README on GitHub at <https://github.com/haskoin/haskoin-core#readme> category: Bitcoin, Finance, Network@@ -96,6 +96,7 @@ , deepseq >=1.4.4.0 , entropy >=0.4.1.5 , hashable >=1.3.0.0+ , hspec >=2.7.1 , memory >=0.15.0 , mtl >=2.2.2 , murmur3 >=1.0.3@@ -149,7 +150,7 @@ , deepseq >=1.4.4.0 , entropy >=0.4.1.5 , hashable >=1.3.0.0- , haskoin-core ==0.14.0+ , haskoin-core ==0.14.1 , hspec >=2.7.1 , memory >=0.15.0 , mtl >=2.2.2
src/Haskoin/Address.hs view
@@ -156,8 +156,7 @@ addrToString net a@PubKeyAddress {getAddrHash160 = h} | isNothing (getCashAddrPrefix net) = Just . encodeBase58Check . runPut $ base58put net a- | otherwise =- cashAddrEncode net 0 (S.encode h)+ | otherwise = cashAddrEncode net 0 (S.encode h) addrToString net a@ScriptAddress {getAddrHash160 = h} | isNothing (getCashAddrPrefix net) = Just . encodeBase58Check . runPut $ base58put net a
src/Haskoin/Block/Common.hs view
@@ -234,7 +234,7 @@ -- | hash of the last desired block , getBlocksHashStop :: !BlockHash }- deriving (Eq, Show, Generic, NFData)+ deriving (Eq, Show, Read, Generic, NFData) instance Serialize GetBlocks where get = GetBlocks <$> getWord32le <*> (repList =<< get) <*> get@@ -261,7 +261,7 @@ -- | hash of the last desired block header , getHeadersHashStop :: !BlockHash }- deriving (Eq, Show, Generic, NFData)+ deriving (Eq, Show, Read, Generic, NFData) instance Serialize GetHeaders where get = GetHeaders <$> getWord32le <*> (repList =<< get) <*> get@@ -277,7 +277,7 @@ newtype Headers = Headers { -- | list of block headers with transaction count headersList :: [BlockHeaderCount]- } deriving (Eq, Show, Generic, NFData)+ } deriving (Eq, Show, Read, Generic, NFData) instance Serialize Headers where get = Headers <$> (repList =<< get)
src/Haskoin/Block/Headers.hs view
@@ -109,16 +109,20 @@ -- block chain. data BlockNode -- | non-Genesis block header- = BlockNode { nodeHeader :: !BlockHeader- , nodeHeight :: !BlockHeight- -- | accumulated work so far- , nodeWork :: !BlockWork- -- | akip magic block hash- , nodeSkip :: !BlockHash }+ = BlockNode+ { nodeHeader :: !BlockHeader+ , nodeHeight :: !BlockHeight+ -- | accumulated work so far+ , nodeWork :: !BlockWork+ -- | akip magic block hash+ , nodeSkip :: !BlockHash+ } -- | Genesis block header- | GenesisNode { nodeHeader :: !BlockHeader- , nodeHeight :: !BlockHeight- , nodeWork :: !BlockWork }+ | GenesisNode+ { nodeHeader :: !BlockHeader+ , nodeHeight :: !BlockHeight+ , nodeWork :: !BlockWork+ } deriving (Show, Read, Generic, Hashable, NFData) instance Serialize BlockNode where
src/Haskoin/Constants.hs view
@@ -472,10 +472,10 @@ ] , getSeeds = [ "testnet-seed.bitcoinabc.org"- , "testnet-seed-abc.bitcoinforks.org"+ , "testnet-seed-bch.bitcoinforks.org" , "testnet-seed.deadalnix.me"- , "testnet-seeder.criptolayer.net" , "testnet-seed.bchd.cash"+ , "testnet-seed.bitcoinunlimited.info" ] , getBip44Coin = 1 , getSigHashForkId = Just 0
src/Haskoin/Keys/Common.hs view
@@ -3,6 +3,7 @@ {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE OverloadedStrings #-}+{-# OPTIONS_GHC -fno-warn-orphans #-} {-| Module : Haskoin.Keys.Common Copyright : No rights reserved@@ -25,8 +26,6 @@ , fromMiniKey , tweakPubKey , tweakSecKey- , secKeyPut- , secKeyGet , getSecKey , secKey ) where@@ -44,8 +43,8 @@ import Data.Hashable import Data.Maybe (fromMaybe) import Data.Serialize (Serialize, decode, encode, get, put)-import Data.Serialize.Get (Get, getByteString)-import Data.Serialize.Put (Putter, putByteString)+import Data.Serialize.Get (getByteString)+import Data.Serialize.Put (putByteString) import Data.String (IsString, fromString) import Data.String.Conversions (cs) import GHC.Generics (Generic)@@ -108,19 +107,15 @@ , secKeyCompressed :: !Bool } deriving (Eq, Show, Read, Generic, NFData) +instance Serialize SecKey where+ get = do+ bs <- getByteString 32+ maybe (fail "invalid private key") return (secKey bs)+ put = putByteString . getSecKey+ -- | Wrap private key with corresponding public key compression flag. wrapSecKey :: Bool -> SecKey -> SecKeyI wrapSecKey c d = SecKeyI d c---- | Deserialize 'SecKey'.-secKeyGet :: Get SecKey-secKeyGet = do- bs <- getByteString 32- maybe (fail "invalid private key") return (secKey bs)---- | Serialize 'SecKey'.-secKeyPut :: Putter SecKey-secKeyPut = putByteString . getSecKey -- | Decode Casascius mini private keys (22 or 30 characters). fromMiniKey :: ByteString -> Maybe SecKeyI
src/Haskoin/Keys/Extended.hs view
@@ -918,11 +918,11 @@ getPadPrvKey = do pad <- getWord8 unless (pad == 0x00) $ fail "Private key must be padded with 0x00"- secKeyGet+ S.get -- | Serialize HDW-specific private key. putPadPrvKey :: Putter SecKey-putPadPrvKey p = putWord8 0x00 >> secKeyPut p+putPadPrvKey p = putWord8 0x00 >> S.put p bsPadPrvKey :: SecKey -> ByteString bsPadPrvKey = runPut . putPadPrvKey
src/Haskoin/Util/Arbitrary/Address.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE TupleSections #-} {-| Module : Haskoin.Test.Address Copyright : No rights reserved@@ -9,13 +10,32 @@ module Haskoin.Util.Arbitrary.Address where import Haskoin.Address+import Haskoin.Constants import Haskoin.Util.Arbitrary.Crypto+import Haskoin.Util.Arbitrary.Util import Test.QuickCheck -- | Arbitrary pay-to-public-key-hash or pay-to-script-hash address. arbitraryAddress :: Gen Address arbitraryAddress = oneof [arbitraryPubKeyAddress, arbitraryScriptAddress] +-- | Arbitrary address including pay-to-witness+arbitraryAddressAll :: Gen Address+arbitraryAddressAll =+ oneof [ arbitraryPubKeyAddress+ , arbitraryScriptAddress+ , arbitraryWitnessPubKeyAddress+ , arbitraryWitnessScriptAddress+ ]++-- | Arbitrary valid combination of (Network, Address)+arbitraryNetAddress :: Gen (Network, Address)+arbitraryNetAddress = do+ net <- arbitraryNetwork+ if net `elem` [bch, bchTest, bchRegTest]+ then (net, ) <$> arbitraryAddress+ else (net, ) <$> arbitraryAddressAll+ -- | Arbitrary pay-to-public-key-hash address. arbitraryPubKeyAddress :: Gen Address arbitraryPubKeyAddress = PubKeyAddress <$> arbitraryHash160@@ -26,8 +46,8 @@ -- | Arbitrary pay-to-witness public key hash arbitraryWitnessPubKeyAddress :: Gen Address-arbitraryWitnessPubKeyAddress = WitnessPubKeyAddress <$> arbitraryHash160 +arbitraryWitnessPubKeyAddress = WitnessPubKeyAddress <$> arbitraryHash160 -- | Arbitrary pay-to-witness script hash arbitraryWitnessScriptAddress :: Gen Address-arbitraryWitnessScriptAddress = WitnessPubKeyAddress <$> arbitraryHash160 +arbitraryWitnessScriptAddress = WitnessPubKeyAddress <$> arbitraryHash160
src/Haskoin/Util/Arbitrary/Block.hs view
@@ -8,9 +8,10 @@ -} module Haskoin.Util.Arbitrary.Block where -import Haskoin.Block.Common-import Haskoin.Block.Merkle+import qualified Data.HashMap.Strict as HashMap+import Haskoin.Block import Haskoin.Constants+import Haskoin.Util.Arbitrary.Util import Haskoin.Util.Arbitrary.Crypto import Haskoin.Util.Arbitrary.Network import Haskoin.Util.Arbitrary.Transaction@@ -66,4 +67,27 @@ c <- choose (1,10) flags <- vectorOf (c*8) arbitrary return $ MerkleBlock bh ntx hashes flags++-- | Arbitrary 'BlockNode'+arbitraryBlockNode :: Gen BlockNode+arbitraryBlockNode =+ oneof+ [ BlockNode+ <$> arbitraryBlockHeader+ <*> choose (1, maxBound)+ <*> arbitrarySizedNatural+ <*> arbitraryBlockHash+ , GenesisNode+ <$> arbitraryBlockHeader+ <*> (return 0)+ <*> arbitrarySizedNatural+ ]++-- | Arbitrary 'HeaderMemory'+arbitraryHeaderMemory :: Gen HeaderMemory+arbitraryHeaderMemory = do+ ls <- listOf $ (,) <$> arbitrary <*> arbitraryBSS+ HeaderMemory+ <$> (return $ HashMap.fromList ls)+ <*> arbitraryBlockNode
src/Haskoin/Util/Arbitrary/Script.hs view
@@ -190,6 +190,16 @@ f2 <- elements [id, setAnyoneCanPayFlag] return $ f1 $ f2 sh +arbitrarySigHashFlag :: Gen SigHashFlag+arbitrarySigHashFlag =+ elements+ [ SIGHASH_ALL+ , SIGHASH_NONE+ , SIGHASH_SINGLE+ , SIGHASH_FORKID+ , SIGHASH_ANYONECANPAY+ ]+ -- | Arbitrary message hash, private key and corresponding 'TxSignature'. The -- signature is generated deterministically using a random message and a random -- private key.
src/Haskoin/Util/Arbitrary/Util.hs view
@@ -1,3 +1,5 @@+{-# LANGUAGE ExistentialQuantification #-}+{-# LANGUAGE OverloadedStrings #-} {-| Module : Haskoin.Test.Util Copyright : No rights reserved@@ -6,27 +8,71 @@ Stability : experimental Portability : POSIX -}-module Haskoin.Util.Arbitrary.Util where+module Haskoin.Util.Arbitrary.Util+( arbitraryBS+, arbitraryBS1+, arbitraryBSn+, arbitraryBSS+, arbitraryBSS1+, arbitraryBSSn+, arbitraryMaybe+, arbitraryNetwork+, SerialBox(..)+, JsonBox(..)+, NetBox(..)+, ReadBox(..)+, testIdentity+, testSerial+, testRead+, testJson+, testNetJson+, arbitraryNetData+, genNetData+)+where +import Control.Monad (forM_, (<=<))+import qualified Data.Aeson as A+import qualified Data.Aeson.Encoding as A+import qualified Data.Aeson.Types as A import Data.ByteString (ByteString, pack)+import qualified Data.ByteString.Short as BSS+import qualified Data.Map.Strict as Map+import Data.Proxy+import qualified Data.Serialize as S import Data.Time.Clock (UTCTime (..)) import Data.Time.Clock.POSIX (posixSecondsToUTCTime)+import qualified Data.Typeable as T import Data.Word (Word32)-import Test.QuickCheck import Haskoin.Constants+import Test.Hspec (Spec, describe, shouldBe, shouldSatisfy)+import Test.Hspec.QuickCheck (prop)+import Test.QuickCheck -- | Arbitrary strict 'ByteString'. arbitraryBS :: Gen ByteString arbitraryBS = pack <$> arbitrary --- | Arbitrary non-empty strict ByteString+-- | Arbitrary non-empty strict 'ByteString' arbitraryBS1 :: Gen ByteString arbitraryBS1 = pack <$> listOf1 arbitrary --- | Arbitrary strict ByteString of a given length+-- | Arbitrary strict 'ByteString' of a given length arbitraryBSn :: Int -> Gen ByteString arbitraryBSn n = pack <$> vectorOf n arbitrary +-- | Arbitrary 'ShortByteString'.+arbitraryBSS :: Gen BSS.ShortByteString+arbitraryBSS = BSS.pack <$> arbitrary++-- | Arbitrary non-empty 'ShortByteString'+arbitraryBSS1 :: Gen BSS.ShortByteString+arbitraryBSS1 = BSS.pack <$> listOf1 arbitrary++-- | Arbitrary 'ShortByteString' of a given length+arbitraryBSSn :: Int -> Gen BSS.ShortByteString+arbitraryBSSn n = BSS.pack <$> vectorOf n arbitrary+ -- | Arbitrary UTCTime that generates dates after 01 Jan 1970 01:00:00 CET arbitraryUTCTime :: Gen UTCTime arbitraryUTCTime = do@@ -39,6 +85,121 @@ , (5, Just <$> g) ] +-- | Generate an Network arbitraryNetwork :: Gen Network arbitraryNetwork = elements allNets++-- Helpers for creating Serial and JSON Identity tests++data SerialBox =+ forall a. (Show a, Eq a, T.Typeable a, S.Serialize a) =>+ SerialBox (Gen a)++data ReadBox =+ forall a. (Read a, Show a, Eq a, T.Typeable a) =>+ ReadBox (Gen a)++data JsonBox =+ forall a. (Show a, Eq a, T.Typeable a, A.ToJSON a, A.FromJSON a) =>+ JsonBox (Gen a)++data NetBox =+ forall a. (Show a, Eq a, T.Typeable a) =>+ NetBox+ ( Network -> a -> A.Value+ , Network -> a -> A.Encoding+ , Network -> A.Value -> A.Parser a+ , Gen (Network, a))++testIdentity :: [SerialBox] -> [ReadBox] -> [JsonBox] -> [NetBox] -> Spec+testIdentity serialVals readVals jsonVals netVals = do+ describe "Data.Serialize Encoding" $+ forM_ serialVals $ \(SerialBox g) -> testSerial g+ describe "Read/Show Encoding" $+ forM_ readVals $ \(ReadBox g) -> testRead g+ describe "Data.Aeson Encoding" $+ forM_ jsonVals $ \(JsonBox g) -> testJson g+ describe "Data.Aeson Encoding with Network" $+ forM_ netVals $ \(NetBox (j,e,p,g)) -> testNetJson j e p g++-- | Generate Data.Serialize identity tests+testSerial ::+ (Eq a, Show a, T.Typeable a, S.Serialize a) => Gen a -> Spec+testSerial gen = do+ prop ("Data.Serialize encoding/decoding identity for " <> name) $+ forAll gen $ \x -> (S.decode . S.encode) x `shouldBe` Right x+ where+ name = show $ T.typeRep $ proxy gen+ proxy :: Gen a -> Proxy a+ proxy = const Proxy++-- | Generate Read/Show identity tests+testRead ::+ (Eq a, Read a, Show a, T.Typeable a) => Gen a -> Spec+testRead gen = do+ prop ("read/show identity for " <> name) $+ forAll gen $ \x -> (read . show) x `shouldBe` x+ where+ name = show $ T.typeRep $ proxy gen+ proxy :: Gen a -> Proxy a+ proxy = const Proxy++-- | Generate Data.Aeson identity tests+testJson ::+ (Eq a, Show a, T.Typeable a, A.ToJSON a, A.FromJSON a) => Gen a -> Spec+testJson gen = do+ prop ("Data.Aeson toJSON/fromJSON identity for " <> name) $+ forAll gen (`shouldSatisfy` jsonID)+ prop ("Data.Aeson toEncoding/fromJSON identity for " <> name) $+ forAll gen (`shouldSatisfy` encodingID)+ where+ name = show $ T.typeRep $ proxy gen+ proxy :: Gen a -> Proxy a+ proxy = const Proxy+ jsonID x = (A.fromJSON . A.toJSON) (toMap x) == A.Success (toMap x)+ encodingID x =+ (A.decode . A.encodingToLazyByteString . A.toEncoding) (toMap x) ==+ Just (toMap x)++-- | Generate Data.Aeson identity tests for type that need the @Network@+testNetJson ::+ (Eq a, Show a, T.Typeable a)+ => (Network -> a -> A.Value)+ -> (Network -> a -> A.Encoding)+ -> (Network -> A.Value -> A.Parser a)+ -> Gen (Network, a)+ -> Spec+testNetJson j e p g = do+ prop ("Data.Aeson toJSON/fromJSON identity (with network) for " <> name) $+ forAll g $ \(net, x) -> dec net (encVal net x) `shouldBe` Just x+ prop ("Data.Aeson toEncoding/fromJSON identity (with network) for " <> name) $+ forAll g $ \(net, x) -> dec net (encEnc net x) `shouldBe` Just x+ where+ encVal net = A.encode . toMap . j net+ encEnc net = A.encodingToLazyByteString . toMapE . e net+ dec net = A.parseMaybe (p net) . fromMap <=< A.decode+ name = show $ T.typeRep $ proxy j+ proxy :: (Network -> a -> A.Value) -> Proxy a+ proxy = const Proxy++arbitraryNetData :: Arbitrary a => Gen (Network, a)+arbitraryNetData = do+ net <- arbitraryNetwork+ x <- arbitrary+ return (net, x)++genNetData :: Gen a -> Gen (Network, a)+genNetData gen = do+ net <- arbitraryNetwork+ x <- gen+ return (net, x)++toMap :: a -> Map.Map String a+toMap = Map.singleton "object"++toMapE :: A.Encoding -> A.Encoding+toMapE = A.pairs . (A.pair "object")++fromMap :: Map.Map String a -> a+fromMap = (Map.! "object")
test/Haskoin/AddressSpec.hs view
@@ -9,46 +9,43 @@ import Haskoin.Constants import Haskoin.Keys (derivePubKeyI) import Haskoin.Util.Arbitrary-import Haskoin.UtilSpec (testCustomEncoding, testCustomJSON) import Test.Hspec-import Test.HUnit (Assertion, assertBool, assertEqual)+import Test.Hspec.QuickCheck+import Test.HUnit import Test.QuickCheck +serialVals :: [SerialBox]+serialVals = [SerialBox arbitraryAddressAll]++readVals :: [ReadBox]+readVals = [ReadBox arbitraryAddressAll]++netVals :: [NetBox]+netVals =+ [NetBox (addrToJSON, addrToEncoding, addrFromJSON, arbitraryNetAddress)]+ spec :: Spec spec = do- let net = btc- describe "btc address" . it "base58 encodings" $ mapM_ runVector vectors- describe "btc-test address" $ props btcTest- describe "bch address" $ props bch- describe "bch-test address" $ props bchTest- describe "bch-regtest address" $ props bchRegTest- describe "json serialization" $ do- it "encodes and decodes address (addrToJSON)" $- forAll- arbitraryAddress- (testCustomJSON (addrFromJSON net) (addrToJSON net))- it "encodes and decodes address (addrToEncoding)" $- forAll- arbitraryAddress- (testCustomEncoding (addrFromJSON net) (addrToEncoding net))- describe "witness address vectors" . it "p2sh(pwpkh)" $+ testIdentity serialVals readVals [] netVals+ describe "Address properties" $ do+ prop "encodes and decodes base58 bytestring" $+ forAll arbitraryBS $ \bs ->+ decodeBase58 (encodeBase58 bs) == Just bs+ prop "encodes and decodes base58 bytestring with checksum" $+ forAll arbitraryBS $ \bs ->+ decodeBase58Check (encodeBase58Check bs) == Just bs+ prop "encodes and decodes address" $+ forAll arbitraryNetAddress $ \(net, a) ->+ (stringToAddr net =<< addrToString net a) == Just a+ describe "Address vectors" . it "base58 btc address vectors" $+ mapM_ runVector vectors+ describe "Witness address vectors" . it "p2sh(pwpkh)" $ mapM_ testCompatWitness compatWitnessVectors--props :: Network -> Spec-props net = do- it "encodes and decodes base58 bytestring" $- property $- forAll arbitraryBS $ \bs -> decodeBase58 (encodeBase58 bs) == Just bs- it "encodes and decodes base58 bytestring with checksum" $- property $- forAll arbitraryBS $ \bs ->- decodeBase58Check (encodeBase58Check bs) == Just bs- it "encodes and decodes address" $- property $- forAll arbitraryAddress $ \a ->- (stringToAddr net =<< addrToString net a) == Just a- it "shows and reads address" $- property $ forAll arbitraryAddress $ \a -> read (show a) == a+ describe "WIF keys" $+ prop "encode and decode wif private keys" $+ forAll arbitraryNetwork $ \net ->+ forAll arbitraryKeyPair $ \(pk, _) ->+ fromWif net (toWif net pk) == Just pk runVector :: (ByteString, Text, Text) -> Assertion runVector (bs, e, chk) = do
test/Haskoin/BlockSpec.hs view
@@ -13,11 +13,43 @@ import Haskoin.Constants import Haskoin.Transaction import Haskoin.Util.Arbitrary-import Haskoin.UtilSpec (cerealID, testJsonID) import Test.Hspec+import Test.Hspec.QuickCheck import Test.HUnit hiding (State) import Test.QuickCheck ++serialVals :: [SerialBox]+serialVals =+ [ SerialBox (arbitraryBlock =<< arbitraryNetwork)+ , SerialBox arbitraryBlockHash+ , SerialBox arbitraryBlockHeader+ , SerialBox arbitraryGetBlocks+ , SerialBox arbitraryGetHeaders+ , SerialBox arbitraryHeaders+ , SerialBox arbitraryMerkleBlock+ , SerialBox arbitraryBlockNode+ ]++readVals :: [ReadBox]+readVals =+ [ ReadBox (arbitraryBlock =<< arbitraryNetwork)+ , ReadBox arbitraryBlockHash+ , ReadBox arbitraryBlockHeader+ , ReadBox arbitraryGetBlocks+ , ReadBox arbitraryGetHeaders+ , ReadBox arbitraryHeaders+ , ReadBox arbitraryMerkleBlock+ , ReadBox arbitraryBlockNode+ ]++jsonVals :: [JsonBox]+jsonVals =+ [ JsonBox (arbitraryBlock =<< arbitraryNetwork)+ , JsonBox arbitraryBlockHash+ , JsonBox arbitraryBlockHeader+ ]+ myTime :: Timestamp myTime = 1499083075 @@ -33,70 +65,47 @@ spec :: Spec spec = do- let net = bchRegTest+ testIdentity serialVals readVals jsonVals [] describe "blockchain headers" $ do- it "gets best block" $- let bb =+ it "gets best block on bchRegTest" $+ let net = bchRegTest+ bb = withChain net $ do chain net (getGenesisHeader net) 100 getBestBlockHeader in nodeHeight bb `shouldBe` 100- it "builds a block locator" $- let loc =+ it "builds a block locator on bchRegTest" $+ let net = bchRegTest+ loc = withChain net $ do chain net (getGenesisHeader net) 100 bb <- getBestBlockHeader blockLocatorNodes bb heights = map nodeHeight loc in heights `shouldBe` [100,99 .. 90] <> [88, 84, 76, 60, 28, 0]- it "follows split chains" $- let bb = withChain net $ splitChain net >> getBestBlockHeader+ it "follows split chains on bchRegTest" $+ let net = bchRegTest+ bb = withChain net $ splitChain net >> getBestBlockHeader in nodeHeight bb `shouldBe` 4035 describe "block hash" $ do- it "encodes and decodes block hash" $- property $+ prop "encodes and decodes block hash" $ forAll arbitraryBlockHash $ \h -> hexToBlockHash (blockHashToHex h) == Just h- it "from string block hash" $- property $+ prop "from string block hash" $ forAll arbitraryBlockHash $ \h -> fromString (cs $ blockHashToHex h) == h- it "show and read block hash" $- property $ forAll arbitraryBlockHash $ \h -> read (show h) == h describe "merkle trees" $ do- let net' = btc- it "builds tree of right width at height 1" $ property testTreeWidth- it "builds tree of right width at height 0" $ property testBaseWidth- it "builds and extracts partial merkle tree" $- property $- forAll- (listOf1 ((,) <$> arbitraryTxHash <*> arbitrary))- (buildExtractTree net')- it "merkle root test vectors" $- mapM_ runMerkleVector merkleVectors+ prop "builds tree of right width at height 1" testTreeWidth+ prop "builds tree of right width at height 0" testBaseWidth+ prop "builds and extracts partial merkle tree" $+ forAll arbitraryNetwork $ \net ->+ forAll+ (listOf1 ((,) <$> arbitraryTxHash <*> arbitrary))+ (buildExtractTree net)+ it "merkle root test vectors" $ mapM_ runMerkleVector merkleVectors describe "compact number" $ do it "compact number local vectors" testCompact it "compact number imported vectors" testCompactBitcoinCore- describe "binary block serialization" $ do- it "encodes and decodes block" $- property $ forAll (arbitraryBlock net) cerealID- it "encodes and decodes block header" $- property $ forAll arbitraryBlockHeader cerealID- it "encodes and decodes getblocks" $- property $ forAll arbitraryGetBlocks cerealID- it "encodes and decodes getheaders" $- property $ forAll arbitraryGetHeaders cerealID- it "encodes and decdoes headers" $- property $ forAll arbitraryHeaders cerealID- it "encodes and decodes merkle block" $- property $ forAll arbitraryMerkleBlock cerealID- describe "JSON block serialization" $ do- it "encodes and decodes Block" $- property $ forAll (arbitraryBlock net) testJsonID- it "encodes and decodes BlockHash" $- property $ forAll arbitraryBlockHash testJsonID- it "encodes and decodes BlockHeader" $- property $ forAll arbitraryBlockHeader testJsonID describe "helper functions" $ do it "computes bitcoin block subsidy correctly" (testSubsidy btc) it "computes regtest block subsidy correctly" (testSubsidy btcRegTest)
test/Haskoin/Crypto/HashSpec.hs view
@@ -12,1258 +12,55 @@ import Haskoin.Util import Haskoin.Util.Arbitrary import Test.Hspec-import Test.HUnit (Assertion, assertBool)-import Test.QuickCheck---- Test vectors from NIST--- http://csrc.nist.gov/groups/STM/cavp/documents/drbg/drbgtestvectors.zip--- About 1/3 of HMAC DRBG SHA-256 test vectors are tested here--spec :: Spec-spec =- describe "hash" $ do- it "join512( split512(h) ) == h" $- property $- forAll arbitraryHash256 $ forAll arbitraryHash256 . joinSplit512- it "decodeCompact . encodeCompact i == i" $ property decEncCompact- it "from string 64-byte hash" $- property $- forAll arbitraryHash512 $ \h ->- fromString (cs $ encodeHex $ encode h) == h- it "from string 32-byte hash" $- property $- forAll arbitraryHash256 $ \h ->- fromString (cs $ encodeHex $ encode h) == h- it "from string 20-byte hash" $- property $- forAll arbitraryHash160 $ \h ->- fromString (cs $ encodeHex $ encode h) == h- it "encodes and decodes bytestring" $- property $ forAll arbitraryBS cerealID- it "encodes and decodes hash160" $- property $ forAll arbitraryHash160 cerealID- it "encodes and decodes hash256" $- property $ forAll arbitraryHash256 cerealID- it "encodes and decodes hash512" $- property $ forAll arbitraryHash512 cerealID--type TestVector = [ByteString]--{-- [SHA-256]- [PredictionResistance = False]- [EntropyInputLen = 256]- [NonceLen = 128]- [PersonalizationStringLen = 0]- [AdditionalInputLen = 0]- [ReturnedBitsLen = 1024]--}--joinSplit512 :: Hash256 -> Hash256 -> Bool-joinSplit512 a b = split512 (join512 (a, b)) == (a, b)---- After encoding and decoding, we may loose precision so the new result is >=--- to the old one.-decEncCompact :: Integer -> Bool-decEncCompact i- -- Integer completely fits inside the mantisse- | abs i <= 0x007fffff = decodeCompact (encodeCompact i) == (i, False)- -- Otherwise precision will be lost and the decoded result will- -- be smaller than the original number- | i >= 0 = fst (decodeCompact (encodeCompact i)) < i- | otherwise = fst (decodeCompact (encodeCompact i)) > i--cerealID :: (Serialize a, Eq a) => a -> Bool-cerealID x = decode (encode x) == Right x--t1 :: [TestVector]-t1 =- [- -- COUNT = 0- [ "ca851911349384bffe89de1cbdc46e6831e44d34a4fb935ee285dd14b71a7488"- , "659ba96c601dc69fc902940805ec0ca8"- , ""- , ""- , ""- , "e528e9abf2dece54d47c7e75e5fe302149f817ea9fb4bee6f4199697d04d5b89d54fbb978a15b5c443c9ec21036d2460b6f73ebad0dc2aba6e624abf07745bc107694bb7547bb0995f70de25d6b29e2d3011bb19d27676c07162c8b5ccde0668961df86803482cb37ed6d5c0bb8d50cf1f50d476aa0458bdaba806f48be9dcb8"- ],- -- COUNT = 1- [ "79737479ba4e7642a221fcfd1b820b134e9e3540a35bb48ffae29c20f5418ea3"- , "3593259c092bef4129bc2c6c9e19f343"- , ""- , ""- , ""- , "cf5ad5984f9e43917aa9087380dac46e410ddc8a7731859c84e9d0f31bd43655b924159413e2293b17610f211e09f770f172b8fb693a35b85d3b9e5e63b1dc252ac0e115002e9bedfb4b5b6fd43f33b8e0eafb2d072e1a6fee1f159df9b51e6c8da737e60d5032dd30544ec51558c6f080bdbdab1de8a939e961e06b5f1aca37"- ],- -- COUNT = 2- [ "b340907445b97a8b589264de4a17c0bea11bb53ad72f9f33297f05d2879d898d"- , "65cb27735d83c0708f72684ea58f7ee5"- , ""- , ""- , ""- , "75183aaaf3574bc68003352ad655d0e9ce9dd17552723b47fab0e84ef903694a32987eeddbdc48efd24195dbdac8a46ba2d972f5808f23a869e71343140361f58b243e62722088fe10a98e43372d252b144e00c89c215a76a121734bdc485486f65c0b16b8963524a3a70e6f38f169c12f6cbdd169dd48fe4421a235847a23ff"- ],- -- COUNT = 3- [ "8e159f60060a7d6a7e6fe7c9f769c30b98acb1240b25e7ee33f1da834c0858e7"- , "c39d35052201bdcce4e127a04f04d644"- , ""- , ""- , ""- , "62910a77213967ea93d6457e255af51fc79d49629af2fccd81840cdfbb4910991f50a477cbd29edd8a47c4fec9d141f50dfde7c4d8fcab473eff3cc2ee9e7cc90871f180777a97841597b0dd7e779eff9784b9cc33689fd7d48c0dcd341515ac8fecf5c55a6327aea8d58f97220b7462373e84e3b7417a57e80ce946d6120db5"- ],- -- COUNT = 4- [ "74755f196305f7fb6689b2fe6835dc1d81484fc481a6b8087f649a1952f4df6a"- , "c36387a544a5f2b78007651a7b74b749"- , ""- , ""- , ""- , "b2896f3af4375dab67e8062d82c1a005ef4ed119d13a9f18371b1b873774418684805fd659bfd69964f83a5cfe08667ddad672cafd16befffa9faed49865214f703951b443e6dca22edb636f3308380144b9333de4bcb0735710e4d9266786342fc53babe7bdbe3c01a3addb7f23c63ce2834729fabbd419b47beceb4a460236"- ],- -- COUNT = 5- [ "4b222718f56a3260b3c2625a4cf80950b7d6c1250f170bd5c28b118abdf23b2f"- , "7aed52d0016fcaef0b6492bc40bbe0e9"- , ""- , ""- , ""- , "a6da029b3665cd39fd50a54c553f99fed3626f4902ffe322dc51f0670dfe8742ed48415cf04bbad5ed3b23b18b7892d170a7dcf3ef8052d5717cb0c1a8b3010d9a9ea5de70ae5356249c0e098946030c46d9d3d209864539444374d8fbcae068e1d6548fa59e6562e6b2d1acbda8da0318c23752ebc9be0c1c1c5b3cf66dd967"- ],- -- COUNT = 6- [ "b512633f27fb182a076917e39888ba3ff35d23c3742eb8f3c635a044163768e0"- , "e2c39b84629a3de5c301db5643af1c21"- , ""- , ""- , ""- , "fb931d0d0194a97b48d5d4c231fdad5c61aedf1c3a55ac24983ecbf38487b1c93396c6b86ff3920cfa8c77e0146de835ea5809676e702dee6a78100da9aa43d8ec0bf5720befa71f82193205ac2ea403e8d7e0e6270b366dc4200be26afd9f63b7e79286a35c688c57cbff55ac747d4c28bb80a2b2097b3b62ea439950d75dff"- ],- -- COUNT = 7- [ "aae3ffc8605a975befefcea0a7a286642bc3b95fb37bd0eb0585a4cabf8b3d1e"- , "9504c3c0c4310c1c0746a036c91d9034"- , ""- , ""- , ""- , "2819bd3b0d216dad59ddd6c354c4518153a2b04374b07c49e64a8e4d055575dfbc9a8fcde68bd257ff1ba5c6000564b46d6dd7ecd9c5d684fd757df62d85211575d3562d7814008ab5c8bc00e7b5a649eae2318665b55d762de36eba00c2906c0e0ec8706edb493e51ca5eb4b9f015dc932f262f52a86b11c41e9a6d5b3bd431"- ],- -- COUNT = 8- [ "b9475210b79b87180e746df704b3cbc7bf8424750e416a7fbb5ce3ef25a82cc6"- , "24baf03599c10df6ef44065d715a93f7"- , ""- , ""- , ""- , "ae12d784f796183c50db5a1a283aa35ed9a2b685dacea97c596ff8c294906d1b1305ba1f80254eb062b874a8dfffa3378c809ab2869aa51a4e6a489692284a25038908a347342175c38401193b8afc498077e10522bec5c70882b7f760ea5946870bd9fc72961eedbe8bff4fd58c7cc1589bb4f369ed0d3bf26c5bbc62e0b2b2"- ],- -- COUNT = 9- [ "27838eb44ceccb4e36210703ebf38f659bc39dd3277cd76b7a9bcd6bc964b628"- , "39cfe0210db2e7b0eb52a387476e7ea1"- , ""- , ""- , ""- , "e5e72a53605d2aaa67832f97536445ab774dd9bff7f13a0d11fd27bf6593bfb52309f2d4f09d147192199ea584503181de87002f4ee085c7dc18bf32ce5315647a3708e6f404d6588c92b2dda599c131aa350d18c747b33dc8eda15cf40e95263d1231e1b4b68f8d829f86054d49cfdb1b8d96ab0465110569c8583a424a099a"- ],- -- COUNT = 10- [ "d7129e4f47008ad60c9b5d081ff4ca8eb821a6e4deb91608bf4e2647835373a5"- , "a72882773f78c2fc4878295840a53012"- , ""- , ""- , ""- , "0cbf48585c5de9183b7ff76557f8fc9ebcfdfde07e588a8641156f61b7952725bbee954f87e9b937513b16bba0f2e523d095114658e00f0f3772175acfcb3240a01de631c19c5a834c94cc58d04a6837f0d2782fa53d2f9f65178ee9c837222494c799e64c60406069bd319549b889fa00a0032dd7ba5b1cc9edbf58de82bfcd"- ],- -- COUNT = 11- [ "67fe5e300c513371976c80de4b20d4473889c9f1214bce718bc32d1da3ab7532"- , "e256d88497738a33923aa003a8d7845c"- , ""- , ""- , ""- , "b44660d64ef7bcebc7a1ab71f8407a02285c7592d755ae6766059e894f694373ed9c776c0cfc8594413eefb400ed427e158d687e28da3ecc205e0f7370fb089676bbb0fa591ec8d916c3d5f18a3eb4a417120705f3e2198154cd60648dbfcfc901242e15711cacd501b2c2826abe870ba32da785ed6f1fdc68f203d1ab43a64f"- ],- -- COUNT = 12- [ "de8142541255c46d66efc6173b0fe3ffaf5936c897a3ce2e9d5835616aafa2cb"- , "d01f9002c407127bc3297a561d89b81d"- , ""- , ""- , ""- , "64d1020929d74716446d8a4e17205d0756b5264867811aa24d0d0da8644db25d5cde474143c57d12482f6bf0f31d10af9d1da4eb6d701bdd605a8db74fb4e77f79aaa9e450afda50b18d19fae68f03db1d7b5f1738d2fdce9ad3ee9461b58ee242daf7a1d72c45c9213eca34e14810a9fca5208d5c56d8066bab1586f1513de7"- ],- -- COUNT = 13- [ "4a8e0bd90bdb12f7748ad5f147b115d7385bb1b06aee7d8b76136a25d779bcb7"- , "7f3cce4af8c8ce3c45bdf23c6b181a00"- , ""- , ""- , ""- , "320c7ca4bbeb7af977bc054f604b5086a3f237aa5501658112f3e7a33d2231f5536d2c85c1dad9d9b0bf7f619c81be4854661626839c8c10ae7fdc0c0b571be34b58d66da553676167b00e7d8e49f416aacb2926c6eb2c66ec98bffae20864cf92496db15e3b09e530b7b9648be8d3916b3c20a3a779bec7d66da63396849aaf"- ],- -- COUNT = 14- [ "451ed024bc4b95f1025b14ec3616f5e42e80824541dc795a2f07500f92adc665"- , "2f28e6ee8de5879db1eccd58c994e5f0"- , ""- , ""- , ""- , "3fb637085ab75f4e95655faae95885166a5fbb423bb03dbf0543be063bcd48799c4f05d4e522634d9275fe02e1edd920e26d9accd43709cb0d8f6e50aa54a5f3bdd618be23cf73ef736ed0ef7524b0d14d5bef8c8aec1cf1ed3e1c38a808b35e61a44078127c7cb3a8fd7addfa50fcf3ff3bc6d6bc355d5436fe9b71eb44f7fd"- ]- ]--{-- [SHA-256]- [PredictionResistance = False]- [EntropyInputLen = 256]- [NonceLen = 128]- [PersonalizationStringLen = 0]- [AdditionalInputLen = 256]- [ReturnedBitsLen = 1024]--}--t2 :: [TestVector]-t2 =- [- -- COUNT = 0- [ "d3cc4d1acf3dde0c4bd2290d262337042dc632948223d3a2eaab87da44295fbd"- , "0109b0e729f457328aa18569a9224921"- , ""- , "3c311848183c9a212a26f27f8c6647e40375e466a0857cc39c4e47575d53f1f6"- , "fcb9abd19ccfbccef88c9c39bfb3dd7b1c12266c9808992e305bc3cff566e4e4"- , "9c7b758b212cd0fcecd5daa489821712e3cdea4467b560ef5ddc24ab47749a1f1ffdbbb118f4e62fcfca3371b8fbfc5b0646b83e06bfbbab5fac30ea09ea2bc76f1ea568c9be0444b2cc90517b20ca825f2d0eccd88e7175538b85d90ab390183ca6395535d34473af6b5a5b88f5a59ee7561573337ea819da0dcc3573a22974"- ],- -- COUNT = 1- [ "f97a3cfd91faa046b9e61b9493d436c4931f604b22f1081521b3419151e8ff06"- , "11f3a7d43595357d58120bd1e2dd8aed"- , ""- , "517289afe444a0fe5ed1a41dbbb5eb17150079bdd31e29cf2ff30034d8268e3b"- , "88028d29ef80b4e6f0fe12f91d7449fe75062682e89c571440c0c9b52c42a6e0"- , "c6871cff0824fe55ea7689a52229886730450e5d362da5bf590dcf9acd67fed4cb32107df5d03969a66b1f6494fdf5d63d5b4d0d34ea7399a07d0116126d0d518c7c55ba46e12f62efc8fe28a51c9d428e6d371d7397ab319fc73ded4722e5b4f30004032a6128df5e7497ecf82ca7b0a50e867ef6728a4f509a8c859087039c"- ],- -- COUNT = 2- [ "0f2f23d64f481cabec7abb01db3aabf125c3173a044b9bf26844300b69dcac8b"- , "9a5ae13232b43aa19cfe8d7958b4b590"- , ""- , "ec4c7a62acab73385f567da10e892ff395a0929f959231a5628188ce0c26e818"- , "6b97b8c6b6bb8935e676c410c17caa8042aa3145f856d0a32b641e4ae5298648"- , "7480a361058bd9afa3db82c9d7586e42269102013f6ec5c269b6d05f17987847748684766b44918fd4b65e1648622fc0e0954178b0279dfc9fa99b66c6f53e51c4860131e9e0644287a4afe4ca8e480417e070db68008a97c3397e4b320b5d1a1d7e1d18a95cfedd7d1e74997052bf649d132deb9ec53aae7dafdab55e6dae93"- ],- -- COUNT = 3- [ "53c56660c78481be9c63284e005fcc14fbc7fb27732c9bf1366d01a426765a31"- , "dc7a14d0eb5b0b3534e717a0b3c64614"- , ""- , "3aa848706ecb877f5bedf4ffc332d57c22e08747a47e75cff6f0fd1316861c95"- , "9a401afa739b8f752fddacd291e0b854f5eff4a55b515e20cb319852189d3722"- , "5c0eb420e0bf41ce9323e815310e4e8303cd677a8a8b023f31f0d79f0ca15aeb636099a369fd074d69889865eac1b72ab3cbfebdb8cf460b00072802e2ec648b1349a5303be4ccaadd729f1a9ea17482fd026aaeb93f1602bc1404b9853adde40d6c34b844cf148bc088941ecfc1642c8c0b9778e45f3b07e06e21ee2c9e0300"- ],- -- COUNT = 4- [ "f63c804404902db334c54bb298fc271a21d7acd9f770278e089775710bf4fdd7"- , "3e45009ea9cb2a36ba1aa4bf39178200"- , ""- , "d165a13dc8cc43f3f0952c3f5d3de4136954d983683d4a3e6d2dc4c89bf23423"- , "75106bc86d0336df85097f6af8e80e2da59046a03fa65b06706b8bbc7ffc6785"- , "6363139bba32c22a0f5cd23ca6d437b5669b7d432f786b8af445471bee0b2d24c9d5f2f93717cbe00d1f010cc3b9c515fc9f7336d53d4d26ba5c0d76a90186663c8582eb739c7b6578a3328bf68dc2cec2cd89b3a90201f6993adcc854df0f5c6974d0f5570765a15fe03dbce28942dd2fd16ba2027e68abac83926969349af8"- ],- -- COUNT = 5- [ "2aaca9147da66c176615726b69e3e851cc3537f5f279fe7344233d8e44cfc99d"- , "4e171f080af9a6081bee9f183ac9e340"- , ""- , "d75a2a6eb66c3833e50f5ec3d2e434cf791448d618026d0c360806d120ded669"- , "b643b74c15b37612e6577ed7ca2a4c67a78d560af9eb50a4108fca742e87b8d6"- , "501dcdc977f4ba856f24eaa4968b374bebb3166b280334cb510232c31ebffde10fa47b7840ef3fe3b77725c2272d3a1d4219baf23e0290c622271edcced58838cf428f0517425d2e19e0d8c89377eecfc378245f283236fafa466c914b99672ceafab369e8889a0c866d8bd639db9fb797254262c6fd44cfa9045ad6340a60ef"- ],- -- COUNT = 6- [ "a2e4cd48a5cf918d6f55942d95fcb4e8465cdc4f77b7c52b6fae5b16a25ca306"- , "bef036716440db6e6d333d9d760b7ca8"- , ""- , "bfa591c7287f3f931168f95e38869441d1f9a11035ad8ea625bb61b9ea17591c"- , "c00c735463bca215adc372cb892b05e939bf669583341c06d4e31d0e5b363a37"- , "e7d136af69926a5421d4266ee0420fd729f2a4f7c295d3c966bdfa05268180b508b8a2852d1b3a06fd2ab3e13c54005123ef319f42d0c6d3a575e6e7e1496cb28aacadbcf83740fba8f35fcee04bb2ed8a51db3d3362b01094a62fb57e33c99a432f29fce6676cffbbcc05107e794e75e44a02d5e6d9d748c5fbff00a0178d65"- ],- -- COUNT = 7- [ "95a67771cba69011a79776e713145d309edae56fad5fd6d41d83eaff89df6e5e"- , "be5b5164e31ecc51ba6f7c3c5199eb33"- , ""- , "065f693b229a7c4fd373cd15b3807552dd9bf98c5485cef361949d4e7d774b53"- , "9afb62406f0e812c4f156d58b19a656c904813c1b4a45a0029ae7f50731f8014"- , "f61b61a6e79a41183e8ed6647899d2dc85cdaf5c3abf5c7f3bf37685946dc28f4923dc842f2d4326bd6ce0d50a84cb3ba869d72a36e246910eba6512ba36cd7ed3a5437c9245b00a344308c792b668b458d3c3e16dee2fbec41867da31084d46d8ec168de2148ef64fc5b72069abf5a6ada1ead2b7146bb793ff1c9c3690fa56"- ],- -- COUNT = 8- [ "a459e1815cbca4514ec8094d5ab2414a557ba6fe10e613c345338d0521e4bf90"- , "62221392e2552e76cd0d36df6e6068eb"- , ""- , "0a3642b02b23b3ef62c701a63401124022f5b896de86dab6e6c7451497aa1dcc"- , "c80514865901371c45ba92d9f95d50bb7c9dd1768cb3dfbc45b968da94965c6e"- , "464e6977b8adaef307c9623e41c357013249c9ffd77f405f3925cebb69f151ce8fbb6a277164002aee7858fc224f6499042aa1e6322deee9a5d133c31d640e12a7487c731ba03ad866a24675badb1d79220c40be689f79c2a0be93cb4dada3e0eac4ab140cb91998b6f11953e68f2319b050c40f71c34de9905ae41b2de1c2f6"- ],- -- COUNT = 9- [ "252c2cad613e002478162861880979ee4e323025eebb6fb2e0aa9f200e28e0a1"- , "d001bc9a8f2c8c242e4369df0c191989"- , ""- , "9bcfc61cb2bc000034bb3db980eb47c76fb5ecdd40553eff113368d639b947fd"- , "8b0565c767c2610ee0014582e9fbecb96e173005b60e9581503a6dca5637a26e"- , "e96c15fe8a60692b0a7d67171e0195ff6e1c87aab844221e71700d1bbee75feea695f6a740c9760bbe0e812ecf4061d8f0955bc0195e18c4fd1516ebca50ba6a6db86881737dbab8321707675479b87611db6af2c97ea361a5484555ead454defb1a64335de964fc803d40f3a6f057893d2afc25725754f4f00abc51920743dc"- ],- -- COUNT = 10- [ "8be0ca6adc8b3870c9d69d6021bc1f1d8eb9e649073d35ee6c5aa0b7e56ad8a5"- , "9d1265f7d51fdb65377f1e6edd6ae0e4"- , ""- , "da86167ac997c406bb7979f423986a84ec6614d6caa7afc10aff0699a9b2cf7f"- , "e4baa3c555950b53e2bfdba480cb4c94b59381bac1e33947e0c22e838a9534cf"- , "64384ecc4ea6b458efc227ca697eac5510092265520c0a0d8a0ccf9ed3ca9d58074671188c6a7ad16d0b050cdc072c125d7298d3a31d9f044a9ee40da0089a84fea28cc7f05f1716db952fad29a0e779635cb7a912a959be67be2f0a4170aace2981802e2ff6467e5b46f0ffbff3b42ba5935fd553c82482ac266acf1cd247d7"- ],- -- COUNT = 11- [ "d43a75b6adf26d60322284cb12ac38327792442aa8f040f60a2f331b33ac4a8f"- , "0682f8b091f811afacaacaec9b04d279"- , ""- , "7fd3b8f512940da7de5d80199d9a7b42670c04a945775a3dba869546cbb9bc65"- , "2575db20bc7aafc2a90a5dabab760db851d754777bc9f05616af1858b24ff3da"- , "0da7a8dc73c163014bf0841913d3067806456bbca6d5de92b85534c6545467313648d71ef17c923d090dc92cff8d4d1a9a2bb63e001dc2e8ab1a597999be3d6cf70ff63fee9985801395fbd4f4990430c4259fcae4fa1fcd73dc3187ccc102d04af7c07532885e5a226fc42809c48f22eecf4f6ab996ae4fcb144786957d9f41"- ],- -- COUNT = 12- [ "64352f236af5d32067a529a8fd05ba00a338c9de306371a0b00c36e610a48d18"- , "df99ed2c7608c870624b962a5dc68acd"- , ""- , "da416335e7aaf60cf3d06fb438735ce796aad09034f8969c8f8c3f81e32fef24"- , "a28c07c21a2297311adf172c19e83ca0a87731bdffb80548978d2d1cd82cf8a3"- , "132b9f25868729e3853d3c51f99a3b5fae6d4204bea70890daf62e042b776a526c8fb831b80a6d5d3f153237df1fd39b6fd9137963f5516d9cdd4e3f9195c46e9972c15d3edc6606e3368bde1594977fb88d0ca6e6f5f3d057ccadc7d7dab77dfc42658a1e972aa446b20d418286386a52dfc1c714d2ac548713268b0b709729"- ],- -- COUNT = 13- [ "282f4d2e05a2cd30e9087f5633089389449f04bac11df718c90bb351cd3653a5"- , "90a7daf3c0de9ea286081efc4a684dfb"- , ""- , "2630b4ccc7271cc379cb580b0aaede3d3aa8c1c7ba002cf791f0752c3d739007"- , "c31d69de499f1017be44e3d4fa77ecebc6a9b9934749fcf136f267b29115d2cc"- , "c899094520e0197c37b91dd50778e20a5b950decfb308d39f1db709447ae48f6101d9abe63a783fbb830eec1d359a5f61a2013728966d349213ee96382614aa4135058a967627183810c6622a2158cababe3b8ab99169c89e362108bf5955b4ffc47440f87e4bad0d36bc738e737e072e64d8842e7619f1be0af1141f05afe2d"- ],- -- COUNT = 14- [ "13c752b9e745ce77bbc7c0dbda982313d3fe66f903e83ebd8dbe4ff0c11380e9"- , "f1a533095d6174164bd7c82532464ae7"- , ""- , "4f53db89b9ba7fc00767bc751fb8f3c103fe0f76acd6d5c7891ab15b2b7cf67c"- , "582c2a7d34679088cca6bd28723c99aac07db46c332dc0153d1673256903b446"- , "6311f4c0c4cd1f86bd48349abb9eb930d4f63df5e5f7217d1d1b91a71d8a6938b0ad2b3e897bd7e3d8703db125fab30e03464fad41e5ddf5bf9aeeb5161b244468cfb26a9d956931a5412c97d64188b0da1bd907819c686f39af82e91cfeef0cbffb5d1e229e383bed26d06412988640706815a6e820796876f416653e464961"- ]- ]--{-- [SHA-256]- [PredictionResistance = False]- [EntropyInputLen = 256]- [NonceLen = 128]- [PersonalizationStringLen = 256]- [AdditionalInputLen = 0]- [ReturnedBitsLen = 1024]--}--t3 :: [TestVector]-t3 =- [- -- COUNT = 0- [ "5cacc68165a2e2ee20812f35ec73a79dbf30fd475476ac0c44fc6174cdac2b55"- , "6f885496c1e63af620becd9e71ecb824"- , "e72dd8590d4ed5295515c35ed6199e9d211b8f069b3058caa6670b96ef1208d0"- , ""- , ""- , "f1012cf543f94533df27fedfbf58e5b79a3dc517a9c402bdbfc9a0c0f721f9d53faf4aafdc4b8f7a1b580fcaa52338d4bd95f58966a243cdcd3f446ed4bc546d9f607b190dd69954450d16cd0e2d6437067d8b44d19a6af7a7cfa8794e5fbd728e8fb2f2e8db5dd4ff1aa275f35886098e80ff844886060da8b1e7137846b23b"- ],- -- COUNT = 1- [ "8df013b4d103523073917ddf6a869793059e9943fc8654549e7ab22f7c29f122"- , "da2625af2ddd4abcce3cf4fa4659d84e"- , "b571e66d7c338bc07b76ad3757bb2f9452bf7e07437ae8581ce7bc7c3ac651a9"- , ""- , ""- , "b91cba4cc84fa25df8610b81b641402768a2097234932e37d590b1154cbd23f97452e310e291c45146147f0da2d81761fe90fba64f94419c0f662b28c1ed94da487bb7e73eec798fbcf981b791d1be4f177a8907aa3c401643a5b62b87b89d66b3a60e40d4a8e4e9d82af6d2700e6f535cdb51f75c321729103741030ccc3a56"- ],- -- COUNT = 2- [ "565b2b77937ba46536b0f693b3d5e4a8a24563f9ef1f676e8b5b2ef17823832f"- , "4ef3064ec29f5b7f9686d75a23d170e3"- , "3b722433226c9dba745087270ab3af2c909425ba6d39f5ce46f07256068319d9"- , ""- , ""- , "d144ee7f8363d128872f82c15663fe658413cd42651098e0a7c51a970de75287ec943f9061e902280a5a9e183a7817a44222d198fbfab184881431b4adf35d3d1019da5a90b3696b2349c8fba15a56d0f9d010a88e3f9eeedb67a69bcaa71281b41afa11af576b765e66858f0eb2e4ec4081609ec81da81df0a0eb06787340ea"- ],- -- COUNT = 3- [ "fc3832a91b1dcdcaa944f2d93cbceb85c267c491b7b59d017cde4add79a836b6"- , "d5e76ce9eabafed06e33a913e395c5e0"- , "ffc5f6eefd51da64a0f67b5f0cf60d7ab43fc7836bca650022a0cee57a43c148"- , ""- , ""- , "0e713c6cc9a4dbd4249201d12b7bf5c69c3e18eb504bf3252db2f43675e17d99b6a908400cea304011c2e54166dae1f20260008efe4e06a87e0ce525ca482bca223a902a14adcf2374a739a5dfeaf14cadd72efa4d55d15154c974d9521535bcb70658c5b6c944020afb04a87b223b4b8e5d89821704a9985bb010405ba8f3d4"- ],- -- COUNT = 4- [ "8009eb2cb49fdf16403bcdfd4a9f952191062acb9cc111eca019f957fb9f4451"- , "355598866952394b1eddd85d59f81c9d"- , "09ff1d4b97d83b223d002e05f754be480d13ba968e5aac306d71cc9fc49cc2dd"- , ""- , ""- , "9550903c2f02cf77c8f9c9a37041d0040ee1e3ef65ba1a1fbbcf44fb7a2172bd6b3aaabe850281c3a1778277bacd09614dfefececac64338ae24a1bf150cbf9d9541173a82ecba08aa19b75abb779eb10efa4257d5252e8afcac414bc3bb5d3006b6f36fb9daea4c8c359ef6cdbeff27c1068571dd3c89dc87eda9190086888d"- ],- -- COUNT = 5- [ "a6e4c9a8bd6da23b9c2b10a7748fd08c4f782fadbac7ea501c17efdc6f6087bd"- , "acdc47edf1d3b21d0aec7631abb6d7d5"- , "c16ee0908a5886dccf332fbc61de9ec7b7972d2c4c83c477409ce8a15c623294"- , ""- , ""- , "a52f93ccb363e2bdf0903622c3caedb7cffd04b726052b8d455744c71b76dee1b71db9880dc3c21850489cb29e412d7d80849cfa9151a151dcbf32a32b4a54cac01d3200200ed66a3a5e5c131a49655ffbf1a8824ff7f265690dffb4054df46a707b9213924c631c5bce379944c856c4f7846e281ac89c64fad3a49909dfb92b"- ],- -- COUNT = 6- [ "59d6307460a9bdd392dfc0904973991d585696010a71e52d590a5039b4849fa4"- , "34a0aafb95917cbf8c38fc5548373c05"- , "0407b7c57bc11361747c3d67526c36e228028a5d0b145d66ab9a2fe4b07507a0"- , ""- , ""- , "299aba0661315211b09d2861855d0b4b125ab24649461341af6abd903ed6f025223b3299f2126fcad44c675166d800619cf49540946b12138989417904324b0ddad121327211a297f11259c9c34ce4c70c322a653675f78d385e4e2443f8058d141195e17e0bd1b9d44bf3e48c376e6eb44ef020b11cf03eb141c46ecb43cf3d"- ],- -- COUNT = 7- [ "9ae3506aadbc8358696ba1ba17e876e1157b7048235921503d36d9211b430342"- , "9abf7d66afee5d2b811cba358bbc527d"- , "0d645f6238e9ceb038e4af9772426ca110c5be052f8673b8b5a65c4e53d2f519"- , ""- , ""- , "5f032c7fec6320fe423b6f38085cbad59d826085afe915247b3d546c4c6b174554dd4877c0d671de9554b505393a44e71f209b70f991ac8aa6e08f983fff2a4c817b0cd26c12b2c929378506489a75b2025b358cb5d0400821e7e252ac6376cd94a40c911a7ed8b6087e3de5fa39fa6b314c3ba1c593b864ce4ff281a97c325b"- ],- -- COUNT = 8- [ "96ae3b8775b36da2a29b889ad878941f43c7d51295d47440cd0e3c4999193109"- , "1fe022a6fc0237b055d4d6a7036b18d5"- , "1e40e97362d0a823d3964c26b81ab53825c56446c5261689011886f19b08e5c2"- , ""- , ""- , "e707cd14b06ce1e6dbcceaedbf08d88891b03f44ad6a797bd12fdeb557d0151df9346a028dec004844ca46adec3051dafb345895fa9f4604d8a13c8ff66ae093fa63c4d9c0816d55a0066d31e8404c841e87b6b2c7b5ae9d7afb6840c2f7b441bf2d3d8bd3f40349c1c014347c1979213c76103e0bece26ad7720601eff42275"- ],- -- COUNT = 9- [ "33f5120396336e51ee3b0b619b5f873db05ca57cda86aeae2964f51480d14992"- , "6f1f6e9807ba5393edcf3cb4e4bb6113"- , "3709605af44d90196867c927512aa8ba31837063337b4879408d91a05c8efa9f"- , ""- , ""- , "8b8291126ded9acef12516025c99ccce225d844308b584b872c903c7bc6467599a1cead003dc4c70f6d519f5b51ce0da57f53da90dbe8f666a1a1dde297727fee2d44cebd1301fc1ca75956a3fcae0d374e0df6009b668fd21638d2b733e6902d22d5bfb4af1b455975e08eef0ebe4dc87705801e7776583c8de11672729f723"- ],- -- COUNT = 10- [ "ad300b799005f290fee7f930eebce158b98fb6cb449987fe433f955456b35300"- , "06aa2514e4bd114edf7ac105cfef2772"- , "87ada711465e4169da2a74c931afb9b5a5b190d07b7af342aa99570401c3ee8a"- , ""- , ""- , "80d7c606ff49415a3a92ba1f2943235c01339c8f9cd0b0511fbfdf3ef23c42ffff008524193faaa4b7f2f2eb0cfa221d9df89bd373fe4e158ec06fad3ecf1eb48b8239b0bb826ee69d773883a3e8edac66254610ff70b6609836860e39ea1f3bfa04596fee1f2baca6cebb244774c6c3eb4af1f02899eba8f4188f91776de16f"- ],- -- COUNT = 11- [ "130b044e2c15ab89375e54b72e7baae6d4cad734b013a090f4df057e634f6ff0"- , "65fd6ac602cd44107d705dbc066e52b6"- , "f374aba16f34d54aae5e494505b67d3818ef1c08ea24967a76876d4361379aec"- , ""- , ""- , "5d179534fb0dba3526993ed8e27ec9f915183d967336bb24352c67f4ab5d7935d3168e57008da851515efbaecb69904b6d899d3bfa6e9805659aef2942c4903875b8fcbc0d1d24d1c075f0ff667c1fc240d8b410dff582fa71fa30878955ce2ed786ef32ef852706e62439b69921f26e84e0f54f62b938f04905f05fcd7c2204"- ],- -- COUNT = 12- [ "716430e999964b35459c17921fe5f60e09bd9ab234cb8f4ba4932bec4a60a1d5"- , "9533b711e061b07d505da707cafbca03"- , "372ae616d1a1fc45c5aecad0939c49b9e01c93bfb40c835eebd837af747f079d"- , ""- , ""- , "a80d6a1b2d0ce01fe0d26e70fb73da20d45841cf01bfbd50b90d2751a46114c0e758cb787d281a0a9cf62f5c8ce2ee7ca74fefff330efe74926acca6d6f0646e4e3c1a1e52fce1d57b88beda4a5815896f25f38a652cc240deb582921c8b1d03a1da966dd04c2e7eee274df2cd1837096b9f7a0d89a82434076bc30173229a60"- ],- -- COUNT = 13- [ "7679f154296e6d580854826539003a82d1c54e2e062c619d00da6c6ac820789b"- , "55d12941b0896462e7d888e5322a99a3"- , "ba4d1ed696f58ef64596c76cee87cc1ca83069a79e7982b9a06f9d62f4209faf"- , ""- , ""- , "10dc7cd2bb68c2c28f76d1b04ae2aa287071e04c3b688e1986b05cc1209f691daa55868ebb05b633c75a40a32b49663185fe5bb8f906008347ef51590530948b87613920014802e5864e0758f012e1eae31f0c4c031ef823aecfb2f8a73aaa946fc507037f9050b277bdeaa023123f9d22da1606e82cb7e56de34bf009eccb46"- ],- -- COUNT = 14- [ "8ca4a964e1ff68753db86753d09222e09b888b500be46f2a3830afa9172a1d6d"- , "a59394e0af764e2f21cf751f623ffa6c"- , "eb8164b3bf6c1750a8de8528af16cffdf400856d82260acd5958894a98afeed5"- , ""- , ""- , "fc5701b508f0264f4fdb88414768e1afb0a5b445400dcfdeddd0eba67b4fea8c056d79a69fd050759fb3d626b29adb8438326fd583f1ba0475ce7707bd294ab01743d077605866425b1cbd0f6c7bba972b30fbe9fce0a719b044fcc1394354895a9f8304a2b5101909808ddfdf66df6237142b6566588e4e1e8949b90c27fc1f"- ]- ]--{-- [SHA-256]- [PredictionResistance = False]- [EntropyInputLen = 256]- [NonceLen = 128]- [PersonalizationStringLen = 256]- [AdditionalInputLen = 256]- [ReturnedBitsLen = 1024]--}--t4 :: [TestVector]-t4 =- [- -- COUNT = 0- [ "5d3286bc53a258a53ba781e2c4dcd79a790e43bbe0e89fb3eed39086be34174b"- , "c5422294b7318952ace7055ab7570abf"- , "2dba094d008e150d51c4135bb2f03dcde9cbf3468a12908a1b025c120c985b9d"- , "793a7ef8f6f0482beac542bb785c10f8b7b406a4de92667ab168ecc2cf7573c6"- , "2238cdb4e23d629fe0c2a83dd8d5144ce1a6229ef41dabe2a99ff722e510b530"- , "d04678198ae7e1aeb435b45291458ffde0891560748b43330eaf866b5a6385e74c6fa5a5a44bdb284d436e98d244018d6acedcdfa2e9f499d8089e4db86ae89a6ab2d19cb705e2f048f97fb597f04106a1fa6a1416ad3d859118e079a0c319eb95686f4cbcce3b5101c7a0b010ef029c4ef6d06cdfac97efb9773891688c37cf"- ],- -- COUNT = 1- [ "c2a566a9a1817b15c5c3b778177ac87c24e797be0a845f11c2fe399dd37732f2"- , "cb1894eb2b97b3c56e628329516f86ec"- , "13ce4d8dd2db9796f94156c8e8f0769b0aa1c82c1323b61536603bca37c9ee29"- , "413dd83fe56835abd478cb9693d67635901c40239a266462d3133b83e49c820b"- , "d5c4a71f9d6d95a1bedf0bd2247c277d1f84a4e57a4a8825b82a2d097de63ef1"- , "b3a3698d777699a0dd9fa3f0a9fa57832d3cefac5df24437c6d73a0fe41040f1729038aef1e926352ea59de120bfb7b073183a34106efed6278ff8ad844ba0448115dfddf3319a82de6bb11d80bd871a9acd35c73645e1270fb9fe4fa88ec0e465409ea0cba809fe2f45e04943a2e396bbb7dd2f4e0795303524cc9cc5ea54a1"- ],- -- COUNT = 2- [ "a33288a96f41dd54b945e060c8bd0c094f1e28267cc1dcbba52063c1a9d54c4d"- , "36918c977e1a7276a2bb475591c367b7"- , "6aa528c940962638dc2201738850fd1fe6f5d0eb9f687ff1af39d9c7b36830d9"- , "37ee633a635e43af59abdb1762c7ea45bfe060ec1d9077ecd2a43a658673f3c7"- , "2eb96f2e28fa9f674bb03ade703b8f791ee5356e2ee85c7ed5bda96325256c61"- , "db2f91932767eb846961ce5321c7003431870508e8c6f8d432ca1f9cee5cdc1aed6e0f133d317eb6990c4b3b0a360cdfb5b43a6e712bd46bca04c414868fab22c6a49c4b89c812697c3a7fbfc8ddf10c8aa5ebf13a09fd114eb2a02a07f69786f3ce7fd30231f22779bc8db103b13fa546dbc45a89a86275281172761683d384"- ],- -- COUNT = 3- [ "5f37b6e47e1776e735adc03d4b999879477ff4a206231924033d94c0114f911b"- , "7d12d62c79c9f6234ae0314156947459"- , "92d4d9fab5f8bf5119f2663a9df7334f50dcde74fb9d7732f7eba56501e60d54"- , "c9aef0d7a9ba7345d08b6d5b5ce5645c7495b8685e6b93846ffcf470f5abd40d"- , "50d9d1f5074f7d9f1a24a9c63aa47b94da5ba78db1b0f18e4d4fe45c6875813c"- , "20d942bbd7d98700faa37e94d53bf74f2d6bd1d8c95c0b88d842c4857797d59e7c8788aeeac29740122f208f703bf35dc32b0035db0648384feb6aa17a3274bc09b2d2b746c5a06fd82f4469fb86131a49482cb7be7d9b4b95042394cfb18b13f333ec0fe5c227bf1d8f33ecb2e42e358b6c3e034cb585331bd1d27f638029b9"- ],- -- COUNT = 4- [ "2311c5afd64c584484b2729e84db80c0b4063fe9ca7edc83350488d7e67264a0"- , "6a6dfd975a0dc7b72df1f107c4b3b3a6"- , "2abd870ec5fe26ed14dfa57a3309f920131b70580c3639af2645cd1af93db1b1"- , "c6e532a3b25653b6002aed5269cc2118749306e736bde039d4d569d4f967773f"- , "5e7d26c4da769c373092b2b4f72b109fe34bdb7d169ea38f78ebae5df4a15759"- , "cacaeb1b4ac2305d8714eb50cbe1c67c5a2c0bbc7938fdfdcafef7c85fc40becbf777a4cfb6f14c6eee320943a493d2b0a744a6eb3c256ee9a3763037437df9adce3e2260f0c35e958af0edb5a81debd8bdaf2b8bb2b98b9186e5a222a21609ff58df4cbe1d4898d10d6e7c46f31f5cb1041bfd83a5fb27d5c56c961e91403fc"- ],- -- COUNT = 5- [ "362ece9d330e1172a8f9e50258476d0c79c3ee50346524ba12d970ee3a6ef8c5"- , "cf11bcb4d9d51311ceacfca8705e833f"- , "abb5a8edde02e526449284ecc31bc713383df3ed085f752e3b6a32f305861eed"- , "746302ab1f4a86b17546bea762e929360f2e95c7788a63545a264ef997c8c65e"- , "b907c5b2a8833a48e56e819228ce9a050b41b3309f5ca37bed720311d92b33af"- , "73c7131a558350590053580873ef956ff952f2aa6ff1bea452e013d1bc2afddea2311756dbe756e63ba6258480c48f3f6c1319b5f572f67ca530af09e39413d1d432bea8f89206619618cb0e7c88e9f2033639d0eb0efc20616b64f940da99b88231984c3fb23f19e890576f555fde394dbd4351f17a7ffd5c369379001bda03"- ],- -- COUNT = 6- [ "cf614bc29946bc0095f415e8bdeda10aab05392f9cc9187a86ea6ec95ee422e1"- , "77fb5ec22dc0432cc13f4693e2e3bd9a"- , "e4ce77914ffbc5fddf1fb51edfafdc196109139b84c741354135ec8d314c7c43"- , "e1e83ee1205acaf6164dc287aec08e5b32789e5be818078db39e53cad589db51"- , "4e20c0226d5e1e7e805679f03f72452b5bea2d0ba41e0c12329bf60eb3016dd1"- , "838fdf1418a746aa52ae4005d90c3fd301f648c5770ffef2a9f3912e37a93850cc4b8bfcce910aead0cb75958823b1a62e283901c5e4a3980e4ea36257458e2e4953555819b8852a26489b1d74821f80c9908469b43f124ff7ea62497c36159a47353098a1b9ec32e54800d6704371cc37f357ad74aacc203e9b6db97f94d0c4"- ],- -- COUNT = 7- [ "a8da1d3e233f393fd44d204c200202f7d01896e72c5ac652940cfd15b5d4b0bd"- , "0a112b4cb0890af0a495e0f49fcf6874"- , "d2e32799bc822b8d033299bdf63dc35774f7649e935d25be5b10512c430d1bda"- , "920a82d76fcd2cd106ada64bba232b7b2344f3afe6b1d1d20ee8795144571009"- , "eeaac5878275372025f8231febed64db6a11273c3c00d625fc80a95f18ad7d3f"- , "5f6dae489b53d89027b2cc333c700f090152d77b3eaf01d47f56ce6eca9893ef877b4cb560fab0fbdb34e3d1c6cd8480b33c053d2661a10aa531df4961b97d659c7492584236582b3fe701055efa59c328194cd1e07fcffd910d9ee01b7b9e8c8fda7f7ac01a8e203b8b26eb8078a9b9a5021562c44af24089e3ef84c1d5a6bd"- ],- -- COUNT = 8- [ "a77b1ed4ecaa650374e1052c405f1d88881c25c87d13dbe1334d8c1a847fa76b"- , "05c143e2f145db216fe7be9ed23635d0"- , "b5c750968ff09ed251d4a1c05342ac843db5246b19045728a634fa4f6e752e54"- , "ff5937bcd01a363696bf8e40adc8e4ab3e56dbf7e7d09451c99e538785fe6697"- , "4acb34eea8266badcf8f6557a0eecf3eb4d7a295c876d6175598cb66a388efb8"- , "ec13eadfcc84e77d2a2efa1a2cd8b1355587cb27feb3d19d75b37f0446333ddb8236e751c63b7a6e595ec24a25051a696dbe8c062dd8896d1446db228a2f10e8094ee07e7ee648ed6bebb2f5ec5aae24c9c640665c28355cc11c116795ecc070790f7fdfc4398900311b6695d5da0175091ed1828d2731085bfb4a20bd86cce0"- ],- -- COUNT = 9- [ "491686c781e83eb4e21d9989e8d718100b0d21a2c56295888baef1a65f219651"- , "499085296d21065feabf3106101c8d6f"- , "d208a72f9ae34f0817669fb04f49239dd31700f3dc9a93db8d75fb79f9b686c1"- , "9ffc61893a293a864008fdd56d3292600d9e2ec8a1ea8f34ac5931e968905a23"- , "4ff3a397dfdae0912032a302a5e7a07dceca8d9013a21545689319b7c024cd07"- , "3c258ebf2203fca3b322ad1b016e21c7f5c148425f81e4fb0a0e462dce9dfa569c37a006527768297a5b68461b08912642a341b88c85597e30e7561206886098c4e2d861f11513f0ffdbbc78d3a2dd60c105abbb33c5e05ae27081b690fb8b3610917aa9bf1a4ad74481b5ff8334f14e5ad6a6a1eb2259476078076fb7e3a992"- ],- -- COUNT = 10- [ "36a5267eeeb5a1a7d46de0f8f9281f73cd9611f01198fdaa78c5315205e5a177"- , "b66b5337970df36219321badacc624eb"- , "c2a7b164949da102bece44a423197682ff97627d1fe9654266b8527f64e5b386"- , "a977e2d8637b019c74063d163bb25387dc56f4eb40e502cefc5ae6ad26a6abdc"- , "c5c9819557b1e7d8a86fa8c60be42993edc3ef539c13d9a51fb64b0de06e145e"- , "b471711a4fc7ab7247e65d2c2fe49a50169187187b7978cd2fdb0f8318be3ec55fc68ed4577ad9b42cbb57100b5d35ac86c244c4c93a5b28c1a11c2dfe905d608ec7804dec5bb15cf8d79695534d5e13a6a7e18a887ec9cf184da0cbbc6267f3a952a769403bafcdbb559401be0d8b3300ea7258b4026fc892175efd55ba1a67"- ],- -- COUNT = 11- [ "a76b0366df89e4073a6b6b9c04da1d6817ce26f1c4825cad4097bdf4d7b9445e"- , "773d3cc3290176773847869be528d1a4"- , "1bfd3bcfb9287a5ad055d1b2b8615fa81c94ac24bc1c219a0f8de58789e0404a"- , "edd879fa56f21d93029da875b683ce50f6fdc4c0da41da051d000eed2afefefa"- , "f528ffd29160039260133ed9654589ce60e39e7f667c34f82cda65ddcf5fff14"- , "39d1ff8848e74dd2cdc6b818ad69823878062116fdf1679942f892c7e191be1c4b6ea268ecdff001b22af0d510f30c2c25b90fc34927f46e3f45d36b0e1848b3a5d54c36c7c65ee7287d325dfbb51b56a438feb6650ce13df88bf06b87ac4a35d2a199ea888629fb0d83f82f0ea160dc79ed220d8ef195b9e80c542f60c2d320"- ],- -- COUNT = 12- [ "46571e1df43e5e141235e2a9ec85bb0faf1dc0566031e14d41a2fbd0315653ec"- , "b60ef6a3347967519aabeaf748e4e991"- , "759fd8593e3688b23c4a003b655311770d670789878570eb3b155a8e6c2d8c45"- , "033128460b449e1accb0e9c54508759ddc2538bc64b51e6277553f0c60a02723"- , "a5e4a717240bdeac18a0c0e231a11dc04a47d7550f342fa9a7a5ff334eb9327d"- , "9d222df1d530ea7f8f2297a0c79d637da570b48042ecddded75956bba0f0e70b271ffa3c9a53bada6ee1b8a4203c22bfde82a5e2eb1b150f54c6483458569422c1a34a8997d42cc09750167a78bf52a0bd158397af9f83caabe689185c099bf0a9a4853dd3cf8b8e89efebb6a27dba873e65e9927741b22968f2875789b44e01"- ],- -- COUNT = 13- [ "d63980e63bbe4ac08d2ac5646bf085b82c75995e3fdfc23bb9cc734cd85ca7d2"- , "d33ed1dcae13fb634ba08272d6697590"- , "acd0da070072a5340c4f5f4395568e1a36374e074196ae87f3692ee40487e1df"- , "f567677b5e12e26f3544be3da9314c88fc475bf84804a89a51f12b191392c02b"- , "c01cc7873e93c86e2bfb8fc984cfc2eab5cc58eeef018fedb5cba5aedd386156"- , "b133446f633bcb40724bbf9fa187c39a44b9c094a0a0d40e98977e5466dc2c9adf62a5f4551eeb6406a14658de8a0ed7487c3bf6277e811101284a941745ce16176acc875f1435e14161772fa84609e8123c53dd03cbb868030835c0d11d8d6aa04a1b6f908248b028997737f54735ec4ed7a81fc868199ffb61a779d9340334"- ],- -- COUNT = 14- [ "3d99f9b7ac3a2fbe9cf15d960bf41f5588fc4db1e0d2a5c9c0fe9059f03593fb"- , "411f504bb63a9b3afa7ffa1357bb48be"- , "0bb5ebd55981a25ba69164da49fa92f2871fd3fc65eb30d0f0d0b8d798a4f8f2"- , "288e948a551284eb3cb23e26299955c2fb8f063c132a92683c1615ecaed80f30"- , "d975b22f79e34acf5db25a2a167ef60a10682dd9964e15533d75f7fa9efc5dcb"- , "ee8d707eea9bc7080d58768c8c64a991606bb808600cafab834db8bc884f866941b4a7eb8d0334d876c0f1151bccc7ce8970593dad0c1809075ce6dbca54c4d4667227331eeac97f83ccb76901762f153c5e8562a8ccf12c8a1f2f480ec6f1975ac097a49770219107d4edea54fb5ee23a8403874929d073d7ef0526a647011a"- ]- ]--{- Reseed test vectors -}--{-- [SHA-256]- [PredictionResistance = False]- [EntropyInputLen = 256]- [NonceLen = 128]- [PersonalizationStringLen = 0]- [AdditionalInputLen = 0]- [ReturnedBitsLen = 1024]--}--r1 :: [TestVector]-r1 =- [- -- COUNT = 0- [ "06032cd5eed33f39265f49ecb142c511da9aff2af71203bffaf34a9ca5bd9c0d"- , "0e66f71edc43e42a45ad3c6fc6cdc4df"- , ""- , "01920a4e669ed3a85ae8a33b35a74ad7fb2a6bb4cf395ce00334a9c9a5a5d552"- , ""- , ""- , ""- , "76fc79fe9b50beccc991a11b5635783a83536add03c157fb30645e611c2898bb2b1bc215000209208cd506cb28da2a51bdb03826aaf2bd2335d576d519160842e7158ad0949d1a9ec3e66ea1b1a064b005de914eac2e9d4f2d72a8616a80225422918250ff66a41bd2f864a6a38cc5b6499dc43f7f2bd09e1e0f8f5885935124"- ],- -- COUNT = 1- [ "aadcf337788bb8ac01976640726bc51635d417777fe6939eded9ccc8a378c76a"- , "9ccc9d80c89ac55a8cfe0f99942f5a4d"- , ""- , "03a57792547e0c98ea1776e4ba80c007346296a56a270a35fd9ea2845c7e81e2"- , ""- , ""- , ""- , "17d09f40a43771f4a2f0db327df637dea972bfff30c98ebc8842dc7a9e3d681c61902f71bffaf5093607fbfba9674a70d048e562ee88f027f630a78522ec6f706bb44ae130e05c8d7eac668bf6980d99b4c0242946452399cb032cc6f9fd96284709bd2fa565b9eb9f2004be6c9ea9ff9128c3f93b60dc30c5fc8587a10de68c"- ],- -- COUNT = 2- [ "62cda441dd802c7652c00b99cac3652a64fc75388dc9adcf763530ac31df9214"- , "5fdc897a0c1c482204ef07e0805c014b"- , ""- , "bd9bbf717467bf4b5db2aa344dd0d90997c8201b2265f4451270128f5ac05a1a"- , ""- , ""- , ""- , "7e41f9647a5e6750eb8acf13a02f23f3be77611e51992cedb6602c314531aff2a6e4c557da0777d4e85faefcb143f1a92e0dbac8de8b885ced62a124f0b10620f1409ae87e228994b830eca638ccdceedd3fcd07d024b646704f44d5d9c4c3a7b705f37104b45b9cfc2d933ae43c12f53e3e6f798c51be5f640115d45cf919a4"- ],- -- COUNT = 3- [ "6bdc6ca8eef0e3533abd02580ebbc8a92f382c5b1c8e3eaa12566ecfb90389a3"- , "8f8481cc7735827477e0e4acb7f4a0fa"- , ""- , "72eca6f1560720e6bd1ff0152c12eeff1f959462fd62c72b7dde96abcb7f79fb"- , ""- , ""- , ""- , "d5a2e2f254b5ae65590d4fd1ff5c758e425be4bacdeede7989669f0a22d34274fdfc2bf87135e30abdae2691629c2f6f425bd4e119904d4785ecd9328f15259563e5a71f915ec0c02b66655471067b01016fdf934a47b017e07c21332641400bbe5719050dba22c020b9b2d2cdb933dbc70f76fec4b1d83980fd1a13c4565836"- ],- -- COUNT = 4- [ "096ef37294d369face1add3eb8b425895e921626495705c5a03ee566b34158ec"- , "6e2e0825534d2989715cc85956e0148d"- , ""- , "1b4f7125f472c253837fa787d5acf0382a3b89c3f41c211d263052402dcc62c5"- , ""- , ""- , ""- , "4541f24f759b5f2ac2b57b51125077cc740b3859a719a9bab1196e6c0ca2bd057af9d3892386a1813fc8875d8d364f15e7fd69d1cc6659470415278164df656295ba9cfcee79f6cbe26ee136e6b45ec224ad379c6079b10a2e0cb5f7f785ef0ab7a7c3fcd9cb6506054d20e2f3ec610cbba9b045a248af56e4f6d3f0c8d96a23"- ],- -- COUNT = 5- [ "a7dccdd431ae5726b83585b54eae4108f7b7a25c70187c0acbb94c96cc277aa8"- , "94c8f4b8e195a47356a89a50d1389ab5"- , ""- , "51733eee2e922f4055e53939e222e71fae730eb037443db2c7679708abb86a65"- , ""- , ""- , ""- , "99ba2691a622afecc9472418e6a8f9f1cdc1e3583c3bc7a2a650a1ab79dcbccbd656636c573179276e782569420c97438c06be898867f628b1c01eb570263d2c0f09c7aab536f6fba7df6aad19e05c236b645674667c03d1b6a04d7fc11177fe78933b309679f5bf26a4632b9a13e314c4bf4532428d3d95c689002b6dc1fbb1"- ],- -- COUNT = 6- [ "c286425ecf543a49bcc9196b0db1a80bc54e4948adba6f41712a350a02891fa6"- , "957a659a4ec2e0b7ad185483c220fd61"- , ""- , "08c2129813eea0776fba72788fdf2718759cc3c4207fa20a5fe23ac6e32cc28e"- , ""- , ""- , ""- , "8e1020a4fd84c99e0fc7e3f7ce48de5ed9ec9a5c2ccd624dbe6f30e2f688a31dc55957630357a5d48ca2a456241a28bfb16d8bb000877697a7ce24d9ad4d22b0c15117996f1f270b94f46d7a9bdfa7608fa1dd849177a9b8049e51b6b7a2742623854a1fddb5efc447eed1ea1aed6f02b4b2754ecf71ea0509da2e54f524a7e7"- ],- -- COUNT = 7- [ "02818bd7c1ec456ace55beeba99f646a6d3aa0ea78356ea726b763ff0dd2d656"- , "c482687d508c9b5c2a75f7ce390014e8"- , ""- , "cf319bfa63980e3cb997fd28771bb5614e3acb1149ba45c133ffbbab17433193"- , ""- , ""- , ""- , "19a231ff26c1865ce75d7a7185c30dd0b333126433d0c8cbf1be0d2b384d4eb3a8aff03540fbfa5f5496521a4e4a64071b44c78bd0b7e68fac9e5695c5c13fd3b9dbe7f7739781a4c8f0b980f1b17d99bce17ceb52b56866ae02456ffef83399c8cf7826f3c45c8a19315890919d20f40fc4e18d07e9c8ccd16c3327b5988f71"- ],- -- COUNT = 8- [ "77a5c86d99be7bc2502870f4025f9f7563e9174ec67c5f481f21fcf2b41cae4b"- , "ed044ad72ee822506a6d0b1211502967"- , ""- , "778100749f01a4d35c3b4a958aafe296877e0acafd089f50bc7797a42a33ab71"- , ""- , ""- , ""- , "831a4da566f46289904893ef1cc1cd4ad19ee48f3857e2b69e936d10afbdc29822e85d02663d346ef3e09a848b1d9cc04f4c4c6e3b3b0e56a034e2334d34ca08f8097be307ba41d020bc94f8c1937fe85644eeb5592c2b5a2138f7ded9a5b44b200c8b5beb27597c790f94d660eb61e8248391edc3ae2d77656cbe8354275b13"- ],- -- COUNT = 9- [ "0ea458cff8bfd1dd8b1addcba9c01317d53039e533104e32f96e7d342e6c7b9b"- , "935a4b66fc74c2a48757a99c399e64e3"- , ""- , "6c5f3708e7b714c4ed139b4fa9e8c763af01773484005109a85e33653bb0ce98"- , ""- , ""- , ""- , "373a37af84fddec13645a9768d6a785ae5a2589d64cd9b37980dde2541499210c4f408335de1d585349064f3f53a2b4c5ec6dc2a09591f99ad9fad528ac83474164b45497bf167f81e66fa08463ffea917f6891e48f149fafc20622bb1172f34886feb45c26fd446a4a4e2891b4bc594186896141aaaeeb301b49e7c1a26fec7"- ],- -- COUNT = 10- [ "bfb68be4ce1756d25bdfad5e0c2f8bec29360901cc4da51d423d1591cc57e1ba"- , "98afe4bd194c143e099680c504cceaab"- , ""- , "b97caf210e82498c3408790d41c320dd4a72007778389b44b7bc3c1c4b8c53f8"- , ""- , ""- , ""- , "409e0aa949fb3b38231bf8732e7959e943a338ea399026b744df15cbfeff8d71b3da023dcce059a88cf0d4b7475f628e4764c8bef13c70cfbbbb6da2a18aabcad919db09d04fc59765edb165147c88dd473a0f3c5ee19237ca955697e001ba654c5ee0bd26761b49333154426bc63286298a8be634fe0d72cfdeef0f3fc48eca"- ],- -- COUNT = 11- [ "4f6880a64610004463031d67d7924fa446c39138d4d41007e8df3d65691a9367"- , "6b33b2c13600f4b1df6ca3d1960e8dd4"- , ""- , "57b87b8c8f48312b5333d43b367730c0a5ad4725a16778fcb53fe136d136cbfd"- , ""- , ""- , ""- , "73d0f324ed186e2ad06bd1800e262bdbda79ba54e626761bd60f74f43e3bb62958ec1e2f1d940af163e1cadc124e7ebaba2f72e67efd746c7f6d0cad53ef03d859d93cff778a32ee5be172fe7fdbdc232ded360d704a6fa0f70bebe942e56478345492f49dc5c6fc346b88a58947ad250e688e8c626fe1efe7624620e571976e"- ],- -- COUNT = 12- [ "aae352e111843219cae8f70e7b8f6eb9bb53d246cbec1e4f07d42757143295b4"- , "b84485dccd1bf93210e322eafcbebcd9"- , ""- , "f9237f00d744d8fbff21b9d0043c258e8731817e6a5fb7b4bf5011680e5bc642"- , ""- , ""- , ""- , "cfb28b93522c7d61d8d3ce3f080e435e4c83c7e13a9dab788db8fef0407267a14fbc9324e090e24df5491fedfa81116869983938d4d4d7324a310c3af33a6f7938f602c5e4e63f1771cdaabdab0782b5affb54eb53047c109a9606739dd0065bd21eca33132986554878354f5f9f852e674dd690163b0ff74c7a25e6bae8ce39"- ],- -- COUNT = 13- [ "589e79e339b7d2a1b879f0b0e1a7d1ad2474eaa8025b070f1ffa877b7124d4ff"- , "0961ed64dbd62065d96e75de6d2ff9d6"- , ""- , "e928388d3af48c2968527a4d2f9c2626fbc3f3f5a5d84e0583ab6f78e7f8b081"- , ""- , ""- , ""- , "fce6ced1ecf474d181ab331f79c3d2cc8a768ec2818de5b3fc7cf418322716d6a6853733561a497c0c25cb288d2c9fcfbca891bafd5a834c85f3603f402acf1a7b1ea92db847ed5c252a862ad4ab5e259715f1fc81da67f5230bf8be50ee8069758095f7d0e559e03f2c6072290e61794458437609e473eb66580cddaad19b71"- ],- -- COUNT = 14- [ "714277d408ad87fde317f0a94732fce62f1352bdc90936673b4f1daa0925aa26"- , "d16582a99f23010b4248b88d86485419"- , ""- , "bd9fc7cb2fd5063b2c3c0c4f346ad2e3879371a9c805e59b9f2cd2cc2a40894f"- , ""- , ""- , ""- , "62ef7a431288252e0d736c1d4e36cc9ac37107dcd0d0e971a22444a4adae73a41eff0b11c8625e118dbc9226142fd0a6aa10ac9b190919bda44e7248d6c88874612abd77fb3716ea515a2d563237c446e2a282e7c3b0a3aef27d3427cc7d0a7d38714659c3401dbc91d3595159318ebca01ae7d7fd1c89f6ad6b604173b0c744"- ]- ]--{-- [SHA-256]- [PredictionResistance = False]- [EntropyInputLen = 256]- [NonceLen = 128]- [PersonalizationStringLen = 0]- [AdditionalInputLen = 256]- [ReturnedBitsLen = 1024]--}--r2 :: [TestVector]-r2 =- [- -- COUNT = 0- [ "05ac9fc4c62a02e3f90840da5616218c6de5743d66b8e0fbf833759c5928b53d"- , "2b89a17904922ed8f017a63044848545"- , ""- , "2791126b8b52ee1fd9392a0a13e0083bed4186dc649b739607ac70ec8dcecf9b"- , "43bac13bae715092cf7eb280a2e10a962faf7233c41412f69bc74a35a584e54c"- , "3f2fed4b68d506ecefa21f3f5bb907beb0f17dbc30f6ffbba5e5861408c53a1e"- , "529030df50f410985fde068df82b935ec23d839cb4b269414c0ede6cffea5b68"- , "02ddff5173da2fcffa10215b030d660d61179e61ecc22609b1151a75f1cbcbb4363c3a89299b4b63aca5e581e73c860491010aa35de3337cc6c09ebec8c91a6287586f3a74d9694b462d2720ea2e11bbd02af33adefb4a16e6b370fa0effd57d607547bdcfbb7831f54de7073ad2a7da987a0016a82fa958779a168674b56524"- ],- -- COUNT = 1- [ "1bea3296f24e9242b96ed00648ac6255007c91f7c1a5088b2482c28c834942bf"- , "71073136a5cc1eb5b5fa09e1790a0bed"- , ""- , "d714329f3fbea1df9d0b0b0d88dfe3774beb63d011935923d048e521b710dc6f"- , "4ef872fd211a426ea1085ab39eb220cc698fdfeabe49b8835d620ab7885de7a4"- , "d74d1669e89875852d9ccbf11c20fe3c13a621ebcb3f7edeea39a2b3379fdcf5"- , "0c8aa67ca310bd8e58c16aba35880f747266dbf624e88ec8f9ee9be5d08fdeb1"- , "ce95b98f13adcdf7a32aa34709d6e02f658ae498d2ab01ce920f69e7e42c4be1d005acf0ca6b17891dfafc620dd4cd3894f8492a5c846089b9b452483eb0b91f3649ec0b6f98d1aaabc2e42cd39c2b25081b85ab50cb723007a0fd83550f32c210b7c4150b5a6bb3b0c9e3c971a09d43acb48e410a77f824b957092aa8ef98bc"- ],- -- COUNT = 2- [ "a7ea449b49db48601fc3a3d5d77081fab092b8d420ed1b266f704f94352dd726"- , "d11a159b60af8d20a0e37d27e6c74aa3"- , ""- , "50916ab47e8cb5dc843f9fba80639103711f86be8e3aa94f8a64a3fe0e6e5b35"- , "e2bb6768120555e7b9e0d573537a82f8f32f54560e1050b6abb1588fb3441e66"- , "a50cec9d1ecddb2c163d24019e81c31a2b350ccd3ad8181fd31bb8d1f64fa50e"- , "591dbbd48b51abced67f9c6269cf0133cd3dcbb5cfafcb6ef758569c555a5773"- , "0a464abcc8685158372d544635b953fcb1d3821c30aaa93982f9b788935f00f88115aad61d5cee003b3d1cb50f3e961a501e2dd0fc7e1724778b184a4bdf9f64e110dda7446e5544a30bd49a400ea1a5411800e1edfeea349323618afc5dc5782dc4b71d2da4d6a4785f8dd346feb9c8740ffd26bf644e3e4323ff24c30b9f10"- ],- -- COUNT = 3- [ "14683ec508a29d7812e0f04a3e9d87897000dc07b4fbcfda58eb7cdabc492e58"- , "b2243e744eb980b3ece25ce76383fd46"- , ""- , "18590e0ef4ee2bdae462f76d9324b3002559f74c370cfccf96a571d6955703a7"- , "9ea3ccca1e8d791d22fcda621fc4d51b882df32d94ea8f20ee449313e6909b78"- , "16366a578b5ea4d0cb547790ef5b4fd45d7cd845bc8a7c45e99419c8737debb4"- , "a68caa29a53f1ba857e484d095805dc319fe6963e4c4daaf355f722eba746b92"- , "c4e7532ee816789c2d3da9ff9f4b37139a8515dbf8f9e1d0bf00c12addd79ebbd76236f75f2aa705a09f7955038ebff0d566911c5ea13214e2c2eeb46d23ad86a33b60f7b9448d63eec3e1d59f48b39552857447dc5d7944667a230e3dbfa30ca322f6eacaf7536a286706a627c5083c32de0658b9073857c30fb1d86eb8ad1b"- ],- -- COUNT = 4- [ "fa261fb230e2822458532ca2d5c39758750e6819a6fcebef10579ba995096959"- , "564e1c9fbcb12878df2bd49202cbf821"- , ""- , "bf7de29e99e7f0e1b9f96f3b1902fb4049c8c6234d20de8316ebe66d97725457"- , "8b7326621f6afbd44a726de48d03bcc5331f7306026c229ea9523497fbeaa88d"- , "33b00b31623d6160c4c6740363a96481be14b19bc47be95641227284c366922a"- , "2d812c8203575790ad6b6f2ed91a49d57460de779a3e881bef3be12e8766dc91"- , "5574e0b4efc17e8ce136e592beabfe32551072bddd740929e698467b40b3991f028a22c760f7034853cc53007e3793e3c4a600d9e9d94528f8dc09aeba86146cdde2b7f71255ae0efc529b49be2205979dba6525bfe155e8819e8e2aeeaa285704242da90b4c4535101cc47d94b0e388a1b2e63ad0cbe158b9e1bbae9cc0007c"- ],- -- COUNT = 5- [ "61f1471ced56aa04c57e1b512307d4cb92497d9592d7e9e35356e99d585cab1b"- , "84714e960c403a4fac06b2828cc564d9"- , ""- , "7bf97db3c102edc81596d4757045fe6bdc008f35792fc6290b77d889c09c33a8"- , "5b8bdc41f76d98cfa71ed976ea3994706375c8841adb8b6b3b6418e3132e8832"- , "94c8a8fdf38a6ccb8571c89420d899adab169214bb0dfcd43a04622e289935b2"- , "8a4b46e0a7a55907365f82d4ab9376509bd44728cab8cbafb0da901012ad8dcd"- , "933eb159a6af7455b60e40586c064f05f1970f564281b1ebc4662701ac1f299e4eb908c4afcb2e065191281ab576f684aefedd6904bad04d96bd93c0516c62a496c3073a0cda0676a11cc08866b0cc74f62cb9d3db48673b2c3fbeada69f922b4b795ccba22df12ef7125909381f7d681f6b9caba02fb913c5437b98c040c576"- ],- -- COUNT = 6- [ "a1d5bb7d70621dee6b668b28c56d5610c2f8ced30284cc3e0e48de331af05062"- , "88a49e3e54c5ea54c98b95de81bcc807"- , ""- , "b4e2426e98f6eed97a6cdf690a89ee109e84c3dca16c883c26fa4ac671638d8d"- , "5bd1e086ed228cfd8b55c1731fea40c3a63d022599ca2da4bb23118f4821ba62"- , "b754b53ac226e8ebe47a3d31496ec822de06fca2e7ef5bf1dec6c83d05368ec3"- , "fa7e76b2805d90b3d89fff545010d84f67aa3a2c9eb2ba232e75f4d53267dac3"- , "df6b2460688fa537df3ddfe5575fca5eb8abad56cbc4e5a618a2b4a7daf6e215c3a497974c502f9d0ec35de3fc2ea5d4f10de9b2aee66dcc7e7ae6357983095959b817f0383e3030771bd2ed97406acf78a1a4a5f30fa0992289c9202e69e3eb1eabe227c11409ff430f6dfca1a923a8b17bc4b87e908007f5e9759c41482b01"- ],- -- COUNT = 7- [ "68f21d14525d56233c7e263482d344c388a840103a77fb20ac60ce463cabdc79"- , "59fa80ae570f3e0c60ac7e2578cec3cb"- , ""- , "7584b4166530442f06e241dd904f562167e2fdae3247ab853a4a9d4884a5fa46"- , "f6a5482f139045c5389c9246d772c782c4ebf79c3a84b5cf779f458a69a52914"- , "9d37b1ce99f8079993ddf0bd54bab218016685b22655a678ce4300105f3a45b7"- , "4c97c67026ff43c2ee730e7b2ce8cce4794fd0588deb16185fa6792ddd0d46de"- , "e5f8874be0a8345aabf2f829a7c06bb40e60869508c2bdef071d73692c0265f6a5bf9ca6cf47d75cbd9df88b9cb236cdfce37d2fd4913f177dbd41887dae116edfbdad4fd6e4c1a51aad9f9d6afe7fcafced45a4913d742a7ec00fd6170d63a68f986d8c2357765e4d38835d3fea301afab43a50bd9edd2dec6a979732b25292"- ],- -- COUNT = 8- [ "7988146cbf9598d74cf88dc314af6b25c3f7de96ae9892fb0756318cea01987e"- , "280bc1ae9bfdf8a73c2df07b82a32c9c"- , ""- , "2bbc607085232e5e12ccf7c0c19a5dc80e45eb4b3d4a147fe941fa6c13333474"- , "f3f5c1bb5da59252861753c4980c23f72be1732f899fdea7183b5c024c858a12"- , "44d0cfc4f56ab38fa465a659151b3461b65b2462d1ad6b3463b5cf96ad9dc577"- , "34fb9a3cdacc834ff6241474c4f6e73ed6f5d9ea0337ab2b7468f01ad8a26e93"- , "4caec9e760c4d468e47613fe50de4a366ae20ba76793744a4e14433ea4de79dc188601eb86c803b094641ab2337b99d459d37decc7d27473057be45ba848868ee0fb5f1cf303d2fcd0b3e0c36f65a65f81b3fee8778a1f22302e25dfe34e6d587fa8864e621121880f7cd55f350531c4ce0530099eec2d0059706dcd657708d9"- ],- -- COUNT = 9- [ "1c974c953fa2a057c9fc9409a6843f6f839aa544bca4fa11e48afd77931d4656"- , "ed7c08285464af7a5dbdc10b944a1270"- , ""- , "78146ad135acb836360d36afc50653dcc36c21662da2a6f6ae05222e75f34000"- , "263c4984c238ded333c86472866353817379502157172cfa51371d82b1efd7b5"- , "79b591529f9a26a0d7c8f8fd64e354b0c134ef1f757e43f9463b3dbb7a3da1ab"- , "7d8f7204b0b5401ddce9e88dcf5facb9a44660a9f5f1c862748e7269c29f7964"- , "72e2ca257b9edaf59b50e05a144f56fb517832fb9ad3489b1e664e3d5412cbf6b2883e891703b2e73aff9ab56da1009fcdef010ab4cdab996795c8f7c47fb1192bb160353997ad39d7d5fd0e2efc9103a7c3f158246afd53fe53ca6782f809698ef5f1f0d85536780a3fd6a8bafa475891c09213088bd1a3dc169257c34a517a"- ],- -- COUNT = 10- [ "56216d71984a77154569122c777ce57e1d101a6025b28163a25971d39c1c5d0f"- , "5cd148ba7e54f4975ac8e3e0f9b5d06a"- , ""- , "3580f8ca974626c77259c6e37383cb8150b4d0ab0b30e377bed0dc9d1ff1a1bf"- , "15633e3a62b21594d49d3d26c4c3509f96011d4dbb9d48bbbea1b61c453f6abe"- , "6068eaca85c14165b101bb3e8c387c41d3f298918c7f3da2a28786ab0738a6fc"- , "e34f92d2b6aeeeea4ff49bfe7e4b1f462eabb853f0e86fbae0e8b3d51409ce49"- , "587fdb856abc19ede9078797ecb44099e07aadcd83acdcb2b090601d653f4a14c68ab2ebdda63578c5633a825bae4c0c818f89aac58d30fd7b0b5d459a0f3d86fcad78f4bb14dfff08ad81e4ea9f487cb426e91d6e80dfed436ba38fce8d6f21ca2151c92dd5c323b077d6139c66395558f0537026c4a028affa271ef4e7ea23"- ],- -- COUNT = 11- [ "83eb48bedc1e9294866ab8e5322ef83f6f271f8188e8fdabe5817788bd31570d"- , "d6ed90bc692237f132441ede857a6629"- , ""- , "a4e5e127f992bd5ca79ee56bb8a9bccf74c21814bfaf97ffd052211e802e12e4"- , "84136e403d9ed7f4515c188213abcfaca35715fa55de6d734aec63c4606a68f1"- , "fe9d8ef26e2d2e94b99943148392b2b33a581b4b97a8d7a0ecd41660a61dd10b"- , "594dad642183ce2cdc9494d6bcb358e0e7b767c5a0fa33e456971b8754a9abd5"- , "86715d43ba95fbbca9b7193ea977a820f4b61ba1b7e3b8d161b6c51b09dfd5040d94c04338b14d97ed25af577186b36ae7251a486c8a2d24a35e84a95c89d669d49e307b4a368b72164135ac54d020a970a180dfbed135d2c86f01270846d5301bd73db2c431a8aa10a0a3d03d146e5fafb9a2aa0b4efc80edab06ff3b532236"- ],- -- COUNT = 12- [ "ba2c94203dab2e6499d8c50dca7b5c34a6b4764834f9816631aa21b9f9c37361"- , "67db133bdefb25e395085bceee5a0afc"- , ""- , "fa8984d16d35302cda35a3a355ab9242ec96fec0652d39282d4a0abf0a80df87"- , "b6fed10255a3fea6772ae1ae6d9f6cbb9bfaa34804e58a5b786f9bc60b348ccd"- , "445e072244edc716d3528f0e0a20ff0cd8f819c0d031736c8da122748f24d6c6"- , "1f856e403c4fa035bac9aa81a20e347c7d8b213aab699d69d9d6186a06ac45c1"- , "79f33fc36b3b47d9ac805bdbbe699909a8d0beb689a8b2723c291bd5bf7f3ce61343d4722a14e4add36312dbb0594910c8828aff1abc159915d498106f9ffb31147478d8c9ef75d1536ba5036506b313f6e85033f8f6fea2a4de817c867a59378c53c70a2f108275daedd415c05b61c4fd5d48c54be9adb9dea6c40a2ec99ee0"- ],- -- COUNT = 13- [ "0db4c51492db4fe973b4bb1c52a1e873b58fc6bb37a3a4bfc252b03b994495d1"- , "a2a3900f169bba3f78a42526c700de62"- , ""- , "29d5aab356876447e3a20d81c7e3fc6975e2b984180a91493044442999e1ca3a"- , "40b34183b4e72cdff5952b317b3d45943d0fdcfa0527f3563055f7c73ae8f892"- , "dc94220c99ffb595c7c4d6de8de5a6bb4b38847169e24a557ef6d879ad84149d"- , "b2376626fd2f5218b3ed4a5609b43aa24d371cd2176ea017c2b99cf868060021"- , "f0bd6bc4c506d9427a09352d9c1970b146360732841a6323f4cb602c87dedfb5ff7e6964b9144933af3c5c83017ccd6a94bdca467a504564aaa7b452591a16ff6a1e7e94ddc98f9a58016cdcb8caaed6c80671ba48cc81a832d341093dda1d4e5001ec6bf66348b21e3692a13df92538ad572bb2023822072fc95f9590293ffc"- ],- -- COUNT = 14- [ "593845f0adfeffa7c169f8a610147ae8a08c0072fc0c14c3977d3de0d00b55af"- , "9e0eb2507342ee01c02beadee7d077bd"- , ""- , "aefe591697eab678c52e20013aa424b95cfd217b259757fbe17335563f5b5706"- , "cbb5be0ef9bf0555ee58955c4d971fb9baa6d6070c3f7244a4eb88b48f0793bf"- , "6dd878394abdc0402146ba07005327c55f4d821bfebca08d04e66824e3760ab4"- , "ba86a691d6cbf452b1e2fd1dfb5d31ef9ea5b8be92c4988dc5f560733b371f69"- , "00735cbfafac5df82e5cb28fc619b01e2ba9571dc0023d26f09c37fb37d0e809066165a97e532bf86fa7d148078e865fe1a09e27a6889be1533b459cd9cd229494b5cf4d2abf28c38180278d47281f13820276ec85effb8d45284eb9eef5d179ab4880023ab2bd08ee3f766f990286bf32430c042f5521bbfd0c7ee09e2254d7"- ]- ]--{-- [SHA-256]- [PredictionResistance = False]- [EntropyInputLen = 256]- [NonceLen = 128]- [PersonalizationStringLen = 256]- [AdditionalInputLen = 0]- [ReturnedBitsLen = 1024]--}--r3 :: [TestVector]-r3 =- [- -- COUNT = 0- [ "fa0ee1fe39c7c390aa94159d0de97564342b591777f3e5f6a4ba2aea342ec840"- , "dd0820655cb2ffdb0da9e9310a67c9e5"- , "f2e58fe60a3afc59dad37595415ffd318ccf69d67780f6fa0797dc9aa43e144c"- , "e0629b6d7975ddfa96a399648740e60f1f9557dc58b3d7415f9ba9d4dbb501f6"- , ""- , ""- , ""- , "f92d4cf99a535b20222a52a68db04c5af6f5ffc7b66a473a37a256bd8d298f9b4aa4af7e8d181e02367903f93bdb744c6c2f3f3472626b40ce9bd6a70e7b8f93992a16a76fab6b5f162568e08ee6c3e804aefd952ddd3acb791c50f2ad69e9a04028a06a9c01d3a62aca2aaf6efe69ed97a016213a2dd642b4886764072d9cbe"- ],- -- COUNT = 1- [ "cff72f345115376a57f4db8a5c9f64053e7379171a5a1e81e82aad3448d17d44"- , "d1e971ec795d098b3dae14ffcbeecfd9"- , "6ec0c798c240f22740cad7e27b41f5e42dccaf66def3b7f341c4d827294f83c9"- , "45ec80f0c00cad0ff0b7616d2a930af3f5cf23cd61be7fbf7c65be0031e93e38"- , ""- , ""- , ""- , "17a7901e2550de088f472518d377cc4cc6979f4a64f4975c74344215e4807a1234eefef99f64cb8abc3fb86209f6fc7ddd03e94f83746c5abe5360cdde4f2525ccf7167e6f0befae05b38fd6089a2ab83719874ce8f670480d5f3ed9bf40538a15aaad112db1618a58b10687b68875f00f139a72bdf043f736e4a320c06efd2c"- ],- -- COUNT = 2- [ "b7099b06fc7a8a74c58219729db6b0f780d7b4fa307bc3d3f9f22bfb763596a3"- , "b8772059a135a6b61da72f375411de26"- , "2ac1bfb24e0b8c6ac2803e89261822b7f72a0320df2b199171b79bcbdb40b719"- , "9aec4f56ec5e96fbd96048b9a63ac8d047aedbbeea7712e241133b1a357ecfc4"- , ""- , ""- , ""- , "0e1f2bfef778f5e5be671ecb4971624ec784ed2732abc4fbb98a8b482fb68737df91fd15acfad2951403ac77c5ca3edffc1e03398ae6cf6ac24a91678db5c7290abc3fa001aa02d50399326f85d2b8942199a1575f6746364740a5910552c639804d7530c0d41339345a58ff0080eccf1711895192a3817a8dc3f00f28cc10cc"- ],- -- COUNT = 3- [ "7ba02a734c8744b15ef8b4074fe639b32e4431762ab5b7cd4d5df675ea90672b"- , "8a424f32108607c8f1f45d97f500ee12"- , "3ad627433f465187c48141e30c2678106091e7a680229a534b851b8d46feb957"- , "d8f02b59b6a3dd276bc69cba68efcf11ab83ead1397afd9841786bd1bb5da97a"- , ""- , ""- , ""- , "1fb91186ba4b4459d994b4b9f4ca252c7be6294d6cdb5fe56f8ff784d4b190a1c6456e0a41223bbbdf83ed8e7cfbfa765d9d8bc7ea5f4d79ea7eccb4928081a21de4cca36620d6267f55d9a352b76fc0a57375884112c31f65ff28e76d315698c29e6c4c05cb58b0a07ae66143b4abc78b9d25c78b4121e1e45bef1a6c1793e2"- ],- -- COUNT = 4- [ "9a8865dfe053ae77cb6a9365b88f34eec17ea5cbfb0b1f04d1459e7fa9c4f3cb"- , "180c0a74da3ec464df11fac172d1c632"- , "336372ec82d0d68befad83691966ef6ffc65105388eb2d6eed826c2285037c77"- , "75b95108eff1fabe83613e1c4de575e72a5cdc4bb9311dd006f971a052386692"- , ""- , ""- , ""- , "3c683f6d4f8f5a4018d01633dfee74266aaa68ed6fc649e81b64dfdf5f75e75d5c058d66cf5fd01a4f143a6ff695517a4a43bd3adfd1fb2c28ba9a41063140bedbffdb4d21b1ace1550d59209ec61f1e2dbacb2a9116a79cb1410bf2deca5218080aacd9c68e1d6557721a8913e23f617e30f2e594f61267d5ed81464ee730b2"- ],- -- COUNT = 5- [ "22c1af2f2a4c885f06988567da9fc90f34f80f6dd5101c281beef497a6a1b2f8"- , "3fafdecf79a4174801f133131629037b"- , "80327dac486111b8a8b2c8e8381fb2d713a67695c2e660b2b0d4af696cc3e1de"- , "f95a0e4bd24f0e2e9e444f511b7632868ead0d5bb3846771264e03f8ab8ed074"- , ""- , ""- , ""- , "77a7fea2f35a188f6d1bfdd49b569d8c45e2dd431d35a18c6f432c724f1e33ae92cb89a9cf91519e50705a53199f5b572dc85c1aef8f28fb52dc7986228f66954d54eda84a86962cf25cf765bd9949876349291b1aae5f88fcf4b376912d205add4f53b2770c657946c0d824281f441509153f48356d9d43f8a927e0693db8fc"- ],- -- COUNT = 6- [ "d0840e3a8d629d5b883d33e053a341b21c674e67e1999f068c497ecfaabfd6f6"- , "071de7244ecb2fdf7ab27f2d84aa7b7a"- , "90d609527fad96ffe64ab153860346f3d237c8940555ae17b47842d82d3b0943"- , "1dd1a8b59856c49a388f594c5f42cc2e4a56b3ccb8a65e7066e44c12f4344d50"- , ""- , ""- , ""- , "7ab28a9b2d3ae999195553e6550cced4c2daccbe7ec9dcbb0d467fabba185b727fbfd9830242cd098f4db3cf4a85e8bf8e8d5974b62b28550922b32ed5bfc1a522b6605cf93bf8d90bdec1c5b9e59c6fc37a817d437068a87254be1f7c4618ada46fbc3a2efb02e44524e21d91be7534cf05fbfd858304b706d6a91ea1cc6ad5"- ],- -- COUNT = 7- [ "2e2dd56869104492767a59778652831919e1c8b970f84e824ae4116597a0ab7f"- , "01c42a7e983641de46c82fd09b4f2f76"- , "bcd9e1508fcc22820a8be07180fea5045367333b569e111b011cd57dc1858765"- , "7306507cd3ca7eec667e640d270cfbb033063d97520b6b7e38ff3cea0e79d12b"- , ""- , ""- , ""- , "b915726c7b8c5dc3975f1a334684b973abf6a9495d930088cf5d071548e4fd29a67b55cc561ed6949ad28150a9fb4307c1fa5f783a7ea872e8d7c7e67ff0c2906081ee915737d813c25be5c30b952a36f393e6baa56ab01adc2b4776ad7b5d036a53659877c7a4e5220a897d6c0799af37beeed91173fbe9c613c3b6b9bb28e5"- ],- -- COUNT = 8- [ "d1aab0f16bd47a5ccd67c22e094daa3735eae21aa57f0bcd9e053d9d0d545cb8"- , "199310dfe1b01265b8c0d2b46d6c7c9f"- , "625b4b8f4de72ea9cb6f70556322dc2a19d6b2b32de623f557e419a084ba60fd"- , "f50cabae4e060f3971096b78e550cda2837a26a693d905db2d992d589b268f44"- , ""- , ""- , ""- , "987e1fdfe004c619cf1e9034576707eccd849400e19c87a1fef5b0179ec51c42a2f8c45d7942d0023a023c89f188b2634362703985695369863322f58619c50a7385a2dc91fc78f94b59f0131dc2b56a0d7c699d427285da1c104b0ad1739da10d8071c23993787045dc21f0070e1e9aa1658fc8e3add73dac7262e80e0aa2ee"- ],- -- COUNT = 9- [ "449480eaa100aff6f48dc6286a5a81b9728b084864f78a9da98f606a00a6a41f"- , "e53c6c5ac3da9f4726389a03f97bb640"- , "6b8fedc084d8e28d333aef6db3702b6351f0d24e30908cccb63794282655886b"- , "73a6d64e1966ae324388dc12c14544e9dc5ae4fcb331e99d350c456ff16f9aa0"- , ""- , ""- , ""- , "a06912d362da7eb25598857f6d65344c3e23ec3deb80c6e43158845b95eaeca241c0bbbd67ac385e24693444455cc1c2c08c1134d956b8bc93b28be9c2d3322b3e09252979dfb8d39d04c94f81bebda5c73110605a237b561216bda9ee9bdee1cc0c7728bcc8304682334ca944e467a27a85313fa5395a9c790e35defd2edb12"- ],- -- COUNT = 10- [ "9a6174166e97aa4981ddf580bc01c96754b9f0ba042750aabfda1cffe56e8581"- , "d7512ff6b7db7ce141b2bb01dcd0425e"- , "ed75288f23275f9422444da5d3b53ccb3c4ac8acfb659a1e9b7655c2db52f879"- , "6888b9277e57dc57663d402eba8d03cf56a070dc868e6a128b18040002baf690"- , ""- , ""- , ""- , "03519dfb2ff88cc2b53eecc48ae2a18ddcf91a5d69d5aefcdda8444e6df790a5240e67b2a4de75b4bb8a31f0f8aeb5e785ffb7a1341bb52fe00a05ee66fa2d44ea9956e055f9ffa6647c3bfe851ab364ade71a0d356de710ddafb7622b1da1bc53fd4d3210407289c68d8aeb346bf15806dbe787e781b94f63da3e1f61b5ac60"- ],- -- COUNT = 11- [ "9c6ae1002ee1b0add0be563ce50f899da936e13efa620d08c2688c192514763a"- , "fde7db5160c73044be73e9d4c1b22d86"- , "8fdaaeffd64e53f7b4374d902d441209964e12b65d29afec258e65db6de167ca"- , "bcc28fd58e397f53f494ad8132df82c5d8c4c22ea0b7139bd81eeba65667bb69"- , ""- , ""- , ""- , "021d938c9b4db780c7d8134aeff1053e5b8843370b8ae9a6749fca7199d809810f1bc8dfa49426470c30c3616f903e35fbacb23420a32f1bee567cc32300f704246ddc0217f236ef52c3ec9e2433ca66f05c25721f7661c43f22c1a125ed5db531bd0836eb435c27eefc7424ce9d845e1d4cc4c503097b4ffca788e674a5cb53"- ],- -- COUNT = 12- [ "fe96a85b69d46b540918927bb609dc57642eeaefd46bb5da2163a0bc60294b58"- , "22195a410d24db45589448dfe979d3fd"- , "20f698833a4472fd7b78fb9b0c4eb68604f166a2694c4af48dac2b2376790e1e"- , "09cb870879d3f734214f6a4bd2e08c62a2a954bebe559416d8c3551aafe71d6a"- , ""- , ""- , ""- , "d3e96dbe29e1fcb8ed83b19dbfb240e6f41679fbe83853aa71446617e63e5af78cf98b331d15bccb8c673c4e5d5dcec467a1fe26a6cd1696d0c9bc49f78139d051287df7f3ae0dbb4bbf581cb8211931063c3f4612ced53f59d1b4ebb875729139f5d2a7d60642e8f2835eed888b7e3e49c0dffd012cd746abfa3e1c5c2308c6"- ],- -- COUNT = 13- [ "a4fd693ff0a8af24bcec352d3196549fd0da5ee5d99ca58416ca03ce4c50f38e"- , "8cd67f2bf71d4366ce61396642531ff5"- , "368969c15a4849d7593be8b162113b9298a535c148ff668a9e8b147fb3af4eba"- , "83d2be9a0d74e6a42159ae630acebf4e15271ef7f14f3de14752be0e0e822b11"- , ""- , ""- , ""- , "e9188fc0eaec74b2608e21e3a40be94aaf4ae08eb684de8f8bba2d5fd3b073aa5531c938c0fc628da65725c54b5c68bb91d7d326565e96685e0a4e7b220c50e0caf1628edba5bd755b31894f8cb90afa76e88c5eb9e61b4932444c1397dee3e32241a3fb70a3929e49f6da02eea54812abb3d6b5cee18f03af1e0b4958430ab3"- ],- -- COUNT = 14- [ "254ff5687a6dad3f1d237dc762f58d24ef2e2c084d0a48d26a3dc81e5490cda3"- , "f2ec392acca491e03ce47b95963a49fc"- , "f806b9b4a56682c61b55cb6a334caf87ffe135adfea6d0c3fc22b39898fbd078"- , "b8494b1c1f1752fb6f80d732a89b08115857f7cc96e7dff05ebb822706889917"- , ""- , ""- , ""- , "0e527e00494d55564f9d9b28e7110f9a61ce36c883b5be2dcb055444164cdddd1a9f2731716f22d6ff476ce413c77abfc0e946871d5481345c2e97b4bfdd12ac03df606fc56bdb99ac7b71a69b5b9160373bbec3e9dde477180af454e7acc6bc58dc0afb4281c0de4354c1bf599054e3800c6d60d892858865b5361f50bfca9b"- ]- ]--{-- [SHA-256]- [PredictionResistance = False]- [EntropyInputLen = 256]- [NonceLen = 128]- [PersonalizationStringLen = 256]- [AdditionalInputLen = 256]- [ReturnedBitsLen = 1024]--}--r4 :: [TestVector]-r4 =- [- -- COUNT = 0- [ "cdb0d9117cc6dbc9ef9dcb06a97579841d72dc18b2d46a1cb61e314012bdf416"- , "d0c0d01d156016d0eb6b7e9c7c3c8da8"- , "6f0fb9eab3f9ea7ab0a719bfa879bf0aaed683307fda0c6d73ce018b6e34faaa"- , "8ec6f7d5a8e2e88f43986f70b86e050d07c84b931bcf18e601c5a3eee3064c82"- , "1ab4ca9014fa98a55938316de8ba5a68c629b0741bdd058c4d70c91cda5099b3"- , "16e2d0721b58d839a122852abd3bf2c942a31c84d82fca74211871880d7162ff"- , "53686f042a7b087d5d2eca0d2a96de131f275ed7151189f7ca52deaa78b79fb2"- , "dda04a2ca7b8147af1548f5d086591ca4fd951a345ce52b3cd49d47e84aa31a183e31fbc42a1ff1d95afec7143c8008c97bc2a9c091df0a763848391f68cb4a366ad89857ac725a53b303ddea767be8dc5f605b1b95f6d24c9f06be65a973a089320b3cc42569dcfd4b92b62a993785b0301b3fc452445656fce22664827b88f"- ],- -- COUNT = 1- [ "3e42348bf76c0559cce9a44704308c85d9c205b676af0ac6ba377a5da12d3244"- , "9af783973c632a490f03dbb4b4852b1e"- , "2e51c7a8ac70adc37fc7e40d59a8e5bf8dfd8f7b027c77e6ec648bd0c41a78de"- , "45718ac567fd2660b91c8f5f1f8f186c58c6284b6968eadc9810b7beeca148a1"- , "63a107246a2070739aa4bed6746439d8c2ce678a54fc887c5aba29c502da7ba9"- , "e4576291b1cde51c5044fdc5375624cebf63333c58c7457ca7490da037a9556e"- , "b5a3fbd57784b15fd875e0b0c5e59ec5f089829fac51620aa998fff003534d6f"- , "c624d26087ffb8f39836c067ba37217f1977c47172d5dcb7d40193a1cfe20158b774558cbee8eb6f9c62d629e1bcf70a1439e46c5709ba4c94a006ba94994796e10660d6cb1e150a243f7ba5d35c8572fd96f43c08490131797e86d3ed8467b692f92f668631b1d32862c3dc43bfba686fe72fdd947db2792463e920522eb4bc"- ],- -- COUNT = 2- [ "b63fdd83c674699ba473faab9c358434771c5fa0348ca0faf7ebd7cf5891826b"- , "5fd204e2598d9626edab4158a8cfd95f"- , "2a5dfad8494306d9d4648a805c4602216a746ae3493492693a50a86d1ba05c64"- , "adea5ba92f8010bb1a6a4b6fae2caa0b384165adf721253afd635d6021f764af"- , "07c69d8d2b8aa1454c5c48083dd41477fda6bfcf0385638379933a60ed2e0a77"- , "a14e902247a3d6493d3fbc8519518b71a660e5502cf7ecfc796cfaa5b4ee4baa"- , "60e690e4a1eba14aec5187112a383e9991347fab7bac7cb2a40a52579a0d2718"- , "792b47b6ed221623bb187d63e3f039c6983d94efd5771dc9b4c40bee65924513485a6332baeda6a96f9bb431f592d73462b61d9d914a72b56fa9d87597426fb246424ebcd7abd51b2eefec8f5b839c0b3c34015342ace296b5f2218fa194b50aea1c89663460292c92c45f112ddbf6b9406f6e7ccee9c47ed2d90a27be5dd73e"- ],- -- COUNT = 3- [ "dab85f98eaf0cfba013b97de4d9c264ca6fe120366cb83e8b3113c68b34e39d5"- , "d05108e1028ae67b4ea63bdc6d75eb88"- , "09fed3822f6f5e5b9e575d31dc215de1607b0dfc927412618c2d8f79166dbaba"- , "1794885a64470744198b7d0bc24472ffe8daf3c7eb219df6ddf180e484fe0aa5"- , "8d74d01b582f70b92f53b43468084e1586d9b36465d333d5faaf6911e62fe40e"- , "ef7f6b6eb479ab05b3f9ab6dd72eac8b1e86d887f1bcae363cae386d0275a06f"- , "7442b2a792a6a29559bb8a515d56916ee18200580aa02e1237dd358619382d8f"- , "49d2cbfa0897b7d961c293c1e572fb26f28e7b956e746f6eda90454c1370a29e25303ceadc7837514dc638553b487ef9487c977c10625409178ad6506d103c487a66655d08659d92a4d5994d1c8ddb28fe60f2e49577d6e80cae1478068c98268f45e6293c9326c7f726ec89601351c0a26fd3a6549f8a41c6f58692c86594c0"- ],- -- COUNT = 4- [ "0f0aa84ef12e10ae2b279e799c683441862457b9bc25581c2cd3d5b58a5b3246"- , "f74f4230c2427a52f01f39e825d250ac"- , "d02b2f53da48b923c2921e0f75bd7e6139d7030aead5aeebe46c20b9ca47a38a"- , "5222b26e79f7c3b7066d581185b1a1f6376796f3d67f59d025dd2a7b1886d258"- , "d11512457bf3b92d1b1c0923989911f58f74e136b1436f00bad440dd1d6f1209"- , "54d9ea7d40b7255ef3d0ab16ea9fdf29b9a281920962b5c72d97b0e371b9d816"- , "601cef261da8864f1e30196c827143e4c363d3fa865b808e9450b13e251d47fa"- , "e9847cefea3b88062ea63f92dc9e96767ce9202a6e049c98dc1dcbc6d707687bd0e98ed2cc215780c454936292e44a7c6856d664581220b8c8ca1d413a2b81120380bfd0da5ff2bf737b602727709523745c2ced8daef6f47d1e93ef9bc141a135674cba23045e1f99aa78f8cead12eeffff20de2008878b1f806a2652db565a"- ],- -- COUNT = 5- [ "6a868ce39a3adcd189bd704348ba732936628f083de8208640dbd42731447d4e"- , "efdde4e22b376e5e7385e79024350699"- , "f7285cd5647ff0e2c71a9b54b57f04392641a4bde4a4024fa11c859fecaad713"- , "0174f7f456ac06c1d789facc071701f8b60e9accebced73a634a6ad0e1a697d4"- , "5463bb2241d10c970b68c3abc356c0fe5ef87439fc6457c5ee94be0a3fb89834"- , "3ab62cdbc638c1b2b50533d28f31b1758c3b8435fe24bb6d4740005a73e54ce6"- , "2dbf4c9123e97177969139f5d06466c272f60d067fefadf326ccc47971115469"- , "8afce49dccc4ff64c65a83d8c0638bd8e3b7c13c52c3c59d110a8198753e96da512c7e03aeed30918706f3ad3b819e6571cfa87369c179fb9c9bbc88110baa490032a9d41f9931434e80c40ae0051400b7498810d769fb42dddbc7aa19bdf79603172efe9c0f5d1a65372b463a31178cbae581fa287f39c4fbf8434051b7419f"- ],- -- COUNT = 6- [ "bb6b339eae26072487084ec9e4b53f2f1d4267d205042e74c77fb9ca0591ba50"- , "c0e7bf6eb07feccbc494af4098e59d30"- , "34aeec7ed0cae83701b6477709c8654a1114212401dc91cbe7de39d71f0c06e1"- , "f47fc60afbeb807236f7974d837335bc0b22288ef09ddfcb684e16b4c36a050b"- , "e8071ccd84ac4527e5c6e85b0709ed867776f25ae0e04180dcb7105ecd3e3490"- , "fbac45b5952200ad7c4232500f2417a1c14723bdd1cc078821bc2fe138b86597"- , "c4292d7dbef3ba7c18bf46bcf26776add22ab8ee206d6c722665dec6576b1bc0"- , "228aa2a314fcbfe63089ce953ac457093deaa39dd9ce2a4ece56a6028a476a98129be516d6979eff5587c032cdf4739d7ac712970f600fa781a8e542e399661183e34e4b90c59ec5dc5cad86f91083529d41c77b8f36c5a8e28ba1a548223a02eaed8426f6fe9f349ebec11bc743e767482e3472ec2799c1f530ebdc6c03bc4b"- ],- -- COUNT = 7- [ "be658e56f80436039e2a9c0a62952dd7d70842244b5ab10f3b8a87d36104e629"- , "33c9627455dfde91865aee93e5071147"- , "d3a6eb29b180b791984deb056d72c0608a2c9044237aecf100ccb03700064c5e"- , "bef24dc9a5aa23003d3825f9b2b00e7dab571ea6ad86415dbd30c0bbdce7b972"- , "047c29e4d1584fa70cb66e2aa148a2aa29837c5eee64dcac60fdba356cdf90bb"- , "41c4792161b1b00d410cb79cd56bd311a714fb78dc3471c25bdd7479f2e9a952"- , "cd4936d7bc3ea0e7201bcbefbc908215a97680ca6ce8672360aea600b6564308"- , "2c25557f6db07db057f56ad5b6dc0427d1a0e825c48c19a526f9a65087c6d1ead7c78363a61616c84f1022653af65173a3f9ec3275f2b0a0d0bc750194673c0eaa6c623cd88abb0c8979baee4cd85bfce2e4a20bfebf2c3be61676563767dfe229e0b7be67ad6fcd116dd0b460708b1b0e5c3d60f3dd8138030404d197375d75"- ],- -- COUNT = 8- [ "ae537f31a28ca14500e759716bc207983bfeab60b25079fa30b77b8d41244cb9"- , "fca9e27d8ab84cf9b9ce491ec5d8cb67"- , "8c9cb2b19aa3abe83c8fe7da96e9c11648252653a29dcd5bf0ac334ac587f032"- , "1eb52777be480f05115ae6370f30159a94d50ffcc64454678ab1d1ac6f166fa7"- , "9cdf6f1a2bc07acd4b0f43b5f2b892a1153e2669f237d257923636094fb40b54"- , "692d512722de6ba720fd23c8994ac63179b5f7e611addf9cfacd60e06e144a6a"- , "bbeea7b2bea821f339f494947c0b4bae8056119db69a3cbef21914953729cdef"- , "c0c4fb7080c0fbe425c1b756fb3a090cb0d08c7027d1bb82ed3b07613e2a757f83a78d42f9d8653954b489f800a5e058ebc4f5a1747526541d8448cb72e2232db20569dc96342c36672c4be625b363b4587f44557e58cedb4597cb57d006fda27e027818ae89e15b4c6382b9e7a4453290ea43163b4f9cae38b1023de6a47f7b"- ],- -- COUNT = 9- [ "2f8994c949e08862db0204008f55d3561f3e0362df13b9d9a70fda39938f2d33"- , "1bf3e94ea858160b832fe85d301256f5"- , "b46671cf7fa142e7012ed261e1fe86714711c246c7d1c0330fa692141e86d5d1"- , "5ecdb1e8fe12260b9bfe12d6e6f161474fa2311e12e39b0beb0fcd92a6737b73"- , "3ce9a29f0207d079e6dc81fb830356e555f96a23ea71424972ea9308965786d3"- , "db950000c0776cc0e049929ce021020adc42d29cd9b5d8f7117fbe6bde3e594f"- , "fc18ee6dd3dac2306774f0ac36cd789e33462d72a8c75df9057123db33e5f7bc"- , "8546362cc8af9b78dd6e8eb2c37db96e70708852bfd9380abedc7f324575a167bea18f632f3e19d099cfbf310773f9719eec036d2e09f393a023add8ebdc4fb87af43b2fe6c7eaa4d39f8022ce247aa45fdc84d1b92cacce6eae8252a03ec2ec5330c01f56d113fd2ec3d0240af0afcf13ddde205bb5e7c2d912dcb4aee5dcf3"- ],- -- COUNT = 10- [ "0c85e31487de1d7ba4a7b998ac56dc42c6dc0eae7bf5c8aaf1e4e78875f5fb47"- , "de878f728f73f83dc2a2f550b96c8b97"- , "9aac37bce1a6a81dc7934e23747991e3cf48c55ffe5a57781c41768a35220a01"- , "2d5ca8af1a70cfdccd015ee3bf0665dd1941fc6a7317b9d0d06658f5744cfbd9"- , "db881e6d0dc3b62793d7da5fe5a18e33be9b93f4a63a00a878dfbecf0d383bd2"- , "f743ce1b72f3de4c901369eed581c626ed3081ca707e6634fdaff46721ce0878"- , "cd52da3ec8a839c537dacdea8506a3eeee879de388ff5e513322d6d1bb3ff694"- , "a5bdd57cb8fde6298e7c5e563afcca60dd472eca484bd8c3cc17f3307be09b601744dd3ab9e8a44107c5868824575f850c0f399b280cf198006f83ede8c0b537e9be227fa140b65995ad9dfa1f2303d560c3b7f59bedd93c1282ea263924469411c2653f87fd814c74cb91c148430481d64bad0fec3cbb3dd1f39aa55c36f81b"- ],- -- COUNT = 11- [ "93161b2dc08cb0fd50171141c865a841ca935cfdd2b5907d6ff8ab0348c4ceb0"- , "5cb9f6e5912b90c3349a50ab881b35a1"- , "0dceb4a36326c4df1685df43fddeecb5d0c76f00eb44826694f27e610290f6e1"- , "d8e9be44b5f293482548d4787762ebfb03c73c40e45385e8b98907cd66f493dd"- , "105a8f85d6959f3e043ef508cfea21d52123f03b7aea8034c4eec761eaba1fee"- , "bf781f7e489d9b4b5aa5ee6d1796468af672a8d25f311edf3c4b4dbf433d703f"- , "c81d6bcf1e5bf37e39dda1735c6f193df115b1a854a12e7cafe060afe4589335"- , "4306628124d0100fade7eaaf5edf227d50771f9e5f2e1e983800eef9a39fde0b0c280e63c8728d836b5b93ea794a32c1c04cfc54bd5300e3febb5fe2e1023eded8d7cd180279a598f76823e8d5a7dffcc93a09deec5d1f80838e938fba4de9f47e94b99382ae55f116df9c3b3ddf7e50516e203645852a415796f03a86418107"- ],- -- COUNT = 12- [ "1ae12a5e4e9a4a5bfa79da30a9e6c62ffc639572ef1254194d129a16eb53c716"- , "5399b3481fdf24d373222267790a0fec"- , "8280cfdcd7a575816e0199e115da0ea77cae9d30b49c891a6c225e9037ba67e2"- , "681554ff702658122e91ba017450cfdfc8e3f4911153f7bcc428403e9c7b9d68"- , "226732b7a457cf0ac0ef09fd4f81296573b49a68de5e7ac3070e148c95e8e323"- , "45942b5e9a1a128e85e12c34596374ddc85fd7502e5633c7390fc6e6f1e5ef56"- , "6fc59929b41e77072886aff45f737b449b105ed7eacbd74c7cbfedf533dbeaa1"- , "b7547332e1509663fcfea2128f7f3a3df484cd8df034b00199157d35d61e35f1a9d481c7d2e81305616d70fc371ee459b0b2267d627e928590edcac3231898b24ef378aa9c3d381619f665379be76c7c1bd535505c563db3725f034786e35bdd90429305fd71d7bf680e8cdd6d4c348d97078f5cf5e89dee2dc410fad4f2a30f"- ],- -- COUNT = 13- [ "29e20d724dfa459960df21c6ec76b1e6cabd23a9e9456d6c591d7e4529da0ef8"- , "95df1f837eba47a1687aa5c4ddcf8aaf"- , "3713b601e164b1a51dda1ca9242ff477514648e90d311a06e10ce5aa15da5d7f"- , "2a2a312626ca3e20034fc4f28033c7d573f66ef61ab2ea0c7bf0411a9d247264"- , "ec68be33ac8ff3dd127e051604898c0f9a501271859376653a0516336180993d"- , "9935499661d699a00c622a875441b4df5204958fe95892c8ce67f7dfb2be3e4a"- , "256a4ba9e8f439d5487fa5eb45efcf1bc1120491724db3abe328d951f2739fc9"- , "73114cb3624d687d4cd49a6e769dfc7a3f8901dc41f6ad1df4ce480536fa82e52ae958d0528640d92b8bb981b755058e32c4733682e5c4c0df41f3505a1643a0dd49cfdeaf7a18adffca88256c6d2cceb838af6c92a64bc21cb7a760a0391291bfe3575e014fc156323f8eb5e86518c669dad8d29ad5fd4ef6e296f4a0764c26"- ],- -- COUNT = 14- [ "1353f3543eb1134980e061fc4382394975dbc74f1f1ea5ecc02780a813ac5ee6"- , "cf584db2447afbe2c8fa0c15575ee391"- , "345b0cc016f2765a8c33fc24f1dcfa182cbe29d7eacbcdc9bcda988521458fc2"- , "ba60219332a67b95d90ec9de6b8453d4c8af991ae9277461ff3af1b92fc985d3"- , "6964b9b9842aec9c7ec2aad926d701f30eec76fe699265ae2a7765d716958069"- , "6a03c28a9365c558c33d3fdc7e5ebf0b4d32caac70df71403fd70ced09757528"- , "a58546c72a0b4d47c9bd6c19e7cf4ab73b2d7ba36c6c6dc08606f608795ebd29"- , "5b029ef68b6799868b04dc28dbea26bc2fa9fcc8c2b2795aafeed0127b7297fa19a4ef2ba60c42ff8259d5a759f92bd90fdfb27145e82d798bb3ab7fd60bfaefb7aefb116ca2a4fa8b01d96a03c47c8d987fdd33c460e560b138891278313bb619d0c3c6f9d7c5a37e88fce83e94943705c6ff68e00484e74ad4097b0c9e5f10"- ]- ]+import Test.Hspec.QuickCheck+import Test.HUnit (Assertion, assertBool)+import Test.QuickCheck++serialVals :: [SerialBox]+serialVals =+ [ SerialBox arbitraryBS+ , SerialBox arbitraryBSS+ , SerialBox arbitraryHash160+ , SerialBox arbitraryHash256+ , SerialBox arbitraryHash512+ ]++readVals :: [ReadBox]+readVals =+ [ ReadBox arbitraryBS+ , ReadBox arbitraryBSS+ , ReadBox arbitraryHash160+ , ReadBox arbitraryHash256+ , ReadBox arbitraryHash512+ ]++spec :: Spec+spec =+ describe "hash" $ do+ testIdentity serialVals readVals [] []+ prop "join512( split512(h) ) == h" $+ forAll arbitraryHash256 $ forAll arbitraryHash256 . joinSplit512+ prop "decodeCompact . encodeCompact i == i" decEncCompact+ prop "from string 64-byte hash" $+ forAll arbitraryHash512 $ \h ->+ fromString (cs $ encodeHex $ encode h) == h+ prop "from string 32-byte hash" $+ forAll arbitraryHash256 $ \h ->+ fromString (cs $ encodeHex $ encode h) == h+ prop "from string 20-byte hash" $+ forAll arbitraryHash160 $ \h ->+ fromString (cs $ encodeHex $ encode h) == h++joinSplit512 :: Hash256 -> Hash256 -> Bool+joinSplit512 a b = split512 (join512 (a, b)) == (a, b)++-- After encoding and decoding, we may loose precision so the new result is >=+-- to the old one.+decEncCompact :: Integer -> Bool+decEncCompact i+ -- Integer completely fits inside the mantisse+ | abs i <= 0x007fffff = decodeCompact (encodeCompact i) == (i, False)+ -- Otherwise precision will be lost and the decoded result will+ -- be smaller than the original number+ | i >= 0 = fst (decodeCompact (encodeCompact i)) < i+ | otherwise = fst (decodeCompact (encodeCompact i)) > i
test/Haskoin/Crypto/SignatureSpec.hs view
@@ -60,7 +60,6 @@ g = signHash prv msg' msg' = sha256 msg - {- ECDSA Canonical -} -- github.com/bitcoin/bitcoin/blob/master/src/script.cpp@@ -106,7 +105,6 @@ len = fromIntegral $ BS.length s rlen = BS.index s 3 slen = BS.index s (fromIntegral rlen + 5)- {- Trezor RFC 6979 Test Vectors -} -- github.com/trezor/python-ecdsa/blob/master/ecdsa/test_pyecdsa.py
test/Haskoin/Keys/ExtendedSpec.hs view
@@ -16,15 +16,64 @@ import Haskoin.Keys import Haskoin.Util import Haskoin.Util.Arbitrary-import Haskoin.UtilSpec (cerealID, customCerealID,- testCustomEncoding, testCustomJSON,- testJsonID)+import Haskoin.UtilSpec (customCerealID) import Test.Hspec+import Test.Hspec.QuickCheck import Test.HUnit (Assertion, assertBool, assertEqual) import Test.QuickCheck hiding ((.&.)) +serialVals :: [SerialBox]+serialVals =+ [ SerialBox arbitraryDerivPath+ , SerialBox arbitraryHardPath+ , SerialBox arbitrarySoftPath+ ]++readVals :: [ReadBox]+readVals =+ [ ReadBox arbitraryDerivPath+ , ReadBox arbitraryHardPath+ , ReadBox arbitrarySoftPath+ , ReadBox arbitraryXPrvKey+ , ReadBox (snd <$> arbitraryXPubKey)+ , ReadBox arbitraryParsedPath+ , ReadBox arbitraryBip32PathIndex+ ]++jsonVals :: [JsonBox]+jsonVals =+ [ JsonBox arbitraryDerivPath+ , JsonBox arbitraryHardPath+ , JsonBox arbitrarySoftPath+ , JsonBox arbitraryParsedPath+ ]++netVals :: [NetBox]+netVals =+ [ NetBox+ ( xPrvToJSON+ , xPrvToEncoding+ , xPrvFromJSON+ , genNetData arbitraryXPrvKey)+ , NetBox+ ( xPubToJSON+ , xPubToEncoding+ , xPubFromJSON+ , genNetData (snd <$> arbitraryXPubKey))+ ]+ spec :: Spec spec = do+ testIdentity serialVals readVals jsonVals netVals+ describe "Custom identity tests" $ do+ prop "encodes and decodes extended private key" $+ forAll arbitraryNetwork $ \net ->+ forAll arbitraryXPrvKey $+ customCerealID (getXPrvKey net) (putXPrvKey net)+ prop "encodes and decodes extended public key" $+ forAll arbitraryNetwork $ \net ->+ forAll arbitraryXPubKey $+ customCerealID (getXPubKey net) (putXPubKey net) . snd describe "bip32 derivation vector 1" $ do it "chain m" $ runXKeyVec (head xKeyVec) it "chain m/0'" $ runXKeyVec (xKeyVec !! 1)@@ -47,80 +96,21 @@ it "path parsing" testParsePath it "from json" testFromJsonPath it "to json" testToJsonPath- describe "JSON Encoding" $ do- let net = btc- it "encodes and decodes derivation path to JSON" $- forAll arbitraryDerivPath testJsonID- it "encodes and decodes hard path to JSON" $- forAll arbitraryHardPath testJsonID- it "encodes and decodes soft path to JSON" $- forAll arbitrarySoftPath testJsonID- it "encodes and decodes parsed derivation path to JSON" $- forAll arbitraryParsedPath testJsonID- it "encodes and decodes extended private key (JSON)" $- forAll- arbitraryXPrvKey- (testCustomJSON (xPrvFromJSON net) (xPrvToJSON net))- it "encodes and decodes extended private key (Encoding)" $- forAll- arbitraryXPrvKey- (testCustomEncoding (xPrvFromJSON net) (xPrvToEncoding net))- it "encodes and decodes extended public key (JSON)" $- forAll- arbitraryXPubKey- (testCustomJSON (xPubFromJSON net) (xPubToJSON net) . snd)- it "encodes and decodes extended public key (Encoding)" $- forAll- arbitraryXPubKey- (testCustomEncoding (xPubFromJSON net) (xPubToEncoding net) . snd)- describe "Binary Encoding" $ do- let net = btc- it "encodes and decodes extended private key" $- property $- forAll arbitraryXPrvKey $- customCerealID (getXPrvKey net) (putXPrvKey net)- it "encodes and decodes extended public key" $- property $- forAll arbitraryXPubKey $- customCerealID (getXPubKey net) (putXPubKey net) . snd- it "Cereal encode derivation path" $- property $ forAll arbitraryDerivPath cerealID- it "Cereal encode hard derivation path" $- property $ forAll arbitraryHardPath cerealID- it "Cereal encode soft derivation path" $- property $ forAll arbitrarySoftPath cerealID- -- This instance does not exist. Uncomment if you add a sensible one.- -- it "Cereal encode parsed derivation path" $- -- property $ forAll arbitraryParsedPath cerealID describe "Derivation Paths" $ do- it "show and read derivation path" $- property $ forAll arbitraryDerivPath $ \p -> read (show p) == p- it "show and read hard derivation path" $- property $ forAll arbitraryHardPath $ \p -> read (show p) == p- it "show and read soft derivation path" $- property $ forAll arbitrarySoftPath $ \p -> read (show p) == p- it "from string derivation path" $- property $+ prop "from string derivation path" $ forAll arbitraryDerivPath $ \p -> fromString (cs $ pathToStr p) == p- it "from string hard derivation path" $- property $+ prop "from string hard derivation path" $ forAll arbitraryHardPath $ \p -> fromString (cs $ pathToStr p) == p- it "from string soft derivation path" $- property $+ prop "from string soft derivation path" $ forAll arbitrarySoftPath $ \p -> fromString (cs $ pathToStr p) == p- it "from and to lists of derivation paths" $- property $+ prop "from and to lists of derivation paths" $ forAll arbitraryDerivPath $ \p -> listToPath (pathToList p) == p- it "from and to lists of hard derivation paths" $- property $+ prop "from and to lists of hard derivation paths" $ forAll arbitraryHardPath $ \p -> toHard (listToPath $ pathToList p) == Just p- it "from and to lists of soft derivation paths" $- property $+ prop "from and to lists of soft derivation paths" $ forAll arbitrarySoftPath $ \p -> toSoft (listToPath $ pathToList p) == Just p- it "read and show parsed path" $- property $ forAll arbitraryParsedPath $ \p -> read (show p) == p describe "Extended Keys" $ do let net = btc it "computes pubkey of a subkey is subkey of the pubkey" $@@ -133,13 +123,6 @@ property $ forAll arbitraryXPubKey $ \(_, k) -> xPubImport net (xPubExport net k) == Just k- it "shows and reads extended private key" $- property $- forAll arbitraryXPrvKey $ \k -> read (show k) `shouldBe` k- it "shows and reads extended private key" $- property $- forAll arbitraryXPubKey $ \(prv, pub) ->- read (show (prv, pub)) `shouldBe` (prv, pub) testFromJsonPath :: Assertion testFromJsonPath =
test/Haskoin/KeysSpec.hs view
@@ -15,32 +15,35 @@ import Test.Hspec import Test.QuickCheck +serialVals :: [SerialBox]+serialVals =+ [ SerialBox (arbitrary :: Gen SecKey)+ , SerialBox (snd <$> arbitraryKeyPair) -- PubKeyI+ ]++readVals :: [ReadBox]+readVals =+ [ ReadBox (arbitrary :: Gen SecKey)+ , ReadBox arbitrarySecKeyI+ , ReadBox (snd <$> arbitraryKeyPair) -- PubKeyI+ ]++jsonVals :: [JsonBox]+jsonVals =+ [ JsonBox (snd <$> arbitraryKeyPair) -- PubKeyI+ ]+ spec :: Spec spec = describe "keys" $ do- let net = btc+ testIdentity serialVals readVals jsonVals [] it "is public key canonical" $ property $ forAll arbitraryKeyPair (isCanonicalPubKey . snd)- it "encode and decode wif private keys" $- property $- forAll arbitraryKeyPair $ \(pk, _) ->- fromWif net (toWif net pk) == Just pk- it "encode and decode serialized private key" $- property $ forAll arbitrary binaryPrvKey- it "read and show public key" $- property $ forAll arbitraryKeyPair $ \(_, k) -> read (show k) == k- it "read and show private key" $- property $ forAll arbitrarySecKeyI $ \k -> read (show k) == k it "from string public key" $ property $ forAll arbitraryKeyPair $ \(_, k) -> fromString (cs . encodeHex $ S.encode k) == k- it "encode and decode json public key" $- property $ forAll arbitraryKeyPair (testID . snd)- it "encodes and decodes serialized public key" $- property $ forAll arbitraryKeyPair $ cerealID . snd - -- github.com/bitcoin/bitcoin/blob/master/src/script.cpp -- from function IsCanonicalPubKey isCanonicalPubKey :: PubKeyI -> Bool@@ -56,17 +59,3 @@ where bs = S.encode p -{- Key formats -}--binaryPrvKey :: SecKey -> Bool-binaryPrvKey k =- Right k == runGet secKeyGet (runPut (secKeyPut k)) &&- Just k == secKey (getSecKey k)--testID :: (FromJSON a, ToJSON a, Eq a) => a -> Bool-testID x =- (A.decode . A.encode) (singleton ("object" :: String) x) ==- Just (singleton ("object" :: String) x)--cerealID :: (Serialize a, Eq a) => a -> Bool-cerealID x = S.decode (S.encode x) == Right x
test/Haskoin/NetworkSpec.hs view
@@ -12,14 +12,45 @@ import Haskoin.Transaction import Haskoin.Util import Haskoin.Util.Arbitrary-import Haskoin.UtilSpec (cerealID, customCerealID)+import Haskoin.UtilSpec (customCerealID) import Test.Hspec+import Test.Hspec.QuickCheck import Test.HUnit (Assertion, assertBool, assertEqual) import Test.QuickCheck +serialVals :: [SerialBox]+serialVals =+ [ SerialBox arbitraryVarInt+ , SerialBox arbitraryVarString+ , SerialBox arbitraryNetworkAddress+ , SerialBox arbitraryInvType+ , SerialBox arbitraryInvVector+ , SerialBox arbitraryInv1+ , SerialBox arbitraryVersion+ , SerialBox arbitraryAddr1+ , SerialBox arbitraryAlert+ , SerialBox arbitraryReject+ , SerialBox arbitraryRejectCode+ , SerialBox arbitraryGetData+ , SerialBox arbitraryNotFound+ , SerialBox arbitraryPing+ , SerialBox arbitraryPong+ , SerialBox arbitraryMessageCommand+ , SerialBox arbitraryMessageHeader+ , SerialBox arbitraryBloomFlags+ , SerialBox arbitraryBloomFilter+ , SerialBox arbitraryFilterLoad+ , SerialBox arbitraryFilterAdd+ ]+ spec :: Spec spec = do- let net = btc+ testIdentity serialVals [] [] []+ describe "Custom identity tests" $ do+ prop "Data.Serialize Encoding for type Message" $+ forAll arbitraryNetwork $ \net ->+ forAll (arbitraryMessage net) $+ customCerealID (getMessage net) (putMessage net) describe "bloom filters" $ do it "bloom filter vector 1" bloomFilter1 it "bloom filter vector 2" bloomFilter2@@ -27,47 +58,6 @@ describe "relevant bloom filter update" $ do it "Relevant Update" relevantOutputUpdated it "Irrelevant Update" irrelevantOutputNotUpdated- describe "serialization of protocol types" $ do- it "encodes and decodes varint" $- property $ forAll arbitraryVarInt cerealID- it "encodes and decodes varstring" $- property $ forAll arbitraryVarString cerealID- it "encodes and decodes network address" $- property $ forAll arbitraryNetworkAddress cerealID- it "encodes and decodes invtype" $- property $ forAll arbitraryInvType cerealID- it "encodes and decodes invvector" $- property $ forAll arbitraryInvVector cerealID- it "encodes and decodes inv" $ property $ forAll arbitraryInv1 cerealID- it "encodes and decodes version" $- property $ forAll arbitraryVersion cerealID- it "encodes and decodes addr" $ property $ forAll arbitraryAddr1 cerealID- it "encodes and decodes alert" $ property $ forAll arbitraryAlert cerealID- it "encodes and decodes reject" $- property $ forAll arbitraryReject cerealID- it "encodes and decodes getdata" $- property $ forAll arbitraryGetData cerealID- it "encodes and decodes notfound" $- property $ forAll arbitraryNotFound cerealID- it "encodes and decodes ping" $ property $ forAll arbitraryPing cerealID- it "encodes and decodes pong" $ property $ forAll arbitraryPong cerealID- it "encodes and decodes message command" $- property $ forAll arbitraryMessageCommand cerealID- it "encodes and decodes message header" $- property $ forAll arbitraryMessageHeader cerealID- it "encodes and decodes message" $- property $- forAll (arbitraryMessage net) $- customCerealID (getMessage net) (putMessage net)- describe "serialization of bloom types" $ do- it "encodes and decodes bloom flags" $- property $ forAll arbitraryBloomFlags cerealID- it "encodes and decodes bloom filter" $- property $ forAll arbitraryBloomFilter $ cerealID . lst3- it "encodes and decodes filterload" $- property $ forAll arbitraryFilterLoad cerealID- it "encodes and decodes filteradd" $- property $ forAll arbitraryFilterAdd cerealID bloomFilter :: Word32 -> Text -> Assertion bloomFilter n x = do
test/Haskoin/ScriptSpec.hs view
@@ -21,33 +21,48 @@ import Haskoin.Transaction import Haskoin.Util import Haskoin.Util.Arbitrary-import Haskoin.UtilSpec (cerealID, testJsonID) import Test.Hspec+import Test.Hspec.QuickCheck import Test.HUnit as HUnit import Test.QuickCheck import Text.Read +serialVals :: [SerialBox]+serialVals =+ [ SerialBox arbitraryScriptOp+ , SerialBox arbitraryScript+ ]++readVals :: [ReadBox]+readVals =+ [ ReadBox arbitrarySigHash+ , ReadBox arbitrarySigHashFlag+ , ReadBox arbitraryScript+ , ReadBox arbitraryPushDataType+ , ReadBox arbitraryScriptOp+ , ReadBox (arbitraryScriptOutput =<< arbitraryNetwork)+ ]++jsonVals :: [JsonBox]+jsonVals =+ [ JsonBox $ arbitraryScriptOutput =<< arbitraryNetwork+ , JsonBox arbitraryOutPoint+ , JsonBox arbitrarySigHash+ , JsonBox $ fst <$> (arbitrarySigInput =<< arbitraryNetwork)+ ]+ spec :: Spec spec = do- let net = btc+ testIdentity serialVals readVals jsonVals [] describe "btc scripts" $ props btc describe "bch scripts" $ props bch describe "multi signatures" $ zipWithM_ (curry mapMulSigVector) mulSigVectors [0 ..] describe "signature decoding" $- zipWithM_ (curry (sigDecodeMap net)) scriptSigSignatures [0 ..]- describe "json serialization" $ do- it "encodes and decodes script output" $- forAll (arbitraryScriptOutput net) testJsonID- it "encodes and decodes outpoint" $ forAll arbitraryOutPoint testJsonID- it "encodes and decodes sighash" $ forAll arbitrarySigHash testJsonID- it "encodes and decodes siginput" $- forAll (arbitrarySigInput net) (testJsonID . fst)- describe "Cereal script serialization" $ do- it "encodes and decodes script op" $- property $ forAll arbitraryScriptOp cerealID- it "encodes and decodes script" $- property $ forAll arbitraryScript cerealID+ zipWithM_ (curry (sigDecodeMap btc)) scriptSigSignatures [0 ..]+ describe "SigHashFlag fromEnum/toEnum" $+ prop "fromEnum/toEnum" $+ forAll arbitrarySigHashFlag $ \f -> toEnum (fromEnum f) `shouldBe` f props :: Network -> Spec props net = do@@ -61,23 +76,20 @@ standardSpec :: Network -> Spec standardSpec net = do- it "has intToScriptOp . scriptOpToInt identity" $- property $+ prop "has intToScriptOp . scriptOpToInt identity" $ forAll arbitraryIntScriptOp $ \i -> intToScriptOp <$> scriptOpToInt i `shouldBe` Right i- it "has decodeOutput . encodeOutput identity" $- property $+ prop "has decodeOutput . encodeOutput identity" $ forAll (arbitraryScriptOutput net) $ \so -> decodeOutput (encodeOutput so) `shouldBe` Right so- it "has decodeInput . encodeOutput identity" $- property $+ prop "has decodeInput . encodeOutput identity" $ forAll (arbitraryScriptInput net) $ \si -> decodeInput net (encodeInput si) `shouldBe` Right si- it "can sort multisig scripts" $+ prop "can sort multisig scripts" $ forAll arbitraryMSOutput $ \out -> map S.encode (getOutputMulSigKeys (sortMulSig out)) `shouldSatisfy` \xs -> xs == sort xs- it "can decode inputs with empty signatures" $ do+ prop "can decode inputs with empty signatures" $ do decodeInput net (Script [OP_0]) `shouldBe` Right (RegularInput (SpendPK TxSignatureEmpty)) decodeInput net (Script [opPushData ""]) `shouldBe`@@ -268,8 +280,6 @@ sigHashSpec :: Network -> Spec sigHashSpec net = do- it "can read . show" $- property $ forAll arbitrarySigHash $ \sh -> read (show sh) `shouldBe` sh it "can correctly show" $ do show (0x00 :: SigHash) `shouldBe` "SigHash " <> show (0x00 :: Word32) show (0x01 :: SigHash) `shouldBe` "SigHash " <> show (0x01 :: Word32)
test/Haskoin/TransactionSpec.hs view
@@ -18,18 +18,47 @@ import Haskoin.Transaction.Segwit (isSegwit) import Haskoin.Util import Haskoin.Util.Arbitrary-import Haskoin.UtilSpec (cerealID, testJsonID) import Safe (readMay) import Test.Hspec+import Test.Hspec.QuickCheck import Test.HUnit (Assertion, assertBool) import Test.QuickCheck +serialVals :: [SerialBox]+serialVals =+ [ SerialBox $ arbitraryTx =<< arbitraryNetwork+ , SerialBox $ arbitraryWitnessTx =<< arbitraryNetwork+ , SerialBox $ arbitraryLegacyTx =<< arbitraryNetwork+ , SerialBox $ arbitraryTxIn =<< arbitraryNetwork+ , SerialBox $ arbitraryTxOut =<< arbitraryNetwork+ , SerialBox arbitraryOutPoint+ ]++readVals :: [ReadBox]+readVals =+ [ ReadBox arbitraryTxHash+ , ReadBox $ arbitraryTx =<< arbitraryNetwork+ , ReadBox $ arbitraryTxIn =<< arbitraryNetwork+ , ReadBox $ arbitraryTxOut =<< arbitraryNetwork+ , ReadBox arbitraryOutPoint+ ]++jsonVals :: [JsonBox]+jsonVals =+ [ JsonBox arbitraryTxHash+ , JsonBox $ arbitraryTx =<< arbitraryNetwork+ , JsonBox $ arbitraryWitnessTx =<< arbitraryNetwork+ , JsonBox $ arbitraryLegacyTx =<< arbitraryNetwork+ , JsonBox $ arbitraryTxIn =<< arbitraryNetwork+ , JsonBox $ arbitraryTxOut =<< arbitraryNetwork+ , JsonBox arbitraryOutPoint+ ]+ spec :: Spec spec = do- let net = btc+ testIdentity serialVals readVals jsonVals [] describe "transaction unit tests" $ do- it "compute txid from tx" $- mapM_ runTxIDVec txIDVec+ it "compute txid from tx" $ mapM_ runTxIDVec txIDVec it "build pkhash transaction (generated from bitcoind)" $ mapM_ runPKHashVec pkHashVec it "encode satoshi core script pubkey" tEncodeSatoshiCoreScriptPubKey@@ -43,54 +72,33 @@ -- it "builds a p2wsh multisig transaction" testP2WSHMulsig -- it "agrees with BIP143 p2sh-p2wsh multisig example" testBip143p2shp2wpkhMulsig describe "btc transaction" $ do- it "decode and encode txid" $- property $+ prop "decode and encode txid" $ forAll arbitraryTxHash $ \h -> hexToTxHash (txHashToHex h) == Just h- it "from string transaction id" $- property $+ prop "from string transaction id" $ forAll arbitraryTxHash $ \h -> fromString (cs $ txHashToHex h) == h- it "building address tx" $- property $- forAll arbitraryAddress $- forAll (arbitrarySatoshi net) . testBuildAddrTx net- it "guess transaction size" $- property $ forAll (arbitraryAddrOnlyTxFull net) (testGuessSize net)- it "choose coins" $- property $ forAll (listOf (arbitrarySatoshi net)) testChooseCoins- it "choose multisig coins" $- property $- forAll arbitraryMSParam $- forAll (listOf (arbitrarySatoshi net)) . testChooseMSCoins- it "sign and validate transaction" $- property $ forAll (arbitrarySigningData net) (testDetSignTx net)- it "sign and validate (nested) transaction" $- property $ forAll (arbitrarySigningData net) (testDetSignNestedTx net)- it "merge partially signed transactions" $- property $ forAll (arbitraryPartialTxs net) (testMergeTx net)- describe "transaction JSON serialization" $ do- it "encodes and decodes transaction" $- property $ forAll (arbitraryTx net) testJsonID- it "encodes and decodes transaction hash" $- property $ forAll arbitraryTxHash testJsonID- it "encodes and decodes transaction inputs" $- property $ forAll (arbitraryTxIn net) testJsonID- it "encodes and decodes transaction outputs" $- property $ forAll (arbitraryTxOut net) testJsonID- it "encodes and decodes outpoints" $- property $ forAll arbitraryOutPoint testJsonID- describe "transaction binary serialization" $ do- it "encodes and decodes tx input" $- property $ forAll (arbitraryTxIn net) cerealID- it "encodes and decodes tx output" $- property $ forAll (arbitraryTxOut net) cerealID- it "encodes and decodes outpoint" $- property $ forAll arbitraryOutPoint cerealID- it "encodes and decodes transaction" $- property $ forAll (arbitraryTx net) cerealID- it "encodes and decodes witness transaction" $- property $ forAll (arbitraryWitnessTx net) cerealID- it "encodes and decodes legacy transaction" $- property $ forAll (arbitraryLegacyTx net) cerealID+ prop "building address tx" $+ forAll arbitraryNetwork $ \net ->+ forAll arbitraryAddress $+ forAll (arbitrarySatoshi net) . testBuildAddrTx net+ prop "guess transaction size" $+ forAll arbitraryNetwork $ \net ->+ forAll (arbitraryAddrOnlyTxFull net) (testGuessSize net)+ prop "choose coins" $+ forAll arbitraryNetwork $ \net ->+ forAll (listOf (arbitrarySatoshi net)) testChooseCoins+ prop "choose multisig coins" $+ forAll arbitraryNetwork $ \net ->+ forAll arbitraryMSParam $+ forAll (listOf (arbitrarySatoshi net)) . testChooseMSCoins+ prop "sign and validate transaction" $+ forAll arbitraryNetwork $ \net ->+ forAll (arbitrarySigningData net) (testDetSignTx net)+ prop "sign and validate (nested) transaction" $+ forAll arbitraryNetwork $ \net ->+ forAll (arbitrarySigningData net) (testDetSignNestedTx net)+ prop "merge partially signed transactions" $+ forAll arbitraryNetwork $ \net ->+ property $ forAll (arbitraryPartialTxs net) (testMergeTx net) runTxIDVec :: (Text, Text) -> Assertion runTxIDVec (tid, tx) = assertBool "txid" $ txHashToHex (txHash txBS) == tid
test/Haskoin/UtilSpec.hs view
@@ -1,9 +1,5 @@ module Haskoin.UtilSpec ( spec- , testJsonID- , testCustomJSON- , testCustomEncoding- , cerealID , customCerealID ) where @@ -22,18 +18,19 @@ import Haskoin.Util import Haskoin.Util.Arbitrary import Test.Hspec+import Test.Hspec.QuickCheck import Test.QuickCheck spec :: Spec spec = describe "utility functions" $ do- it "bsToInteger . integerToBS" $ property getPutInteger- it "decodeHex . encodeHex" $ property $ forAll arbitraryBS fromToHex- it "compare updateIndex with Data.Sequence" $ property testUpdateIndex- it "matchTemplate" $ property testMatchTemplate- it "testing matchTemplate with two lists" $- property testMatchTemplateLen- it "either helper functions" $ property testEither+ prop "bsToInteger . integerToBS" getPutInteger+ prop "decodeHex . encodeHex" $ forAll arbitraryBS fromToHex+ prop "compare updateIndex with Data.Sequence" testUpdateIndex+ prop "matchTemplate" testMatchTemplate+ prop "testing matchTemplate with two lists" testMatchTemplateLen+ prop "test eitherToMaybe" testEitherToMaybe+ prop "test maybeToEither" testMaybeToEither {- Various utilities -} @@ -62,46 +59,14 @@ where res = matchTemplate as bs (==) -testEither :: Either String Int -> Bool-testEither e =- case e of- (Right v) ->- isRight e &&- not (isLeft e) &&- fromRight (error "Unexpected Left") e == v &&- eitherToMaybe e == Just v- (Left v) ->- isLeft e &&- not (isRight e) &&- fromLeft (error "Unexpected Right") e == v &&- isNothing (eitherToMaybe e)+testEitherToMaybe :: Either String Int -> Bool+testEitherToMaybe (Right v) = eitherToMaybe (Right v) == Just v+testEitherToMaybe e = isNothing (eitherToMaybe e) -cerealID :: (Serialize a, Eq a) => a -> Bool-cerealID x = S.decode (S.encode x) == Right x+testMaybeToEither :: Maybe Int -> String -> Bool+testMaybeToEither (Just v) str = maybeToEither str (Just v) == Right v+testMaybeToEither m str = maybeToEither str m == Left str customCerealID :: Eq a => Get a -> Putter a -> a -> Bool customCerealID g p a = runGet g (runPut (p a)) == Right a -testJsonID :: (FromJSON a, ToJSON a, Eq a) => a -> Bool-testJsonID x = jsonID_ x && encodingID_ x--jsonID_ :: (FromJSON a, ToJSON a, Eq a) => a -> Bool-jsonID_ x =- (A.fromJSON . A.toJSON) (singleton ("object" :: String) x) ==- A.Success (singleton ("object" :: String) x)--encodingID_ :: (FromJSON a, ToJSON a, Eq a) => a -> Bool-encodingID_ x =- (A.decode . encodingToLazyByteString . A.toEncoding)- (singleton ("object" :: String) x) ==- Just (singleton ("object" :: String) x)--testCustomJSON :: Eq a => (A.Value -> Parser a) -> (a -> A.Value) -> a -> Bool-testCustomJSON f g x = parseMaybe f (g x) == Just x--testCustomEncoding ::- Eq a => (A.Value -> Parser a) -> (a -> A.Encoding) -> a -> Bool-testCustomEncoding f g x =- dec (encodingToLazyByteString $ g x) == Just x- where- dec bs = parseMaybe f =<< A.decode bs