1 package xof_test
2
3 import (
4 "bytes"
5 "encoding/hex"
6 "io"
7 "testing"
8
9 "github.com/cloudflare/circl/internal/test"
10 "github.com/cloudflare/circl/xof"
11 )
12
13 type vector struct {
14 id xof.ID
15 in, out string
16 outLen int
17 }
18
19 var allVectors = []vector{
20 {
21 id: xof.SHAKE128,
22 in: "",
23 out: "7f9c2ba4e88f827d616045507605853ed73b8093f6efbc88eb1a6eacfa66ef26",
24 outLen: 32,
25 },
26 {
27 id: xof.SHAKE256,
28 in: "",
29 out: "46b9dd2b0ba88d13233b3feb743eeb243fcd52ea62b81b82b50c27646ed5762fd75dc4ddd8c0f200cb05019d67b592f6fc821c49479ab48640292eacb3b7c4be",
30 outLen: 64,
31 },
32 {
33 id: xof.SHAKE128,
34 in: "The quick brown fox jumps over the lazy dog",
35 out: "f4202e3c5852f9182a0430fd8144f0a74b95e7417ecae17db0f8cfeed0e3e66e",
36 outLen: 32,
37 },
38 {
39 id: xof.SHAKE128,
40 in: "The quick brown fox jumps over the lazy dof",
41 out: "853f4538be0db9621a6cea659a06c1107b1f83f02b13d18297bd39d7411cf10c",
42 outLen: 32,
43 },
44 {
45 id: xof.BLAKE2XB,
46 in: "The quick brown fox jumps over the lazy dog",
47 out: "364e84ca4c103df292306c93ebba6f6633d5e9cc8a95e040498e9a012d5ca534",
48 outLen: 32,
49 },
50 {
51 id: xof.BLAKE2XS,
52 in: "The quick brown fox jumps over the lazy dog",
53 out: "0650cde4df888a06eada0f0fecb3c17594304b4a03fdd678182f27db1238b174",
54 outLen: 32,
55 },
56 {
57 id: xof.K12D10,
58 in: "The quick brown fox jumps over the lazy dog",
59 out: "b4f249b4f77c58df170aa4d1723db1127d82f1d98d25ddda561ada459cd11a48",
60 outLen: 32,
61 },
62 }
63
64 func TestXof(t *testing.T) {
65 for i, v := range allVectors {
66 X := v.id.New()
67 _, err := X.Write([]byte(v.in))
68 test.CheckNoErr(t, err, "error on xof.Write")
69
70 got := make([]byte, v.outLen)
71 want, _ := hex.DecodeString(v.out)
72
73 for _, x := range []io.Reader{X, X.Clone()} {
74 n, err := x.Read(got)
75 test.CheckNoErr(t, err, "error on xof.Read")
76 if n != v.outLen || !bytes.Equal(got, want) {
77 test.ReportError(t, got, want, i, v.id)
78 }
79 }
80 }
81
82 err := test.CheckPanic(func() {
83 var nonID xof.ID
84 nonID.New()
85 })
86 test.CheckNoErr(t, err, "must panic")
87 }
88
View as plain text