From 405aae798c14dc9f46f1b315113c3f447e55c482 Mon Sep 17 00:00:00 2001 From: Herman Slatman Date: Thu, 30 Nov 2023 14:27:32 +0100 Subject: [PATCH] Simplify the `copy` logic used when patching JWS signature --- acme/api/middleware.go | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/acme/api/middleware.go b/acme/api/middleware.go index 257635f1..7bd6c0a9 100644 --- a/acme/api/middleware.go +++ b/acme/api/middleware.go @@ -493,8 +493,7 @@ func retryVerificationWithPatchedSignatures(jws *jose.JSONWebSignature, jwk *jos originalSignatureValues[i] = original patchedR := make([]byte, expectedSize) - copy(patchedR[0:1], []byte{0x00}) - copy(patchedR[1:], original[0:expectedSize-diff]) + copy(patchedR[1:], original) // [0x00, R.0:31, S.0:32], for expectedSize 64 sig.Signature = patchedR jws.Signatures[i] = sig @@ -507,9 +506,8 @@ func retryVerificationWithPatchedSignatures(jws *jose.JSONWebSignature, jwk *jos patchedS := make([]byte, expectedSize) halfSize := expectedSize / 2 - copy(patchedS[:halfSize], original[:halfSize]) - copy(patchedS[halfSize:expectedSize/2+1], []byte{0x00}) - copy(patchedS[halfSize+1:], original[halfSize:]) + copy(patchedS, original[:halfSize]) // [R.0:32], for expectedSize 64 + copy(patchedS[halfSize+1:], original[halfSize:]) // [R.0:32, 0x00, S.0:31] sig.Signature = patchedS jws.Signatures[i] = sig case 2: @@ -523,10 +521,8 @@ func retryVerificationWithPatchedSignatures(jws *jose.JSONWebSignature, jwk *jos patchedRS := make([]byte, expectedSize) halfSize := expectedSize / 2 - copy(patchedRS[0:1], []byte{0x00}) - copy(patchedRS[1:halfSize], original[0:halfSize-1]) - copy(patchedRS[halfSize:halfSize+1], []byte{0x00}) - copy(patchedRS[halfSize+1:], original[halfSize-1:expectedSize-2]) + copy(patchedRS[1:], original[:halfSize-1]) // [0x00, R.0:31], for expectedSize 64 + copy(patchedRS[halfSize+1:], original[halfSize-1:]) // [0x00, R.0:31, 0x00, S.0:31] sig.Signature = patchedRS jws.Signatures[i] = sig default: