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  }