summaryrefslogtreecommitdiff
path: root/blowfish.cpp
diff options
context:
space:
mode:
authorJeffrey Walton <noloader@gmail.com>2015-11-05 01:59:46 -0500
committerJeffrey Walton <noloader@gmail.com>2015-11-05 01:59:46 -0500
commit48809d4e85c125814425c621d8d0d89f95405924 (patch)
tree1010fd16c4b1199f3d27dd726dda241a2bd29f83 /blowfish.cpp
parent025337a94aceb75d188149db70c2094673772816 (diff)
downloadcryptopp-git-48809d4e85c125814425c621d8d0d89f95405924.tar.gz
CRYPTOPP 5.6.3 RC6 checkin
Diffstat (limited to 'blowfish.cpp')
-rw-r--r--blowfish.cpp198
1 files changed, 99 insertions, 99 deletions
diff --git a/blowfish.cpp b/blowfish.cpp
index 0e95d3ea..7fe9a56f 100644
--- a/blowfish.cpp
+++ b/blowfish.cpp
@@ -1,99 +1,99 @@
-// blowfish.cpp - written and placed in the public domain by Wei Dai
-
-#include "pch.h"
-#include "blowfish.h"
-#include "misc.h"
-
-NAMESPACE_BEGIN(CryptoPP)
-
-void Blowfish::Base::UncheckedSetKey(const byte *key_string, unsigned int keylength, const NameValuePairs &)
-{
- AssertValidKeyLength(keylength);
-
- unsigned i, j=0, k;
- word32 data, dspace[2] = {0, 0};
-
- memcpy(pbox, p_init, sizeof(p_init));
- memcpy(sbox, s_init, sizeof(s_init));
-
- // Xor key string into encryption key vector
- for (i=0 ; i<static_cast<unsigned int>(ROUNDS)+2 ; ++i)
- {
- data = 0 ;
- for (k=0 ; k<4 ; ++k )
- data = (data << 8) | key_string[j++ % keylength];
- pbox[i] ^= data;
- }
-
- crypt_block(dspace, pbox);
-
- for (i=0; i<static_cast<unsigned int>(ROUNDS); i+=2)
- crypt_block(pbox+i, pbox+i+2);
-
- crypt_block(pbox+ROUNDS, sbox);
-
- for (i=0; i<4*256-2; i+=2)
- crypt_block(sbox+i, sbox+i+2);
-
- if (!IsForwardTransformation())
- for (i=0; i<(static_cast<unsigned int>(ROUNDS)+2)/2; i++)
- std::swap(pbox[i], pbox[ROUNDS+1-i]);
-}
-
-// this version is only used to make pbox and sbox
-void Blowfish::Base::crypt_block(const word32 in[2], word32 out[2]) const
-{
- word32 left = in[0];
- word32 right = in[1];
-
- const word32 *const s=sbox;
- const word32 *p=pbox;
-
- left ^= p[0];
-
- for (unsigned i=0; i<ROUNDS/2; i++)
- {
- right ^= (((s[GETBYTE(left,3)] + s[256+GETBYTE(left,2)])
- ^ s[2*256+GETBYTE(left,1)]) + s[3*256+GETBYTE(left,0)])
- ^ p[2*i+1];
-
- left ^= (((s[GETBYTE(right,3)] + s[256+GETBYTE(right,2)])
- ^ s[2*256+GETBYTE(right,1)]) + s[3*256+GETBYTE(right,0)])
- ^ p[2*i+2];
- }
-
- right ^= p[ROUNDS+1];
-
- out[0] = right;
- out[1] = left;
-}
-
-void Blowfish::Base::ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const
-{
- typedef BlockGetAndPut<word32, BigEndian> Block;
-
- word32 left, right;
- Block::Get(inBlock)(left)(right);
-
- const word32 *const s=sbox;
- const word32 *p=pbox;
-
- left ^= p[0];
-
- for (unsigned i=0; i<ROUNDS/2; i++)
- {
- right ^= (((s[GETBYTE(left,3)] + s[256+GETBYTE(left,2)])
- ^ s[2*256+GETBYTE(left,1)]) + s[3*256+GETBYTE(left,0)])
- ^ p[2*i+1];
-
- left ^= (((s[GETBYTE(right,3)] + s[256+GETBYTE(right,2)])
- ^ s[2*256+GETBYTE(right,1)]) + s[3*256+GETBYTE(right,0)])
- ^ p[2*i+2];
- }
-
- right ^= p[ROUNDS+1];
-
- Block::Put(xorBlock, outBlock)(right)(left);
-}
-
-NAMESPACE_END
+// blowfish.cpp - written and placed in the public domain by Wei Dai
+
+#include "pch.h"
+#include "blowfish.h"
+#include "misc.h"
+
+NAMESPACE_BEGIN(CryptoPP)
+
+void Blowfish::Base::UncheckedSetKey(const byte *key_string, unsigned int keylength, const NameValuePairs &)
+{
+ AssertValidKeyLength(keylength);
+
+ unsigned i, j=0, k;
+ word32 data, dspace[2] = {0, 0};
+
+ memcpy(pbox, p_init, sizeof(p_init));
+ memcpy(sbox, s_init, sizeof(s_init));
+
+ // Xor key string into encryption key vector
+ for (i=0 ; i<ROUNDS+2 ; ++i)
+ {
+ data = 0 ;
+ for (k=0 ; k<4 ; ++k )
+ data = (data << 8) | key_string[j++ % keylength];
+ pbox[i] ^= data;
+ }
+
+ crypt_block(dspace, pbox);
+
+ for (i=0; i<ROUNDS; i+=2)
+ crypt_block(pbox+i, pbox+i+2);
+
+ crypt_block(pbox+ROUNDS, sbox);
+
+ for (i=0; i<4*256-2; i+=2)
+ crypt_block(sbox+i, sbox+i+2);
+
+ if (!IsForwardTransformation())
+ for (i=0; i<(ROUNDS+2)/2; i++)
+ std::swap(pbox[i], pbox[ROUNDS+1-i]);
+}
+
+// this version is only used to make pbox and sbox
+void Blowfish::Base::crypt_block(const word32 in[2], word32 out[2]) const
+{
+ word32 left = in[0];
+ word32 right = in[1];
+
+ const word32 *const s=sbox;
+ const word32 *p=pbox;
+
+ left ^= p[0];
+
+ for (unsigned i=0; i<ROUNDS/2; i++)
+ {
+ right ^= (((s[GETBYTE(left,3)] + s[256+GETBYTE(left,2)])
+ ^ s[2*256+GETBYTE(left,1)]) + s[3*256+GETBYTE(left,0)])
+ ^ p[2*i+1];
+
+ left ^= (((s[GETBYTE(right,3)] + s[256+GETBYTE(right,2)])
+ ^ s[2*256+GETBYTE(right,1)]) + s[3*256+GETBYTE(right,0)])
+ ^ p[2*i+2];
+ }
+
+ right ^= p[ROUNDS+1];
+
+ out[0] = right;
+ out[1] = left;
+}
+
+void Blowfish::Base::ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const
+{
+ typedef BlockGetAndPut<word32, BigEndian> Block;
+
+ word32 left, right;
+ Block::Get(inBlock)(left)(right);
+
+ const word32 *const s=sbox;
+ const word32 *p=pbox;
+
+ left ^= p[0];
+
+ for (unsigned i=0; i<ROUNDS/2; i++)
+ {
+ right ^= (((s[GETBYTE(left,3)] + s[256+GETBYTE(left,2)])
+ ^ s[2*256+GETBYTE(left,1)]) + s[3*256+GETBYTE(left,0)])
+ ^ p[2*i+1];
+
+ left ^= (((s[GETBYTE(right,3)] + s[256+GETBYTE(right,2)])
+ ^ s[2*256+GETBYTE(right,1)]) + s[3*256+GETBYTE(right,0)])
+ ^ p[2*i+2];
+ }
+
+ right ^= p[ROUNDS+1];
+
+ Block::Put(xorBlock, outBlock)(right)(left);
+}
+
+NAMESPACE_END