56#define CipherRandomHash SHA2256Hash
62 (*
DecipherBlock)(
void *,
const unsigned char *,
const unsigned char *),
63 (*
EncipherBlock)(
void *,
const unsigned char *,
const unsigned char *);
143 (void) memset(cipher_info,0,
sizeof(*cipher_info));
144 cipher_info->
cipher=cipher;
145 switch (cipher_info->
cipher)
198 cipher_info->
mode=mode;
202 cipher_info->
timestamp=time((time_t *) NULL);
266 plaintext=ciphertext;
268 for (i=0; i < blocksize; i++)
273 for (i=0; i < blocksize; i++)
274 output_block[i]=p[i];
276 for (i=0; i < blocksize; i++)
277 p[i]^=input_block[i];
278 for (i=0; i < blocksize; i++)
279 input_block[i]=output_block[i];
349 plaintext=ciphertext;
351 for (i=0; i < blocksize; i++)
356 for (i=0; i < blocksize; i++)
357 output_block[i]=input_block[i];
359 for (i=0; i < (blocksize-1); i++)
360 input_block[i]=input_block[i+1];
361 input_block[blocksize-1]=(*p);
416 switch (cipher_info->
mode)
483 unsigned char *nonce)
488 for (i=(ssize_t) (length-1); i >= 0; i--)
526 plaintext=ciphertext;
528 for (i=0; i < blocksize; i++)
533 for (i=0; i < blocksize; i++)
534 output_block[i]=input_block[i];
536 for (i=0; i < blocksize; i++)
537 p[i]^=output_block[i];
598 plaintext=ciphertext;
663 plaintext=ciphertext;
665 for (i=0; i < blocksize; i++)
671 for (i=0; i < blocksize; i++)
672 p[i]^=input_block[i];
709 switch (cipher_info->
cipher)
741 cipher_info->
signature=(~WizardSignature);
805 ciphertext=plaintext;
807 for (i=0; i < blocksize; i++)
812 q[pad-1]=(
unsigned char) (pad-1);
813 if (pad == blocksize)
817 for (i=0; i < blocksize; i++)
818 p[i]^=input_block[i];
820 for (i=0; i < blocksize; i++)
890 ciphertext=plaintext;
892 for (i=0; i < blocksize; i++)
897 for (i=0; i < blocksize; i++)
898 output_block[i]=input_block[i];
901 for (i=0; i < (blocksize-1); i++)
902 input_block[i]=input_block[i+1];
903 input_block[blocksize-1]=(*p);
957 switch (cipher_info->
mode)
1053 ciphertext=plaintext;
1055 for (i=0; i < blocksize; i++)
1056 input_block[i]=p[i];
1060 q[pad-1]=(
unsigned char) (pad-1);
1061 if (pad == blocksize)
1065 for (i=0; i < blocksize; i++)
1066 output_block[i]=input_block[i];
1068 for (i=0; i < blocksize; i++)
1069 p[i]^=output_block[i];
1131 ciphertext=plaintext;
1135 q[pad-1]=(
unsigned char) (pad-1);
1136 if (pad == blocksize)
1203 ciphertext=plaintext;
1205 for (i=0; i < blocksize; i++)
1206 input_block[i]=p[i];
1210 q[pad-1]=(
unsigned char) (pad-1);
1211 if (pad == blocksize)
1216 for (i=0; i < blocksize; i++)
1217 p[i]^=input_block[i];
1286 switch (cipher_info->
mode)
1337 return(cipher_info->
nonce);
1435 switch (cipher_info->
cipher)
WizardExport void EncipherAESBlock(AESInfo *aes_info, const unsigned char *plaintext, unsigned char *ciphertext)
WizardExport void SetAESKey(AESInfo *aes_info, const StringInfo *key)
WizardExport AESInfo * DestroyAESInfo(AESInfo *aes_info)
WizardExport unsigned int GetAESBlocksize(const AESInfo *aes_info)
WizardExport AESInfo * AcquireAESInfo(void)
WizardExport void DecipherAESBlock(AESInfo *aes_info, const unsigned char *ciphertext, unsigned char *plaintext)
WizardExport void EncipherChachaBlock(ChachaInfo *chacha_info, const unsigned char *plaintext, unsigned char *ciphertext)
WizardExport ChachaInfo * DestroyChachaInfo(ChachaInfo *chacha_info)
WizardExport void DecipherChachaBlock(ChachaInfo *chacha_info, const unsigned char *ciphertext, unsigned char *plaintext)
WizardExport void SetChachaKey(ChachaInfo *chacha_info, const StringInfo *key)
WizardExport unsigned int GetChachaBlocksize(const ChachaInfo *chacha_info)
WizardExport ChachaInfo * AcquireChachaInfo(void)
static StringInfo * EncipherOFBMode(CipherInfo *, StringInfo *)
static StringInfo * DecipherCBCMode(CipherInfo *cipher_info, StringInfo *ciphertext)
WizardExport CipherInfo * DestroyCipherInfo(CipherInfo *cipher_info)
WizardExport void SetCipherNonce(CipherInfo *cipher_info, const StringInfo *nonce)
static StringInfo * EncipherCFBMode(CipherInfo *cipher_info, StringInfo *plaintext)
static StringInfo * EncipherECBMode(CipherInfo *, StringInfo *)
WizardExport const StringInfo * GetCipherNonce(CipherInfo *cipher_info)
WizardExport void SetCipherKey(CipherInfo *cipher_info, const StringInfo *key)
WizardExport StringInfo * DecipherCipher(CipherInfo *cipher_info, StringInfo *ciphertext)
WizardExport void ResetCipherNonce(CipherInfo *cipher_info)
static StringInfo * EncipherCBCMode(CipherInfo *cipher_info, StringInfo *plaintext)
static void IncrementCipherNonce(const size_t length, unsigned char *nonce)
WizardExport StringInfo * EncryptCipher(CipherInfo *cipher_info, StringInfo *plaintext)
WizardExport StringInfo * GenerateCipherNonce(CipherInfo *cipher_info)
void(* DecipherBlock)(void *, const unsigned char *, const unsigned char *)
WizardExport CipherInfo * AcquireCipherInfo(const CipherType cipher, const CipherMode mode)
static StringInfo * DecipherCTRMode(CipherInfo *, StringInfo *)
static StringInfo * DecipherOFBMode(CipherInfo *, StringInfo *)
static StringInfo * DecipherECBMode(CipherInfo *, StringInfo *)
WizardExport StringInfo * DecryptCipher(CipherInfo *cipher_info, StringInfo *plaintext)
WizardExport StringInfo * EncipherCipher(CipherInfo *cipher_info, StringInfo *plaintext)
static StringInfo * EncipherCTRMode(CipherInfo *, StringInfo *)
void(*)(* EncipherBlock)(void *, const unsigned char *, const unsigned char *)
static StringInfo * DecipherCFBMode(CipherInfo *cipher_info, StringInfo *ciphertext)
WizardExport size_t GetCipherBlocksize(const CipherInfo *cipher_info)
#define MaxCipherBlocksize
#define WizardAssert(domain, predicate)
#define ThrowWizardFatalError(domain, error)
#define ThrowFatalException(severity, tag)
WizardBooleanType LogWizardEvent(const LogEventType type, const char *module, const char *function, const size_t line, const char *format,...)
#define GetWizardModule()
WizardExport void * AcquireWizardMemory(const size_t size)
WizardExport void * RelinquishWizardMemory(void *memory)
WizardExport void * ResetWizardMemory(void *memory, int c, const size_t size)
WizardExport RandomInfo * AcquireRandomInfo(const HashType hash)
WizardExport void SetRandomKey(RandomInfo *random_info, const size_t length, unsigned char *key)
WizardExport StringInfo * GetRandomKey(RandomInfo *random_info, const size_t length)
WizardExport RandomInfo * DestroyRandomInfo(RandomInfo *random_info)
WizardExport void DecipherSerpentBlock(SerpentInfo *serpent_info, const unsigned char *ciphertext, unsigned char *plaintext)
WizardExport void EncipherSerpentBlock(SerpentInfo *serpent_info, const unsigned char *plaintext, unsigned char *ciphertext)
WizardExport SerpentInfo * AcquireSerpentInfo(void)
WizardExport void SetSerpentKey(SerpentInfo *serpent_info, const StringInfo *key)
WizardExport unsigned int GetSerpentBlocksize(const SerpentInfo *serpent_info)
WizardExport SerpentInfo * DestroySerpentInfo(SerpentInfo *serpent_info)
WizardExport void SetStringInfo(StringInfo *string_info, const StringInfo *source)
WizardExport size_t GetStringInfoLength(const StringInfo *string_info)
WizardExport StringInfo * AcquireStringInfo(const size_t length)
WizardExport unsigned char * GetStringInfoDatum(const StringInfo *string_info)
WizardExport void ResetStringInfo(StringInfo *string_info)
WizardExport StringInfo * DestroyStringInfo(StringInfo *string_info)
DecipherBlock encipher_block
DecipherBlock decipher_block
WizardExport void EncipherTwofishBlock(TwofishInfo *twofish_info, const unsigned char *plaintext, unsigned char *ciphertext)
WizardExport TwofishInfo * DestroyTwofishInfo(TwofishInfo *twofish_info)
WizardExport void DecipherTwofishBlock(TwofishInfo *twofish_info, const unsigned char *ciphertext, unsigned char *plaintext)
WizardExport unsigned int GetTwofishBlocksize(const TwofishInfo *twofish_info)
WizardExport TwofishInfo * AcquireTwofishInfo(void)
WizardExport void SetTwofishKey(TwofishInfo *twofish_info, const StringInfo *key)