payload property
Implementation
@override
Uint8List get payload {
List<int> payload;
//Version Field pass
//Signature Field
int signatureURIPresent = (signatureURI == "") ? 0 : 1;
int signatureFlag = (signatureURIPresent << 7) | signatureTypeIndex;
var signatureURIBytes =
signatureURIPresent == 0 ? signature : utf8.encode(signatureURI!);
var signatureLENGTHBytes = signatureURIBytes.length.toBytes(2);
var signatureBytes = [signatureFlag, hashTypeIndex] +
signatureLENGTHBytes +
signatureURIBytes;
//Certificate Field
int certificateURIPresent = (certificateURI == "") ? 0 : 1;
int certificateFlag = (certificateURIPresent << 7) |
(certificateFormatIndex << 4) |
certificateStore.length;
var certificateStoreBytes = <int>[];
for (int i = 0; i < certificateStore.length; i++) {
certificateStoreBytes.addAll(certificateStore[i].length.toBytes(2));
certificateStoreBytes.addAll(certificateStore[i]);
}
var certificateURIBytes = <int>[];
if (certificateURIPresent != 0) {
certificateURIBytes.addAll(certificateURI!.length.toBytes(2));
certificateURIBytes.addAll(utf8.encode(certificateURI!));
}
var certificateBytes = Uint8List.fromList(
[certificateFlag] + certificateStoreBytes + certificateURIBytes);
payload = [classVersion] + (signatureBytes) + certificateBytes;
return Uint8List.fromList(payload);
}
Implementation
@override
set payload(Uint8List? payload) {
ByteStream stream = ByteStream(payload!);
int version = stream.readByte();
int signatureFlag = stream.readByte();
hashTypeIndex = stream.readByte();
//Version Field
if (version != classVersion) {
//TODO:find the document of smartposter 2.0
throw ArgumentError(
"Signature Record is only implemented for smartposter 2.0, got ${Version.formattedString(version)}");
}
//Signature Field
int signatureURIPresent = (signatureFlag & 0x80) >> 7;
signatureTypeIndex = signatureFlag & 0x7F;
int signatureURILength = stream.readInt(2);
if (signatureURIPresent == 1) {
signatureURI = utf8.decode(stream.readBytes(signatureURILength));
} else {
signature = stream.readBytes(signatureURILength);
}
//Certificate Field
int certificateFlag = stream.readByte();
int certificateURIPresent = (certificateFlag & 0x80) >> 7;
certificateFormatIndex = (certificateFlag & 0x70) >> 4;
int certificateNumberOfCertificates = certificateFlag & 0x0F;
for (int i = 0; i < certificateNumberOfCertificates; i++) {
int len = stream.readInt(2);
certificateStore.add(stream.readBytes(len));
}
if (certificateURIPresent == 1) {
int length = stream.readInt(2);
certificateURI = utf8.decode(stream.readBytes(length));
}
}