2023-03-15 16:00:52 +00:00
|
|
|
// Copyright (c) HashiCorp, Inc.
|
|
|
|
// SPDX-License-Identifier: MPL-2.0
|
|
|
|
|
2015-07-05 21:01:21 +00:00
|
|
|
package kdf
|
|
|
|
|
|
|
|
import (
|
|
|
|
"bytes"
|
|
|
|
"testing"
|
|
|
|
)
|
|
|
|
|
|
|
|
func TestCounterMode(t *testing.T) {
|
|
|
|
key := []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16}
|
|
|
|
context := []byte("the quick brown fox")
|
|
|
|
prf := HMACSHA256PRF
|
|
|
|
prfLen := HMACSHA256PRFLen
|
|
|
|
|
|
|
|
// Expect256 was generated in python with
|
|
|
|
// import hashlib, hmac
|
|
|
|
// hash = hashlib.sha256
|
|
|
|
// context = "the quick brown fox"
|
|
|
|
// key = "".join([chr(x) for x in range(1, 17)])
|
|
|
|
// inp = "\x00\x00\x00\x00"+context+"\x00\x00\x01\x00"
|
|
|
|
// digest = hmac.HMAC(key, inp, hash).digest()
|
|
|
|
// print [ord(x) for x in digest]
|
2021-04-08 16:43:39 +00:00
|
|
|
expect256 := []byte{
|
|
|
|
219, 25, 238, 6, 185, 236, 180, 64, 248, 152, 251,
|
2015-07-05 21:01:21 +00:00
|
|
|
153, 79, 5, 141, 222, 66, 200, 66, 143, 40, 3, 101, 221, 206, 163, 102,
|
2021-04-08 16:43:39 +00:00
|
|
|
80, 88, 234, 87, 157,
|
|
|
|
}
|
2015-07-05 21:01:21 +00:00
|
|
|
|
|
|
|
for _, l := range []uint32{128, 256, 384, 1024} {
|
|
|
|
out, err := CounterMode(prf, prfLen, key, context, l)
|
|
|
|
if err != nil {
|
|
|
|
t.Fatalf("err: %v", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
if uint32(len(out)*8) != l {
|
|
|
|
t.Fatalf("bad length: %#v", out)
|
|
|
|
}
|
|
|
|
|
|
|
|
if bytes.Contains(out, key) {
|
|
|
|
t.Fatalf("output contains key")
|
|
|
|
}
|
|
|
|
|
|
|
|
if l == 256 && !bytes.Equal(out, expect256) {
|
|
|
|
t.Fatalf("mis-match")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestHMACSHA256PRF(t *testing.T) {
|
|
|
|
key := []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16}
|
|
|
|
data := []byte("foobarbaz")
|
|
|
|
out, err := HMACSHA256PRF(key, data)
|
|
|
|
if err != nil {
|
|
|
|
t.Fatalf("err: %v", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
if uint32(len(out)*8) != HMACSHA256PRFLen {
|
|
|
|
t.Fatalf("Bad len")
|
|
|
|
}
|
|
|
|
|
|
|
|
// Expect was generated in python with:
|
|
|
|
// import hashlib, hmac
|
|
|
|
// hash = hashlib.sha256
|
|
|
|
// msg = "foobarbaz"
|
|
|
|
// key = "".join([chr(x) for x in range(1, 17)])
|
|
|
|
// hm = hmac.HMAC(key, msg, hash)
|
|
|
|
// print [ord(x) for x in hm.digest()]
|
2021-04-08 16:43:39 +00:00
|
|
|
expect := []byte{
|
|
|
|
9, 50, 146, 8, 188, 130, 150, 107, 205, 147, 82, 170,
|
2015-07-05 21:01:21 +00:00
|
|
|
253, 183, 26, 38, 167, 194, 220, 111, 56, 118, 219, 209, 31, 52, 137,
|
2021-04-08 16:43:39 +00:00
|
|
|
90, 246, 133, 191, 124,
|
|
|
|
}
|
2015-07-05 21:01:21 +00:00
|
|
|
if !bytes.Equal(expect, out) {
|
|
|
|
t.Fatalf("mis-matched output")
|
|
|
|
}
|
|
|
|
}
|