migrateLegacy static method

({CryptEnvelope envelope, Uint8List key}) migrateLegacy(
  1. EncryptedPayload legacyPayload
)

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));
}