diff options
author | Remko Tronçon <git@el-tramo.be> | 2009-06-20 14:36:56 (GMT) |
---|---|---|
committer | Remko Tronçon <git@el-tramo.be> | 2009-06-20 14:38:59 (GMT) |
commit | bb0dc4a60625c94fac1fb8dada797243b2b83c9e (patch) | |
tree | 7232d58bd81a8969fa0074f6ba992b3f2d451985 /Swiften/StringCodecs | |
parent | 6eb30e0e1f0a8e7ee936f3c006c7f710785653df (diff) | |
download | swift-bb0dc4a60625c94fac1fb8dada797243b2b83c9e.zip swift-bb0dc4a60625c94fac1fb8dada797243b2b83c9e.tar.bz2 |
Fixed a bug where SHA1 would alter the input.
Diffstat (limited to 'Swiften/StringCodecs')
-rw-r--r-- | Swiften/StringCodecs/SHA1.cpp | 3 | ||||
-rw-r--r-- | Swiften/StringCodecs/UnitTest/SHA1Test.cpp | 10 |
2 files changed, 12 insertions, 1 deletions
diff --git a/Swiften/StringCodecs/SHA1.cpp b/Swiften/StringCodecs/SHA1.cpp index 18fde71..e59836c 100644 --- a/Swiften/StringCodecs/SHA1.cpp +++ b/Swiften/StringCodecs/SHA1.cpp @@ -188,11 +188,12 @@ boost::uint8_t finalcount[8]; namespace Swift { ByteArray SHA1::getBinaryHash(const ByteArray& input) { + ByteArray inputCopy(input); ByteArray digest; digest.resize(20); SHA1_CTX context; SHA1Init(&context); - SHA1Update(&context, (boost::uint8_t*) input.getData(), input.getSize()); + SHA1Update(&context, (boost::uint8_t*) inputCopy.getData(), inputCopy.getSize()); SHA1Final((boost::uint8_t*) digest.getData(), &context); return digest; } diff --git a/Swiften/StringCodecs/UnitTest/SHA1Test.cpp b/Swiften/StringCodecs/UnitTest/SHA1Test.cpp index a6c7a72..e556429 100644 --- a/Swiften/StringCodecs/UnitTest/SHA1Test.cpp +++ b/Swiften/StringCodecs/UnitTest/SHA1Test.cpp @@ -9,6 +9,7 @@ class SHA1Test : public CppUnit::TestFixture { CPPUNIT_TEST_SUITE(SHA1Test); CPPUNIT_TEST(testGetBinaryHash); + CPPUNIT_TEST(testGetBinaryHash_Twice); CPPUNIT_TEST(testGetHexHash); CPPUNIT_TEST_SUITE_END(); @@ -20,6 +21,15 @@ class SHA1Test : public CppUnit::TestFixture CPPUNIT_ASSERT_EQUAL(ByteArray("\x42\x06\xb2\x3c\xa6\xb0\xa6\x43\xd2\x0d\x89\xb0\x4f\xf5\x8c\xf7\x8b\x80\x96\xed"), result); } + + void testGetBinaryHash_Twice() { + ByteArray input("client/pc//Exodus 0.9.1<http://jabber.org/protocol/caps<http://jabber.org/protocol/disco#info<http://jabber.org/protocol/disco#items<http://jabber.org/protocol/muc<"); + SHA1::getBinaryHash(input); + ByteArray result(SHA1::getBinaryHash(input)); + + CPPUNIT_ASSERT_EQUAL(ByteArray("\x42\x06\xb2\x3c\xa6\xb0\xa6\x43\xd2\x0d\x89\xb0\x4f\xf5\x8c\xf7\x8b\x80\x96\xed"), result); + } + void testGetHexHash() { String result(SHA1::getHexHash("client/pc//Exodus 0.9.1<http://jabber.org/protocol/caps<http://jabber.org/protocol/disco#info<http://jabber.org/protocol/disco#items<http://jabber.org/protocol/muc<")); CPPUNIT_ASSERT_EQUAL(String("4206b23ca6b0a643d20d89b04ff58cf78b8096ed"), result); |