github.com/MetalBlockchain/metalgo@v1.11.9/utils/crypto/bls/bls_benchmark_test.go (about) 1 // Copyright (C) 2019-2024, Ava Labs, Inc. All rights reserved. 2 // See the file LICENSE for licensing terms. 3 4 package bls 5 6 import ( 7 "strconv" 8 "testing" 9 10 "github.com/stretchr/testify/require" 11 12 "github.com/MetalBlockchain/metalgo/utils" 13 ) 14 15 var sizes = []int{ 16 2, 17 4, 18 8, 19 16, 20 32, 21 64, 22 128, 23 256, 24 512, 25 1024, 26 2048, 27 4096, 28 } 29 30 func BenchmarkSign(b *testing.B) { 31 privateKey, err := NewSecretKey() 32 require.NoError(b, err) 33 for _, messageSize := range sizes { 34 b.Run(strconv.Itoa(messageSize), func(b *testing.B) { 35 message := utils.RandomBytes(messageSize) 36 37 b.ResetTimer() 38 39 for n := 0; n < b.N; n++ { 40 _ = Sign(privateKey, message) 41 } 42 }) 43 } 44 } 45 46 func BenchmarkVerify(b *testing.B) { 47 privateKey, err := NewSecretKey() 48 require.NoError(b, err) 49 publicKey := PublicFromSecretKey(privateKey) 50 51 for _, messageSize := range sizes { 52 b.Run(strconv.Itoa(messageSize), func(b *testing.B) { 53 message := utils.RandomBytes(messageSize) 54 signature := Sign(privateKey, message) 55 56 b.ResetTimer() 57 58 for n := 0; n < b.N; n++ { 59 require.True(b, Verify(publicKey, signature, message)) 60 } 61 }) 62 } 63 } 64 65 func BenchmarkAggregatePublicKeys(b *testing.B) { 66 keys := make([]*PublicKey, 4096) 67 for i := range keys { 68 privateKey, err := NewSecretKey() 69 require.NoError(b, err) 70 71 keys[i] = PublicFromSecretKey(privateKey) 72 } 73 74 for _, size := range sizes { 75 b.Run(strconv.Itoa(size), func(b *testing.B) { 76 for n := 0; n < b.N; n++ { 77 _, err := AggregatePublicKeys(keys[:size]) 78 require.NoError(b, err) 79 } 80 }) 81 } 82 }