TMS Cryptography Pack 2.5.0.0 : Chiffrer un message en utilisant une clé dérivée d’un mot de passe.

Cet exemple utilise les algorithmes Argon2d, ed25519 et AES avec les composants TArgon2KeyDerivation, TECCEncSign et TAESEncryption.
Alice veut envoyer un message à Bob, donc elle possède sa clé privée (il utilise l’algorithme ed25519).
Le mot de passe peut être demandé à Alice en utilisant une boîte de dialogue.
Alice utilise la fonction suivante pour chiffrer un message à Bob :

function EncryptMessageToBob(password: string; input: string; BobPublicKey: string): string;
var
  aesKey: string;
  eccCipher, aesCipher : string;
begin
  Argon2.StringSalt := '0123456789012345';
  Argon2.outputFormat := raw;
  aesKey := Argon2.GenerateKey(password);
  ECC.PublicKey := BobPublicKey;
  eccCipher := ecc.Encrypt(aesKey);
  aes.Key := aesKey;
  aesCipher := aes.Encrypt(input);
  Result := eccCipher + '+' + aesCipher;
end;

Pour déchiffrer le message d’Alice, Bob utilise la fonction suivante :

function DecryptMessageFromAlice(input: string; BobPrivateKey: string): string;
var
  eccCipher, aesCipher: string;
  aesKey: string;
begin
  eccCipher := input.subString(0, Pos('+', input) - 1);
  aesCipher := input.subString(Pos('+', input), input.Length);
  ECC.PrivateKey := BobPrivateKey;
  aesKey := ecc.Decrypt(eccCipher);
  aes.Key := aesKey;
  Result := aes.Decrypt(aesCipher);
end;

Pour les messages suivants, Alice et Bob peuvent enregistrer la clé aesKey et ne pas envoyer la chaîne eccCipher.


Syntaxe du code grâce à http://markup.su/highlighter/