mirror of
https://github.com/golang/go
synced 2024-11-25 09:57:57 -07:00
crypto/hmac: add HMAC-SHA256
R=agl1, rsc CC=golang-dev https://golang.org/cl/3730041
This commit is contained in:
parent
5bd4094d2e
commit
a890d70cc1
@ -11,6 +11,7 @@ package hmac
|
|||||||
import (
|
import (
|
||||||
"crypto/md5"
|
"crypto/md5"
|
||||||
"crypto/sha1"
|
"crypto/sha1"
|
||||||
|
"crypto/sha256"
|
||||||
"hash"
|
"hash"
|
||||||
"os"
|
"os"
|
||||||
)
|
)
|
||||||
@ -94,3 +95,6 @@ func NewMD5(key []byte) hash.Hash { return New(md5.New, key) }
|
|||||||
|
|
||||||
// NewSHA1 returns a new HMAC-SHA1 hash using the given key.
|
// NewSHA1 returns a new HMAC-SHA1 hash using the given key.
|
||||||
func NewSHA1(key []byte) hash.Hash { return New(sha1.New, key) }
|
func NewSHA1(key []byte) hash.Hash { return New(sha1.New, key) }
|
||||||
|
|
||||||
|
// NewSHA256 returns a new HMAC-SHA256 hash using the given key.
|
||||||
|
func NewSHA256(key []byte) hash.Hash { return New(sha256.New, key) }
|
||||||
|
@ -17,9 +17,9 @@ type hmacTest struct {
|
|||||||
out string
|
out string
|
||||||
}
|
}
|
||||||
|
|
||||||
// Tests from US FIPS 198
|
|
||||||
// http://csrc.nist.gov/publications/fips/fips198/fips-198a.pdf
|
|
||||||
var hmacTests = []hmacTest{
|
var hmacTests = []hmacTest{
|
||||||
|
// Tests from US FIPS 198
|
||||||
|
// http://csrc.nist.gov/publications/fips/fips198/fips-198a.pdf
|
||||||
{
|
{
|
||||||
NewSHA1,
|
NewSHA1,
|
||||||
[]byte{
|
[]byte{
|
||||||
@ -73,6 +73,111 @@ var hmacTests = []hmacTest{
|
|||||||
[]byte("what do ya want for nothing?"),
|
[]byte("what do ya want for nothing?"),
|
||||||
"750c783e6ab0b503eaa86e310a5db738",
|
"750c783e6ab0b503eaa86e310a5db738",
|
||||||
},
|
},
|
||||||
|
|
||||||
|
// Tests from RFC 4231
|
||||||
|
{
|
||||||
|
NewSHA256,
|
||||||
|
[]byte{
|
||||||
|
0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
|
||||||
|
0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
|
||||||
|
0x0b, 0x0b, 0x0b, 0x0b,
|
||||||
|
},
|
||||||
|
[]byte("Hi There"),
|
||||||
|
"b0344c61d8db38535ca8afceaf0bf12b881dc200c9833da726e9376c2e32cff7",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
NewSHA256,
|
||||||
|
[]byte("Jefe"),
|
||||||
|
[]byte("what do ya want for nothing?"),
|
||||||
|
"5bdcc146bf60754e6a042426089575c75a003f089d2739839dec58b964ec3843",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
NewSHA256,
|
||||||
|
[]byte{
|
||||||
|
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
|
||||||
|
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
|
||||||
|
0xaa, 0xaa, 0xaa, 0xaa,
|
||||||
|
},
|
||||||
|
[]byte{
|
||||||
|
0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
|
||||||
|
0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
|
||||||
|
0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
|
||||||
|
0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
|
||||||
|
0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
|
||||||
|
0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
|
||||||
|
0xdd, 0xdd,
|
||||||
|
},
|
||||||
|
"773ea91e36800e46854db8ebd09181a72959098b3ef8c122d9635514ced565fe",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
NewSHA256,
|
||||||
|
[]byte{
|
||||||
|
0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
|
||||||
|
0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10,
|
||||||
|
0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18,
|
||||||
|
0x19,
|
||||||
|
},
|
||||||
|
[]byte{
|
||||||
|
0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
|
||||||
|
0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
|
||||||
|
0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
|
||||||
|
0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
|
||||||
|
0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
|
||||||
|
0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
|
||||||
|
0xcd, 0xcd,
|
||||||
|
},
|
||||||
|
"82558a389a443c0ea4cc819899f2083a85f0faa3e578f8077a2e3ff46729665b",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
NewSHA256,
|
||||||
|
[]byte{
|
||||||
|
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
|
||||||
|
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
|
||||||
|
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
|
||||||
|
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
|
||||||
|
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
|
||||||
|
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
|
||||||
|
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
|
||||||
|
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
|
||||||
|
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
|
||||||
|
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
|
||||||
|
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
|
||||||
|
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
|
||||||
|
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
|
||||||
|
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
|
||||||
|
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
|
||||||
|
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
|
||||||
|
0xaa, 0xaa, 0xaa,
|
||||||
|
},
|
||||||
|
[]byte("Test Using Larger Than Block-Size Key - Hash Key First"),
|
||||||
|
"60e431591ee0b67f0d8a26aacbf5b77f8e0bc6213728c5140546040f0ee37f54",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
NewSHA256,
|
||||||
|
[]byte{
|
||||||
|
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
|
||||||
|
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
|
||||||
|
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
|
||||||
|
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
|
||||||
|
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
|
||||||
|
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
|
||||||
|
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
|
||||||
|
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
|
||||||
|
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
|
||||||
|
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
|
||||||
|
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
|
||||||
|
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
|
||||||
|
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
|
||||||
|
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
|
||||||
|
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
|
||||||
|
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
|
||||||
|
0xaa, 0xaa, 0xaa,
|
||||||
|
},
|
||||||
|
[]byte("This is a test using a larger than block-size key " +
|
||||||
|
"and a larger than block-size data. The key needs to " +
|
||||||
|
"be hashed before being used by the HMAC algorithm."),
|
||||||
|
"9b09ffa71b942fcb27635fbcd5b0e944bfdc63644f0713938a7f51535c3a35e2",
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestHMAC(t *testing.T) {
|
func TestHMAC(t *testing.T) {
|
||||||
|
Loading…
Reference in New Issue
Block a user