add chunking tests and fix a buf with partial buffer
This commit is contained in:
parent
7c03f3314b
commit
be7ffaac80
@ -119,6 +119,8 @@ void cryptonite_poly1305_update(poly1305_ctx *ctx, uint8_t *data, uint32_t lengt
|
|||||||
memcpy(ctx->buf + ctx->index, data, to_fill);
|
memcpy(ctx->buf + ctx->index, data, to_fill);
|
||||||
poly1305_do_chunk(ctx, ctx->buf, 1, 0);
|
poly1305_do_chunk(ctx, ctx->buf, 1, 0);
|
||||||
ctx->index = 0;
|
ctx->index = 0;
|
||||||
|
length -= to_fill;
|
||||||
|
data += to_fill;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* process as much 16-block as possible */
|
/* process as much 16-block as possible */
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
{-# LANGUAGE OverloadedStrings #-}
|
{-# LANGUAGE OverloadedStrings #-}
|
||||||
module Main where
|
module Main where
|
||||||
|
|
||||||
|
import Control.Applicative
|
||||||
import Data.Byteable
|
import Data.Byteable
|
||||||
import Data.ByteString (ByteString)
|
import Data.ByteString (ByteString)
|
||||||
import qualified Data.ByteString as B
|
import qualified Data.ByteString as B
|
||||||
@ -31,6 +32,12 @@ b20_256_k0_i0 =
|
|||||||
instance Show Poly1305.Auth where
|
instance Show Poly1305.Auth where
|
||||||
show = show . toBytes
|
show = show . toBytes
|
||||||
|
|
||||||
|
data Chunking = Chunking Int Int
|
||||||
|
deriving (Show,Eq)
|
||||||
|
|
||||||
|
instance Arbitrary Chunking where
|
||||||
|
arbitrary = Chunking <$> choose (1,34) <*> choose (1,2048)
|
||||||
|
|
||||||
tests = testGroup "cryptonite"
|
tests = testGroup "cryptonite"
|
||||||
[ testGroup "ChaCha"
|
[ testGroup "ChaCha"
|
||||||
[ testCase "8-128-K0-I0" (chachaRunSimple b8_128_k0_i0 8 16 8)
|
[ testCase "8-128-K0-I0" (chachaRunSimple b8_128_k0_i0 8 16 8)
|
||||||
@ -46,10 +53,18 @@ tests = testGroup "cryptonite"
|
|||||||
msg = "Cryptographic Forum Research Group"
|
msg = "Cryptographic Forum Research Group"
|
||||||
tag = Poly1305.Auth "\xa8\x06\x1d\xc1\x30\x51\x36\xc6\xc2\x2b\x8b\xaf\x0c\x01\x27\xa9"
|
tag = Poly1305.Auth "\xa8\x06\x1d\xc1\x30\x51\x36\xc6\xc2\x2b\x8b\xaf\x0c\x01\x27\xa9"
|
||||||
in tag @=? Poly1305.auth key msg
|
in tag @=? Poly1305.auth key msg
|
||||||
|
, testProperty "Chunking" $ \(Chunking chunkLen totalLen) ->
|
||||||
|
let key = B.replicate 32 0
|
||||||
|
msg = B.pack $ take totalLen $ concat (replicate 10 [1..255])
|
||||||
|
in Poly1305.auth key msg == Poly1305.finalize (foldr (flip Poly1305.update) (Poly1305.initialize key) (chunks chunkLen msg))
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
where chachaRunSimple expected rounds klen nonceLen =
|
where chachaRunSimple expected rounds klen nonceLen =
|
||||||
let chacha = ChaCha.initialize rounds (B.replicate klen 0) (B.replicate nonceLen 0)
|
let chacha = ChaCha.initialize rounds (B.replicate klen 0) (B.replicate nonceLen 0)
|
||||||
in expected @=? fst (ChaCha.generate chacha (B.length expected))
|
in expected @=? fst (ChaCha.generate chacha (B.length expected))
|
||||||
|
|
||||||
|
chunks i bs
|
||||||
|
| B.length bs < i = [bs]
|
||||||
|
| otherwise = let (b1,b2) = B.splitAt i bs in b1 : chunks i b2
|
||||||
|
|
||||||
main = defaultMain tests
|
main = defaultMain tests
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user