ecdsaRawToDer static method
Implementation
static Uint8List ecdsaRawToDer(
Uint8List rawSignature, {
required String namedCurve,
}) {
final coordinateLength = curveCoordinateLength(namedCurve);
final expectedLength = coordinateLength * 2;
if (rawSignature.length != expectedLength) {
throw ArgumentError(
'Assinatura raw ECDSA deve ter $expectedLength bytes para $namedCurve',
);
}
final r = rawSignature.sublist(0, coordinateLength);
final s = rawSignature.sublist(coordinateLength, expectedLength);
final derR = _encodeDerInteger(r);
final derS = _encodeDerInteger(s);
final content = Uint8List(derR.length + derS.length);
content.setRange(0, derR.length, derR);
content.setRange(derR.length, content.length, derS);
final lenBytes = _encodeDerLength(content.length);
final out = Uint8List(1 + lenBytes.length + content.length);
out[0] = 0x30;
out.setRange(1, 1 + lenBytes.length, lenBytes);
out.setRange(1 + lenBytes.length, out.length, content);
return out;
}