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