Skip to content

Commit bda16e3

Browse files
committed
Improve certificate serial handling in CAPI KMS.
1 parent 91935ad commit bda16e3

File tree

1 file changed

+5
-6
lines changed

1 file changed

+5
-6
lines changed

kms/capi/capi.go

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -413,24 +413,23 @@ func (k *CAPIKMS) getCertContext(req *apiv1.LoadCertificateRequest) (*windows.Ce
413413
// TODO: Replace this search with a CERT_ID + CERT_ISSUER_SERIAL_NUMBER search instead
414414
// https://learn.microsoft.com/en-us/windows/win32/api/wincrypt/ns-wincrypt-cert_id
415415
// https://learn.microsoft.com/en-us/windows/win32/api/wincrypt/ns-wincrypt-cert_issuer_serial_number
416-
var serialBytes []byte
416+
var bi *big.Int
417417
if strings.HasPrefix(serialNumber, "0x") {
418-
serialNumber = strings.TrimPrefix(serialNumber, "0x")
419-
serialNumber = strings.TrimPrefix(serialNumber, "00") // Comparison fails if leading 00 is not removed
420-
serialBytes, err = hex.DecodeString(serialNumber)
418+
serialBytes, err := hex.DecodeString(strings.TrimPrefix(serialNumber, "0x"))
421419
if err != nil {
422420
return nil, fmt.Errorf("invalid hex format for %s: %w", SerialNumberArg, err)
423421
}
422+
423+
bi = new(big.Int).SetBytes(serialBytes)
424424
} else {
425425
bi := new(big.Int)
426426
bi, ok := bi.SetString(serialNumber, 10)
427427
if !ok {
428428
return nil, fmt.Errorf("invalid %s - must be in hex or integer format", SerialNumberArg)
429429
}
430-
serialBytes = bi.Bytes()
431430
}
432431

433-
if bytes.Equal(x509Cert.SerialNumber.Bytes(), serialBytes) {
432+
if x509Cert.SerialNumber.Cmp(bi) == 0 {
434433
return handle, nil
435434
}
436435
case len(subjectCN) > 0:

0 commit comments

Comments
 (0)