COSESignedMessage.fromUserFacingEncoding constructor

COSESignedMessage.fromUserFacingEncoding(
  1. String signedMessage
)

Implementation

factory COSESignedMessage.fromUserFacingEncoding(String signedMessage) {
  if (!signedMessage.startsWith("cms_")) {
    throw ADAPluginException(
      'Invalid signed message prefix.',
      details: {
        "expected": "cms_",
        "prefix": signedMessage.substring(
          IntUtils.min(4, signedMessage.length),
        ),
      },
    );
  }
  String payload = signedMessage.substring(4);
  if (payload.length < 8) {
    throw ADAPluginException('Invalid signed message.');
  }
  payload = payload.replaceAll(RegExp(r'=+$'), '');
  final bodyB64 = payload.substring(0, payload.length - 6);
  final checksumB64 = signedMessage.substring(4 + bodyB64.length);
  final body = StringUtils.encode(
    bodyB64,
    type: StringEncoding.base64UrlSafe,
  );
  final checksum = StringUtils.encode(
    checksumB64,
    type: StringEncoding.base64UrlSafe,
  );
  final checksumBytes = COSEUtils.fnv32aBytes(body);
  if (!BytesUtils.bytesEqual(checksum, checksumBytes)) {
    throw ADAPluginException('Invalid signed message checksum');
  }
  return COSESignedMessage.fromCborBytes(body);
}