summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorweidai <weidai11@users.noreply.github.com>2009-10-31 21:18:37 +0000
committerweidai <weidai11@users.noreply.github.com>2009-10-31 21:18:37 +0000
commit2cb9074afdb6c10f686b863fc8354fdfa8206701 (patch)
treefdf273b985dfe798d49cebb63e32bae82f822651
parent43245166ca6dedbf0f9a67098877ab9d0519bbc0 (diff)
downloadcryptopp-git-2cb9074afdb6c10f686b863fc8354fdfa8206701.tar.gz
fix incorrect encryption bug with WAKE-OFB that was introduced in version 5.5 (reported by John Famiglietti)
-rw-r--r--TestVectors/all.txt1
-rw-r--r--TestVectors/wake.txt16
-rw-r--r--regtest.cpp3
-rw-r--r--wake.cpp2
4 files changed, 21 insertions, 1 deletions
diff --git a/TestVectors/all.txt b/TestVectors/all.txt
index 3f06e78d..b4c18d3d 100644
--- a/TestVectors/all.txt
+++ b/TestVectors/all.txt
@@ -1,6 +1,7 @@
AlgorithmType: FileList
Name: all.txt collection
Test: TestVectors/tea.txt
+Test: TestVectors/wake.txt
Test: TestVectors/camellia.txt
Test: TestVectors/shacal2.txt
Test: TestVectors/ttmac.txt
diff --git a/TestVectors/wake.txt b/TestVectors/wake.txt
new file mode 100644
index 00000000..5e1fd077
--- /dev/null
+++ b/TestVectors/wake.txt
@@ -0,0 +1,16 @@
+AlgorithmType: SymmetricCipher
+Source: Generated by Crypto++ 5.6.1
+Key: r2 00112233445566778899AABBCCDDEEFF
+Name: WAKE-CFB-LE
+Plaintext: r80 00 r80 01
+Ciphertext: FFEEDDCCDF42B9D4939C351568AB4888BD9264CA66CF7F7885141F6934F3F390F1987B8609B733919DC5F73F7BED93ECDCD4F35FF32828553B8AFAD113DDA6565932553D9143AA886AE859167327F3C260434E6CF23C167C7EF0772BFAECA2FFDD1BD61640505AC2D997F2419990975D6841E9788E7617C0E79DACF18E1B6463F6D8923602385AA995BBF890BF67F87E9DC3C0C3023F2C2B19B98900BB1E2FFC
+Test: Encrypt
+Name: WAKE-CFB-BE
+Ciphertext: FFEEDDCC7C7C6FA2584C7634D139AE344A8EBA8E272CAF98F9BC424ECE6E2C97AF0214E41053BB0A27B1C36E3FF05E1AC3AE5E9693EC2BF8F917CBC40B0344ED4E65C906D1DBB7F350F63769C6D07C43415DF6714D200D7972AD96C20C5897424F219B4649842ECFC9EEDB8F020CD702FC585C3251A6434953C6FE9066E4D64A3B910B94E55E92E23FD5D17F37947313D3C2BD2FC189399955F8CD6BF8D14567
+Test: Encrypt
+Name: WAKE-OFB-LE
+Ciphertext: FFEEDDCCDF42B9D4939C351568AB4888BD9264CA66CF7F7885141F6934F3F390F1987B8609B733919DC5F73F7BED93ECDCD4F35FF32828553B8AFAD113DDA6565932553D9143AA886AE859167327F3C260434E6C90A0895FD33E6B6412526521FA0B12F4ECEE3E8F4F96DCF70907AAFB5E29C40FC10EB70A4970736E98DF98C615AC844A46FB8E4AEBBBF599DF7B73930B94776C6C8757BE51B34E71E9B514AE
+Test: Encrypt
+Name: WAKE-OFB-BE
+Ciphertext: CCDDEEFFD4B942DF15359C938848AB68CA6492BD787FCF66691F148590F3F334867B98F19133B7093FF7C59DEC93ED7B5FF3D4DC552828F3D1FA8A3B56A6DD133D55325988AA43911659E86AC2F327736C4E43605F89A090646B3ED321655212F4120BFA8F3EEEECF7DC964FFBAA07090FC4295E0AB70EC16E737049C698DF984A84AC154A8EFB4699F5BBEB93737BDF6C77940BBE57876C714EB351AE14B5E9
+Test: Encrypt
diff --git a/regtest.cpp b/regtest.cpp
index 33c2f6d7..0c5e614a 100644
--- a/regtest.cpp
+++ b/regtest.cpp
@@ -111,6 +111,9 @@ void RegisterFactories()
RegisterSymmetricCipherDefaultFactories<Sosemanuk>();
RegisterSymmetricCipherDefaultFactories<Weak::MARC4>();
RegisterSymmetricCipherDefaultFactories<WAKE_OFB<LittleEndian> >();
+ RegisterSymmetricCipherDefaultFactories<WAKE_OFB<BigEndian> >();
+ RegisterSymmetricCipherDefaultFactories<Weak::WAKE_CFB<LittleEndian> >();
+ RegisterSymmetricCipherDefaultFactories<Weak::WAKE_CFB<BigEndian> >();
RegisterSymmetricCipherDefaultFactories<SEAL<LittleEndian> >();
RegisterAuthenticatedSymmetricCipherDefaultFactories<CCM<AES> >();
RegisterAuthenticatedSymmetricCipherDefaultFactories<GCM<AES> >();
diff --git a/wake.cpp b/wake.cpp
index 78c243b2..ce406532 100644
--- a/wake.cpp
+++ b/wake.cpp
@@ -94,7 +94,7 @@ void WAKE_Policy<B>::OperateKeystream(KeystreamOperation operation, byte *output
r5 = M(r5, r4);\
r6 = M(r6, r5);\
output += 4;\
- if (x == XOR_KEYSTREAM)\
+ if (!(x & INPUT_NULL))\
input += 4;\
}