kdf: add benchmark test

This commit is contained in:
Sun Yimin 2023-09-21 13:48:51 +08:00 committed by GitHub
parent edcba25490
commit f2199843b1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 39 additions and 9 deletions

View File

@ -15,14 +15,14 @@ func Kdf(md hash.Hash, z []byte, len int) []byte {
} }
var countBytes [4]byte var countBytes [4]byte
var ct uint32 = 1 var ct uint32 = 1
k := make([]byte, len) var k []byte
for i := 0; i < int(limit); i++ { for i := 0; i < int(limit); i++ {
binary.BigEndian.PutUint32(countBytes[:], ct) binary.BigEndian.PutUint32(countBytes[:], ct)
md.Write(z) md.Write(z)
md.Write(countBytes[:]) md.Write(countBytes[:])
copy(k[i*md.Size():], md.Sum(nil)) k = md.Sum(k)
ct++ ct++
md.Reset() md.Reset()
} }
return k return k[:len]
} }

View File

@ -2,6 +2,7 @@ package kdf
import ( import (
"encoding/hex" "encoding/hex"
"fmt"
"hash" "hash"
"math/big" "math/big"
"reflect" "reflect"
@ -19,16 +20,19 @@ func TestKdf(t *testing.T) {
tests := []struct { tests := []struct {
name string name string
args args args args
want []byte want string
}{ }{
{"sm3 case 1", args{sm3.New(), []byte("emmansun"), 16}, []byte{112, 137, 147, 239, 19, 136, 160, 174, 66, 69, 161, 155, 182, 192, 37, 84}}, {"sm3 case 1", args{sm3.New(), []byte("emmansun"), 16}, "708993ef1388a0ae4245a19bb6c02554"},
{"sm3 case 2", args{sm3.New(), []byte("emmansun"), 32}, []byte{112, 137, 147, 239, 19, 136, 160, 174, 66, 69, 161, 155, 182, 192, 37, 84, 198, 50, 99, 62, 53, 109, 219, 152, 155, 235, 128, 79, 218, 150, 207, 212}}, {"sm3 case 2", args{sm3.New(), []byte("emmansun"), 32}, "708993ef1388a0ae4245a19bb6c02554c632633e356ddb989beb804fda96cfd4"},
{"sm3 case 3", args{sm3.New(), []byte("emmansun"), 48}, []byte{112, 137, 147, 239, 19, 136, 160, 174, 66, 69, 161, 155, 182, 192, 37, 84, 198, 50, 99, 62, 53, 109, 219, 152, 155, 235, 128, 79, 218, 150, 207, 212, 126, 186, 79, 164, 96, 231, 178, 119, 188, 107, 76, 228, 208, 126, 212, 147}}, {"sm3 case 3", args{sm3.New(), []byte("emmansun"), 48}, "708993ef1388a0ae4245a19bb6c02554c632633e356ddb989beb804fda96cfd47eba4fa460e7b277bc6b4ce4d07ed493"},
{"sm3 case 4", args{sm3.New(), []byte("708993ef1388a0ae4245a19bb6c02554c632633e356ddb989beb804fda96cfd47eba4fa460e7b277bc6b4ce4d07ed493708993ef1388a0ae4245a19bb6c02554c632633e356ddb989beb804fda96cfd47eba4fa460e7b277bc6b4ce4d07ed493"), 48}, "49cf14649f324a07e0d5bb2a00f7f05d5f5bdd6d14dff028e071327ec031104590eddb18f98b763e18bf382ff7c3875f"},
{"sm3 case 5", args{sm3.New(), []byte("708993ef1388a0ae4245a19bb6c02554c632633e356ddb989beb804fda96cfd47eba4fa460e7b277bc6b4ce4d07ed493708993ef1388a0ae4245a19bb6c02554c632633e356ddb989beb804fda96cfd47eba4fa460e7b277bc6b4ce4d07ed493"), 128}, "49cf14649f324a07e0d5bb2a00f7f05d5f5bdd6d14dff028e071327ec031104590eddb18f98b763e18bf382ff7c3875f30277f3179baebd795e7853fa643fdf280d8d7b81a2ab7829f615e132ab376d32194cd315908d27090e1180ce442d9be99322523db5bfac40ac5acb03550f5c93e5b01b1d71f2630868909a6a1250edb"},
} }
for _, tt := range tests { for _, tt := range tests {
wantBytes, _ := hex.DecodeString(tt.want)
t.Run(tt.name, func(t *testing.T) { t.Run(tt.name, func(t *testing.T) {
if got := Kdf(tt.args.md, tt.args.z, tt.args.len); !reflect.DeepEqual(got, tt.want) { if got := Kdf(tt.args.md, tt.args.z, tt.args.len); !reflect.DeepEqual(got, wantBytes) {
t.Errorf("Kdf() = %v, want %v", got, tt.want) t.Errorf("Kdf(%v) = %x, want %v", tt.name, got, tt.want)
} }
}) })
} }
@ -62,3 +66,29 @@ func TestKdfPanic(t *testing.T) {
Kdf(sm3.New(), []byte("123456"), 1<<37) Kdf(sm3.New(), []byte("123456"), 1<<37)
}) })
} }
func BenchmarkKdf(b *testing.B) {
tests := []struct {
zLen int
kLen int
}{
{32, 32},
{32, 64},
{32, 128},
{64, 32},
{64, 64},
{64, 128},
{440, 32},
}
sm3Hash := sm3.New()
z := make([]byte, 512)
for _, tt := range tests {
b.Run(fmt.Sprintf("zLen=%v-kLen=%v", tt.zLen, tt.kLen), func(b *testing.B) {
b.ReportAllocs()
b.ResetTimer()
for i := 0; i < b.N; i++ {
Kdf(sm3Hash, z[:tt.zLen], tt.kLen)
}
})
}
}