From cb69354de3d3d2a4e9ba1afa481a3174039bbe96 Mon Sep 17 00:00:00 2001 From: Filippo Valsorda Date: Mon, 30 Sep 2024 17:08:12 +0200 Subject: [PATCH] crypto/internal/fips/subtle: provide XORBytes This is needed from inside the module, and we generally don't want to import the crypto tree from it. For #69536 Change-Id: I69e91e4df89ecac0016c671ccd28e733a7131533 Reviewed-on: https://go-review.googlesource.com/c/go/+/616716 Reviewed-by: Michael Pratt LUCI-TryBot-Result: Go LUCI Reviewed-by: Roland Shoemaker Auto-Submit: Filippo Valsorda Reviewed-by: Daniel McCarney --- src/crypto/internal/fips/subtle/xor.go | 21 +++++++++++++++++++ .../{ => internal/fips}/subtle/xor_amd64.go | 0 .../{ => internal/fips}/subtle/xor_amd64.s | 0 .../{ => internal/fips}/subtle/xor_arm64.go | 0 .../{ => internal/fips}/subtle/xor_arm64.s | 0 .../{ => internal/fips}/subtle/xor_generic.go | 0 .../{ => internal/fips}/subtle/xor_loong64.go | 0 .../{ => internal/fips}/subtle/xor_loong64.s | 0 .../{ => internal/fips}/subtle/xor_ppc64x.go | 0 .../{ => internal/fips}/subtle/xor_ppc64x.s | 0 .../{ => internal/fips}/subtle/xor_test.go | 2 +- src/crypto/subtle/xor.go | 12 +++-------- src/go/build/deps_test.go | 1 + 13 files changed, 26 insertions(+), 10 deletions(-) create mode 100644 src/crypto/internal/fips/subtle/xor.go rename src/crypto/{ => internal/fips}/subtle/xor_amd64.go (100%) rename src/crypto/{ => internal/fips}/subtle/xor_amd64.s (100%) rename src/crypto/{ => internal/fips}/subtle/xor_arm64.go (100%) rename src/crypto/{ => internal/fips}/subtle/xor_arm64.s (100%) rename src/crypto/{ => internal/fips}/subtle/xor_generic.go (100%) rename src/crypto/{ => internal/fips}/subtle/xor_loong64.go (100%) rename src/crypto/{ => internal/fips}/subtle/xor_loong64.s (100%) rename src/crypto/{ => internal/fips}/subtle/xor_ppc64x.go (100%) rename src/crypto/{ => internal/fips}/subtle/xor_ppc64x.s (100%) rename src/crypto/{ => internal/fips}/subtle/xor_test.go (98%) diff --git a/src/crypto/internal/fips/subtle/xor.go b/src/crypto/internal/fips/subtle/xor.go new file mode 100644 index 0000000000000..158dbcede9046 --- /dev/null +++ b/src/crypto/internal/fips/subtle/xor.go @@ -0,0 +1,21 @@ +// Copyright 2022 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package subtle + +// XORBytes sets dst[i] = x[i] ^ y[i] for all i < n = min(len(x), len(y)), +// returning n, the number of bytes written to dst. +// If dst does not have length at least n, +// XORBytes panics without writing anything to dst. +func XORBytes(dst, x, y []byte) int { + n := min(len(x), len(y)) + if n == 0 { + return 0 + } + if n > len(dst) { + panic("subtle.XORBytes: dst too short") + } + xorBytes(&dst[0], &x[0], &y[0], n) // arch-specific + return n +} diff --git a/src/crypto/subtle/xor_amd64.go b/src/crypto/internal/fips/subtle/xor_amd64.go similarity index 100% rename from src/crypto/subtle/xor_amd64.go rename to src/crypto/internal/fips/subtle/xor_amd64.go diff --git a/src/crypto/subtle/xor_amd64.s b/src/crypto/internal/fips/subtle/xor_amd64.s similarity index 100% rename from src/crypto/subtle/xor_amd64.s rename to src/crypto/internal/fips/subtle/xor_amd64.s diff --git a/src/crypto/subtle/xor_arm64.go b/src/crypto/internal/fips/subtle/xor_arm64.go similarity index 100% rename from src/crypto/subtle/xor_arm64.go rename to src/crypto/internal/fips/subtle/xor_arm64.go diff --git a/src/crypto/subtle/xor_arm64.s b/src/crypto/internal/fips/subtle/xor_arm64.s similarity index 100% rename from src/crypto/subtle/xor_arm64.s rename to src/crypto/internal/fips/subtle/xor_arm64.s diff --git a/src/crypto/subtle/xor_generic.go b/src/crypto/internal/fips/subtle/xor_generic.go similarity index 100% rename from src/crypto/subtle/xor_generic.go rename to src/crypto/internal/fips/subtle/xor_generic.go diff --git a/src/crypto/subtle/xor_loong64.go b/src/crypto/internal/fips/subtle/xor_loong64.go similarity index 100% rename from src/crypto/subtle/xor_loong64.go rename to src/crypto/internal/fips/subtle/xor_loong64.go diff --git a/src/crypto/subtle/xor_loong64.s b/src/crypto/internal/fips/subtle/xor_loong64.s similarity index 100% rename from src/crypto/subtle/xor_loong64.s rename to src/crypto/internal/fips/subtle/xor_loong64.s diff --git a/src/crypto/subtle/xor_ppc64x.go b/src/crypto/internal/fips/subtle/xor_ppc64x.go similarity index 100% rename from src/crypto/subtle/xor_ppc64x.go rename to src/crypto/internal/fips/subtle/xor_ppc64x.go diff --git a/src/crypto/subtle/xor_ppc64x.s b/src/crypto/internal/fips/subtle/xor_ppc64x.s similarity index 100% rename from src/crypto/subtle/xor_ppc64x.s rename to src/crypto/internal/fips/subtle/xor_ppc64x.s diff --git a/src/crypto/subtle/xor_test.go b/src/crypto/internal/fips/subtle/xor_test.go similarity index 98% rename from src/crypto/subtle/xor_test.go rename to src/crypto/internal/fips/subtle/xor_test.go index a348660c6369f..3f5ef980a323d 100644 --- a/src/crypto/subtle/xor_test.go +++ b/src/crypto/internal/fips/subtle/xor_test.go @@ -6,8 +6,8 @@ package subtle_test import ( "bytes" + . "crypto/internal/fips/subtle" "crypto/rand" - . "crypto/subtle" "fmt" "io" "testing" diff --git a/src/crypto/subtle/xor.go b/src/crypto/subtle/xor.go index 158dbcede9046..86cbd5cb54c18 100644 --- a/src/crypto/subtle/xor.go +++ b/src/crypto/subtle/xor.go @@ -4,18 +4,12 @@ package subtle +import "crypto/internal/fips/subtle" + // XORBytes sets dst[i] = x[i] ^ y[i] for all i < n = min(len(x), len(y)), // returning n, the number of bytes written to dst. // If dst does not have length at least n, // XORBytes panics without writing anything to dst. func XORBytes(dst, x, y []byte) int { - n := min(len(x), len(y)) - if n == 0 { - return 0 - } - if n > len(dst) { - panic("subtle.XORBytes: dst too short") - } - xorBytes(&dst[0], &x[0], &y[0], n) // arch-specific - return n + return subtle.XORBytes(dst, x, y) } diff --git a/src/go/build/deps_test.go b/src/go/build/deps_test.go index 98bcaccdc2a16..cc9d304bc6282 100644 --- a/src/go/build/deps_test.go +++ b/src/go/build/deps_test.go @@ -450,6 +450,7 @@ var depsRules = ` # backwards compatibility with older versions of the module. STR, crypto/internal/impl < crypto/internal/fips + < crypto/internal/fips/subtle < crypto/internal/fips/sha256 < crypto/internal/fips/sha512 < crypto/internal/fips/hmac