decodePayload static method

Payload decodePayload(
  1. String string, {
  2. required Header header,
})

Implementation

static Payload decodePayload(
  String string, {
  required Header header,
}) {
  final bytes = decodePasetoBase64(string);
  switch (header.version) {
    case Version.v1:
      return decodePayloadFromBytes(
        bytes,
        nonceLength: LocalV1.nonceLength,
        macLength: LocalV1.macLength,
      );
    case Version.v2:
      switch (header.purpose) {
        case Purpose.local:
          final nonce = bytes.sublist(0, LocalV2.nonceLength);
          final cipherText = bytes.sublist(LocalV2.nonceLength, bytes.length);
          return PayloadLocal(
            secretBox: SecretBox(
              cipherText,
              nonce: nonce,
              mac: Mac.empty,
            ),
            nonce: Mac(nonce),
          );
        case Purpose.public:
          return PayloadPublic(
            message:
                bytes.sublist(0, bytes.length - PublicV2.signatureLength),
            signature: bytes.sublist(
              bytes.length - PublicV2.signatureLength,
              bytes.length,
            ),
          );
      }
    case Version.v3:
      switch (header.purpose) {
        case Purpose.local:
          final nonce = bytes.sublist(0, LocalV2.nonceLength);
          final cipherText = bytes.sublist(LocalV2.nonceLength, bytes.length);
          return PayloadLocal(
            secretBox: SecretBox(
              cipherText,
              nonce: nonce,
              mac: Mac.empty,
            ),
            nonce: Mac(nonce),
          );
        case Purpose.public:
          return PayloadPublic(
            message:
                bytes.sublist(0, bytes.length - PublicV2.signatureLength),
            signature: bytes.sublist(
              bytes.length - PublicV2.signatureLength,
              bytes.length,
            ),
          );
      }
    case Version.v4:
      switch (header.purpose) {
        case Purpose.local:
          throw UnimplementedError();
        case Purpose.public:
          return PayloadPublic(
            message:
                bytes.sublist(0, bytes.length - PublicV4.signatureLength),
            signature: bytes.sublist(
              bytes.length - PublicV4.signatureLength,
              bytes.length,
            ),
          );
      }
  }
}