...
1 package dilithium
2
3 import (
4 "encoding/hex"
5 "testing"
6
7 "github.com/cloudflare/circl/internal/sha3"
8 )
9
10 func hexHash(in []byte) string {
11 var ret [16]byte
12 h := sha3.NewShake256()
13 _, _ = h.Write(in[:])
14 _, _ = h.Read(ret[:])
15 return hex.EncodeToString(ret[:])
16 }
17
18 func TestNewKeyFromSeed(t *testing.T) {
19
20 for _, tc := range []struct {
21 name string
22 esk string
23 epk string
24 }{
25 {
26 "Dilithium2", "afe2e91f5f5899354230744c18410498",
27 "7522162619f3329b5312322d3ee45b87",
28 },
29 {
30 "Dilithium3", "8ad3142e08b718b33f7c2668cd9d053c",
31 "3562fc184dce1a10aad099051705b5d3",
32 },
33 {
34 "Dilithium5", "3956d812a7961af6e5dad16af15c736c",
35 "665388291aa01e12e7f94bdc7769db18",
36 },
37 {
38 "Dilithium2-AES", "8466a752b0a09e63e42f66d3174a6471",
39 "c3f8e705a0d8dfd489b98b205670f393",
40 },
41 {
42 "Dilithium3-AES", "2bb713ba7cb15f3ebf05c4c1fbb1b03c",
43 "eb2bd8d98630835a3b18594ac436368b",
44 },
45 {
46 "Dilithium5-AES", "a613a08b564ee8717ba4f5ccfddc2693",
47 "2f541bf6fedd12854d06a6b80090932a",
48 },
49 } {
50 t.Run(tc.name, func(t *testing.T) {
51 mode := ModeByName(tc.name)
52 if mode == nil {
53 t.Fatal()
54 }
55 var seed [32]byte
56 pk, sk := mode.NewKeyFromSeed(seed[:])
57
58 pkh := hexHash(pk.Bytes())
59 skh := hexHash(sk.Bytes())
60 if pkh != tc.epk {
61 t.Fatalf("%s expected pk %s, got %s", tc.name, tc.epk, pkh)
62 }
63 if skh != tc.esk {
64 t.Fatalf("%s expected pk %s, got %s", tc.name, tc.esk, skh)
65 }
66 })
67 }
68 }
69
View as plain text