1
// Copyright 2012 The Go Authors. All rights reserved.
2
// Use of this source code is governed by a BSD-style
3
// license that can be found in the LICENSE file.
15
type testVector struct {
22
// Test vectors from RFC 6070, http://tools.ietf.org/html/rfc6070
23
var sha1TestVectors = []testVector{
29
0x0c, 0x60, 0xc8, 0x0f, 0x96, 0x1f, 0x0e, 0x71,
30
0xf3, 0xa9, 0xb5, 0x24, 0xaf, 0x60, 0x12, 0x06,
31
0x2f, 0xe0, 0x37, 0xa6,
39
0xea, 0x6c, 0x01, 0x4d, 0xc7, 0x2d, 0x6f, 0x8c,
40
0xcd, 0x1e, 0xd9, 0x2a, 0xce, 0x1d, 0x41, 0xf0,
41
0xd8, 0xde, 0x89, 0x57,
49
0x4b, 0x00, 0x79, 0x01, 0xb7, 0x65, 0x48, 0x9a,
50
0xbe, 0xad, 0x49, 0xd9, 0x26, 0xf7, 0x21, 0xd0,
51
0x65, 0xa4, 0x29, 0xc1,
54
// // This one takes too long
60
// 0xee, 0xfe, 0x3d, 0x61, 0xcd, 0x4d, 0xa4, 0xe4,
61
// 0xe9, 0x94, 0x5b, 0x3d, 0x6b, 0xa2, 0x15, 0x8c,
62
// 0x26, 0x34, 0xe9, 0x84,
66
"passwordPASSWORDpassword",
67
"saltSALTsaltSALTsaltSALTsaltSALTsalt",
70
0x3d, 0x2e, 0xec, 0x4f, 0xe4, 0x1c, 0x84, 0x9b,
71
0x80, 0xc8, 0xd8, 0x36, 0x62, 0xc0, 0xe4, 0x4a,
72
0x8b, 0x29, 0x1a, 0x96, 0x4c, 0xf2, 0xf0, 0x70,
81
0x56, 0xfa, 0x6a, 0xa7, 0x55, 0x48, 0x09, 0x9d,
82
0xcc, 0x37, 0xd7, 0xf0, 0x34, 0x25, 0xe0, 0xc3,
88
// http://stackoverflow.com/questions/5130513/pbkdf2-hmac-sha2-test-vectors
89
var sha256TestVectors = []testVector{
95
0x12, 0x0f, 0xb6, 0xcf, 0xfc, 0xf8, 0xb3, 0x2c,
96
0x43, 0xe7, 0x22, 0x52, 0x56, 0xc4, 0xf8, 0x37,
97
0xa8, 0x65, 0x48, 0xc9,
105
0xae, 0x4d, 0x0c, 0x95, 0xaf, 0x6b, 0x46, 0xd3,
106
0x2d, 0x0a, 0xdf, 0xf9, 0x28, 0xf0, 0x6d, 0xd0,
107
0x2a, 0x30, 0x3f, 0x8e,
115
0xc5, 0xe4, 0x78, 0xd5, 0x92, 0x88, 0xc8, 0x41,
116
0xaa, 0x53, 0x0d, 0xb6, 0x84, 0x5c, 0x4c, 0x8d,
117
0x96, 0x28, 0x93, 0xa0,
121
"passwordPASSWORDpassword",
122
"saltSALTsaltSALTsaltSALTsaltSALTsalt",
125
0x34, 0x8c, 0x89, 0xdb, 0xcb, 0xd3, 0x2b, 0x2f,
126
0x32, 0xd8, 0x14, 0xb8, 0x11, 0x6e, 0x84, 0xcf,
127
0x2b, 0x17, 0x34, 0x7e, 0xbc, 0x18, 0x00, 0x18,
136
0x89, 0xb6, 0x9d, 0x05, 0x16, 0xf8, 0x29, 0x89,
137
0x3c, 0x69, 0x62, 0x26, 0x65, 0x0a, 0x86, 0x87,
142
func testHash(t *testing.T, h func() hash.Hash, hashName string, vectors []testVector) {
143
for i, v := range vectors {
144
o := Key([]byte(v.password), []byte(v.salt), v.iter, len(v.output), h)
145
if !bytes.Equal(o, v.output) {
146
t.Errorf("%s %d: expected %x, got %x", hashName, i, v.output, o)
151
func TestWithHMACSHA1(t *testing.T) {
152
testHash(t, sha1.New, "SHA1", sha1TestVectors)
155
func TestWithHMACSHA256(t *testing.T) {
156
testHash(t, sha256.New, "SHA256", sha256TestVectors)