Skip to content

Commit

Permalink
crypto/internal/fips/subtle: provide XORBytes
Browse files Browse the repository at this point in the history
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 <[email protected]>
LUCI-TryBot-Result: Go LUCI <[email protected]>
Reviewed-by: Roland Shoemaker <[email protected]>
Auto-Submit: Filippo Valsorda <[email protected]>
Reviewed-by: Daniel McCarney <[email protected]>
  • Loading branch information
FiloSottile authored and gopherbot committed Oct 23, 2024
1 parent fdf6605 commit cb69354
Show file tree
Hide file tree
Showing 13 changed files with 26 additions and 10 deletions.
21 changes: 21 additions & 0 deletions src/crypto/internal/fips/subtle/xor.go
Original file line number Diff line number Diff line change
@@ -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
}
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ package subtle_test

import (
"bytes"
. "crypto/internal/fips/subtle"
"crypto/rand"
. "crypto/subtle"
"fmt"
"io"
"testing"
Expand Down
12 changes: 3 additions & 9 deletions src/crypto/subtle/xor.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}
1 change: 1 addition & 0 deletions src/go/build/deps_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit cb69354

Please sign in to comment.