70#define ChachaBlocksize 64
71#define PushChachaWord(p) \
72 (((unsigned int) ((p)[0]) << 0) | \
73 ((unsigned int) ((p)[1]) << 8) | \
74 ((unsigned int) ((p)[2]) << 16) | \
75 ((unsigned int) ((p)[3]) << 24))
103 (void) memset(chacha_info,0,
sizeof(*chacha_info));
105 chacha_info->
timestamp=time((time_t *) NULL);
139 const unsigned char *ciphertext,
unsigned char *plaintext)
171 chacha_info->
signature=(~WizardSignature);
204 const unsigned char *plaintext,
unsigned char *ciphertext)
206#define ChachaAdd(v,w) ((unsigned int) ((v)+(w)) & 0xFFFFFFFFU)
207#define ChachaQuarterRound(a,b,c,d) \
209 a=ChachaAdd(a,b); d=ChachaRotate((d) ^ (a),16); \
210 c=ChachaAdd(c,d); b=ChachaRotate((b) ^ (c),12); \
211 a=ChachaAdd(a,b); d=ChachaRotate((d) ^ (a), 8); \
212 c=ChachaAdd(c,d); b=ChachaRotate((b) ^ (c), 7); \
214#define ChachaRotate(v,n) \
215 (((unsigned int) ((v) << (n)) & 0xFFFFFFFFU) | ((v) >> (32-(n))))
216#define PopChachaWord(p,v) \
218 (p)[0]=((unsigned char) (((v) >> 0) & 0xff)); \
219 (p)[1]=((unsigned char) (((v) >> 8) & 0xff)); \
220 (p)[2]=((unsigned char) (((v) >> 16) & 0xff)); \
221 (p)[3]=((unsigned char) (((v) >> 24) & 0xff)); \
248 x0=chacha_info->
key[0];
249 x1=chacha_info->
key[1];
250 x2=chacha_info->
key[2];
251 x3=chacha_info->
key[3];
252 x4=chacha_info->
key[4];
253 x5=chacha_info->
key[5];
254 x6=chacha_info->
key[6];
255 x7=chacha_info->
key[7];
256 x8=chacha_info->
key[8];
257 x9=chacha_info->
key[9];
258 x10=chacha_info->
key[10];
259 x11=chacha_info->
key[11];
260 x12=chacha_info->
key[12];
261 x13=chacha_info->
key[13];
262 x14=chacha_info->
key[14];
263 x15=chacha_info->
key[15];
264 for (i=20; i > 0; i-=2)
326 x0=0; x1=0; x2=0; x3=0; x4=0; x5=0; x6=0; x7=0;
327 x8=0; x9=0; x10=0; x11=0; x12=0; x13=0; x14=0; x15=0;
392 sigma[17] =
"expand 32-byte k",
393 tau[17] =
"expand 16-byte k";
429 chacha_info->
key[12]=0;
430 chacha_info->
key[13]=0;
431 chacha_info->
key[14]=0;
432 chacha_info->
key[15]=0;
436 constants=(
const char *) NULL;
469 const unsigned char *nonce,
const unsigned char *counter)
471 chacha_info->
key[12]=counter == (
unsigned char *) NULL ? 0 :
473 chacha_info->
key[13]=counter == (
unsigned char *) NULL ? 0 :
#define PopChachaWord(p, v)
WizardExport void EncipherChachaBlock(ChachaInfo *chacha_info, const unsigned char *plaintext, unsigned char *ciphertext)
WizardExport ChachaInfo * DestroyChachaInfo(ChachaInfo *chacha_info)
#define ChachaQuarterRound(a, b, c, d)
WizardExport void DecipherChachaBlock(ChachaInfo *chacha_info, const unsigned char *ciphertext, unsigned char *plaintext)
WizardExport void SetChachaNonce(ChachaInfo *chacha_info, const unsigned char *nonce, const unsigned char *counter)
WizardExport void SetChachaKey(ChachaInfo *chacha_info, const StringInfo *key)
WizardExport unsigned int GetChachaBlocksize(const ChachaInfo *chacha_info)
WizardExport ChachaInfo * AcquireChachaInfo(void)
#define PushChachaWord(p)
#define WizardAssert(domain, predicate)
#define ThrowWizardFatalError(domain, error)
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 size_t GetStringInfoLength(const StringInfo *string_info)
WizardExport unsigned char * GetStringInfoDatum(const StringInfo *string_info)