From 963e22ea95fe61a591e37703c66c03d1b4b1e844 Mon Sep 17 00:00:00 2001 From: Roman Khimov Date: Fri, 23 Aug 2024 22:31:03 +0300 Subject: [PATCH] *: replace slice.Clean() with clear() Signed-off-by: Roman Khimov --- pkg/crypto/keys/nep2.go | 13 ++++++------- pkg/crypto/keys/private_key.go | 10 +++------- pkg/crypto/keys/wif.go | 3 +-- pkg/util/slice/array.go | 7 ------- pkg/util/slice/array_test.go | 8 -------- 5 files changed, 10 insertions(+), 31 deletions(-) diff --git a/pkg/crypto/keys/nep2.go b/pkg/crypto/keys/nep2.go index dd4ab206d..7c4bd088d 100644 --- a/pkg/crypto/keys/nep2.go +++ b/pkg/crypto/keys/nep2.go @@ -7,7 +7,6 @@ import ( "github.com/nspcc-dev/neo-go/pkg/crypto/hash" "github.com/nspcc-dev/neo-go/pkg/encoding/base58" - "github.com/nspcc-dev/neo-go/pkg/util/slice" "golang.org/x/crypto/scrypt" "golang.org/x/text/unicode/norm" ) @@ -53,15 +52,15 @@ func NEP2Encrypt(priv *PrivateKey, passphrase string, params ScryptParams) (s st if err != nil { return s, err } - defer slice.Clean(derivedKey) + defer clear(derivedKey) derivedKey1 := derivedKey[:32] derivedKey2 := derivedKey[32:] privBytes := priv.Bytes() - defer slice.Clean(privBytes) + defer clear(privBytes) xr := xor(privBytes, derivedKey1) - defer slice.Clean(xr) + defer clear(xr) encrypted, err := aesEncrypt(xr, derivedKey2) if err != nil { @@ -99,7 +98,7 @@ func NEP2Decrypt(key, passphrase string, params ScryptParams) (*PrivateKey, erro if err != nil { return nil, err } - defer slice.Clean(derivedKey) + defer clear(derivedKey) derivedKey1 := derivedKey[:32] derivedKey2 := derivedKey[32:] @@ -109,10 +108,10 @@ func NEP2Decrypt(key, passphrase string, params ScryptParams) (*PrivateKey, erro if err != nil { return nil, err } - defer slice.Clean(decrypted) + defer clear(decrypted) privBytes := xor(decrypted, derivedKey1) - defer slice.Clean(privBytes) + defer clear(privBytes) // Rebuild the private key. privKey, err := NewPrivateKeyFromBytes(privBytes) diff --git a/pkg/crypto/keys/private_key.go b/pkg/crypto/keys/private_key.go index 541c3c42e..e0d876655 100644 --- a/pkg/crypto/keys/private_key.go +++ b/pkg/crypto/keys/private_key.go @@ -13,7 +13,6 @@ import ( "github.com/decred/dcrd/dcrec/secp256k1/v4" "github.com/nspcc-dev/neo-go/pkg/crypto/hash" "github.com/nspcc-dev/neo-go/pkg/util" - "github.com/nspcc-dev/neo-go/pkg/util/slice" "github.com/nspcc-dev/rfc6979" ) @@ -49,7 +48,7 @@ func NewPrivateKeyFromHex(str string) (*PrivateKey, error) { if err != nil { return nil, err } - defer slice.Clean(b) + defer clear(b) return NewPrivateKeyFromBytes(b) } @@ -111,7 +110,7 @@ func NewPrivateKeyFromWIF(wif string) (*PrivateKey, error) { // https://en.bitcoin.it/wiki/Wallet_import_format func (p *PrivateKey) WIF() string { pb := p.Bytes() - defer slice.Clean(pb) + defer clear(pb) w, err := WIFEncode(pb, WIFVersion, true) // The only way WIFEncode() can fail is if we're to give it a key of // wrong size, but we have a proper key here, aren't we? @@ -124,10 +123,7 @@ func (p *PrivateKey) WIF() string { // Destroy wipes the contents of the private key from memory. Any operations // with the key after call to Destroy have undefined behavior. func (p *PrivateKey) Destroy() { - bits := p.D.Bits() - for i := range bits { - bits[i] = 0 - } + clear(p.D.Bits()) } // Address derives the public NEO address that is coupled with the private key, and diff --git a/pkg/crypto/keys/wif.go b/pkg/crypto/keys/wif.go index 1ec908cdd..f1fe96a91 100644 --- a/pkg/crypto/keys/wif.go +++ b/pkg/crypto/keys/wif.go @@ -5,7 +5,6 @@ import ( "fmt" "github.com/nspcc-dev/neo-go/pkg/encoding/base58" - "github.com/nspcc-dev/neo-go/pkg/util/slice" ) const ( @@ -54,7 +53,7 @@ func WIFDecode(wif string, version byte) (*WIF, error) { if err != nil { return nil, err } - defer slice.Clean(b) + defer clear(b) if version == 0x00 { version = WIFVersion diff --git a/pkg/util/slice/array.go b/pkg/util/slice/array.go index 9be387e45..3ade1a37f 100644 --- a/pkg/util/slice/array.go +++ b/pkg/util/slice/array.go @@ -21,10 +21,3 @@ func reverse(dst []byte, src []byte) { dst[i], dst[j] = src[j], src[i] } } - -// Clean wipes the data in b by filling it with zeros. -func Clean(b []byte) { - for i := range b { - b[i] = 0 - } -} diff --git a/pkg/util/slice/array_test.go b/pkg/util/slice/array_test.go index ae7ccd162..b6c23cba6 100644 --- a/pkg/util/slice/array_test.go +++ b/pkg/util/slice/array_test.go @@ -50,11 +50,3 @@ func TestCopyReverse(t *testing.T) { } } } - -func TestClean(t *testing.T) { - for _, tc := range testCases[1:] { // Empty one will be equal. - cp := bytes.Clone(tc.arr) - Clean(cp) - require.NotEqual(t, tc.arr, cp) - } -}