From d9510d0c0ba2ef31145499f4d49ab1d10c03de94 Mon Sep 17 00:00:00 2001 From: Jakob Unterwurzacher Date: Tue, 7 Sep 2021 12:44:42 +0200 Subject: [PATCH] stupidgcm: NewChacha20poly1305: avoid slice append MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit I noticed that growslice() shows up in the cpuprofile. Avoiding slice append for the private jey copy gives a 0.6% speedup: gocryptfs/internal/speed$ benchstat old new name old time/op new time/op delta StupidXchacha-4 5.68µs ± 0% 5.65µs ± 0% -0.63% (p=0.008 n=5+5) name old speed new speed delta StupidXchacha-4 721MB/s ± 0% 725MB/s ± 0% +0.63% (p=0.008 n=5+5) --- internal/stupidgcm/chacha.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/internal/stupidgcm/chacha.go b/internal/stupidgcm/chacha.go index c90d721..30d57e3 100644 --- a/internal/stupidgcm/chacha.go +++ b/internal/stupidgcm/chacha.go @@ -39,9 +39,12 @@ func NewChacha20poly1305(key []byte) *stupidChacha20poly1305 { if len(key) != chacha20poly1305.KeySize { log.Panicf("Only %d-byte keys are supported, you passed %d bytes", chacha20poly1305.KeySize, len(key)) } + // private copy + key2 := make([]byte, chacha20poly1305.KeySize) + copy(key2, key) return &stupidChacha20poly1305{ stupidAEADCommon{ - key: append([]byte{}, key...), // private copy + key: key2, openSSLEVPCipher: _EVP_chacha20_poly1305, nonceSize: chacha20poly1305.NonceSize, },