Bouncy Castle конвертирует ASN.1 в массивы байтов r и s - PullRequest
1 голос
/ 11 июля 2020

У меня есть следующий код, который генерирует цифровую подпись:

byte[] GetSignature(byte[] message, byte[] privateKey)
{
    var ecParams = NistNamedCurves.GetByName("P-256");
    var domainParameters = new ECDomainParameters(ecParams.Curve, ecParams.G, ecParams.N, ecParams.H, ecParams.GetSeed());
    var d = new BigInteger(1, privateKey);
    var privateKeyParameters = new ECPrivateKeyParameters(d, domainParameters);

    var signer = SignerUtilities.GetSigner("SHA-256withECDSA");
    signer.Init(true, privateKeyParameters);
    signer.BlockUpdate(message, 0, message.Length);

    var signature = signer.GenerateSignature();
    return signature;
}

Этот код возвращает 71-байтовый массив в формате ASN.1, однако мой код потребления ожидает, что подпись будет иметь размер 64 байта, состоящий из значения r и s. Я хотел бы извлечь массивы байтов r и s. Как мне это сделать?

1 Ответ

4 голосов
/ 12 июля 2020

В последних версиях b c -csharp вы можете просто изменить «SHA-256withECDSA» на «SHA-256withPLAIN-ECDSA», и тогда GenerateSignature будет напрямую создавать 64-байтовую подпись вместо значения ASN.1.

...