poly1305

The Poly1305 message authentication code (docs.ppad.tech/poly1305).
git clone git://git.ppad.tech/poly1305.git
Log | Files | Refs | README | LICENSE

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