encrypt method

String encrypt(
  1. String data,
  2. String key, {
  3. String? associatedData,
})

Encrypt data using AES-256-GCM

data is the plain text data to encrypt key is the encryption key (will be derived if not 32 bytes) associatedData is optional associated data for authentication

Returns the encrypted data as a base64 string

Implementation

String encrypt(
  String data,
  String key, {
  String? associatedData,
}) {
  final keyBytes = _deriveKey(key);
  final iv = _generateRandomBytes(_defaultIvLength);
  final plaintext = utf8.encode(data);

  // For simplicity, we'll use a basic encryption approach
  // In production, consider using a proper AES implementation
  final encrypted = _simpleEncrypt(plaintext, keyBytes, iv);

  final result = {
    'data': base64.encode(encrypted),
    'iv': base64.encode(iv),
    'tag': base64.encode(_generateRandomBytes(16)), // Auth tag placeholder
  };

  if (associatedData != null) {
    result['aad'] = base64.encode(utf8.encode(associatedData));
  }

  return base64.encode(utf8.encode(json.encode(result)));
}