decodePayload static method
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,
),
);
}
}
}