blob: 4ed4e7c8000e5cf81772346adf6da280d405a1a3 [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_sal.hxx"
#include <testshl/simpleheader.hxx>
#include <rtl/strbuf.hxx>
#include <rtl/cipher.h>
// -----------------------------------------------------------------------------
namespace rtl_cipher
{
rtl::OString createHex(sal_uInt8 *_pKeyBuffer, sal_uInt32 _nKeyLen)
{
// Create hex-value string from the value to keep the string size minimal
rtl::OStringBuffer aBuffer( _nKeyLen * 2 + 1 );
for ( sal_uInt32 i = 0; i < _nKeyLen; i++ )
{
sal_Int32 nValue = (sal_Int32)_pKeyBuffer[i];
if (nValue < 16) // maximul hex value for 1 byte
{
aBuffer.append( sal_Int32(0), 16 /* radix */ );
}
aBuffer.append( nValue, 16 /* radix */ );
}
return aBuffer.makeStringAndClear();
}
// -----------------------------------------------------------------------------
class create : public CppUnit::TestFixture
{
public:
// initialise your test code values here.
void setUp()
{
}
void tearDown()
{
}
void create_001()
{
rtlCipher aCipher = rtl_cipher_create(rtl_Cipher_AlgorithmBF, rtl_Cipher_ModeECB);
CPPUNIT_ASSERT_MESSAGE("create failed.", aCipher != NULL);
rtl_cipher_destroy(aCipher);
}
void create_002()
{
rtlCipher aCipher = rtl_cipher_create(rtl_Cipher_AlgorithmInvalid, rtl_Cipher_ModeECB);
CPPUNIT_ASSERT_MESSAGE("create provide wrong object.", aCipher == NULL);
}
void create_003()
{
rtlCipher aCipher = rtl_cipher_create(rtl_Cipher_AlgorithmBF, rtl_Cipher_ModeCBC);
CPPUNIT_ASSERT_MESSAGE("create failed.", aCipher != NULL);
rtl_cipher_destroy(aCipher);
}
void create_004()
{
rtlCipher aCipher = rtl_cipher_create(rtl_Cipher_AlgorithmInvalid, rtl_Cipher_ModeCBC);
CPPUNIT_ASSERT_MESSAGE("create provide wrong object.", aCipher == NULL);
}
void create_005()
{
rtlCipher aCipher = rtl_cipher_create(rtl_Cipher_AlgorithmBF, rtl_Cipher_ModeStream);
CPPUNIT_ASSERT_MESSAGE("create failed.", aCipher != NULL);
rtl_cipher_destroy(aCipher);
}
void create_006()
{
rtlCipher aCipher = rtl_cipher_create(rtl_Cipher_AlgorithmInvalid, rtl_Cipher_ModeStream);
CPPUNIT_ASSERT_MESSAGE("create provide wrong object.", aCipher == NULL);
}
void create_007()
{
rtlCipher aCipher = rtl_cipher_create(rtl_Cipher_AlgorithmBF, rtl_Cipher_ModeInvalid);
CPPUNIT_ASSERT_MESSAGE("create provide wrong object.", aCipher == NULL);
}
void create_008()
{
rtlCipher aCipher = rtl_cipher_create(rtl_Cipher_AlgorithmInvalid, rtl_Cipher_ModeInvalid);
CPPUNIT_ASSERT_MESSAGE("create provide wrong object.", aCipher == NULL);
}
// Change the following lines only, if you add, remove or rename
// member functions of the current class,
// because these macros are need by auto register mechanism.
CPPUNIT_TEST_SUITE(create);
CPPUNIT_TEST(create_001);
CPPUNIT_TEST(create_002);
CPPUNIT_TEST(create_003);
CPPUNIT_TEST(create_004);
CPPUNIT_TEST(create_005);
CPPUNIT_TEST(create_006);
CPPUNIT_TEST(create_007);
CPPUNIT_TEST(create_008);
CPPUNIT_TEST_SUITE_END();
}; // class create
// -----------------------------------------------------------------------------
class createBF : public CppUnit::TestFixture
{
public:
// initialise your test code values here.
void setUp()
{
}
void tearDown()
{
}
void createBF_001()
{
rtlCipher aCipher = rtl_cipher_createBF(rtl_Cipher_ModeECB);
CPPUNIT_ASSERT_MESSAGE("create failed.", aCipher != NULL);
rtl_cipher_destroy(aCipher);
}
void createBF_002()
{
rtlCipher aCipher = rtl_cipher_createBF(rtl_Cipher_ModeCBC);
CPPUNIT_ASSERT_MESSAGE("create failed.", aCipher != NULL);
rtl_cipher_destroy(aCipher);
}
void createBF_003()
{
rtlCipher aCipher = rtl_cipher_createBF(rtl_Cipher_ModeStream);
CPPUNIT_ASSERT_MESSAGE("create failed.", aCipher != NULL);
rtl_cipher_destroy(aCipher);
}
void createBF_004()
{
rtlCipher aCipher = rtl_cipher_createBF(rtl_Cipher_ModeInvalid);
CPPUNIT_ASSERT_MESSAGE("create provide wrong object.", aCipher == NULL);
// rtl_cipher_destroy(aCipher);
}
// Change the following lines only, if you add, remove or rename
// member functions of the current class,
// because these macros are need by auto register mechanism.
CPPUNIT_TEST_SUITE(createBF);
CPPUNIT_TEST(createBF_001);
CPPUNIT_TEST(createBF_002);
CPPUNIT_TEST(createBF_003);
CPPUNIT_TEST(createBF_004);
CPPUNIT_TEST_SUITE_END();
}; // class createBF
// -----------------------------------------------------------------------------
class decode : public CppUnit::TestFixture
{
public:
// initialise your test code values here.
void setUp()
{
}
void tearDown()
{
}
void test_encode(sal_uInt8 _nKeyValue, sal_uInt8 _nArgValue, rtl::OString const& _sPlainTextStr)
{
rtlCipher aCipher = rtl_cipher_create(rtl_Cipher_AlgorithmBF, rtl_Cipher_ModeECB);
CPPUNIT_ASSERT_MESSAGE("create failed.", aCipher != NULL);
sal_uInt32 nKeyLen = 16;
sal_uInt8 *pKeyBuffer = new sal_uInt8[ nKeyLen ];
memset(pKeyBuffer, 0, nKeyLen);
pKeyBuffer[0] = _nKeyValue;
sal_uInt32 nArgLen = 16;
sal_uInt8 *pArgBuffer = new sal_uInt8[ nArgLen ];
memset(pArgBuffer, 0, nArgLen);
pArgBuffer[0] = _nArgValue;
t_print(T_VERBOSE, " init Key: %s\n", createHex(pKeyBuffer, nKeyLen).getStr());
t_print(T_VERBOSE, " init Arg: %s\n", createHex(pArgBuffer, nArgLen).getStr());
rtlCipherError aError = rtl_cipher_init(aCipher, rtl_Cipher_DirectionEncode, pKeyBuffer, nKeyLen, pArgBuffer, nArgLen);
CPPUNIT_ASSERT_MESSAGE("wrong init", aError == rtl_Cipher_E_None);
sal_uInt32 nPlainTextLen = 16;
sal_uInt8 *pPlainTextBuffer = new sal_uInt8[ nPlainTextLen ];
memset(pPlainTextBuffer, 0, nPlainTextLen);
strncpy((char*)pPlainTextBuffer, _sPlainTextStr.getStr(), 16);
sal_uInt32 nCipherLen = 16;
sal_uInt8 *pCipherBuffer = new sal_uInt8[ nCipherLen ];
memset(pCipherBuffer, 0, nCipherLen);
/* rtlCipherError */ aError = rtl_cipher_encode(aCipher, pPlainTextBuffer, nPlainTextLen, pCipherBuffer, nCipherLen);
CPPUNIT_ASSERT_MESSAGE("wrong encode", aError == rtl_Cipher_E_None);
t_print(T_VERBOSE, " Key: %s\n", createHex(pKeyBuffer, nKeyLen).getStr());
t_print(T_VERBOSE, " Arg: %s\n", createHex(pArgBuffer, nArgLen).getStr());
t_print(T_VERBOSE, " Plain: %s\n", createHex(pPlainTextBuffer, nPlainTextLen).getStr());
t_print( "Cipher Buf: %s\n", createHex(pCipherBuffer, nCipherLen).getStr());
sal_uInt32 nPlainText2Len = 16;
sal_uInt8 *pPlainText2Buffer = new sal_uInt8[ nPlainText2Len ];
memset(pPlainText2Buffer, 0, nPlainText2Len);
/* rtlCipherError */ aError = rtl_cipher_decode(aCipher, pCipherBuffer, nCipherLen, pPlainText2Buffer, nPlainText2Len);
CPPUNIT_ASSERT_MESSAGE("decode should not work", aError != rtl_Cipher_E_None);
// rtl::OString sPlainText2Str((char*)pPlainText2Buffer, nPlainText2Len);
// t_print(T_VERBOSE, " Plain: %s\n", createHex(pPlainText2Buffer, nPlainText2Len).getStr());
// t_print(T_VERBOSE, " ascii: %s\n", sPlainText2Str.getStr());
//
// // t_print(" Buf: %s\n", createHex(pCipherBuffer, nCipherLen).getStr());
//
// sal_Int32 nCompare = memcmp(pPlainTextBuffer, pPlainText2Buffer, 16);
//
// CPPUNIT_ASSERT_MESSAGE("compare between plain and decoded plain failed", nCompare == 0);
//
// delete [] pPlainText2Buffer;
//
// delete [] pCipherBuffer;
// delete [] pPlainTextBuffer;
//
// delete [] pArgBuffer;
// delete [] pKeyBuffer;
//
// rtl_cipher_destroy(aCipher);
}
void test_encode_and_decode(sal_uInt8 _nKeyValue, sal_uInt8 _nArgValue, rtl::OString const& _sPlainTextStr)
{
rtlCipher aCipher = rtl_cipher_create(rtl_Cipher_AlgorithmBF, rtl_Cipher_ModeECB);
CPPUNIT_ASSERT_MESSAGE("create failed.", aCipher != NULL);
sal_uInt32 nKeyLen = 16;
sal_uInt8 *pKeyBuffer = new sal_uInt8[ nKeyLen ];
memset(pKeyBuffer, 0, nKeyLen);
pKeyBuffer[0] = _nKeyValue;
sal_uInt32 nArgLen = 16;
sal_uInt8 *pArgBuffer = new sal_uInt8[ nArgLen ];
memset(pArgBuffer, 0, nArgLen);
pArgBuffer[0] = _nArgValue;
t_print(T_VERBOSE, " init Key: %s\n", createHex(pKeyBuffer, nKeyLen).getStr());
t_print(T_VERBOSE, " init Arg: %s\n", createHex(pArgBuffer, nArgLen).getStr());
rtlCipherError aError = rtl_cipher_init(aCipher, rtl_Cipher_DirectionBoth, pKeyBuffer, nKeyLen, pArgBuffer, nArgLen);
CPPUNIT_ASSERT_MESSAGE("wrong init", aError == rtl_Cipher_E_None);
sal_uInt32 nPlainTextLen = 16;
sal_uInt8 *pPlainTextBuffer = new sal_uInt8[ nPlainTextLen ];
memset(pPlainTextBuffer, 0, nPlainTextLen);
strncpy((char*)pPlainTextBuffer, _sPlainTextStr.getStr(), 16);
sal_uInt32 nCipherLen = 16;
sal_uInt8 *pCipherBuffer = new sal_uInt8[ nCipherLen ];
memset(pCipherBuffer, 0, nCipherLen);
/* rtlCipherError */ aError = rtl_cipher_encode(aCipher, pPlainTextBuffer, nPlainTextLen, pCipherBuffer, nCipherLen);
CPPUNIT_ASSERT_MESSAGE("wrong encode", aError == rtl_Cipher_E_None);
t_print(T_VERBOSE, " Key: %s\n", createHex(pKeyBuffer, nKeyLen).getStr());
t_print(T_VERBOSE, " Arg: %s\n", createHex(pArgBuffer, nArgLen).getStr());
t_print(T_VERBOSE, " Plain: %s\n", createHex(pPlainTextBuffer, nPlainTextLen).getStr());
t_print( "Cipher Buf: %s\n", createHex(pCipherBuffer, nCipherLen).getStr());
sal_uInt32 nPlainText2Len = 16;
sal_uInt8 *pPlainText2Buffer = new sal_uInt8[ nPlainText2Len ];
memset(pPlainText2Buffer, 0, nPlainText2Len);
/* rtlCipherError */ aError = rtl_cipher_decode(aCipher, pCipherBuffer, nCipherLen, pPlainText2Buffer, nPlainText2Len);
CPPUNIT_ASSERT_MESSAGE("wrong decode", aError == rtl_Cipher_E_None);
rtl::OString sPlainText2Str((char*)pPlainText2Buffer, nPlainText2Len);
t_print(T_VERBOSE, " Plain: %s\n", createHex(pPlainText2Buffer, nPlainText2Len).getStr());
t_print(T_VERBOSE, " as ascii: %s\n", sPlainText2Str.getStr());
// t_print(" Buf: %s\n", createHex(pCipherBuffer, nCipherLen).getStr());
sal_Int32 nCompare = memcmp(pPlainTextBuffer, pPlainText2Buffer, 16);
CPPUNIT_ASSERT_MESSAGE("compare between plain and decoded plain failed", nCompare == 0);
delete [] pPlainText2Buffer;
delete [] pCipherBuffer;
delete [] pPlainTextBuffer;
delete [] pArgBuffer;
delete [] pKeyBuffer;
rtl_cipher_destroy(aCipher);
}
void decode_001()
{
test_encode_and_decode(0,0,"");
test_encode_and_decode(0,0,"hallo");
test_encode_and_decode(1,0,"B2Aahg5B");
test_encode_and_decode(1,2,"Longer text string");
}
void decode_002()
{
test_encode(0,0,"");
test_encode(0,0,"hallo");
test_encode(1,0,"B2Aahg5B");
test_encode(1,2,"Longer text string");
}
// Change the following lines only, if you add, remove or rename
// member functions of the current class,
// because these macros are need by auto register mechanism.
CPPUNIT_TEST_SUITE(decode);
CPPUNIT_TEST(decode_001);
CPPUNIT_TEST(decode_002);
CPPUNIT_TEST_SUITE_END();
}; // class decode
// -----------------------------------------------------------------------------
class decodeBF : public CppUnit::TestFixture
{
public:
// initialise your test code values here.
void setUp()
{
}
void tearDown()
{
}
void decodeBF_001()
{
}
// Change the following lines only, if you add, remove or rename
// member functions of the current class,
// because these macros are need by auto register mechanism.
CPPUNIT_TEST_SUITE(decodeBF);
CPPUNIT_TEST(decodeBF_001);
CPPUNIT_TEST_SUITE_END();
}; // class decodeBF
// -----------------------------------------------------------------------------
class destroy : public CppUnit::TestFixture
{
public:
// initialise your test code values here.
void setUp()
{
}
void tearDown()
{
}
void destroy_001()
{
rtlCipher aCipher = rtl_cipher_create(rtl_Cipher_AlgorithmBF, rtl_Cipher_ModeCBC);
CPPUNIT_ASSERT_MESSAGE("create failed.", aCipher != NULL);
rtl_cipher_destroy(aCipher);
}
// Change the following lines only, if you add, remove or rename
// member functions of the current class,
// because these macros are need by auto register mechanism.
CPPUNIT_TEST_SUITE(destroy);
CPPUNIT_TEST(destroy_001);
CPPUNIT_TEST_SUITE_END();
}; // class destroy
// -----------------------------------------------------------------------------
class destroyBF : public CppUnit::TestFixture
{
public:
// initialise your test code values here.
void setUp()
{
}
void tearDown()
{
}
void destroyBF_001()
{
rtlCipher aCipher = rtl_cipher_createBF(rtl_Cipher_ModeECB);
CPPUNIT_ASSERT_MESSAGE("create failed.", aCipher != NULL);
rtl_cipher_destroyBF(aCipher);
// more proforma
// should not GPF
}
// Change the following lines only, if you add, remove or rename
// member functions of the current class,
// because these macros are need by auto register mechanism.
CPPUNIT_TEST_SUITE(destroyBF);
CPPUNIT_TEST(destroyBF_001);
CPPUNIT_TEST_SUITE_END();
}; // class destroyBF
// -----------------------------------------------------------------------------
class encode : public CppUnit::TestFixture
{
public:
// initialise your test code values here.
void setUp()
{
}
void tearDown()
{
}
void test_encode(sal_uInt8 _nKeyValue, sal_uInt8 _nArgValue, sal_uInt8 _nDataValue)
{
rtlCipher aCipher = rtl_cipher_create(rtl_Cipher_AlgorithmBF, rtl_Cipher_ModeECB);
CPPUNIT_ASSERT_MESSAGE("create failed.", aCipher != NULL);
sal_uInt32 nKeyLen = 16;
sal_uInt8 *pKeyBuffer = new sal_uInt8[ nKeyLen ];
memset(pKeyBuffer, 0, nKeyLen);
pKeyBuffer[0] = _nKeyValue;
sal_uInt32 nArgLen = 16;
sal_uInt8 *pArgBuffer = new sal_uInt8[ nArgLen ];
memset(pArgBuffer, 0, nArgLen);
pArgBuffer[0] = _nArgValue;
t_print(T_VERBOSE, "init Key: %s\n", createHex(pKeyBuffer, nKeyLen).getStr());
t_print(T_VERBOSE, "init Arg: %s\n", createHex(pArgBuffer, nArgLen).getStr());
rtlCipherError aError = rtl_cipher_init(aCipher, rtl_Cipher_DirectionEncode, pKeyBuffer, nKeyLen, pArgBuffer, nArgLen);
CPPUNIT_ASSERT_MESSAGE("wrong init", aError == rtl_Cipher_E_None);
sal_uInt32 nDataLen = 16;
sal_uInt8 *pDataBuffer = new sal_uInt8[ nDataLen ];
memset(pDataBuffer, 0, nDataLen);
pDataBuffer[0] = _nDataValue;
sal_uInt32 nLen = 16;
sal_uInt8 *pBuffer = new sal_uInt8[ nLen ];
memset(pBuffer, 0, nLen);
/* rtlCipherError */ aError = rtl_cipher_encode(aCipher, pDataBuffer, nDataLen, pBuffer, nLen);
CPPUNIT_ASSERT_MESSAGE("wrong encode", aError == rtl_Cipher_E_None);
t_print(T_VERBOSE, " Key: %s\n", createHex(pKeyBuffer, nKeyLen).getStr());
t_print(T_VERBOSE, " Arg: %s\n", createHex(pArgBuffer, nArgLen).getStr());
t_print(T_VERBOSE, "Data: %s\n", createHex(pDataBuffer, nDataLen).getStr());
t_print(T_VERBOSE, " Buf: %s\n", createHex(pBuffer, nLen).getStr());
delete [] pBuffer;
delete [] pDataBuffer;
delete [] pArgBuffer;
delete [] pKeyBuffer;
rtl_cipher_destroy(aCipher);
}
void encode_001()
{
test_encode(0,0,0);
test_encode(1,0,0);
test_encode(0,1,0);
test_encode(1,1,0);
test_encode(0,0,1);
test_encode(1,0,1);
test_encode(0,1,1);
test_encode(1,1,1);
}
// Change the following lines only, if you add, remove or rename
// member functions of the current class,
// because these macros are need by auto register mechanism.
CPPUNIT_TEST_SUITE(encode);
CPPUNIT_TEST(encode_001);
CPPUNIT_TEST_SUITE_END();
}; // class encode
// -----------------------------------------------------------------------------
class encodeBF : public CppUnit::TestFixture
{
public:
// initialise your test code values here.
void setUp()
{
}
void tearDown()
{
}
void encodeBF_001()
{
}
// Change the following lines only, if you add, remove or rename
// member functions of the current class,
// because these macros are need by auto register mechanism.
CPPUNIT_TEST_SUITE(encodeBF);
CPPUNIT_TEST(encodeBF_001);
CPPUNIT_TEST_SUITE_END();
}; // class encodeBF
// -----------------------------------------------------------------------------
class init : public CppUnit::TestFixture
{
public:
// initialise your test code values here.
void setUp()
{
}
void tearDown()
{
}
void init_001()
{
rtlCipher aCipher = rtl_cipher_create(rtl_Cipher_AlgorithmBF, rtl_Cipher_ModeECB);
CPPUNIT_ASSERT_MESSAGE("create failed.", aCipher != NULL);
sal_uInt32 nKeyLen = 16;
sal_uInt8 *pKeyBuffer = new sal_uInt8[ nKeyLen ];
memset(pKeyBuffer, 0, nKeyLen);
sal_uInt32 nArgLen = 16;
sal_uInt8 *pArgBuffer = new sal_uInt8[ nArgLen ];
memset(pArgBuffer, 0, nArgLen);
t_print(T_VERBOSE, "Key: %s\n", createHex(pKeyBuffer, nKeyLen).getStr());
t_print(T_VERBOSE, "Arg: %s\n", createHex(pArgBuffer, nArgLen).getStr());
rtlCipherError aError = rtl_cipher_init(aCipher, rtl_Cipher_DirectionEncode, pKeyBuffer, nKeyLen, pArgBuffer, nArgLen);
CPPUNIT_ASSERT_MESSAGE("wrong init", aError == rtl_Cipher_E_None);
t_print(T_VERBOSE, "Key: %s\n", createHex(pKeyBuffer, nKeyLen).getStr());
t_print(T_VERBOSE, "Arg: %s\n", createHex(pArgBuffer, nArgLen).getStr());
delete [] pArgBuffer;
delete [] pKeyBuffer;
rtl_cipher_destroy(aCipher);
}
void init_002()
{
rtlCipher aCipher = rtl_cipher_create(rtl_Cipher_AlgorithmBF, rtl_Cipher_ModeECB);
CPPUNIT_ASSERT_MESSAGE("create failed.", aCipher != NULL);
sal_uInt32 nKeyLen = 16;
sal_uInt8 *pKeyBuffer = new sal_uInt8[ nKeyLen ];
memset(pKeyBuffer, 0, nKeyLen);
pKeyBuffer[0] = 1;
sal_uInt32 nArgLen = 16;
sal_uInt8 *pArgBuffer = new sal_uInt8[ nArgLen ];
memset(pArgBuffer, 0, nArgLen);
t_print(T_VERBOSE, "Key: %s\n", createHex(pKeyBuffer, nKeyLen).getStr());
t_print(T_VERBOSE, "Arg: %s\n", createHex(pArgBuffer, nArgLen).getStr());
rtlCipherError aError = rtl_cipher_init(aCipher, rtl_Cipher_DirectionEncode, pKeyBuffer, nKeyLen, pArgBuffer, nArgLen);
CPPUNIT_ASSERT_MESSAGE("wrong init", aError == rtl_Cipher_E_None);
t_print(T_VERBOSE, "Key: %s\n", createHex(pKeyBuffer, nKeyLen).getStr());
t_print(T_VERBOSE, "Arg: %s\n", createHex(pArgBuffer, nArgLen).getStr());
delete [] pArgBuffer;
delete [] pKeyBuffer;
rtl_cipher_destroy(aCipher);
}
void init_003()
{
rtlCipher aCipher = rtl_cipher_create(rtl_Cipher_AlgorithmBF, rtl_Cipher_ModeECB);
CPPUNIT_ASSERT_MESSAGE("create failed.", aCipher != NULL);
sal_uInt32 nKeyLen = 16;
sal_uInt8 *pKeyBuffer = new sal_uInt8[ nKeyLen ];
memset(pKeyBuffer, 0, nKeyLen);
sal_uInt32 nArgLen = 16;
sal_uInt8 *pArgBuffer = new sal_uInt8[ nArgLen ];
memset(pArgBuffer, 0, nArgLen);
pArgBuffer[0] = 1;
t_print(T_VERBOSE, "Key: %s\n", createHex(pKeyBuffer, nKeyLen).getStr());
t_print(T_VERBOSE, "Arg: %s\n", createHex(pArgBuffer, nArgLen).getStr());
rtlCipherError aError = rtl_cipher_init(aCipher, rtl_Cipher_DirectionEncode, pKeyBuffer, nKeyLen, pArgBuffer, nArgLen);
CPPUNIT_ASSERT_MESSAGE("wrong init", aError == rtl_Cipher_E_None);
t_print(T_VERBOSE, "Key: %s\n", createHex(pKeyBuffer, nKeyLen).getStr());
t_print(T_VERBOSE, "Arg: %s\n", createHex(pArgBuffer, nArgLen).getStr());
delete [] pArgBuffer;
delete [] pKeyBuffer;
rtl_cipher_destroy(aCipher);
}
void init_004()
{
rtlCipher aCipher = rtl_cipher_create(rtl_Cipher_AlgorithmBF, rtl_Cipher_ModeECB);
CPPUNIT_ASSERT_MESSAGE("create failed.", aCipher != NULL);
sal_uInt32 nKeyLen = 16;
sal_uInt8 *pKeyBuffer = new sal_uInt8[ nKeyLen ];
memset(pKeyBuffer, 0, nKeyLen);
pKeyBuffer[0] = 1;
sal_uInt32 nArgLen = 16;
sal_uInt8 *pArgBuffer = new sal_uInt8[ nArgLen ];
memset(pArgBuffer, 0, nArgLen);
pArgBuffer[0] = 1;
t_print(T_VERBOSE, "Key: %s\n", createHex(pKeyBuffer, nKeyLen).getStr());
t_print(T_VERBOSE, "Arg: %s\n", createHex(pArgBuffer, nArgLen).getStr());
rtlCipherError aError = rtl_cipher_init(aCipher, rtl_Cipher_DirectionEncode, pKeyBuffer, nKeyLen, pArgBuffer, nArgLen);
CPPUNIT_ASSERT_MESSAGE("wrong init", aError == rtl_Cipher_E_None);
t_print(T_VERBOSE, "Key: %s\n", createHex(pKeyBuffer, nKeyLen).getStr());
t_print(T_VERBOSE, "Arg: %s\n", createHex(pArgBuffer, nArgLen).getStr());
delete [] pArgBuffer;
delete [] pKeyBuffer;
rtl_cipher_destroy(aCipher);
}
// Change the following lines only, if you add, remove or rename
// member functions of the current class,
// because these macros are need by auto register mechanism.
CPPUNIT_TEST_SUITE(init);
CPPUNIT_TEST(init_001);
CPPUNIT_TEST(init_002);
CPPUNIT_TEST(init_003);
CPPUNIT_TEST(init_004);
CPPUNIT_TEST_SUITE_END();
}; // class init
// -----------------------------------------------------------------------------
class initBF : public CppUnit::TestFixture
{
public:
// initialise your test code values here.
void setUp()
{
}
void tearDown()
{
}
void initBF_001()
{
// seems to be the same as init, so empty
}
// Change the following lines only, if you add, remove or rename
// member functions of the current class,
// because these macros are need by auto register mechanism.
CPPUNIT_TEST_SUITE(initBF);
CPPUNIT_TEST(initBF_001);
CPPUNIT_TEST_SUITE_END();
}; // class initBF
// -----------------------------------------------------------------------------
CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(rtl_cipher::create, "rtl_cipher");
CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(rtl_cipher::createBF, "rtl_cipher");
CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(rtl_cipher::decode, "rtl_cipher");
CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(rtl_cipher::decodeBF, "rtl_cipher");
CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(rtl_cipher::destroy, "rtl_cipher");
CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(rtl_cipher::destroyBF, "rtl_cipher");
CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(rtl_cipher::encode, "rtl_cipher");
CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(rtl_cipher::encodeBF, "rtl_cipher");
CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(rtl_cipher::init, "rtl_cipher");
CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(rtl_cipher::initBF, "rtl_cipher");
} // namespace rtl_cipher
// -----------------------------------------------------------------------------
// this macro creates an empty function, which will called by the RegisterAllFunctions()
// to let the user the possibility to also register some functions by hand.
NOADDITIONAL;