migrateLegacy static method
Converte um EncryptedPayload legado (v1, com chave embutida) em um CryptEnvelope (v2, sem chave) mais a chave extraída separadamente.
Não decifra nem recifra os dados — apenas reestrutura a serialização. O ciphertext permanece o mesmo; somente a forma de transportar a chave muda (de "dentro do payload" para "gerenciamento externo").
final legacy = EncryptedPayload.fromBase64(oldToken);
final migrated = AllCrypto.migrateLegacy(legacy);
await secureStorage.write(key: 'k', value: base64.encode(migrated.key));
await db.save(migrated.envelope.toBase64());
⚠️ Se o Base64 legado já foi transmitido ou armazenado fora de um local confiável, considere a chave comprometida e rotacione-a (recifrando com uma chave nova) em vez de apenas migrar o formato.
Implementation
static ({CryptEnvelope envelope, Uint8List key}) migrateLegacy(
EncryptedPayload legacyPayload,
) {
final envelope = CryptEnvelope(
algorithm: legacyPayload.algorithm,
ciphertext: legacyPayload.ciphertext,
nonce: legacyPayload.nonce,
tag: legacyPayload.tag,
aad: legacyPayload.aad,
);
return (envelope: envelope, key: Uint8List.fromList(legacyPayload.key));
}