payload property

Uint8List payload
override

Implementation

Uint8List get payload {
  var 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 = new Uint8List.fromList(
      [certificateFlag] + certificateStoreBytes + certificateURIBytes);

  payload = [classVersion] + (signatureBytes) + certificateBytes;
  return new Uint8List.fromList(payload);
}
void payload=(Uint8List? payload)
override

Implementation

set payload(Uint8List? payload) {
  ByteStream stream = new 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));
  }
}