Erstellung einer ECDSA-Signatur mit Node.js / crypto

Ich habe Code, der mit @ eine verkettete (r-s) Signatur für die ECDSA-Signatur generierjsrsasign und ein Schlüssel im JWK-Format:

const sig = new Signature({ alg: 'SHA256withECDSA' });
sig.init(KEYUTIL.getKey(key));
sig.updateHex(dataBuffer.toString('hex'));
const asn1hexSig = sig.sign();
const concatSig = ECDSA.asn1SigToConcatSig(asn1hexSig);
return new Buffer(concatSig, 'hex');

Scheint zu funktionieren. Ich habe auch Code, der @ verwendSubtleCrypto um dasselbe zu erreichen:

importEcdsaKey(key, 'sign') // importKey JWK -> raw
.then((privateKey) => subtle.sign(
    { name: 'ECDSA', hash: {name: 'SHA-256'} },
    privateKey,
    dataBuffer
))

Diese beiden geben 128-Byte-Puffer zurück. und sie verifizieren sich gegenseitig (d. h. ich kann @ verifizierjsrsasign Signaturen mitSubtleCrypto und umgekehrt). Wenn ich jedoch dasSign Klasse in der Node.jscrypto Modul, ich scheine etwas ganz anderes zu bekommen.

key = require('jwk-to-pem')(key, {'private': true});
const sign = require('crypto').createSign('sha256');
sign.update(dataBuffer);
return sign.sign(key);

Hier bekomme ich einen Puffer mit variabler Länge, ungefähr 70 Bytes; es wird nicht mit @ abgeglichjsrsa (womit eine ungültige Länge für eine RS-Signatur beanstandet wird).

Wie bekomme ich eine r-s Signatur, wie sie von @ generiert wurdjsrsasign undSubtleCrypto, mit Nodecrypto?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage