CryptEnvelope class

Envelope seguro e versionado para dados cifrados — nunca serializa a chave.

Substituto recomendado para EncryptedPayload.toJson / EncryptedPayload.toBase64 quando o payload for persistido ou transmitido segundo o protocolo da aplicação. Não registre envelopes completos em logs. Use-o através da fachada AllCrypto, que gerencia a chave externamente.

Por que um novo formato

EncryptedPayload.toJson inclui o campo key — qualquer sistema que receba esse JSON/Base64 recebe também a chave e consegue decifrar o conteúdo. Esse formato legado nunca ofereceu confidencialidade contra quem possui o payload; ele só protege dados em repouso quando o próprio armazenamento é a fronteira de segurança (ex.: sandbox do app). Veja SECURITY.md para detalhes.

CryptEnvelope corrige isso: serializa apenas algoritmo, ciphertext, nonce/IV, tag e AAD. A chave nunca é serializada — deve ser fornecida externamente (keychain, flutter_secure_storage, variável de ambiente, KMS) no momento da decifragem.

Versionamento

version identifica o schema do envelope, independente da versão do pacote Dart. A versão atual é currentVersion (2). Payloads legados do EncryptedPayload (sem campo de versão, com chave embutida) são tratados como "v1" apenas para fins de migração — veja AllCrypto.migrateLegacy.

fromJson e fromBase64 rejeitam:

Exemplo

final key = AllCrypto.generateKey();
final envelope = AllCrypto.encryptText('segredo', key: key);
final b64 = envelope.toBase64(); // NÃO contém a chave

final restored = CryptEnvelope.fromBase64(b64);
final texto = AllCrypto.decryptText(restored, key: key); // chave externa

Constructors

CryptEnvelope({int version = currentVersion, required CryptAlgorithm algorithm, required Uint8List ciphertext, required Uint8List nonce, Uint8List? tag, Uint8List? aad})
Cria um CryptEnvelope. Não aceita chave — por design, este tipo nunca carrega material de chave.
CryptEnvelope.fromBase64(String encoded)
Reconstrói um CryptEnvelope a partir de uma string produzida por toBase64.
factory
CryptEnvelope.fromJson(Map<String, dynamic> json)
Reconstrói um CryptEnvelope a partir de um Map JSON.
factory

Properties

aad → Uint8List
Dados autenticados adicionais. Uint8List(0) quando não houver AAD.
final
algorithm → CryptAlgorithm
Algoritmo usado na cifragem.
final
ciphertext → Uint8List
Dados cifrados.
final
hashCode → int
The hash code for this object.
no setterinherited
nonce → Uint8List
Nonce, IV ou bloco de contador inicial — mesma semântica de EncryptedPayload.nonce, depende do algoritmo.
final
runtimeType → Type
A representation of the runtime type of the object.
no setterinherited
tag → Uint8List
Tag de autenticação (MAC). Vazia para AES-CBC/AES-CTR (não autenticados).
final
version → int
Versão do schema deste envelope específico.
final

Methods

noSuchMethod(Invocation invocation) → dynamic
Invoked when a nonexistent method or property is accessed.
inherited
toBase64() → String
Serializa o envelope completo como uma string Base64 única (JSON → UTF-8 → Base64). Nunca inclui a chave.
toJson() → Map<String, dynamic>
Serializa para Map<String, dynamic>. Nunca inclui chave.
toString() → String
A string representation of this object.
override

Operators

operator ==(Object other) → bool
The equality operator.
inherited

Constants

currentVersion → const int
Versão atual do schema de envelope. Incrementada apenas quando o formato serializado muda de forma incompatível.