COSESignedMessage.fromUserFacingEncoding constructor
COSESignedMessage.fromUserFacingEncoding(
- 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);
}