Main.hs (7511B)
1 {-# OPTIONS_GHC -fno-warn-incomplete-uni-patterns #-} 2 {-# LANGUAGE BangPatterns #-} 3 {-# LANGUAGE OverloadedStrings #-} 4 {-# LANGUAGE ViewPatterns #-} 5 6 module Main where 7 8 import qualified Crypto.MAC.Poly1305 as Poly1305 9 import qualified Data.ByteString.Base16 as B16 10 import Test.Tasty 11 import qualified Test.Tasty.HUnit as H 12 13 main :: IO () 14 main = defaultMain $ testGroup "ppad-poly1305" [ 15 mac 16 , mac1 17 , mac2 18 , mac3 19 , mac4 20 , mac5 21 , mac6 22 , mac7 23 , mac8 24 , mac9 25 , mac10 26 , mac11 27 ] 28 29 mac :: TestTree 30 mac = H.testCase "mac" $ do 31 let Just key = B16.decode 32 "85d6be7857556d337f4452fe42d506a80103808afb0db2fd4abff6af4149f51b" 33 msg = "Cryptographic Forum Research Group" 34 35 Just e = B16.decode "a8061dc1305136c6c22b8baf0c0127a9" 36 37 o = Poly1305.mac key msg 38 H.assertEqual mempty e o 39 40 mac1 :: TestTree 41 mac1 = H.testCase "mac (A.3 #1)" $ do 42 let Just key = B16.decode 43 "0000000000000000000000000000000000000000000000000000000000000000" 44 Just msg = B16.decode 45 "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" 46 Just tag = B16.decode 47 "00000000000000000000000000000000" 48 out = Poly1305.mac key msg 49 H.assertEqual mempty tag out 50 51 mac2 :: TestTree 52 mac2 = H.testCase "mac (A.3 #2)" $ do 53 let Just key = B16.decode 54 "0000000000000000000000000000000036e5f6b5c5e06070f0efca96227a863e" 55 Just msg = B16.decode 56 "416e79207375626d697373696f6e20746f20746865204945544620696e74656e6465642062792074686520436f6e7472696275746f7220666f72207075626c69636174696f6e20617320616c6c206f722070617274206f6620616e204945544620496e7465726e65742d4472616674206f722052464320616e6420616e792073746174656d656e74206d6164652077697468696e2074686520636f6e74657874206f6620616e204945544620616374697669747920697320636f6e7369646572656420616e20224945544620436f6e747269627574696f6e222e20537563682073746174656d656e747320696e636c756465206f72616c2073746174656d656e747320696e20494554462073657373696f6e732c2061732077656c6c206173207772697474656e20616e6420656c656374726f6e696320636f6d6d756e69636174696f6e73206d61646520617420616e792074696d65206f7220706c6163652c207768696368206172652061646472657373656420746f" 57 Just tag = B16.decode 58 "36e5f6b5c5e06070f0efca96227a863e" 59 out = Poly1305.mac key msg 60 H.assertEqual mempty tag out 61 62 mac3 :: TestTree 63 mac3 = H.testCase "mac (A.3 #3)" $ do 64 let Just key = B16.decode 65 "36e5f6b5c5e06070f0efca96227a863e00000000000000000000000000000000" 66 Just msg = B16.decode 67 "416e79207375626d697373696f6e20746f20746865204945544620696e74656e6465642062792074686520436f6e7472696275746f7220666f72207075626c69636174696f6e20617320616c6c206f722070617274206f6620616e204945544620496e7465726e65742d4472616674206f722052464320616e6420616e792073746174656d656e74206d6164652077697468696e2074686520636f6e74657874206f6620616e204945544620616374697669747920697320636f6e7369646572656420616e20224945544620436f6e747269627574696f6e222e20537563682073746174656d656e747320696e636c756465206f72616c2073746174656d656e747320696e20494554462073657373696f6e732c2061732077656c6c206173207772697474656e20616e6420656c656374726f6e696320636f6d6d756e69636174696f6e73206d61646520617420616e792074696d65206f7220706c6163652c207768696368206172652061646472657373656420746f" 68 Just tag = B16.decode 69 "f3477e7cd95417af89a6b8794c310cf0" 70 out = Poly1305.mac key msg 71 H.assertEqual mempty tag out 72 73 mac4 :: TestTree 74 mac4 = H.testCase "mac (A.3 #4)" $ do 75 let Just key = B16.decode 76 "1c9240a5eb55d38af333888604f6b5f0473917c1402b80099dca5cbc207075c0" 77 Just msg = B16.decode 78 "2754776173206272696c6c69672c20616e642074686520736c6974687920746f7665730a446964206779726520616e642067696d626c6520696e2074686520776162653a0a416c6c206d696d737920776572652074686520626f726f676f7665732c0a416e6420746865206d6f6d65207261746873206f757467726162652e" 79 Just tag = B16.decode 80 "4541669a7eaaee61e708dc7cbcc5eb62" 81 out = Poly1305.mac key msg 82 H.assertEqual mempty tag out 83 84 mac5 :: TestTree 85 mac5 = H.testCase "mac (A.3 #5)" $ do 86 let Just (Poly1305._roll -> r) = B16.decode $ 87 "02000000000000000000000000000000" 88 Just (Poly1305._roll -> s) = B16.decode $ 89 "00000000000000000000000000000000" 90 Just msg = B16.decode 91 "ffffffffffffffffffffffffffffffff" 92 Just tag = B16.decode 93 "03000000000000000000000000000000" 94 out = Poly1305._poly1305_loop r s msg 95 H.assertEqual mempty tag out 96 97 mac6 :: TestTree 98 mac6 = H.testCase "mac (A.3 #6)" $ do 99 let Just (Poly1305._roll -> r) = B16.decode $ 100 "02000000000000000000000000000000" 101 Just (Poly1305._roll -> s) = B16.decode $ 102 "ffffffffffffffffffffffffffffffff" 103 Just msg = B16.decode 104 "02000000000000000000000000000000" 105 Just tag = B16.decode 106 "03000000000000000000000000000000" 107 out = Poly1305._poly1305_loop r s msg 108 H.assertEqual mempty tag out 109 110 mac7 :: TestTree 111 mac7 = H.testCase "mac (A.3 #7)" $ do 112 let Just (Poly1305._roll -> r) = B16.decode $ 113 "01000000000000000000000000000000" 114 Just (Poly1305._roll -> s) = B16.decode $ 115 "00000000000000000000000000000000" 116 Just msg = B16.decode 117 "fffffffffffffffffffffffffffffffff0ffffffffffffffffffffffffffffff11000000000000000000000000000000" 118 Just tag = B16.decode 119 "05000000000000000000000000000000" 120 out = Poly1305._poly1305_loop r s msg 121 H.assertEqual mempty tag out 122 123 mac8 :: TestTree 124 mac8 = H.testCase "mac (A.3 #8)" $ do 125 let Just (Poly1305._roll -> r) = B16.decode $ 126 "01000000000000000000000000000000" 127 Just (Poly1305._roll -> s) = B16.decode $ 128 "00000000000000000000000000000000" 129 Just msg = B16.decode 130 "fffffffffffffffffffffffffffffffffbfefefefefefefefefefefefefefefe01010101010101010101010101010101" 131 Just tag = B16.decode 132 "00000000000000000000000000000000" 133 out = Poly1305._poly1305_loop r s msg 134 H.assertEqual mempty tag out 135 136 mac9 :: TestTree 137 mac9 = H.testCase "mac (A.3 #9)" $ do 138 let Just (Poly1305._roll -> r) = B16.decode $ 139 "02000000000000000000000000000000" 140 Just (Poly1305._roll -> s) = B16.decode $ 141 "00000000000000000000000000000000" 142 Just msg = B16.decode 143 "fdffffffffffffffffffffffffffffff" 144 Just tag = B16.decode 145 "faffffffffffffffffffffffffffffff" 146 out = Poly1305._poly1305_loop r s msg 147 H.assertEqual mempty tag out 148 149 mac10 :: TestTree 150 mac10 = H.testCase "mac (A.3 #10)" $ do 151 let Just (Poly1305._roll -> r) = B16.decode $ 152 "01000000000000000400000000000000" 153 Just (Poly1305._roll -> s) = B16.decode $ 154 "00000000000000000000000000000000" 155 Just msg = B16.decode 156 "e33594d7505e43b900000000000000003394d7505e4379cd01000000000000000000000000000000000000000000000001000000000000000000000000000000" 157 Just tag = B16.decode 158 "14000000000000005500000000000000" 159 out = Poly1305._poly1305_loop r s msg 160 H.assertEqual mempty tag out 161 162 mac11 :: TestTree 163 mac11 = H.testCase "mac (A.3 #11)" $ do 164 let Just (Poly1305._roll -> r) = B16.decode $ 165 "01000000000000000400000000000000" 166 Just (Poly1305._roll -> s) = B16.decode $ 167 "00000000000000000000000000000000" 168 Just msg = B16.decode 169 "e33594d7505e43b900000000000000003394d7505e4379cd010000000000000000000000000000000000000000000000" 170 Just tag = B16.decode 171 "13000000000000000000000000000000" 172 out = Poly1305._poly1305_loop r s msg 173 H.assertEqual mempty tag out 174