Skip to content

Commit a1448ea

Browse files
author
Volodymyr Paprotski
committed
Interm. BLD BREAK Pad short ECDSA signature
big.Int.Bytes() trims MSB zeroes, put them back in depending on EC Field length Change-Id: I87829c0babeafc49650f408355fa8212b49b62ff Signed-off-by: Volodymyr Paprotski <[email protected]>
1 parent 2d7d7a7 commit a1448ea

File tree

3 files changed

+17
-10
lines changed

3 files changed

+17
-10
lines changed

bccsp/pkcs11/ecdsa.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -111,5 +111,5 @@ func (csp *impl) verifyECDSA(k ecdsaPublicKey, signature, digest []byte, opts bc
111111
return false, fmt.Errorf("Invalid S. Must be smaller than half the order [%s][%s].", s, halfOrder)
112112
}
113113

114-
return verifyECDSA(k.ski, digest, r, s)
114+
return verifyECDSA(k.ski, digest, r, s, k.pub.Curve.Params().BitSize/8)
115115
}

bccsp/pkcs11/pkcs11.go

+9-2
Original file line numberDiff line numberDiff line change
@@ -328,7 +328,7 @@ func signECDSA(ski []byte, msg []byte) (R, S *big.Int, err error) {
328328
return R, S, nil
329329
}
330330

331-
func verifyECDSA(ski []byte, msg []byte, R, S *big.Int) (valid bool, err error) {
331+
func verifyECDSA(ski []byte, msg []byte, R, S *big.Int, byteSize int) (valid bool, err error) {
332332
p11lib := ctx
333333
session := getSession()
334334
defer returnSession(session)
@@ -340,7 +340,14 @@ func verifyECDSA(ski []byte, msg []byte, R, S *big.Int) (valid bool, err error)
340340
return false, fmt.Errorf("Public key not found [%s]\n", err)
341341
}
342342

343-
sig := append(R.Bytes(), S.Bytes()...)
343+
r := R.Bytes()
344+
s := S.Bytes()
345+
346+
// Pad front of R and S with Zeroes if needed
347+
sig := make([]byte, 2*byteSize)
348+
copy(sig[byteSize-len(r):byteSize], r)
349+
copy(sig[2*byteSize-len(s):], s)
350+
344351
err = p11lib.VerifyInit(session, []*pkcs11.Mechanism{pkcs11.NewMechanism(pkcs11.CKM_ECDSA, nil)},
345352
*publicKey)
346353
if err != nil {

bccsp/pkcs11/pkcs11_test.go

+7-7
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ func TestPKCS11ECKeySignVerify(t *testing.T) {
6363
t.Fatal("Failed signing message [%s]", err)
6464
}
6565

66-
pass, err := verifyECDSA(key, hash1, R, S)
66+
pass, err := verifyECDSA(key, hash1, R, S, currentTestConfig.securityLevel/8)
6767
if err != nil {
6868
t.Fatal("Error verifying message 1 [%s]", err)
6969
}
@@ -76,7 +76,7 @@ func TestPKCS11ECKeySignVerify(t *testing.T) {
7676
t.Fatal("Signature should match with software verification!")
7777
}
7878

79-
pass, err = verifyECDSA(key, hash2, R, S)
79+
pass, err = verifyECDSA(key, hash2, R, S, currentTestConfig.securityLevel/8)
8080
if err != nil {
8181
t.Fatal("Error verifying message 2 [%s]", err)
8282
}
@@ -129,7 +129,7 @@ func TestPKCS11ECKeyImportSignVerify(t *testing.T) {
129129
t.Fatal("Failed signing message [%s]", err)
130130
}
131131

132-
pass, err := verifyECDSA(ski, hash1, R, S)
132+
pass, err := verifyECDSA(ski, hash1, R, S, currentTestConfig.securityLevel/8)
133133
if err != nil {
134134
t.Fatalf("Error verifying message 1 [%s]\n%s\n\n%s", err, hex.Dump(R.Bytes()), hex.Dump(S.Bytes()))
135135
}
@@ -142,7 +142,7 @@ func TestPKCS11ECKeyImportSignVerify(t *testing.T) {
142142
t.Fatal("Signature should match with software verification!")
143143
}
144144

145-
pass, err = verifyECDSA(ski, hash2, R, S)
145+
pass, err = verifyECDSA(ski, hash2, R, S, currentTestConfig.securityLevel/8)
146146
if err != nil {
147147
t.Fatal("Error verifying message 2 [%s]", err)
148148
}
@@ -198,15 +198,15 @@ func TestPKCS11ECKeyExport(t *testing.T) {
198198
t.Fatalf("Failed signing message [%s]", err)
199199
}
200200

201-
pass, err := verifyECDSA(key2, hash1, R, S)
201+
pass, err := verifyECDSA(key2, hash1, R, S, currentTestConfig.securityLevel/8)
202202
if err != nil {
203203
t.Fatalf("Error verifying message 1 [%s]", err)
204204
}
205205
if pass == false {
206206
t.Fatal("Signature should match! [1]")
207207
}
208208

209-
pass, err = verifyECDSA(key, hash1, R, S)
209+
pass, err = verifyECDSA(key, hash1, R, S, currentTestConfig.securityLevel/8)
210210
if err != nil {
211211
t.Fatalf("Error verifying message 2 [%s]", err)
212212
}
@@ -219,7 +219,7 @@ func TestPKCS11ECKeyExport(t *testing.T) {
219219
t.Fatal("Signature should match with software verification!")
220220
}
221221

222-
pass, err = verifyECDSA(key, hash2, R, S)
222+
pass, err = verifyECDSA(key, hash2, R, S, currentTestConfig.securityLevel/8)
223223
if err != nil {
224224
t.Fatal("Error verifying message 3 [%s]", err)
225225
}

0 commit comments

Comments
 (0)