Das Cryptography-Project ist ein Open-Source-Project.
Die Verschlüsselung erfolgt nach dem Advanced Encryption Standard (AES). Die Schlüssellänge beträgt
256bit. Es kommt zusätzlich die Betriebsart Cipher Block Chaining zur Anwendung.
Es werden immer 128bit-Blöcke verschlüsselt. Sollte der letzte Block weniger Nutzdaten enthalten, wird
auch ein voller 128bit-Block verschlüsselt. Zusätzlich wird die Original-Byteanzahl in einem Header hinterlegt.
Bei Encrypt wird die Originalanzahl am Parameter ulBytes übergeben und die erweiterte Byteanzahl zurück gegeben.
Bei Decrypt wird die erweiterte Anzahl am Parameter ulBytes übergeben und die Original-Byteanzahl zurück gegeben.
Bei der Verwendung der Funktionen ist zu beachten das die AES Key-Arrays an einer 16bit Speichergrenze
ausgerichtet werden müssen. Um Speicher auf dem Stack zu reservieren:
-
alignas(16) unsigned char auc256DecryptKey[256]; alignas(16) unsigned char auc240EncryptKey[240];
oder um Speicher auf dem Heap anzufordern
-
VMBLOCK vb256DecryptKey = VMBlockA(256, 16); VMBLOCK vb240EncryptKey = VMBlockA(240, 16);
Wer ganz sicher gehen will sollte am Ende seiner Funktion den Speicher mit Nullen überschreiben.
Für den Stack mit
-
ZeroMem(auc256DecryptKey, 256); ZeroMem(auc240EncryptKey, 240);
oder für den Heap mit
-
ZeroMem(vb256DecryptKey, 256); ZeroMem(vb240EncryptKey, 240);
Der Vector muss nicht an einer Speichergrenze ausgerichtet werden.