ecdsaRawToDer static method

Uint8List ecdsaRawToDer(
  1. Uint8List rawSignature, {
  2. required String namedCurve,
})

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;
}