aria2/test/ARC4Test.cc
Nils Maier 99f170b888 Provide internal ARC4 implementation
Now you can build bittorrent support without without external
libraries, meaning you can skip libnettle, libgmp, libgcrypt, GnuTLS and
OpenSSL on OSX (for now).
2013-09-24 19:11:26 +02:00

54 lines
1.1 KiB
C++

#include "ARC4Encryptor.h"
#include <cstring>
#include <cppunit/extensions/HelperMacros.h>
#include "Exception.h"
#include "util.h"
namespace aria2 {
class ARC4Test:public CppUnit::TestFixture {
CPPUNIT_TEST_SUITE(ARC4Test);
CPPUNIT_TEST(testEncrypt);
CPPUNIT_TEST_SUITE_END();
public:
void setUp() {}
void tearDown() {}
void testEncrypt();
};
CPPUNIT_TEST_SUITE_REGISTRATION(ARC4Test);
void ARC4Test::testEncrypt()
{
ARC4Encryptor enc;
ARC4Encryptor dec;
const size_t LEN = 20;
unsigned char key[LEN];
memset(key, 0, LEN);
util::generateRandomData(key, sizeof(key));
enc.init(key, sizeof(key));
dec.init(key, sizeof(key));
unsigned char encrypted[LEN];
unsigned char decrypted[LEN];
enc.encrypt(LEN, encrypted, key);
CPPUNIT_ASSERT(memcmp(key, encrypted, LEN) != 0);
dec.encrypt(LEN, decrypted, encrypted);
CPPUNIT_ASSERT(memcmp(key, decrypted, LEN) == 0);
// once more
enc.encrypt(LEN, encrypted, key);
CPPUNIT_ASSERT(memcmp(key, encrypted, LEN) != 0);
dec.encrypt(LEN, decrypted, encrypted);
CPPUNIT_ASSERT(memcmp(key, decrypted, LEN) == 0);
}
} // namespace aria2