]> Cypherpunks repositories - gostls13.git/commitdiff
crypto/internal/boring: tolerate empty ECDSA signatures
authorFilippo Valsorda <filippo@golang.org>
Mon, 21 Nov 2022 22:24:58 +0000 (23:24 +0100)
committerGopher Robot <gobot@golang.org>
Tue, 22 Nov 2022 03:11:31 +0000 (03:11 +0000)
VerifyASN1 became directly reachable without encoding/decoding in
CL 353849, so it's now possible for the signature to be empty.

Change-Id: I37d6400945ab541120180bf73335e0ec93322947
Reviewed-on: https://go-review.googlesource.com/c/go/+/452635
Reviewed-by: Roland Shoemaker <roland@golang.org>
Reviewed-by: Bryan Mills <bcmills@google.com>
Auto-Submit: Filippo Valsorda <filippo@golang.org>
Run-TryBot: Filippo Valsorda <filippo@golang.org>
TryBot-Result: Gopher Robot <gobot@golang.org>

src/crypto/internal/boring/ecdsa.go

index 284e7e9b694693f989609cd5350902852f86a7c9..e15f3682c7c834dbee7e895e6ccb4666ed065c57 100644 (file)
@@ -11,7 +11,6 @@ import "C"
 import (
        "errors"
        "runtime"
-       "unsafe"
 )
 
 type ecdsaSignature struct {
@@ -124,7 +123,7 @@ func SignMarshalECDSA(priv *PrivateKeyECDSA, hash []byte) ([]byte, error) {
        size := C._goboringcrypto_ECDSA_size(priv.key)
        sig := make([]byte, size)
        var sigLen C.uint
-       if C._goboringcrypto_ECDSA_sign(0, base(hash), C.size_t(len(hash)), (*C.uint8_t)(unsafe.Pointer(&sig[0])), &sigLen, priv.key) == 0 {
+       if C._goboringcrypto_ECDSA_sign(0, base(hash), C.size_t(len(hash)), base(sig), &sigLen, priv.key) == 0 {
                return nil, fail("ECDSA_sign")
        }
        runtime.KeepAlive(priv)
@@ -132,7 +131,7 @@ func SignMarshalECDSA(priv *PrivateKeyECDSA, hash []byte) ([]byte, error) {
 }
 
 func VerifyECDSA(pub *PublicKeyECDSA, hash []byte, sig []byte) bool {
-       ok := C._goboringcrypto_ECDSA_verify(0, base(hash), C.size_t(len(hash)), (*C.uint8_t)(unsafe.Pointer(&sig[0])), C.size_t(len(sig)), pub.key) != 0
+       ok := C._goboringcrypto_ECDSA_verify(0, base(hash), C.size_t(len(hash)), base(sig), C.size_t(len(sig)), pub.key) != 0
        runtime.KeepAlive(pub)
        return ok
 }