{-# LANGUAGE OverloadedStrings #-} module Main (main) where import qualified Data.ByteString as B import qualified Data.ByteString.Builder as BB import qualified Data.ByteString.Lazy as BL import qualified Test.Tasty as Tasty import qualified Test.Tasty.Runners as Tasty import Test.Tasty (TestTree, testGroup) import Test.Tasty.HUnit (testCase, (@=?)) -- We don't use the 'time' library expicitly, but if we don't import it -- GHCJS fails to run the tests because an undefined 'h$current_time'. import qualified Data.Time as Time () import qualified Bitcoin.Hash as BH import qualified Bitcoin.Hash.Prim as BH -------------------------------------------------------------------------------- main :: IO () main = Tasty.defaultMainWithIngredients [ Tasty.consoleTestReporter , Tasty.listingTests ] tt tt :: TestTree tt = testGroup "bitcoin-hash" [ tt_ripemd160 , tt_sha256 , tt_hash160 , tt_hash256 , tt_check32 , tt_hmacSHA512 ] msg :: Int -> B.ByteString msg len = B.replicate len 0x27 fh :: (B.ByteString -> B.ByteString) -> Int -> B.ByteString -> TestTree fh f len out = testCase (show len) $ out @=? toBase16 (f (msg len)) tt_ripemd160 :: TestTree tt_ripemd160 = testGroup "ripemd160" [ h 0 "9c1185a5c5e9fc54612808977ee8f548b2258d31" , h 1 "e4ee5c96e6a059ff08d441d7667e7b3936ed8089" , h 2 "327a5811faaf39601554f1e9fa75cefea719bf1b" , h 8 "c9d553b3329ea7ade32c89ce2dbe5b5d3af2c02c" , h 16 "d97869cab890738068f4759ff03056a323cf7da6" , h 32 "47ba9ae144d982c09bb68046fd87731fbe4d050a" , h 33 "a22128456832e574624248d2cfe9cc0e7081134e" , h 64 "f3e39a2c916b85183405babf88ba19f28d46b296" , h 128 "c5467ad5008bbdc3e27740f7b847aa427502d23e" , h 256 "696f2fac6dc837936b3c07684c6fa557a75c8986" , h 257 "c18821b44674454e716b2ca71945960862e11f07" , h 512 "e6b39d5ac1be9462d17d0c2c329fca10207804c9" , h 519 "c199d39af3ec736c347a72e6065a8479fac00050" , h 1024 "07048736bb4be170aa405d7702f05951bf91cd38" , h 1029 "be98cf421089c1581eca74ae3d8c351467754be7" , h 2048 "aab6cf47c7e46d3fab7f797afdceca60123b1d8d" , h 2055 "56eecf9bdae3a3a094884c6ad4bca1cdf7125600" ] where h :: Int -> B.ByteString -> TestTree h = fh BH.ripemd160 tt_sha256 :: TestTree tt_sha256 = testGroup "sha256" [ h 0 "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" , h 1 "265fda17a34611b1533d8a281ff680dc5791b0ce0a11c25b35e11c8e75685509" , h 2 "6f49cdbd80e1b95d5e6427e1501fc217790daee87055fa5b4e71064288bddede" , h 8 "93b50054bf138761edd58b09cf99bab521dbe00fa703bb055941df80c9a043cf" , h 16 "e160ec46a8f3e2066cf88c72c7545812b2cc847e30bda671942cd7cdaa063cf7" , h 32 "4ce65e91582a44819c8f17dfe5225e3b79269ec1ad92dfef3137b98a2bfff551" , h 33 "8fd6eba95e8d1ba2c691d0f7ed8ff815d573c7aa28d3bde13a86558f6df348aa" , h 64 "59af513c29d2fc3728126da90c84905c6ea451840a3099a3e3959e753b38a2fc" , h 128 "32932efae95e19aab9862ce6dac38680a5e5e9fe949c7abfef3916fab53532b0" , h 256 "18a8d14bb05697d9c779dd795992945f345b6e4f10ff713b989da307693dbd62" , h 257 "6c19b0feb3ecdcefff3c3b1e9bf80437c76165a3bb4c143789288173060e6954" , h 512 "746cba66a1c2e5ad7ef4fe64195b126df69fe8c0fdbf5a0d14487546f2d059c3" , h 519 "2d86b63c625ffcfb417af2ee06e8d97acf820b9d151f1592deaccb06eafa347a" , h 1024 "4f1f3e5c43da7c45cf4f2e7690fcd99dbb6a3794ee4ec4ec3604cfd930a23409" , h 1029 "e8ac7ceee762a9fd98b37815797cbdf6eba215ad232aac025bb3d25a8e73828d" , h 2048 "0265b8f82954fb56e5ea876c19c8bc5d289519fabb67682e9723cca0da72892f" , h 2055 "babaa339695587c4eb34ff10077e9080e6feab85cc730ccf580431c9feb78130" ] where h :: Int -> B.ByteString -> TestTree h = fh BH.sha256 tt_hash160 :: TestTree tt_hash160 = testGroup "hash160" [ h 0 "b472a266d0bd89c13706a4132ccfb16f7c3b9fcb" , h 1 "64f5b99153eb4a63d32416d4269f1c346d6e8ac4" , h 2 "7b6f57c8b7d72d7bad3fb916b066519fb693efdb" , h 8 "cd2f0c4d5fe5279327549883d95f8276a953ebc8" , h 16 "c94dd81c7d9b3b08c81bf154a40a87fc9b0d4988" , h 32 "a5fb1acecd47e7b3d31d2f45df590509d118ed51" , h 33 "2032ad3938ef12ed1e92b9c9bf306c4ee72aa58f" , h 64 "8e4def42bee7f44e6f344b45874c705f8ad26774" , h 128 "c08c5dd5942ad358db28ae4872a0ab49676df8f1" , h 160 "b9c16a0844be5f3b72ddfac7df514f1876bc4578" , h 257 "8ac52cfe67ffc5db834fb075ab21433712386f54" , h 160 "b9c16a0844be5f3b72ddfac7df514f1876bc4578" , h 519 "35d768b1bd36543e7d3366e22098b3ef3fcc48da" , h 1024 "8ac122cc8956b0b4ec4d6e204eb88e752ce735fc" , h 1029 "577a6eff788bf44829e0aeeb02ffdc74e9cffb3d" , h 2048 "8204ed56a4076e190b7affb27859de88d67c12e5" , h 2055 "cddc7258d480b001aa11e1c07c9903a4298b2cab" ] where h :: Int -> B.ByteString -> TestTree h = fh BH.hash160 tt_hash256 :: TestTree tt_hash256 = testGroup "hash256" [ h 0 "5df6e0e2761359d30a8275058e299fcc0381534545f55cf43e41983f5d4c9456" , h 1 "e368b5f8bac32462da14cda3a2c944365cbf7f34a5db8aa4e9d85abc21cf8f8a" , h 2 "4a9b8de6233de14e76d4146a43030920a0ce43302b0ef885c9b3982d51ff81e4" , h 8 "7f3a9bc8e135e559f9c5a388cc3db5c017227984fe031177af25f719205c70b5" , h 16 "cdc6f516ac0d520f9827dd29a1eba16846d5effb1c799a0a43aaa49e32de5631" , h 32 "10f11f8f76f95726b51a69ad03e6ddc0ea3ffcd350d897040a9dc80cc87b5af4" , h 33 "27bb0754c0ede411da787aef7b46e3499d17902c7d8c078dd0dbd083678b5828" , h 64 "a8cac40994107d52033ed5a2e476318ea6919aad27cadb59666d15f33f5c6408" , h 128 "baaf81d32565dcc44b027157f9dca8a2b07dbead96965de38d854da06e3ea07b" , h 512 "60c5d80dd8300576bbab8ca8c8aae25bb4402bc0bae85ddb5f68b78f53d0871e" , h 257 "13b859a80f7be290337b6068d65f8706efd855d5eb193178a15636b29728d696" , h 512 "60c5d80dd8300576bbab8ca8c8aae25bb4402bc0bae85ddb5f68b78f53d0871e" , h 519 "458c1a7847d44161bff4846acd78f6b44b489b517736f0ec5d4ad4b3b9a856d7" , h 1024 "f34efcd0bd9f6e3f1119d38420b0f066c147463ebab34ae8fd3902aae1f369df" , h 1029 "037147c77ee9e7b3b5bd4fd321749406e4e422cf26e206c7c0d9b2acec0b04a6" , h 2048 "6533648135aeb3d636285d92fd0c9aaac0b67905a01e5e2b89b8601e67869b8c" , h 2055 "f40a20f40caeffc575e63f5fc31b4beefeb83d7c3f09a7029e25996b92953dd0" ] where h :: Int -> B.ByteString -> TestTree h = fh BH.hash256 tt_check32 :: TestTree tt_check32 = testGroup "check32" [ h 0 "5df6e0e2" , h 1 "e368b5f8" , h 2 "4a9b8de6" , h 8 "7f3a9bc8" , h 16 "cdc6f516" , h 32 "10f11f8f" , h 33 "27bb0754" , h 64 "a8cac409" , h 128 "baaf81d3" , h 512 "60c5d80d" , h 257 "13b859a8" , h 512 "60c5d80d" , h 519 "458c1a78" , h 1024 "f34efcd0" , h 1029 "037147c7" , h 2048 "65336481" , h 2055 "f40a20f4" ] where h :: Int -> B.ByteString -> TestTree h = fh BH.check32 tt_hmacSHA512 :: TestTree tt_hmacSHA512 = testGroup "hmacSHA512" [ h 0 0 "b936cee86c9f87aa5d3c6f2e84cb5a4239a5fe50480a6ec66b70ab5b1f4ac6730c6c515421b327ec1d69402e53dfb49ad7381eb067b338fd7b0cb22247225d47" , h 0 1 "3e6bb8a8d21abae18f5646d5d87a57962121e0a9b3edccdf09864925df56d728a29e550142f48d210a7e38f8737aedbaecfa843dfc8b562876710618912a7a8a" , h 0 2 "87ac25bb3d233467ae449498712e80256a24117689c3178fce62b713bd3e5cfe65dcdbe2e79504c9780d8240ec24bf1cea427ef629359ad6aa150a7fb4b42243" , h 0 8 "c9e3c0b53a8e0fe887d26e53ef0f222bd18d253cfe1830f791ab185bb6a7b7237562c54bbf2c282ce7a08b7dfd90eca87364a66e48002ca4d0183af7fcfd8f7b" , h 0 16 "d6dfb859ae31641b08345990cc198400255a8eae50fec01d605188ceaba371755c8c77cd227f6b58e5d93057ad446d92de88035221a5ab14115a2840ddd8d219" , h 0 32 "87b354778869a66c0eb2f245ff79cb24f991aebf7f6378ff3f6414d4a70b26d214d9d3a6abaf821c06787564938745a4ed4a5b882ed14bff10388cdfc35842ab" , h 0 33 "99f23de02aeffc7f30d1b09bd42a3efa4c46dd84125f4b733da56cbaaea437e122f491ffe728491b3435a3f8ad70d1c262d5a8b5aad0d48758e789bae28debfa" , h 0 64 "d188d6c6eb9e5803a5c2e3d6145c22b2535b16d24bff3158a76ac4d06ed0f1a49494f2463063ef38c1cc3c841ae85ba8ef9dd30ddcdd0129455813709b155edf" , h 0 128 "687fd0bfe55617b0b58b2f932319cf5c1938612c13fe75499ac2b76f126a8ed06e3add557101a60d64a42d6166a0581907f3d9a881ec96dfc315cb30edb2d4d1" , h 0 512 "cdc9855f3aa1915f96f8724342794df73abd9d23d7677befc006299b50a7af7ed5e48b1ded7795cd7cdeb99fb1a62a0891a9ca22d42fa6c374125b8c73348cd9" , h 0 257 "b67d36bd251747fcf0b0765c307ee45fa2e0ecc615c0f857dc76b8d3a1991d5f57a2035c7b6134cc76af50db3e9f4f38fd16b4c86246ca6931b3a5655f36dcef" , h 0 512 "cdc9855f3aa1915f96f8724342794df73abd9d23d7677befc006299b50a7af7ed5e48b1ded7795cd7cdeb99fb1a62a0891a9ca22d42fa6c374125b8c73348cd9" , h 0 519 "c2dff40a5512833b01e4091e641c3d453e687f138b1ef520fe82f05851122617a6aae2948f92635139b8592ebad4f2cb9a38f34aaa6c8e102051cddbd86921bf" , h 0 1024 "e5baff56465a850aa6d8421e3980c92967c7d40a28e25555d0f65710ca3e6ed8bb19e8452508304d48a2c6849e619c5604cac109ebb3d53bb4833b26254b142e" , h 0 1029 "181a965c021c454eb2e93387903f743c0f6d8d45142c179529bfee13b5ccae71a41eb53c8c027e8f48e15ce3e25617660d68e07924af3a38592ff65d5a68b0f9" , h 0 2048 "34e5a9698b83334e50ce0c9909b09db6387e983be2a3542ac34424ef7a1a7c06ecb235eb02d8a0aaf85dcda8b590c991a2d603a951ed96470f0da3196fbdeef2" , h 0 2055 "d552ce5181075a22f63aa161ad9ce4583c66106fa81cf6a5954e2d03e34a5488d92fde43e06ca97d9db0acaa560a77e785610bf7950b6ea144bd79094d22f7f3" , h 9 0 "6f7f51d7f2d33020b808c3e2766fd4a529f21541a18a58629cc04276485e500624d1c46d9541a33c45a865b1797e66f50f49fd0492a74d30302c1e7b01d6e78b" , h 9 1 "3d673c1273b8c426cb4e48119161030ce7fadeaeaf2ce47fec8d3332b982094a349e7f175530597a4c37090c1bd97ae6b1a81224b72b56e7a7db4927b48c32ee" , h 9 2 "a3ec5f33bebd3abe8829f579902a183b4193a4b50476ebb9305179b6b606f30cfb60a90f5a0935e4bc0b9efe24ce9c1f07efc8fd9002d439284565b955cef675" , h 9 8 "a9ef661eb3497ccc3313cae92fb8eeb333023e783507d1d9540758b9fe06e066cacaf6a4ef4a10bb672ba729efc77d9e17050bccde9f6f44fa2c5bd6e4d4bbd4" , h 9 16 "2717db66432712373cc0e01a126823582d790012fb97224c1325f6325d94955161a0d1cef086e84997482544100e192c99d420ecf382d3e045066f6400d60f97" , h 9 32 "0b693970829e55517fabf65671dcfa22891b93db8416f816e7339ab648142d7769ff60b1519d09783b5c947f890e7ae47d44a8aa3d4e5b73ae63854e090ae1a2" , h 9 33 "f07e3deb713e1cb5ee4173a6f1de95f68e86d6be12fb9cf81aa0ee4f5cf1e9eb50a9070b6ae57b7dd4cf538f53fad19fe05d5c4bfa6ae5fba4b4b77115658002" , h 9 64 "5bda29660053e5dbfbff1ec36b9c0294de195cf7632a44fb9d5f0e49e00f1a80832285cfdfc6cab5487807ee87151bb10abff5e5fd1a40967d804b2c1b8353e0" , h 9 128 "5cc7d80c552b0a348c5a82e1b3e3e65b5895882e025e79a99ceb0ed7949fad3d44e8ac4dac7eb0dcf552825ca9aabc9378d6b403bbdeb2325bf7ec00a044e860" , h 9 512 "3781b3ffeba43195c3428a52572f4643e53d7e9375e4b9a9079d692acb05471cc0dae04a60a74ad3ddd7ceb7866644ff57a74ff5b57068f2cbd3f6bc9ca791d7" , h 9 257 "96b9f9371d5cafd2044aa7268605d3e04db8c9e3e72391c80f649bbb84879a29238682520708ed06053efbff74fbe5c8b81fcc7bc2b24b3867915cfea627fed7" , h 9 512 "3781b3ffeba43195c3428a52572f4643e53d7e9375e4b9a9079d692acb05471cc0dae04a60a74ad3ddd7ceb7866644ff57a74ff5b57068f2cbd3f6bc9ca791d7" , h 9 519 "160ace1bc82c82fae5b1b8215dde77618f901fef61b709aa15d5231ddd91eac3472a53be6442837fe49831c92a8c26bc7fe952386e5c3b52b280643f10b9bdc1" , h 9 1024 "3246fa08831a3aec3c2bacbc6c282f6004bc6dd3914862bdaad7eb0e64e704f6d7449c12b7c839f637830a866bacdc6fb91df725b887f18a5066175e12c3e085" , h 9 1029 "ff0feeceb96b59fdb8af4fd67c82e8c2131a09d921c272b24e24005d80bc88f731308081c3a45e4492f3c4ada0905994b55343dd1fd3d1c46d12225aef734ba9" , h 9 2048 "06c6eda47336e49d5b1e3c97a5fef99455489944516087b5f196fcb35410ce800a2b34b38a70dd2a8b9e8ef29822eadf37d9538d7541d976e5a099f2cf6aecc9" , h 9 2055 "c60a8d5f1e48dbc24b36fa4b3a5123c9cdd1a2722ebead76815c75e6fde08047bcb11023b573ff83ec4b2f48ff99b09a728b0494d875036cfce7fedfb29110b3" , h 128 0 "9dfb363b8d730179112f28091209f54ebf8a66e3da33735022a5b7494d5d3a86d12decc70a0098e2ef42e3f9f559031fd63135293a9e39e854a7c40e3e47bc00" , h 128 1 "df0986089c4a8a3f9d2b4a9302acc5cf340f65998c4d3ee307665e42c8a428b95f63fd1af56b589561284daef3845d407013ed5d43201ffa5f5be466191e4798" , h 128 2 "0c8e909c834da24e26dd943e2442bbead5310501288d0f17a4544d98ae9f7b8a45f232ed5dbd73696a093fca53ec3c6c6fb4bc903c259a19b1d20b51b7c108e7" , h 128 8 "79712905e4ee972ddcf87f01da98dd97a0c4888ae069c635fc21033159d32170ef81f43a67863ba6e955fc071f75e902312718e1ba7248694d69b82044cbc62b" , h 128 16 "f590da64d2e527443fef642fc122436346d5e8c94222241241c03a80b5b4b353f510bf451a1aa78a764e9f60dda0d8ce3f8950b46d55b3bc131aa9a34f6b6b47" , h 128 32 "aa80eccc3f9095af38b7cf5e918a791fa4140daa9d2e360c076c414a2e45a5965883d987678a8d640f2f96724df194e4333b50c35bf2939eca34fe16b936c4d3" , h 128 33 "d02c457f1e69c6d666a704ac9da3d6f66eaa12b0143e73b3aaadd8fc49cfabd12f2b157dbe778349898473611eb491ff194fd329fbe6ceef2b9f2b07e9c46b47" , h 128 64 "8485a89797fc2e6dc7ed081a546266460d9d5e0b4e5d7accc9ec37b5265380d69b9270175958c666a50d3ed26612e2be67760d0778ad5e1f2e8736c6b626b929" , h 128 128 "38e8988acceaaa6c55ab8530d67f2d3c78a2e025fa7181cef04e8571f0c6074a5c4b9c3eb492f2535fafad8cb9efc2ea72778a227988fb946f21a21807138974" , h 128 512 "8e7a4c1b37b4d4734839047da81981635b86f75d4fae4ddbb17828db95b3aed15cef6f5dcee607c6adcc4ae33c463b040020448a31cf4a4a5edc9eb6e862ced9" , h 128 257 "ec28dadc2d7268dae0eb10b95f223b69c17363a16c66f39aee82e5dab7add23c10078ea8cde9d6a7b9d783b2d5535abd1f327beb4efe36ef273952f7dfbe1b2e" , h 128 512 "8e7a4c1b37b4d4734839047da81981635b86f75d4fae4ddbb17828db95b3aed15cef6f5dcee607c6adcc4ae33c463b040020448a31cf4a4a5edc9eb6e862ced9" , h 128 519 "7b2ec73f5eaf45a924b71284372c80dd80d55af1790e8bbd927ea786b303f267cffe7bf2ebad5b946f9b5fd5db38d215212275eda37b55103134f05c2e3a9660" , h 128 1024 "583760f7e25f55eb70c726788e01ac7c3935801c8030a76ec537f5ed5713717f2bfbc8bd5681fd316e7ce6cc933b37309352c4ad954bf4288edc552a4f0e4b9e" , h 128 1029 "1afcf9bcb0ced816fd2349f5e2210fe82a2c229535faa72f80f72710a713adddaa569a9f12676f2a6f3b594d78629ce290c41a471bf7fcce802bda10cfacad09" , h 128 2048 "ea7802e4883bf132bfe9bcfea71dc0c062c0e5e3227e9c1d5f4c571b3ae57b7246eee27f15ee1e938f8eec4f01d3416d43859fee97051ac89781d92de682e38c" , h 128 2055 "dd40777cd3f188d92eff50b84bac51743d5c6c936cce818a75b2d3afa8333c662254b58285891f2aa52ac98c081eb72d40646acbbb1485e97961df9eba77eae6" , h 333 0 "5a0587467c13160baf251b07f8204c05effcf994511967de8fd25a2885ab4c12eba333bdfd6588b40d0d2d381e1fbde86dbb08ad366b8e9bb34881967a27c64d" , h 333 1 "a54e69dabe1925f8058d2f50fea6e1118b92a14313517b5428c144deed119086196ff7ecc183aaf6eb5033e6ed3eb2522d311bf193fe866a7078cbf8f2361813" , h 333 2 "8183755464f02e6033be551700482d173827e87e2e4be0aa6b0a08b7632c0a1eb75323e36a679cc0ca86a62e58b3613cc904d77ee5c35934e03400402706b9ac" , h 333 8 "991f92b8d05d1077be011d27a80c3113d0ffda137ee3056af67445f41395865760e91eebcb7e7ad5e3b81554e6133b0dd247f5700d2b5d2038d4bf4c3f04ffe5" , h 333 16 "a59d4fc369e70a3c108d5a325b6f803f2a396692a28aec11b6d1908ebf8d102387df769687e97d58d83587ace176323e5029b1e0861f8d582f7bdb38264c9c1a" , h 333 32 "ceeafbbf65152805680fdca1759899a56d0e9d9cd54b631d765c56547278d4e665ae200c3d08eb5e89bcacd989f17dbf27cbcb482c9a364351272eb2b5b2fb53" , h 333 33 "ec1e70824fca85e798dfb4b1ce804428db8d555b8c289d5b37c4c1c6a087bd34851c9148d2cd544311aca6f5a8374dc3193011f3265de7aeded06f526278a16d" , h 333 64 "3bc90c0f0ab7a911f49d2905d24b3fb37da23c2b3c3bdf9e930c77fa783e0293848a5e8784247548a9216e35d35991ad8ec4c007d27872df14b6091cb5b3d4fe" , h 333 128 "5975ce0895b6af8f8cc918ec75d070fc6363100e41cd08768ded0a8237b64081fa4f18120f2baacd3b458e22ee3ef03d9be707561830b0f4e72fce4f08e37959" , h 333 512 "ff2367fa11dc37194b1c4c8954dc48506d781081c5b0dd541391e3b85fb837c83b978f88ec600635eaa0453227b6d5b9ac19d0c12ae23339fdf49b1b68986707" , h 333 257 "768f5dc2eaf82f55796a2b6276c5c2dfbcc5d23fb88b1673ff6431bdd7cd8c95670d22467f785054e1c5b1490de0256f91e4f0da4cd6d2fe5be7eb9c37645bff" , h 333 512 "ff2367fa11dc37194b1c4c8954dc48506d781081c5b0dd541391e3b85fb837c83b978f88ec600635eaa0453227b6d5b9ac19d0c12ae23339fdf49b1b68986707" , h 333 519 "9c5b3a7c6c86df637ae741c4fdf87a3e6b9bc9d930ad89e50cfb7e314fe69bb67a76a84a9372e74eb330436d5fcb1f028a6e0b69f2336ab65dbbcfec7c9470c3" , h 333 1024 "03155b65dfd55c24d8583fbff21564db15372f99fe134872e09977657dc4d3a42921b596b0ea545ae8be6f75b40eefd22405ce49014c27e2b032dfaf545d111a" , h 333 1029 "dd18cc2e732b6ff27fb154dc92a8d4c73bb2184d1e4e71aa87a8412aa4ecafe8cf37014ad0186a08d0a10145e4d99da51361ec20b427c2169c9ddbd4d2f38737" , h 333 2048 "2a843042c773dbd4d4aee3bd5108f9e0077d71fc97c575309be804f3931886c955c60261165e9800cb8c1ce9ad6e2a37f316186c603d95253c5dc97f6f8a9d8d" , h 333 2055 "41061265f084c010340eea293f58e5ba331da17b84918fdb25ffd3c0a01ea8d7e403a4f45df43742a47d4bccb0311df4e05cd039756546ac33bf66b8e0017457" ] where h :: Int -> Int -> B.ByteString -> TestTree h klen dlen out = testCase ("key len " <> show klen <> ", msg len " <> show dlen) $ out @=? toBase16 (BH.hmacSHA512 (msg klen) (msg dlen)) -------------------------------------------------------------------------------- toBase16 :: B.ByteString -> B.ByteString toBase16 = BL.toStrict . BB.toLazyByteString . BB.byteStringHex