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