Main Page | Namespace List | Class Hierarchy | Alphabetical List | Compound List | File List | Namespace Members | Compound Members | File Members

# tea.cpp

    00001 // tea.cpp - modified by Wei Dai from code in the original paper
    00002
    00003 #include "pch.h"
    00004 #include "tea.h"
    00005 #include "misc.h"
    00006
    00007 NAMESPACE_BEGIN(CryptoPP)
    00008
    00009 const word32 TEA::Base::DELTA = 0x9e3779b9;
    00010
    00011 void TEA::Base::UncheckedSetKey(CipherDir direction, const byte *userKey, unsigned int length)
    00012 {
    00013         AssertValidKeyLength(length);
    00014
    00015         GetUserKey(BIG_ENDIAN_ORDER, k.begin(), 4, userKey, KEYLENGTH);
    00016 }
    00017
    00018 typedef BlockGetAndPut<word32, BigEndian> Block;
    00019
    00020 void TEA::Enc::ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const
    00021 {
    00022         word32 y, z;
    00023         Block::Get(inBlock)(y)(z);
    00024
    00025         word32 sum = 0;
    00026         for (int i=0; i<ROUNDS; i++)
    00027         {
    00028                 sum += DELTA;
    00029                 y += (z << 4) + k[0] ^ z + sum ^ (z >> 5) + k[1];
    00030                 z += (y << 4) + k[2] ^ y + sum ^ (y >> 5) + k[3];
    00031         }
    00032
    00033         Block::Put(xorBlock, outBlock)(y)(z);
    00034 }
    00035
    00036 typedef BlockGetAndPut<word32, BigEndian> Block;
    00037
    00038 void TEA::Dec::ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const
    00039 {
    00040         word32 y, z;
    00041         Block::Get(inBlock)(y)(z);
    00042
    00043         word32 sum = DELTA << LOG_ROUNDS;
    00044         for (int i=0; i<ROUNDS; i++)
    00045         {
    00046                 z -= (y << 4) + k[2] ^ y + sum ^ (y >> 5) + k[3];
    00047                 y -= (z << 4) + k[0] ^ z + sum ^ (z >> 5) + k[1];
    00048                 sum -= DELTA;
    00049         }
    00050
    00051         Block::Put(xorBlock, outBlock)(y)(z);
    00052 }
    00053
    00054 NAMESPACE_END