Skip to content

Commit

Permalink
Add Benchmark tests for PRFs in Golang.
Browse files Browse the repository at this point in the history
BenchmarkComputePRF/HMAC_SHA256_PRF_16-8                  285105              3884 ns/op             528 B/op          5 allocs/op
BenchmarkComputePRF/HMAC_SHA256_PRF_16k-8                  19966             59463 ns/op             528 B/op          5 allocs/op
BenchmarkComputePRF/HMAC_SHA512_PRF_16-8                  256862              4397 ns/op             768 B/op          5 allocs/op
BenchmarkComputePRF/HMAC_SHA512_PRF_16k-8                  28039             42464 ns/op             768 B/op          5 allocs/op
BenchmarkComputePRF/HKDF_SHA256_16-8                      133785              8502 ns/op            1361 B/op         15 allocs/op
BenchmarkComputePRF/HKDF_SHA256_16k-8                      18424             65048 ns/op            1361 B/op         15 allocs/op
BenchmarkComputePRF/AES_CMAC_PRF_16-8                    3682260               323.0 ns/op            48 B/op          3 allocs/op
BenchmarkComputePRF/AES_CMAC_PRF_16k-8                     10000            114050 ns/op              48 B/op          3 allocs/op

PiperOrigin-RevId: 615416650
Change-Id: Ifbf696f49c94544f5e51a1edd86a0acf06fbf4ee
  • Loading branch information
juergw authored and copybara-github committed Mar 13, 2024
1 parent 1e84f6f commit efb4281
Show file tree
Hide file tree
Showing 2 changed files with 96 additions and 0 deletions.
1 change: 1 addition & 0 deletions prf/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ go_test(
"aes_cmac_prf_key_manager_test.go",
"hkdf_prf_key_manager_test.go",
"hmac_prf_key_manager_test.go",
"prf_benchmark_test.go",
"prf_key_templates_test.go",
"prf_set_factory_test.go",
"prf_test.go",
Expand Down
95 changes: 95 additions & 0 deletions prf/prf_benchmark_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
// Copyright 2024 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
// //////////////////////////////////////////////////////////////////////////////

package prf_test

import (
"testing"

"github.com/tink-crypto/tink-go/v2/keyset"
"github.com/tink-crypto/tink-go/v2/prf"
"github.com/tink-crypto/tink-go/v2/subtle/random"
tinkpb "github.com/tink-crypto/tink-go/v2/proto/tink_go_proto"
)

// Benchmarks for PRF algorithms.

func BenchmarkComputePRF(b *testing.B) {
const (
outputLength = 16
)
testCases := []struct {
name string
template *tinkpb.KeyTemplate
dataSize uint32
}{
{
name: "HMAC_SHA256_PRF_16",
template: prf.HMACSHA256PRFKeyTemplate(),
dataSize: 16,
}, {
name: "HMAC_SHA256_PRF_16k",
template: prf.HMACSHA256PRFKeyTemplate(),
dataSize: 16 * 1024,
}, {
name: "HMAC_SHA512_PRF_16",
template: prf.HMACSHA512PRFKeyTemplate(),
dataSize: 16,
}, {
name: "HMAC_SHA512_PRF_16k",
template: prf.HMACSHA512PRFKeyTemplate(),
dataSize: 16 * 1024,
}, {
name: "HKDF_SHA256_16",
template: prf.HKDFSHA256PRFKeyTemplate(),
dataSize: 16,
}, {
name: "HKDF_SHA256_16k",
template: prf.HKDFSHA256PRFKeyTemplate(),
dataSize: 16 * 1024,
}, {
name: "AES_CMAC_PRF_16",
template: prf.AESCMACPRFKeyTemplate(),
dataSize: 16,
}, {
name: "AES_CMAC_PRF_16k",
template: prf.AESCMACPRFKeyTemplate(),
dataSize: 16 * 1024,
},
}
for _, tc := range testCases {
b.Run(tc.name, func(b *testing.B) {
b.ReportAllocs()

handle, err := keyset.NewHandle(tc.template)
if err != nil {
b.Fatal(err)
}
primitive, err := prf.NewPRFSet(handle)
if err != nil {
b.Fatal(err)
}
data := random.GetRandomBytes(tc.dataSize)
b.ResetTimer()
for i := 0; i < b.N; i++ {
_, err := primitive.ComputePrimaryPRF(data, outputLength)
if err != nil {
b.Fatal(err)
}
}
})
}
}

0 comments on commit efb4281

Please sign in to comment.