MCPcopy Create free account
hub / github.com/Tripwire/tripwire-open-source / ProcessBlock

Method ProcessBlock

src/cryptlib/des.cpp:314–364  ·  view source on GitHub ↗

Encrypt or decrypt a block of data in ECB mode

Source from the content-addressed store, hash-verified

312
313// Encrypt or decrypt a block of data in ECB mode
314void DES::ProcessBlock(const byte *inBlock, byte * outBlock)
315{
316 word32 l,r,work;
317
318#ifdef WORDS_BIGENDIAN
319 l = *(word32 *)inBlock;
320 r = *(word32 *)(inBlock+4);
321#else
322 l = byteReverse(*(word32 *)inBlock);
323 r = byteReverse(*(word32 *)(inBlock+4));
324#endif
325
326 IPERM(l,r);
327
328 const word32 *kptr=k;
329
330 for (unsigned i=0; i<8; i++)
331 {
332 work = rotr(r, 4U) ^ kptr[4*i+0];
333 l ^= Spbox[6][(work) & 0x3f]
334 ^ Spbox[4][(work >> 8) & 0x3f]
335 ^ Spbox[2][(work >> 16) & 0x3f]
336 ^ Spbox[0][(work >> 24) & 0x3f];
337 work = r ^ kptr[4*i+1];
338 l ^= Spbox[7][(work) & 0x3f]
339 ^ Spbox[5][(work >> 8) & 0x3f]
340 ^ Spbox[3][(work >> 16) & 0x3f]
341 ^ Spbox[1][(work >> 24) & 0x3f];
342
343 work = rotr(l, 4U) ^ kptr[4*i+2];
344 r ^= Spbox[6][(work) & 0x3f]
345 ^ Spbox[4][(work >> 8) & 0x3f]
346 ^ Spbox[2][(work >> 16) & 0x3f]
347 ^ Spbox[0][(work >> 24) & 0x3f];
348 work = l ^ kptr[4*i+3];
349 r ^= Spbox[7][(work) & 0x3f]
350 ^ Spbox[5][(work >> 8) & 0x3f]
351 ^ Spbox[3][(work >> 16) & 0x3f]
352 ^ Spbox[1][(work >> 24) & 0x3f];
353 }
354
355 FPERM(l,r);
356
357#ifdef WORDS_BIGENDIAN
358 *(word32 *)outBlock = r;
359 *(word32 *)(outBlock+4) = l;
360#else
361 *(word32 *)outBlock = byteReverse(r);
362 *(word32 *)(outBlock+4) = byteReverse(l);
363#endif
364}
365
366void DES_EDE_Encryption::ProcessBlock(byte *inoutBlock)
367{

Callers 4

ProcessBufMethod · 0.45
InputFinishedMethod · 0.45
X917RNGMethod · 0.45
GetByteMethod · 0.45

Calls 4

IPERMFunction · 0.85
rotrFunction · 0.85
FPERMFunction · 0.85
byteReverseFunction · 0.70

Tested by

no test coverage detected