diff options
Diffstat (limited to 'Swiften/StringCodecs')
-rw-r--r-- | Swiften/StringCodecs/Base64.cpp | 157 | ||||
-rw-r--r-- | Swiften/StringCodecs/Base64.h | 15 | ||||
-rw-r--r-- | Swiften/StringCodecs/Hexify.cpp | 78 | ||||
-rw-r--r-- | Swiften/StringCodecs/Hexify.h | 12 | ||||
-rw-r--r-- | Swiften/StringCodecs/PBKDF2.h | 36 | ||||
-rw-r--r-- | Swiften/StringCodecs/SHA1_Windows.cpp | 128 | ||||
-rw-r--r-- | Swiften/StringCodecs/SHA1_Windows.h | 38 | ||||
-rw-r--r-- | Swiften/StringCodecs/UnitTest/Base64Test.cpp | 98 | ||||
-rw-r--r-- | Swiften/StringCodecs/UnitTest/HexifyTest.cpp | 45 | ||||
-rw-r--r-- | Swiften/StringCodecs/UnitTest/PBKDF2Test.cpp | 53 |
10 files changed, 332 insertions, 328 deletions
diff --git a/Swiften/StringCodecs/Base64.cpp b/Swiften/StringCodecs/Base64.cpp index 4e6ac8c..7b5f402 100644 --- a/Swiften/StringCodecs/Base64.cpp +++ b/Swiften/StringCodecs/Base64.cpp @@ -1,101 +1,106 @@ /* - * Copyright (c) 2013 Isode Limited. + * Copyright (c) 2013-2016 Isode Limited. * All rights reserved. * See the COPYING file for more information. */ #include <Swiften/StringCodecs/Base64.h> +#include <stddef.h> + +#include <Swiften/Base/ByteArray.h> +#include <Swiften/Base/SafeByteArray.h> + #pragma clang diagnostic ignored "-Wconversion" using namespace Swift; namespace { - const char* encodeMap = - "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; - const unsigned char decodeMap[255] = { - 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 62, 255, 255, 255, 63, - 52, 53, 54, 55, 56, 57, 58, 59, - 60, 61, 255, 255, 255, 255, 255, 255, - 255, 0, 1, 2, 3, 4, 5, 6, - 7, 8, 9, 10, 11, 12, 13, 14, - 15, 16, 17, 18, 19, 20, 21, 22, - 23, 24, 25, 255, 255, 255, 255, 255, - 255, 26, 27, 28, 29, 30, 31, 32, - 33, 34, 35, 36, 37, 38, 39, 40, - 41, 42, 43, 44, 45, 46, 47, 48, - 49, 50, 51, 255, 255, 255, 255, 255 - }; + const char* encodeMap = + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + const unsigned char decodeMap[255] = { + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 62, 255, 255, 255, 63, + 52, 53, 54, 55, 56, 57, 58, 59, + 60, 61, 255, 255, 255, 255, 255, 255, + 255, 0, 1, 2, 3, 4, 5, 6, + 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 20, 21, 22, + 23, 24, 25, 255, 255, 255, 255, 255, + 255, 26, 27, 28, 29, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 39, 40, + 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 255, 255, 255, 255, 255 + }; - template<typename ResultType, typename InputType> - ResultType encodeDetail(const InputType& input) { - ResultType result; - size_t i = 0; - for (; i < (input.size()/3)*3; i += 3) { - unsigned int c = input[i+2] | (input[i+1]<<8) | (input[i]<<16); - result.push_back(encodeMap[(c&0xFC0000)>>18]); - result.push_back(encodeMap[(c&0x3F000)>>12]); - result.push_back(encodeMap[(c&0xFC0)>>6]); - result.push_back(encodeMap[c&0x3F]); - } - if (input.size() % 3 == 2) { - unsigned int c = (input[i+1]<<8) | (input[i]<<16); - result.push_back(encodeMap[(c&0xFC0000)>>18]); - result.push_back(encodeMap[(c&0x3F000)>>12]); - result.push_back(encodeMap[(c&0xFC0)>>6]); - result.push_back('='); - } - else if (input.size() % 3 == 1) { - unsigned int c = input[i]<<16; - result.push_back(encodeMap[(c&0xFC0000)>>18]); - result.push_back(encodeMap[(c&0x3F000)>>12]); - result.push_back('='); - result.push_back('='); - } - return result; - } + template<typename ResultType, typename InputType> + ResultType encodeDetail(const InputType& input) { + ResultType result; + size_t i = 0; + for (; i < (input.size()/3)*3; i += 3) { + unsigned int c = input[i+2] | (input[i+1]<<8) | (input[i]<<16); + result.push_back(encodeMap[(c&0xFC0000)>>18]); + result.push_back(encodeMap[(c&0x3F000)>>12]); + result.push_back(encodeMap[(c&0xFC0)>>6]); + result.push_back(encodeMap[c&0x3F]); + } + if (input.size() % 3 == 2) { + unsigned int c = (input[i+1]<<8) | (input[i]<<16); + result.push_back(encodeMap[(c&0xFC0000)>>18]); + result.push_back(encodeMap[(c&0x3F000)>>12]); + result.push_back(encodeMap[(c&0xFC0)>>6]); + result.push_back('='); + } + else if (input.size() % 3 == 1) { + unsigned int c = input[i]<<16; + result.push_back(encodeMap[(c&0xFC0000)>>18]); + result.push_back(encodeMap[(c&0x3F000)>>12]); + result.push_back('='); + result.push_back('='); + } + return result; + } } std::string Base64::encode(const ByteArray& s) { - return encodeDetail<std::string>(s); + return encodeDetail<std::string>(s); } SafeByteArray Base64::encode(const SafeByteArray& s) { - return encodeDetail<SafeByteArray>(s); + return encodeDetail<SafeByteArray>(s); } ByteArray Base64::decode(const std::string& input) { - ByteArray result; + ByteArray result; - if (input.size() % 4) { - return ByteArray(); - } - for (size_t i = 0; i < input.size(); i += 4) { - unsigned char c1 = input[i+0]; - unsigned char c2 = input[i+1]; - unsigned char c3 = input[i+2]; - unsigned char c4 = input[i+3]; - if (c3 == '=') { - unsigned int c = (((decodeMap[c1]<<6)|decodeMap[c2])&0xFF0)>>4; - result.push_back(c); - } - else if (c4 == '=') { - unsigned int c = (((decodeMap[c1]<<12)|(decodeMap[c2]<<6)|decodeMap[c3])&0x3FFFC)>>2; - result.push_back((c&0xFF00) >> 8); - result.push_back(c&0xFF); - } - else { - unsigned int c = (decodeMap[c1]<<18) | (decodeMap[c2]<<12) | (decodeMap[c3]<<6) | decodeMap[c4]; - result.push_back((c&0xFF0000) >> 16); - result.push_back((c&0xFF00) >> 8); - result.push_back(c&0xFF); - } - } - return result; + if (input.size() % 4) { + return ByteArray(); + } + for (size_t i = 0; i < input.size(); i += 4) { + unsigned char c1 = input[i+0]; + unsigned char c2 = input[i+1]; + unsigned char c3 = input[i+2]; + unsigned char c4 = input[i+3]; + if (c3 == '=') { + unsigned int c = (((decodeMap[c1]<<6)|decodeMap[c2])&0xFF0)>>4; + result.push_back(c); + } + else if (c4 == '=') { + unsigned int c = (((decodeMap[c1]<<12)|(decodeMap[c2]<<6)|decodeMap[c3])&0x3FFFC)>>2; + result.push_back((c&0xFF00) >> 8); + result.push_back(c&0xFF); + } + else { + unsigned int c = (decodeMap[c1]<<18) | (decodeMap[c2]<<12) | (decodeMap[c3]<<6) | decodeMap[c4]; + result.push_back((c&0xFF0000) >> 16); + result.push_back((c&0xFF00) >> 8); + result.push_back(c&0xFF); + } + } + return result; } diff --git a/Swiften/StringCodecs/Base64.h b/Swiften/StringCodecs/Base64.h index 205797c..fde27c0 100644 --- a/Swiften/StringCodecs/Base64.h +++ b/Swiften/StringCodecs/Base64.h @@ -1,12 +1,11 @@ /* - * Copyright (c) 2010 Isode Limited. + * Copyright (c) 2010-2016 Isode Limited. * All rights reserved. * See the COPYING file for more information. */ #pragma once -#include <vector> #include <string> #include <Swiften/Base/API.h> @@ -14,11 +13,11 @@ #include <Swiften/Base/SafeByteArray.h> namespace Swift { - class SWIFTEN_API Base64 { - public: - static std::string encode(const ByteArray& s); - static SafeByteArray encode(const SafeByteArray& s); + class SWIFTEN_API Base64 { + public: + static std::string encode(const ByteArray& s); + static SafeByteArray encode(const SafeByteArray& s); - static ByteArray decode(const std::string &s); - }; + static ByteArray decode(const std::string &s); + }; } diff --git a/Swiften/StringCodecs/Hexify.cpp b/Swiften/StringCodecs/Hexify.cpp index 832d5b7..907c240 100644 --- a/Swiften/StringCodecs/Hexify.cpp +++ b/Swiften/StringCodecs/Hexify.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010 Isode Limited. + * Copyright (c) 2010-2016 Isode Limited. * All rights reserved. * See the COPYING file for more information. */ @@ -18,56 +18,56 @@ namespace Swift { std::string Hexify::hexify(unsigned char byte) { - std::ostringstream result; - result << std::hex << std::setw(2) << std::setfill('0') << boost::numeric_cast<unsigned int>(byte); - return std::string(result.str()); + std::ostringstream result; + result << std::hex << std::setw(2) << std::setfill('0') << boost::numeric_cast<unsigned int>(byte); + return std::string(result.str()); } std::string Hexify::hexify(const ByteArray& data) { - std::ostringstream result; - result << std::hex; + std::ostringstream result; + result << std::hex; - for (unsigned int i = 0; i < data.size(); ++i) { - result << std::setw(2) << std::setfill('0') << boost::numeric_cast<unsigned int>(static_cast<unsigned char>(data[i])); - } - return std::string(result.str()); + for (unsigned char i : data) { + result << std::setw(2) << std::setfill('0') << boost::numeric_cast<unsigned int>(static_cast<unsigned char>(i)); + } + return std::string(result.str()); } static const unsigned char map[256] = { - 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, - 0, 1, 2, 3, 4, 5, 6, 7, - 8, 9, 255, 255, 255, 255, 255, 255, - 255, 10, 11, 12, 13, 14, 15, 255, - 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, - 255, 10, 11, 12, 13, 14, 15, 255, - 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255 + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 0, 1, 2, 3, 4, 5, 6, 7, + 8, 9, 255, 255, 255, 255, 255, 255, + 255, 10, 11, 12, 13, 14, 15, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 10, 11, 12, 13, 14, 15, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255 }; ByteArray Hexify::unhexify(const std::string& in) { - if (in.size() % 2) { - return ByteArray(); - } + if (in.size() % 2) { + return ByteArray(); + } - ByteArray result(in.size() / 2); - for (size_t pos = 0; pos < in.size() - 1; pos += 2) { - unsigned char a = map[static_cast<size_t>(in[pos])]; - unsigned char b = map[static_cast<size_t>(in[pos+1])]; - if (a == 255 || b == 255) { - return ByteArray(); - } - result[pos/2] = (a<<4) | b; - } - return result; + ByteArray result(in.size() / 2); + for (size_t pos = 0; pos < in.size() - 1; pos += 2) { + unsigned char a = map[static_cast<size_t>(in[pos])]; + unsigned char b = map[static_cast<size_t>(in[pos+1])]; + if (a == 255 || b == 255) { + return ByteArray(); + } + result[pos/2] = (a<<4) | b; + } + return result; } } diff --git a/Swiften/StringCodecs/Hexify.h b/Swiften/StringCodecs/Hexify.h index b29864c..20027d3 100644 --- a/Swiften/StringCodecs/Hexify.h +++ b/Swiften/StringCodecs/Hexify.h @@ -10,10 +10,10 @@ #include <Swiften/Base/ByteArray.h> namespace Swift { - class SWIFTEN_API Hexify { - public: - static std::string hexify(unsigned char byte); - static std::string hexify(const ByteArray& data); - static ByteArray unhexify(const std::string& hexstring); - }; + class SWIFTEN_API Hexify { + public: + static std::string hexify(unsigned char byte); + static std::string hexify(const ByteArray& data); + static ByteArray unhexify(const std::string& hexstring); + }; } diff --git a/Swiften/StringCodecs/PBKDF2.h b/Swiften/StringCodecs/PBKDF2.h index dddad6f..2177b5f 100644 --- a/Swiften/StringCodecs/PBKDF2.h +++ b/Swiften/StringCodecs/PBKDF2.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010-2015 Isode Limited. + * Copyright (c) 2010-2016 Isode Limited. * All rights reserved. * See the COPYING file for more information. */ @@ -7,25 +7,25 @@ #pragma once #include <Swiften/Base/API.h> -#include <Swiften/Base/SafeByteArray.h> #include <Swiften/Base/Concat.h> +#include <Swiften/Base/SafeByteArray.h> #include <Swiften/Crypto/CryptoProvider.h> namespace Swift { - class SWIFTEN_API PBKDF2 { - public: - static ByteArray encode(const SafeByteArray& password, const ByteArray& salt, int iterations, CryptoProvider* crypto) { - ByteArray u = crypto->getHMACSHA1(password, concat(salt, createByteArray("\0\0\0\1", 4))); - ByteArray result(u); - int i = 1; - while (i < iterations) { - u = crypto->getHMACSHA1(password, u); - for (unsigned int j = 0; j < u.size(); ++j) { - result[j] ^= u[j]; - } - ++i; - } - return result; - } - }; + class SWIFTEN_API PBKDF2 { + public: + static ByteArray encode(const SafeByteArray& password, const ByteArray& salt, int iterations, CryptoProvider* crypto) { + ByteArray u = crypto->getHMACSHA1(password, concat(salt, createByteArray("\0\0\0\1", 4))); + ByteArray result(u); + int i = 1; + while (i < iterations) { + u = crypto->getHMACSHA1(password, u); + for (unsigned int j = 0; j < u.size(); ++j) { + result[j] ^= u[j]; + } + ++i; + } + return result; + } + }; } diff --git a/Swiften/StringCodecs/SHA1_Windows.cpp b/Swiften/StringCodecs/SHA1_Windows.cpp index f883d13..ff02012 100644 --- a/Swiften/StringCodecs/SHA1_Windows.cpp +++ b/Swiften/StringCodecs/SHA1_Windows.cpp @@ -10,95 +10,95 @@ #include <Swiften/StringCodecs/SHA1_Windows.h> namespace { - HCRYPTPROV context = 0; - - struct ContextDeleter { - ~ContextDeleter() { - if (context) { - CryptReleaseContext(context, 0); - context = 0; - } - } - } contextDeleter; + HCRYPTPROV context = 0; + + struct ContextDeleter { + ~ContextDeleter() { + if (context) { + CryptReleaseContext(context, 0); + context = 0; + } + } + } contextDeleter; } namespace Swift { SHA1::SHA1() : hash(NULL) { - if (!context) { - if (!CryptAcquireContext(&context, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT)) { -// DWORD error = GetLastError(); -// switch (error) { -// std::cerr << (long)error << std::endl; -// } -// assert(false); - context = 0; - } - } - - if (!CryptCreateHash(context, CALG_SHA1, 0, 0, &hash)) { - hash = NULL; - } + if (!context) { + if (!CryptAcquireContext(&context, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT)) { +// DWORD error = GetLastError(); +// switch (error) { +// std::cerr << (long)error << std::endl; +// } +// assert(false); + context = 0; + } + } + + if (!CryptCreateHash(context, CALG_SHA1, 0, 0, &hash)) { + hash = NULL; + } } SHA1::~SHA1() { - if (hash) { - CryptDestroyHash(hash); - } + if (hash) { + CryptDestroyHash(hash); + } } SHA1& SHA1::update(const std::vector<unsigned char>& data) { - return update(vecptr(data), data.size()); + return update(vecptr(data), data.size()); } SHA1& SHA1::update(const unsigned char* data, size_t dataSize) { - if (!hash || !context) { - return *this; - } - if (!CryptHashData(hash, const_cast<BYTE*>(data), dataSize, 0)) { -// DWORD error = GetLastError(); -// switch (error) { -// std::cerr << (long)error << std::endl; -// } -// assert(false); -// } - } - return *this; + if (!hash || !context) { + return *this; + } + if (!CryptHashData(hash, const_cast<BYTE*>(data), dataSize, 0)) { +// DWORD error = GetLastError(); +// switch (error) { +// std::cerr << (long)error << std::endl; +// } +// assert(false); +// } + } + return *this; } std::vector<unsigned char> SHA1::getHash() const { - if (!hash || !context) { - return std::vector<unsigned char>(); - } - std::vector<unsigned char> result; - DWORD hashLength = sizeof(DWORD); - DWORD hashSize; - CryptGetHashParam(hash, HP_HASHSIZE, reinterpret_cast<BYTE*>(&hashSize), &hashLength, 0); - result.resize(static_cast<size_t>(hashSize)); - if (!CryptGetHashParam(hash, HP_HASHVAL, vecptr(result), &hashSize, 0)) { -// DWORD error = GetLastError(); -// switch (error) { -// std::cerr << (long)error << std::endl; -// } -// assert(false); - return std::vector<unsigned char>(); - } - result.resize(static_cast<size_t>(hashSize)); - return result; + if (!hash || !context) { + return std::vector<unsigned char>(); + } + std::vector<unsigned char> result; + DWORD hashLength = sizeof(DWORD); + DWORD hashSize; + CryptGetHashParam(hash, HP_HASHSIZE, reinterpret_cast<BYTE*>(&hashSize), &hashLength, 0); + result.resize(static_cast<size_t>(hashSize)); + if (!CryptGetHashParam(hash, HP_HASHVAL, vecptr(result), &hashSize, 0)) { +// DWORD error = GetLastError(); +// switch (error) { +// std::cerr << (long)error << std::endl; +// } +// assert(false); + return std::vector<unsigned char>(); + } + result.resize(static_cast<size_t>(hashSize)); + return result; } ByteArray SHA1::getHash(const ByteArray& data) { - SHA1 hash; - hash.update(vecptr(data), data.size()); - return hash.getHash(); + SHA1 hash; + hash.update(vecptr(data), data.size()); + return hash.getHash(); } ByteArray SHA1::getHash(const SafeByteArray& data) { - SHA1 hash; - hash.update(vecptr(data), data.size()); - return hash.getHash(); + SHA1 hash; + hash.update(vecptr(data), data.size()); + return hash.getHash(); } } diff --git a/Swiften/StringCodecs/SHA1_Windows.h b/Swiften/StringCodecs/SHA1_Windows.h index 29ec78b..b94de21 100644 --- a/Swiften/StringCodecs/SHA1_Windows.h +++ b/Swiften/StringCodecs/SHA1_Windows.h @@ -16,29 +16,29 @@ #include <Swiften/Base/SafeByteArray.h> namespace Swift { - class SWIFTEN_API SHA1 { - public: - SHA1(); - ~SHA1(); + class SWIFTEN_API SHA1 { + public: + SHA1(); + ~SHA1(); - SHA1& update(const std::vector<unsigned char>& data); - std::vector<unsigned char> getHash() const; + SHA1& update(const std::vector<unsigned char>& data); + std::vector<unsigned char> getHash() const; - static ByteArray getHash(const ByteArray& data); - static ByteArray getHash(const SafeByteArray& data); + static ByteArray getHash(const ByteArray& data); + static ByteArray getHash(const SafeByteArray& data); - ByteArray operator()(const SafeByteArray& data) { - return getHash(data); - } + ByteArray operator()(const SafeByteArray& data) { + return getHash(data); + } - ByteArray operator()(const ByteArray& data) { - return getHash(data); - } + ByteArray operator()(const ByteArray& data) { + return getHash(data); + } - private: - SHA1& update(const unsigned char* data, size_t dataSize); + private: + SHA1& update(const unsigned char* data, size_t dataSize); - private: - HCRYPTHASH hash; - }; + private: + HCRYPTHASH hash; + }; } diff --git a/Swiften/StringCodecs/UnitTest/Base64Test.cpp b/Swiften/StringCodecs/UnitTest/Base64Test.cpp index 4914fb5..272514f 100644 --- a/Swiften/StringCodecs/UnitTest/Base64Test.cpp +++ b/Swiften/StringCodecs/UnitTest/Base64Test.cpp @@ -1,67 +1,67 @@ /* - * Copyright (c) 2010 Isode Limited. + * Copyright (c) 2010-2016 Isode Limited. * All rights reserved. * See the COPYING file for more information. */ -#include <Swiften/Base/ByteArray.h> #include <QA/Checker/IO.h> #include <cppunit/extensions/HelperMacros.h> #include <cppunit/extensions/TestFactoryRegistry.h> +#include <Swiften/Base/ByteArray.h> #include <Swiften/StringCodecs/Base64.h> using namespace Swift; class Base64Test : public CppUnit::TestFixture { - CPPUNIT_TEST_SUITE(Base64Test); - CPPUNIT_TEST(testEncodeDecodeAllChars); - CPPUNIT_TEST(testEncodeDecodeOneBytePadding); - CPPUNIT_TEST(testEncodeDecodeTwoBytesPadding); - CPPUNIT_TEST(testEncode_NoData); - CPPUNIT_TEST(testDecode_NoData); - CPPUNIT_TEST_SUITE_END(); - - public: - void testEncodeDecodeAllChars() { - ByteArray input; - for (unsigned char i = 0; i < 255; ++i) { - input.push_back(i); - } - std::string result(Base64::encode(input)); - - CPPUNIT_ASSERT_EQUAL(std::string("AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9fn+AgYKDhIWGh4iJiouMjY6PkJGSk5SVlpeYmZqbnJ2en6ChoqOkpaanqKmqq6ytrq+wsbKztLW2t7i5uru8vb6/wMHCw8TFxsfIycrLzM3Oz9DR0tPU1dbX2Nna29zd3t/g4eLj5OXm5+jp6uvs7e7v8PHy8/T19vf4+fr7/P3+"), result); - CPPUNIT_ASSERT_EQUAL(input, Base64::decode(result)); - } - - void testEncodeDecodeOneBytePadding() { - ByteArray input = createByteArray("ABCDE", 5); - - std::string result = Base64::encode(input); - - CPPUNIT_ASSERT_EQUAL(std::string("QUJDREU="), result); - CPPUNIT_ASSERT_EQUAL(input, Base64::decode(result)); - } - - void testEncodeDecodeTwoBytesPadding() { - ByteArray input = createByteArray("ABCD", 4); - - std::string result = Base64::encode(input); - - CPPUNIT_ASSERT_EQUAL(std::string("QUJDRA=="), result); - CPPUNIT_ASSERT_EQUAL(input, Base64::decode(result)); - } - - void testEncode_NoData() { - std::string result(Base64::encode(ByteArray())); - CPPUNIT_ASSERT_EQUAL(std::string(""), result); - } - - void testDecode_NoData() { - ByteArray result(Base64::decode("")); - CPPUNIT_ASSERT_EQUAL(ByteArray(), result); - } + CPPUNIT_TEST_SUITE(Base64Test); + CPPUNIT_TEST(testEncodeDecodeAllChars); + CPPUNIT_TEST(testEncodeDecodeOneBytePadding); + CPPUNIT_TEST(testEncodeDecodeTwoBytesPadding); + CPPUNIT_TEST(testEncode_NoData); + CPPUNIT_TEST(testDecode_NoData); + CPPUNIT_TEST_SUITE_END(); + + public: + void testEncodeDecodeAllChars() { + ByteArray input; + for (unsigned char i = 0; i < 255; ++i) { + input.push_back(i); + } + std::string result(Base64::encode(input)); + + CPPUNIT_ASSERT_EQUAL(std::string("AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9fn+AgYKDhIWGh4iJiouMjY6PkJGSk5SVlpeYmZqbnJ2en6ChoqOkpaanqKmqq6ytrq+wsbKztLW2t7i5uru8vb6/wMHCw8TFxsfIycrLzM3Oz9DR0tPU1dbX2Nna29zd3t/g4eLj5OXm5+jp6uvs7e7v8PHy8/T19vf4+fr7/P3+"), result); + CPPUNIT_ASSERT_EQUAL(input, Base64::decode(result)); + } + + void testEncodeDecodeOneBytePadding() { + ByteArray input = createByteArray("ABCDE", 5); + + std::string result = Base64::encode(input); + + CPPUNIT_ASSERT_EQUAL(std::string("QUJDREU="), result); + CPPUNIT_ASSERT_EQUAL(input, Base64::decode(result)); + } + + void testEncodeDecodeTwoBytesPadding() { + ByteArray input = createByteArray("ABCD", 4); + + std::string result = Base64::encode(input); + + CPPUNIT_ASSERT_EQUAL(std::string("QUJDRA=="), result); + CPPUNIT_ASSERT_EQUAL(input, Base64::decode(result)); + } + + void testEncode_NoData() { + std::string result(Base64::encode(ByteArray())); + CPPUNIT_ASSERT_EQUAL(std::string(""), result); + } + + void testDecode_NoData() { + ByteArray result(Base64::decode("")); + CPPUNIT_ASSERT_EQUAL(ByteArray(), result); + } }; CPPUNIT_TEST_SUITE_REGISTRATION(Base64Test); diff --git a/Swiften/StringCodecs/UnitTest/HexifyTest.cpp b/Swiften/StringCodecs/UnitTest/HexifyTest.cpp index 0ff5b1b..7d349fa 100644 --- a/Swiften/StringCodecs/UnitTest/HexifyTest.cpp +++ b/Swiften/StringCodecs/UnitTest/HexifyTest.cpp @@ -1,38 +1,39 @@ /* - * Copyright (c) 2010 Isode Limited. + * Copyright (c) 2010-2016 Isode Limited. * All rights reserved. * See the COPYING file for more information. */ +#include <string> + #include <cppunit/extensions/HelperMacros.h> #include <cppunit/extensions/TestFactoryRegistry.h> -#include <Swiften/StringCodecs/Hexify.h> -#include <string> #include <Swiften/Base/ByteArray.h> +#include <Swiften/StringCodecs/Hexify.h> using namespace Swift; class HexifyTest : public CppUnit::TestFixture { - CPPUNIT_TEST_SUITE(HexifyTest); - CPPUNIT_TEST(testHexify); - CPPUNIT_TEST(testHexify_Byte); - CPPUNIT_TEST(testUnhexify); - CPPUNIT_TEST_SUITE_END(); - - public: - void testHexify() { - CPPUNIT_ASSERT_EQUAL(std::string("4206b23ca6b0a643d20d89b04ff58cf78b8096ed"), Hexify::hexify(createByteArray("\x42\x06\xb2\x3c\xa6\xb0\xa6\x43\xd2\x0d\x89\xb0\x4f\xf5\x8c\xf7\x8b\x80\x96\xed"))); - } - - void testHexify_Byte() { - CPPUNIT_ASSERT_EQUAL(std::string("b2"), Hexify::hexify(0xb2)); - } - - void testUnhexify() { - CPPUNIT_ASSERT_EQUAL(std::string("ffaf02"), Hexify::hexify(Hexify::unhexify("ffaf02"))); - CPPUNIT_ASSERT(createByteArray("\x01\x23\xf2", 3) == Hexify::unhexify("0123f2")); - } + CPPUNIT_TEST_SUITE(HexifyTest); + CPPUNIT_TEST(testHexify); + CPPUNIT_TEST(testHexify_Byte); + CPPUNIT_TEST(testUnhexify); + CPPUNIT_TEST_SUITE_END(); + + public: + void testHexify() { + CPPUNIT_ASSERT_EQUAL(std::string("4206b23ca6b0a643d20d89b04ff58cf78b8096ed"), Hexify::hexify(createByteArray("\x42\x06\xb2\x3c\xa6\xb0\xa6\x43\xd2\x0d\x89\xb0\x4f\xf5\x8c\xf7\x8b\x80\x96\xed"))); + } + + void testHexify_Byte() { + CPPUNIT_ASSERT_EQUAL(std::string("b2"), Hexify::hexify(0xb2)); + } + + void testUnhexify() { + CPPUNIT_ASSERT_EQUAL(std::string("ffaf02"), Hexify::hexify(Hexify::unhexify("ffaf02"))); + CPPUNIT_ASSERT(createByteArray("\x01\x23\xf2", 3) == Hexify::unhexify("0123f2")); + } }; CPPUNIT_TEST_SUITE_REGISTRATION(HexifyTest); diff --git a/Swiften/StringCodecs/UnitTest/PBKDF2Test.cpp b/Swiften/StringCodecs/UnitTest/PBKDF2Test.cpp index 58ef1ba..43866cb 100644 --- a/Swiften/StringCodecs/UnitTest/PBKDF2Test.cpp +++ b/Swiften/StringCodecs/UnitTest/PBKDF2Test.cpp @@ -1,54 +1,53 @@ /* - * Copyright (c) 2010-2013 Isode Limited. + * Copyright (c) 2010-2016 Isode Limited. * All rights reserved. * See the COPYING file for more information. */ -#include <Swiften/Base/ByteArray.h> #include <QA/Checker/IO.h> #include <cppunit/extensions/HelperMacros.h> #include <cppunit/extensions/TestFactoryRegistry.h> #include <Swiften/Base/ByteArray.h> -#include <Swiften/StringCodecs/PBKDF2.h> #include <Swiften/Crypto/CryptoProvider.h> #include <Swiften/Crypto/PlatformCryptoProvider.h> +#include <Swiften/StringCodecs/PBKDF2.h> using namespace Swift; class PBKDF2Test : public CppUnit::TestFixture { - CPPUNIT_TEST_SUITE(PBKDF2Test); - CPPUNIT_TEST(testGetResult_I1); - CPPUNIT_TEST(testGetResult_I2); - CPPUNIT_TEST(testGetResult_I4096); - CPPUNIT_TEST_SUITE_END(); + CPPUNIT_TEST_SUITE(PBKDF2Test); + CPPUNIT_TEST(testGetResult_I1); + CPPUNIT_TEST(testGetResult_I2); + CPPUNIT_TEST(testGetResult_I4096); + CPPUNIT_TEST_SUITE_END(); + + public: + void setUp() { + crypto = std::shared_ptr<CryptoProvider>(PlatformCryptoProvider::create()); + } - public: - void setUp() { - crypto = boost::shared_ptr<CryptoProvider>(PlatformCryptoProvider::create()); - } + void testGetResult_I1() { + ByteArray result(PBKDF2::encode(createSafeByteArray("password"), createByteArray("salt"), 1, crypto.get())); - void testGetResult_I1() { - ByteArray result(PBKDF2::encode(createSafeByteArray("password"), createByteArray("salt"), 1, crypto.get())); + CPPUNIT_ASSERT_EQUAL(createByteArray("\x0c\x60\xc8\x0f\x96\x1f\x0e\x71\xf3\xa9\xb5\x24\xaf\x60\x12\x06\x2f\xe0\x37\xa6"), result); + } - CPPUNIT_ASSERT_EQUAL(createByteArray("\x0c\x60\xc8\x0f\x96\x1f\x0e\x71\xf3\xa9\xb5\x24\xaf\x60\x12\x06\x2f\xe0\x37\xa6"), result); - } + void testGetResult_I2() { + ByteArray result(PBKDF2::encode(createSafeByteArray("password"), createByteArray("salt"), 2, crypto.get())); - void testGetResult_I2() { - ByteArray result(PBKDF2::encode(createSafeByteArray("password"), createByteArray("salt"), 2, crypto.get())); + CPPUNIT_ASSERT_EQUAL(createByteArray("\xea\x6c\x1\x4d\xc7\x2d\x6f\x8c\xcd\x1e\xd9\x2a\xce\x1d\x41\xf0\xd8\xde\x89\x57"), result); + } - CPPUNIT_ASSERT_EQUAL(createByteArray("\xea\x6c\x1\x4d\xc7\x2d\x6f\x8c\xcd\x1e\xd9\x2a\xce\x1d\x41\xf0\xd8\xde\x89\x57"), result); - } + void testGetResult_I4096() { + ByteArray result(PBKDF2::encode(createSafeByteArray("password"), createByteArray("salt"), 4096, crypto.get())); - void testGetResult_I4096() { - ByteArray result(PBKDF2::encode(createSafeByteArray("password"), createByteArray("salt"), 4096, crypto.get())); + CPPUNIT_ASSERT_EQUAL(createByteArray("\x4b\x00\x79\x1\xb7\x65\x48\x9a\xbe\xad\x49\xd9\x26\xf7\x21\xd0\x65\xa4\x29\xc1", 20), result); + } - CPPUNIT_ASSERT_EQUAL(createByteArray("\x4b\x00\x79\x1\xb7\x65\x48\x9a\xbe\xad\x49\xd9\x26\xf7\x21\xd0\x65\xa4\x29\xc1", 20), result); - } - - private: - boost::shared_ptr<CryptoProvider> crypto; + private: + std::shared_ptr<CryptoProvider> crypto; }; CPPUNIT_TEST_SUITE_REGISTRATION(PBKDF2Test); |