Generando firma ECDSA con Node.js / crypto

Tengo un código que genera una firma concatenada (r-s) para la firma ECDSA usandojsrsasign y una clave en formato JWK:

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');

Parece funcionar. También tengo código que usaSubtleCrypto para lograr lo mismo:

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

Ambos devuelven buffers de 128 bytes; y verifican de forma cruzada (es decir, puedo verificarjsrsasign firmas conSubtleCrypto y viceversa). Sin embargo, cuando uso elSign clase en el Node.jscrypto módulo, parece que obtengo algo bastante diferente.

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

Aquí obtengo un búfer de longitud variable, aproximadamente 70 bytes; no verifica de forma cruzada conjsrsa (lo que deja de quejarse por una longitud no válida para una firma r-s).

¿Cómo puedo obtener una firma r-s, generada porjsrsasign ySubtleCrypto, usando Nodecrypto?

Respuestas a la pregunta(1)

Su respuesta a la pregunta