187d2adbcSAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 387d2adbcSAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 487d2adbcSAndrew Rist * or more contributor license agreements. See the NOTICE file 587d2adbcSAndrew Rist * distributed with this work for additional information 687d2adbcSAndrew Rist * regarding copyright ownership. The ASF licenses this file 787d2adbcSAndrew Rist * to you under the Apache License, Version 2.0 (the 887d2adbcSAndrew Rist * "License"); you may not use this file except in compliance 987d2adbcSAndrew Rist * with the License. You may obtain a copy of the License at 10cdf0e10cSrcweir * 1187d2adbcSAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12cdf0e10cSrcweir * 1387d2adbcSAndrew Rist * Unless required by applicable law or agreed to in writing, 1487d2adbcSAndrew Rist * software distributed under the License is distributed on an 1587d2adbcSAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 1687d2adbcSAndrew Rist * KIND, either express or implied. See the License for the 1787d2adbcSAndrew Rist * specific language governing permissions and limitations 1887d2adbcSAndrew Rist * under the License. 19cdf0e10cSrcweir * 2087d2adbcSAndrew Rist *************************************************************/ 2187d2adbcSAndrew Rist 2287d2adbcSAndrew Rist 23cdf0e10cSrcweir 24cdf0e10cSrcweir 25cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 26cdf0e10cSrcweir #include "precompiled_sal.hxx" 27cdf0e10cSrcweir 28*af2711e0SDamjan Jovanovic #include "gtest/gtest.h" 29cdf0e10cSrcweir #include <rtl/strbuf.hxx> 30cdf0e10cSrcweir #include <rtl/cipher.h> 31cdf0e10cSrcweir 32cdf0e10cSrcweir // ----------------------------------------------------------------------------- 33cdf0e10cSrcweir namespace rtl_cipher 34cdf0e10cSrcweir { 35cdf0e10cSrcweir 36cdf0e10cSrcweir rtl::OString createHex(sal_uInt8 *_pKeyBuffer, sal_uInt32 _nKeyLen) 37cdf0e10cSrcweir { 38cdf0e10cSrcweir // Create hex-value string from the value to keep the string size minimal 39cdf0e10cSrcweir rtl::OStringBuffer aBuffer( _nKeyLen * 2 + 1 ); 40cdf0e10cSrcweir for ( sal_uInt32 i = 0; i < _nKeyLen; i++ ) 41cdf0e10cSrcweir { 42cdf0e10cSrcweir sal_Int32 nValue = (sal_Int32)_pKeyBuffer[i]; 43cdf0e10cSrcweir if (nValue < 16) // maximul hex value for 1 byte 44cdf0e10cSrcweir { 45*af2711e0SDamjan Jovanovic aBuffer.append( sal_Int32(0), sal_Int16(16) /* radix */ ); 46cdf0e10cSrcweir } 47cdf0e10cSrcweir aBuffer.append( nValue, 16 /* radix */ ); 48cdf0e10cSrcweir } 49cdf0e10cSrcweir 50cdf0e10cSrcweir return aBuffer.makeStringAndClear(); 51cdf0e10cSrcweir } 52cdf0e10cSrcweir 53cdf0e10cSrcweir // ----------------------------------------------------------------------------- 54cdf0e10cSrcweir 55*af2711e0SDamjan Jovanovic class create : public ::testing::Test 56cdf0e10cSrcweir { 57cdf0e10cSrcweir public: 58cdf0e10cSrcweir // initialise your test code values here. 59*af2711e0SDamjan Jovanovic void SetUp() 60cdf0e10cSrcweir { 61cdf0e10cSrcweir } 62cdf0e10cSrcweir 63*af2711e0SDamjan Jovanovic void TearDown() 64cdf0e10cSrcweir { 65cdf0e10cSrcweir } 66cdf0e10cSrcweir }; // class create 67cdf0e10cSrcweir 68*af2711e0SDamjan Jovanovic TEST_F(create, create_001) 69*af2711e0SDamjan Jovanovic { 70*af2711e0SDamjan Jovanovic rtlCipher aCipher = rtl_cipher_create(rtl_Cipher_AlgorithmBF, rtl_Cipher_ModeECB); 71*af2711e0SDamjan Jovanovic ASSERT_TRUE(aCipher != NULL) << "create failed."; 72*af2711e0SDamjan Jovanovic rtl_cipher_destroy(aCipher); 73*af2711e0SDamjan Jovanovic } 74*af2711e0SDamjan Jovanovic TEST_F(create, create_002) 75*af2711e0SDamjan Jovanovic { 76*af2711e0SDamjan Jovanovic rtlCipher aCipher = rtl_cipher_create(rtl_Cipher_AlgorithmInvalid, rtl_Cipher_ModeECB); 77*af2711e0SDamjan Jovanovic ASSERT_TRUE(aCipher == NULL) << "create provide wrong object."; 78*af2711e0SDamjan Jovanovic } 79*af2711e0SDamjan Jovanovic TEST_F(create, create_003) 80*af2711e0SDamjan Jovanovic { 81*af2711e0SDamjan Jovanovic rtlCipher aCipher = rtl_cipher_create(rtl_Cipher_AlgorithmBF, rtl_Cipher_ModeCBC); 82*af2711e0SDamjan Jovanovic ASSERT_TRUE(aCipher != NULL) << "create failed."; 83*af2711e0SDamjan Jovanovic rtl_cipher_destroy(aCipher); 84*af2711e0SDamjan Jovanovic } 85*af2711e0SDamjan Jovanovic TEST_F(create, create_004) 86*af2711e0SDamjan Jovanovic { 87*af2711e0SDamjan Jovanovic rtlCipher aCipher = rtl_cipher_create(rtl_Cipher_AlgorithmInvalid, rtl_Cipher_ModeCBC); 88*af2711e0SDamjan Jovanovic ASSERT_TRUE(aCipher == NULL) << "create provide wrong object."; 89*af2711e0SDamjan Jovanovic } 90*af2711e0SDamjan Jovanovic TEST_F(create, create_005) 91*af2711e0SDamjan Jovanovic { 92*af2711e0SDamjan Jovanovic rtlCipher aCipher = rtl_cipher_create(rtl_Cipher_AlgorithmBF, rtl_Cipher_ModeStream); 93*af2711e0SDamjan Jovanovic ASSERT_TRUE(aCipher != NULL) << "create failed."; 94*af2711e0SDamjan Jovanovic rtl_cipher_destroy(aCipher); 95*af2711e0SDamjan Jovanovic } 96*af2711e0SDamjan Jovanovic TEST_F(create, create_006) 97*af2711e0SDamjan Jovanovic { 98*af2711e0SDamjan Jovanovic rtlCipher aCipher = rtl_cipher_create(rtl_Cipher_AlgorithmInvalid, rtl_Cipher_ModeStream); 99*af2711e0SDamjan Jovanovic ASSERT_TRUE(aCipher == NULL) << "create provide wrong object."; 100*af2711e0SDamjan Jovanovic } 101*af2711e0SDamjan Jovanovic TEST_F(create, create_007) 102*af2711e0SDamjan Jovanovic { 103*af2711e0SDamjan Jovanovic rtlCipher aCipher = rtl_cipher_create(rtl_Cipher_AlgorithmBF, rtl_Cipher_ModeInvalid); 104*af2711e0SDamjan Jovanovic ASSERT_TRUE(aCipher == NULL) << "create provide wrong object."; 105*af2711e0SDamjan Jovanovic } 106*af2711e0SDamjan Jovanovic TEST_F(create, create_008) 107*af2711e0SDamjan Jovanovic { 108*af2711e0SDamjan Jovanovic rtlCipher aCipher = rtl_cipher_create(rtl_Cipher_AlgorithmInvalid, rtl_Cipher_ModeInvalid); 109*af2711e0SDamjan Jovanovic ASSERT_TRUE(aCipher == NULL) << "create provide wrong object."; 110*af2711e0SDamjan Jovanovic } 111cdf0e10cSrcweir // ----------------------------------------------------------------------------- 112*af2711e0SDamjan Jovanovic class createBF : public ::testing::Test 113cdf0e10cSrcweir { 114cdf0e10cSrcweir public: 115cdf0e10cSrcweir // initialise your test code values here. 116*af2711e0SDamjan Jovanovic void SetUp() 117cdf0e10cSrcweir { 118cdf0e10cSrcweir } 119cdf0e10cSrcweir 120*af2711e0SDamjan Jovanovic void TearDown() 121cdf0e10cSrcweir { 122cdf0e10cSrcweir } 123*af2711e0SDamjan Jovanovic }; // class createBF 124cdf0e10cSrcweir 125*af2711e0SDamjan Jovanovic TEST_F(createBF, createBF_001) 126cdf0e10cSrcweir { 127cdf0e10cSrcweir rtlCipher aCipher = rtl_cipher_createBF(rtl_Cipher_ModeECB); 128*af2711e0SDamjan Jovanovic ASSERT_TRUE(aCipher != NULL) << "create failed."; 129cdf0e10cSrcweir rtl_cipher_destroy(aCipher); 130cdf0e10cSrcweir } 131*af2711e0SDamjan Jovanovic TEST_F(createBF, createBF_002) 132cdf0e10cSrcweir { 133cdf0e10cSrcweir rtlCipher aCipher = rtl_cipher_createBF(rtl_Cipher_ModeCBC); 134*af2711e0SDamjan Jovanovic ASSERT_TRUE(aCipher != NULL) << "create failed."; 135cdf0e10cSrcweir rtl_cipher_destroy(aCipher); 136cdf0e10cSrcweir } 137*af2711e0SDamjan Jovanovic TEST_F(createBF, createBF_003) 138cdf0e10cSrcweir { 139cdf0e10cSrcweir rtlCipher aCipher = rtl_cipher_createBF(rtl_Cipher_ModeStream); 140*af2711e0SDamjan Jovanovic ASSERT_TRUE(aCipher != NULL) << "create failed."; 141cdf0e10cSrcweir rtl_cipher_destroy(aCipher); 142cdf0e10cSrcweir } 143*af2711e0SDamjan Jovanovic TEST_F(createBF, createBF_004) 144cdf0e10cSrcweir { 145cdf0e10cSrcweir rtlCipher aCipher = rtl_cipher_createBF(rtl_Cipher_ModeInvalid); 146*af2711e0SDamjan Jovanovic ASSERT_TRUE(aCipher == NULL) << "create provide wrong object."; 147cdf0e10cSrcweir // rtl_cipher_destroy(aCipher); 148cdf0e10cSrcweir } 149cdf0e10cSrcweir // ----------------------------------------------------------------------------- 150*af2711e0SDamjan Jovanovic class decode : public ::testing::Test 151cdf0e10cSrcweir { 152cdf0e10cSrcweir public: 153cdf0e10cSrcweir // initialise your test code values here. 154*af2711e0SDamjan Jovanovic void SetUp() 155cdf0e10cSrcweir { 156cdf0e10cSrcweir } 157cdf0e10cSrcweir 158*af2711e0SDamjan Jovanovic void TearDown() 159cdf0e10cSrcweir { 160cdf0e10cSrcweir } 161cdf0e10cSrcweir 162cdf0e10cSrcweir void test_encode(sal_uInt8 _nKeyValue, sal_uInt8 _nArgValue, rtl::OString const& _sPlainTextStr) 163cdf0e10cSrcweir { 164cdf0e10cSrcweir rtlCipher aCipher = rtl_cipher_create(rtl_Cipher_AlgorithmBF, rtl_Cipher_ModeECB); 165*af2711e0SDamjan Jovanovic ASSERT_TRUE(aCipher != NULL) << "create failed."; 166cdf0e10cSrcweir 167cdf0e10cSrcweir sal_uInt32 nKeyLen = 16; 168cdf0e10cSrcweir sal_uInt8 *pKeyBuffer = new sal_uInt8[ nKeyLen ]; 169cdf0e10cSrcweir memset(pKeyBuffer, 0, nKeyLen); 170cdf0e10cSrcweir pKeyBuffer[0] = _nKeyValue; 171cdf0e10cSrcweir 172cdf0e10cSrcweir sal_uInt32 nArgLen = 16; 173cdf0e10cSrcweir sal_uInt8 *pArgBuffer = new sal_uInt8[ nArgLen ]; 174cdf0e10cSrcweir memset(pArgBuffer, 0, nArgLen); 175cdf0e10cSrcweir pArgBuffer[0] = _nArgValue; 176cdf0e10cSrcweir 177*af2711e0SDamjan Jovanovic printf(" init Key: %s\n", createHex(pKeyBuffer, nKeyLen).getStr()); 178*af2711e0SDamjan Jovanovic printf(" init Arg: %s\n", createHex(pArgBuffer, nArgLen).getStr()); 179cdf0e10cSrcweir 180cdf0e10cSrcweir rtlCipherError aError = rtl_cipher_init(aCipher, rtl_Cipher_DirectionEncode, pKeyBuffer, nKeyLen, pArgBuffer, nArgLen); 181*af2711e0SDamjan Jovanovic ASSERT_TRUE(aError == rtl_Cipher_E_None) << "wrong init"; 182cdf0e10cSrcweir 183cdf0e10cSrcweir sal_uInt32 nPlainTextLen = 16; 184cdf0e10cSrcweir sal_uInt8 *pPlainTextBuffer = new sal_uInt8[ nPlainTextLen ]; 185cdf0e10cSrcweir memset(pPlainTextBuffer, 0, nPlainTextLen); 186cdf0e10cSrcweir strncpy((char*)pPlainTextBuffer, _sPlainTextStr.getStr(), 16); 187cdf0e10cSrcweir 188cdf0e10cSrcweir sal_uInt32 nCipherLen = 16; 189cdf0e10cSrcweir sal_uInt8 *pCipherBuffer = new sal_uInt8[ nCipherLen ]; 190cdf0e10cSrcweir memset(pCipherBuffer, 0, nCipherLen); 191cdf0e10cSrcweir 192cdf0e10cSrcweir /* rtlCipherError */ aError = rtl_cipher_encode(aCipher, pPlainTextBuffer, nPlainTextLen, pCipherBuffer, nCipherLen); 193*af2711e0SDamjan Jovanovic ASSERT_TRUE(aError == rtl_Cipher_E_None) << "wrong encode"; 194cdf0e10cSrcweir 195*af2711e0SDamjan Jovanovic printf(" Key: %s\n", createHex(pKeyBuffer, nKeyLen).getStr()); 196*af2711e0SDamjan Jovanovic printf(" Arg: %s\n", createHex(pArgBuffer, nArgLen).getStr()); 197*af2711e0SDamjan Jovanovic printf(" Plain: %s\n", createHex(pPlainTextBuffer, nPlainTextLen).getStr()); 198*af2711e0SDamjan Jovanovic printf( "Cipher Buf: %s\n", createHex(pCipherBuffer, nCipherLen).getStr()); 199cdf0e10cSrcweir 200cdf0e10cSrcweir sal_uInt32 nPlainText2Len = 16; 201cdf0e10cSrcweir sal_uInt8 *pPlainText2Buffer = new sal_uInt8[ nPlainText2Len ]; 202cdf0e10cSrcweir memset(pPlainText2Buffer, 0, nPlainText2Len); 203cdf0e10cSrcweir 204cdf0e10cSrcweir /* rtlCipherError */ aError = rtl_cipher_decode(aCipher, pCipherBuffer, nCipherLen, pPlainText2Buffer, nPlainText2Len); 205*af2711e0SDamjan Jovanovic ASSERT_TRUE(aError != rtl_Cipher_E_None) << "decode should not work"; 206cdf0e10cSrcweir 207cdf0e10cSrcweir // rtl::OString sPlainText2Str((char*)pPlainText2Buffer, nPlainText2Len); 208*af2711e0SDamjan Jovanovic // printf(" Plain: %s\n", createHex(pPlainText2Buffer, nPlainText2Len).getStr()); 209*af2711e0SDamjan Jovanovic // printf(" ascii: %s\n", sPlainText2Str.getStr()); 210cdf0e10cSrcweir // 211*af2711e0SDamjan Jovanovic // // printf(" Buf: %s\n", createHex(pCipherBuffer, nCipherLen).getStr()); 212cdf0e10cSrcweir // 213cdf0e10cSrcweir // sal_Int32 nCompare = memcmp(pPlainTextBuffer, pPlainText2Buffer, 16); 214cdf0e10cSrcweir // 215*af2711e0SDamjan Jovanovic // ASSERT_TRUE(nCompare == 0) << "compare between plain and decoded plain failed"; 216cdf0e10cSrcweir // 217cdf0e10cSrcweir // delete [] pPlainText2Buffer; 218cdf0e10cSrcweir // 219cdf0e10cSrcweir // delete [] pCipherBuffer; 220cdf0e10cSrcweir // delete [] pPlainTextBuffer; 221cdf0e10cSrcweir // 222cdf0e10cSrcweir // delete [] pArgBuffer; 223cdf0e10cSrcweir // delete [] pKeyBuffer; 224cdf0e10cSrcweir // 225cdf0e10cSrcweir // rtl_cipher_destroy(aCipher); 226cdf0e10cSrcweir } 227cdf0e10cSrcweir 228cdf0e10cSrcweir void test_encode_and_decode(sal_uInt8 _nKeyValue, sal_uInt8 _nArgValue, rtl::OString const& _sPlainTextStr) 229cdf0e10cSrcweir { 230cdf0e10cSrcweir rtlCipher aCipher = rtl_cipher_create(rtl_Cipher_AlgorithmBF, rtl_Cipher_ModeECB); 231*af2711e0SDamjan Jovanovic ASSERT_TRUE(aCipher != NULL) << "create failed."; 232cdf0e10cSrcweir 233cdf0e10cSrcweir sal_uInt32 nKeyLen = 16; 234cdf0e10cSrcweir sal_uInt8 *pKeyBuffer = new sal_uInt8[ nKeyLen ]; 235cdf0e10cSrcweir memset(pKeyBuffer, 0, nKeyLen); 236cdf0e10cSrcweir pKeyBuffer[0] = _nKeyValue; 237cdf0e10cSrcweir 238cdf0e10cSrcweir sal_uInt32 nArgLen = 16; 239cdf0e10cSrcweir sal_uInt8 *pArgBuffer = new sal_uInt8[ nArgLen ]; 240cdf0e10cSrcweir memset(pArgBuffer, 0, nArgLen); 241cdf0e10cSrcweir pArgBuffer[0] = _nArgValue; 242cdf0e10cSrcweir 243*af2711e0SDamjan Jovanovic printf(" init Key: %s\n", createHex(pKeyBuffer, nKeyLen).getStr()); 244*af2711e0SDamjan Jovanovic printf(" init Arg: %s\n", createHex(pArgBuffer, nArgLen).getStr()); 245cdf0e10cSrcweir 246cdf0e10cSrcweir rtlCipherError aError = rtl_cipher_init(aCipher, rtl_Cipher_DirectionBoth, pKeyBuffer, nKeyLen, pArgBuffer, nArgLen); 247*af2711e0SDamjan Jovanovic ASSERT_TRUE(aError == rtl_Cipher_E_None) << "wrong init"; 248cdf0e10cSrcweir 249cdf0e10cSrcweir sal_uInt32 nPlainTextLen = 16; 250cdf0e10cSrcweir sal_uInt8 *pPlainTextBuffer = new sal_uInt8[ nPlainTextLen ]; 251cdf0e10cSrcweir memset(pPlainTextBuffer, 0, nPlainTextLen); 252cdf0e10cSrcweir strncpy((char*)pPlainTextBuffer, _sPlainTextStr.getStr(), 16); 253cdf0e10cSrcweir 254cdf0e10cSrcweir sal_uInt32 nCipherLen = 16; 255cdf0e10cSrcweir sal_uInt8 *pCipherBuffer = new sal_uInt8[ nCipherLen ]; 256cdf0e10cSrcweir memset(pCipherBuffer, 0, nCipherLen); 257cdf0e10cSrcweir 258cdf0e10cSrcweir /* rtlCipherError */ aError = rtl_cipher_encode(aCipher, pPlainTextBuffer, nPlainTextLen, pCipherBuffer, nCipherLen); 259*af2711e0SDamjan Jovanovic ASSERT_TRUE(aError == rtl_Cipher_E_None) << "wrong encode"; 260cdf0e10cSrcweir 261*af2711e0SDamjan Jovanovic printf(" Key: %s\n", createHex(pKeyBuffer, nKeyLen).getStr()); 262*af2711e0SDamjan Jovanovic printf(" Arg: %s\n", createHex(pArgBuffer, nArgLen).getStr()); 263*af2711e0SDamjan Jovanovic printf(" Plain: %s\n", createHex(pPlainTextBuffer, nPlainTextLen).getStr()); 264*af2711e0SDamjan Jovanovic printf( "Cipher Buf: %s\n", createHex(pCipherBuffer, nCipherLen).getStr()); 265cdf0e10cSrcweir 266cdf0e10cSrcweir sal_uInt32 nPlainText2Len = 16; 267cdf0e10cSrcweir sal_uInt8 *pPlainText2Buffer = new sal_uInt8[ nPlainText2Len ]; 268cdf0e10cSrcweir memset(pPlainText2Buffer, 0, nPlainText2Len); 269cdf0e10cSrcweir 270cdf0e10cSrcweir /* rtlCipherError */ aError = rtl_cipher_decode(aCipher, pCipherBuffer, nCipherLen, pPlainText2Buffer, nPlainText2Len); 271*af2711e0SDamjan Jovanovic ASSERT_TRUE(aError == rtl_Cipher_E_None) << "wrong decode"; 272cdf0e10cSrcweir 273cdf0e10cSrcweir rtl::OString sPlainText2Str((char*)pPlainText2Buffer, nPlainText2Len); 274*af2711e0SDamjan Jovanovic printf(" Plain: %s\n", createHex(pPlainText2Buffer, nPlainText2Len).getStr()); 275*af2711e0SDamjan Jovanovic printf(" as ascii: %s\n", sPlainText2Str.getStr()); 276cdf0e10cSrcweir 277*af2711e0SDamjan Jovanovic // printf(" Buf: %s\n", createHex(pCipherBuffer, nCipherLen).getStr()); 278cdf0e10cSrcweir 279cdf0e10cSrcweir sal_Int32 nCompare = memcmp(pPlainTextBuffer, pPlainText2Buffer, 16); 280cdf0e10cSrcweir 281*af2711e0SDamjan Jovanovic ASSERT_TRUE(nCompare == 0) << "compare between plain and decoded plain failed"; 282cdf0e10cSrcweir 283cdf0e10cSrcweir delete [] pPlainText2Buffer; 284cdf0e10cSrcweir 285cdf0e10cSrcweir delete [] pCipherBuffer; 286cdf0e10cSrcweir delete [] pPlainTextBuffer; 287cdf0e10cSrcweir 288cdf0e10cSrcweir delete [] pArgBuffer; 289cdf0e10cSrcweir delete [] pKeyBuffer; 290cdf0e10cSrcweir 291cdf0e10cSrcweir rtl_cipher_destroy(aCipher); 292cdf0e10cSrcweir } 293*af2711e0SDamjan Jovanovic }; // class decode 294cdf0e10cSrcweir 295*af2711e0SDamjan Jovanovic TEST_F(decode, decode_001) 296cdf0e10cSrcweir { 297cdf0e10cSrcweir test_encode_and_decode(0,0,""); 298cdf0e10cSrcweir test_encode_and_decode(0,0,"hallo"); 299cdf0e10cSrcweir test_encode_and_decode(1,0,"B2Aahg5B"); 300cdf0e10cSrcweir test_encode_and_decode(1,2,"Longer text string"); 301cdf0e10cSrcweir } 302cdf0e10cSrcweir 303*af2711e0SDamjan Jovanovic TEST_F(decode, decode_002) 304cdf0e10cSrcweir { 305cdf0e10cSrcweir test_encode(0,0,""); 306cdf0e10cSrcweir test_encode(0,0,"hallo"); 307cdf0e10cSrcweir test_encode(1,0,"B2Aahg5B"); 308cdf0e10cSrcweir test_encode(1,2,"Longer text string"); 309cdf0e10cSrcweir } 310cdf0e10cSrcweir // ----------------------------------------------------------------------------- 311*af2711e0SDamjan Jovanovic class decodeBF : public ::testing::Test 312cdf0e10cSrcweir { 313cdf0e10cSrcweir public: 314cdf0e10cSrcweir // initialise your test code values here. 315*af2711e0SDamjan Jovanovic void SetUp() 316cdf0e10cSrcweir { 317cdf0e10cSrcweir } 318cdf0e10cSrcweir 319*af2711e0SDamjan Jovanovic void TearDown() 320cdf0e10cSrcweir { 321cdf0e10cSrcweir } 322cdf0e10cSrcweir }; // class decodeBF 323*af2711e0SDamjan Jovanovic 324*af2711e0SDamjan Jovanovic TEST_F(decodeBF, decodeBF_001) 325*af2711e0SDamjan Jovanovic { 326*af2711e0SDamjan Jovanovic } 327*af2711e0SDamjan Jovanovic 328cdf0e10cSrcweir // ----------------------------------------------------------------------------- 329*af2711e0SDamjan Jovanovic class destroy : public ::testing::Test 330cdf0e10cSrcweir { 331cdf0e10cSrcweir public: 332cdf0e10cSrcweir // initialise your test code values here. 333*af2711e0SDamjan Jovanovic void SetUp() 334cdf0e10cSrcweir { 335cdf0e10cSrcweir } 336cdf0e10cSrcweir 337*af2711e0SDamjan Jovanovic void TearDown() 338cdf0e10cSrcweir { 339cdf0e10cSrcweir } 340*af2711e0SDamjan Jovanovic }; // class destroy 341cdf0e10cSrcweir 342*af2711e0SDamjan Jovanovic TEST_F(destroy, destroy_001) 343cdf0e10cSrcweir { 344cdf0e10cSrcweir rtlCipher aCipher = rtl_cipher_create(rtl_Cipher_AlgorithmBF, rtl_Cipher_ModeCBC); 345*af2711e0SDamjan Jovanovic ASSERT_TRUE(aCipher != NULL) << "create failed."; 346cdf0e10cSrcweir rtl_cipher_destroy(aCipher); 347cdf0e10cSrcweir } 348cdf0e10cSrcweir 349cdf0e10cSrcweir // ----------------------------------------------------------------------------- 350*af2711e0SDamjan Jovanovic class destroyBF : public ::testing::Test 351cdf0e10cSrcweir { 352cdf0e10cSrcweir public: 353cdf0e10cSrcweir // initialise your test code values here. 354*af2711e0SDamjan Jovanovic void SetUp() 355cdf0e10cSrcweir { 356cdf0e10cSrcweir } 357cdf0e10cSrcweir 358*af2711e0SDamjan Jovanovic void TearDown() 359cdf0e10cSrcweir { 360cdf0e10cSrcweir } 361*af2711e0SDamjan Jovanovic }; // class destroyBF 362cdf0e10cSrcweir 363*af2711e0SDamjan Jovanovic TEST_F(destroyBF, destroyBF_001) 364cdf0e10cSrcweir { 365cdf0e10cSrcweir rtlCipher aCipher = rtl_cipher_createBF(rtl_Cipher_ModeECB); 366*af2711e0SDamjan Jovanovic ASSERT_TRUE(aCipher != NULL) << "create failed."; 367cdf0e10cSrcweir rtl_cipher_destroyBF(aCipher); 368cdf0e10cSrcweir // more proforma 369cdf0e10cSrcweir // should not GPF 370cdf0e10cSrcweir } 371cdf0e10cSrcweir 372cdf0e10cSrcweir // ----------------------------------------------------------------------------- 373*af2711e0SDamjan Jovanovic class encode : public ::testing::Test 374cdf0e10cSrcweir { 375cdf0e10cSrcweir public: 376cdf0e10cSrcweir // initialise your test code values here. 377*af2711e0SDamjan Jovanovic void SetUp() 378cdf0e10cSrcweir { 379cdf0e10cSrcweir } 380cdf0e10cSrcweir 381*af2711e0SDamjan Jovanovic void TearDown() 382cdf0e10cSrcweir { 383cdf0e10cSrcweir } 384*af2711e0SDamjan Jovanovic }; // class encode 385cdf0e10cSrcweir 386cdf0e10cSrcweir void test_encode(sal_uInt8 _nKeyValue, sal_uInt8 _nArgValue, sal_uInt8 _nDataValue) 387cdf0e10cSrcweir { 388cdf0e10cSrcweir rtlCipher aCipher = rtl_cipher_create(rtl_Cipher_AlgorithmBF, rtl_Cipher_ModeECB); 389*af2711e0SDamjan Jovanovic ASSERT_TRUE(aCipher != NULL) << "create failed."; 390cdf0e10cSrcweir 391cdf0e10cSrcweir sal_uInt32 nKeyLen = 16; 392cdf0e10cSrcweir sal_uInt8 *pKeyBuffer = new sal_uInt8[ nKeyLen ]; 393cdf0e10cSrcweir memset(pKeyBuffer, 0, nKeyLen); 394cdf0e10cSrcweir pKeyBuffer[0] = _nKeyValue; 395cdf0e10cSrcweir 396cdf0e10cSrcweir sal_uInt32 nArgLen = 16; 397cdf0e10cSrcweir sal_uInt8 *pArgBuffer = new sal_uInt8[ nArgLen ]; 398cdf0e10cSrcweir memset(pArgBuffer, 0, nArgLen); 399cdf0e10cSrcweir pArgBuffer[0] = _nArgValue; 400cdf0e10cSrcweir 401*af2711e0SDamjan Jovanovic printf("init Key: %s\n", createHex(pKeyBuffer, nKeyLen).getStr()); 402*af2711e0SDamjan Jovanovic printf("init Arg: %s\n", createHex(pArgBuffer, nArgLen).getStr()); 403cdf0e10cSrcweir 404cdf0e10cSrcweir rtlCipherError aError = rtl_cipher_init(aCipher, rtl_Cipher_DirectionEncode, pKeyBuffer, nKeyLen, pArgBuffer, nArgLen); 405*af2711e0SDamjan Jovanovic ASSERT_TRUE(aError == rtl_Cipher_E_None) << "wrong init"; 406cdf0e10cSrcweir 407cdf0e10cSrcweir sal_uInt32 nDataLen = 16; 408cdf0e10cSrcweir sal_uInt8 *pDataBuffer = new sal_uInt8[ nDataLen ]; 409cdf0e10cSrcweir memset(pDataBuffer, 0, nDataLen); 410cdf0e10cSrcweir pDataBuffer[0] = _nDataValue; 411cdf0e10cSrcweir 412cdf0e10cSrcweir sal_uInt32 nLen = 16; 413cdf0e10cSrcweir sal_uInt8 *pBuffer = new sal_uInt8[ nLen ]; 414cdf0e10cSrcweir memset(pBuffer, 0, nLen); 415cdf0e10cSrcweir 416cdf0e10cSrcweir /* rtlCipherError */ aError = rtl_cipher_encode(aCipher, pDataBuffer, nDataLen, pBuffer, nLen); 417*af2711e0SDamjan Jovanovic ASSERT_TRUE(aError == rtl_Cipher_E_None) << "wrong encode"; 418cdf0e10cSrcweir 419*af2711e0SDamjan Jovanovic printf(" Key: %s\n", createHex(pKeyBuffer, nKeyLen).getStr()); 420*af2711e0SDamjan Jovanovic printf(" Arg: %s\n", createHex(pArgBuffer, nArgLen).getStr()); 421*af2711e0SDamjan Jovanovic printf("Data: %s\n", createHex(pDataBuffer, nDataLen).getStr()); 422*af2711e0SDamjan Jovanovic printf(" Buf: %s\n", createHex(pBuffer, nLen).getStr()); 423cdf0e10cSrcweir 424cdf0e10cSrcweir delete [] pBuffer; 425cdf0e10cSrcweir delete [] pDataBuffer; 426cdf0e10cSrcweir 427cdf0e10cSrcweir delete [] pArgBuffer; 428cdf0e10cSrcweir delete [] pKeyBuffer; 429cdf0e10cSrcweir 430cdf0e10cSrcweir rtl_cipher_destroy(aCipher); 431cdf0e10cSrcweir } 432cdf0e10cSrcweir 433cdf0e10cSrcweir void encode_001() 434cdf0e10cSrcweir { 435cdf0e10cSrcweir test_encode(0,0,0); 436cdf0e10cSrcweir test_encode(1,0,0); 437cdf0e10cSrcweir test_encode(0,1,0); 438cdf0e10cSrcweir test_encode(1,1,0); 439cdf0e10cSrcweir 440cdf0e10cSrcweir test_encode(0,0,1); 441cdf0e10cSrcweir test_encode(1,0,1); 442cdf0e10cSrcweir test_encode(0,1,1); 443cdf0e10cSrcweir test_encode(1,1,1); 444cdf0e10cSrcweir } 445cdf0e10cSrcweir // ----------------------------------------------------------------------------- 446*af2711e0SDamjan Jovanovic class encodeBF : public ::testing::Test 447cdf0e10cSrcweir { 448cdf0e10cSrcweir public: 449cdf0e10cSrcweir // initialise your test code values here. 450*af2711e0SDamjan Jovanovic void SetUp() 451cdf0e10cSrcweir { 452cdf0e10cSrcweir } 453cdf0e10cSrcweir 454*af2711e0SDamjan Jovanovic void TearDown() 455cdf0e10cSrcweir { 456cdf0e10cSrcweir } 457cdf0e10cSrcweir }; // class encodeBF 458*af2711e0SDamjan Jovanovic 459*af2711e0SDamjan Jovanovic TEST_F(encodeBF, encodeBF_001) 460*af2711e0SDamjan Jovanovic { 461*af2711e0SDamjan Jovanovic } 462*af2711e0SDamjan Jovanovic 463cdf0e10cSrcweir // ----------------------------------------------------------------------------- 464*af2711e0SDamjan Jovanovic class init : public ::testing::Test 465cdf0e10cSrcweir { 466cdf0e10cSrcweir public: 467cdf0e10cSrcweir // initialise your test code values here. 468*af2711e0SDamjan Jovanovic void SetUp() 469cdf0e10cSrcweir { 470cdf0e10cSrcweir } 471cdf0e10cSrcweir 472*af2711e0SDamjan Jovanovic void TearDown() 473cdf0e10cSrcweir { 474cdf0e10cSrcweir } 475cdf0e10cSrcweir }; // class init 476*af2711e0SDamjan Jovanovic 477*af2711e0SDamjan Jovanovic TEST_F(init, init_001) 478*af2711e0SDamjan Jovanovic { 479*af2711e0SDamjan Jovanovic rtlCipher aCipher = rtl_cipher_create(rtl_Cipher_AlgorithmBF, rtl_Cipher_ModeECB); 480*af2711e0SDamjan Jovanovic ASSERT_TRUE(aCipher != NULL) << "create failed."; 481*af2711e0SDamjan Jovanovic 482*af2711e0SDamjan Jovanovic sal_uInt32 nKeyLen = 16; 483*af2711e0SDamjan Jovanovic sal_uInt8 *pKeyBuffer = new sal_uInt8[ nKeyLen ]; 484*af2711e0SDamjan Jovanovic memset(pKeyBuffer, 0, nKeyLen); 485*af2711e0SDamjan Jovanovic 486*af2711e0SDamjan Jovanovic sal_uInt32 nArgLen = 16; 487*af2711e0SDamjan Jovanovic sal_uInt8 *pArgBuffer = new sal_uInt8[ nArgLen ]; 488*af2711e0SDamjan Jovanovic memset(pArgBuffer, 0, nArgLen); 489*af2711e0SDamjan Jovanovic 490*af2711e0SDamjan Jovanovic printf("Key: %s\n", createHex(pKeyBuffer, nKeyLen).getStr()); 491*af2711e0SDamjan Jovanovic printf("Arg: %s\n", createHex(pArgBuffer, nArgLen).getStr()); 492*af2711e0SDamjan Jovanovic 493*af2711e0SDamjan Jovanovic rtlCipherError aError = rtl_cipher_init(aCipher, rtl_Cipher_DirectionEncode, pKeyBuffer, nKeyLen, pArgBuffer, nArgLen); 494*af2711e0SDamjan Jovanovic ASSERT_TRUE(aError == rtl_Cipher_E_None) << "wrong init"; 495*af2711e0SDamjan Jovanovic 496*af2711e0SDamjan Jovanovic printf("Key: %s\n", createHex(pKeyBuffer, nKeyLen).getStr()); 497*af2711e0SDamjan Jovanovic printf("Arg: %s\n", createHex(pArgBuffer, nArgLen).getStr()); 498*af2711e0SDamjan Jovanovic 499*af2711e0SDamjan Jovanovic delete [] pArgBuffer; 500*af2711e0SDamjan Jovanovic delete [] pKeyBuffer; 501*af2711e0SDamjan Jovanovic 502*af2711e0SDamjan Jovanovic rtl_cipher_destroy(aCipher); 503*af2711e0SDamjan Jovanovic } 504*af2711e0SDamjan Jovanovic 505*af2711e0SDamjan Jovanovic TEST_F(init, init_002) 506*af2711e0SDamjan Jovanovic { 507*af2711e0SDamjan Jovanovic rtlCipher aCipher = rtl_cipher_create(rtl_Cipher_AlgorithmBF, rtl_Cipher_ModeECB); 508*af2711e0SDamjan Jovanovic ASSERT_TRUE(aCipher != NULL) << "create failed."; 509*af2711e0SDamjan Jovanovic 510*af2711e0SDamjan Jovanovic sal_uInt32 nKeyLen = 16; 511*af2711e0SDamjan Jovanovic sal_uInt8 *pKeyBuffer = new sal_uInt8[ nKeyLen ]; 512*af2711e0SDamjan Jovanovic memset(pKeyBuffer, 0, nKeyLen); 513*af2711e0SDamjan Jovanovic pKeyBuffer[0] = 1; 514*af2711e0SDamjan Jovanovic 515*af2711e0SDamjan Jovanovic sal_uInt32 nArgLen = 16; 516*af2711e0SDamjan Jovanovic sal_uInt8 *pArgBuffer = new sal_uInt8[ nArgLen ]; 517*af2711e0SDamjan Jovanovic memset(pArgBuffer, 0, nArgLen); 518*af2711e0SDamjan Jovanovic 519*af2711e0SDamjan Jovanovic printf("Key: %s\n", createHex(pKeyBuffer, nKeyLen).getStr()); 520*af2711e0SDamjan Jovanovic printf("Arg: %s\n", createHex(pArgBuffer, nArgLen).getStr()); 521*af2711e0SDamjan Jovanovic 522*af2711e0SDamjan Jovanovic rtlCipherError aError = rtl_cipher_init(aCipher, rtl_Cipher_DirectionEncode, pKeyBuffer, nKeyLen, pArgBuffer, nArgLen); 523*af2711e0SDamjan Jovanovic ASSERT_TRUE(aError == rtl_Cipher_E_None) << "wrong init"; 524*af2711e0SDamjan Jovanovic 525*af2711e0SDamjan Jovanovic printf("Key: %s\n", createHex(pKeyBuffer, nKeyLen).getStr()); 526*af2711e0SDamjan Jovanovic printf("Arg: %s\n", createHex(pArgBuffer, nArgLen).getStr()); 527*af2711e0SDamjan Jovanovic 528*af2711e0SDamjan Jovanovic delete [] pArgBuffer; 529*af2711e0SDamjan Jovanovic delete [] pKeyBuffer; 530*af2711e0SDamjan Jovanovic 531*af2711e0SDamjan Jovanovic rtl_cipher_destroy(aCipher); 532*af2711e0SDamjan Jovanovic } 533*af2711e0SDamjan Jovanovic TEST_F(init, init_003) 534*af2711e0SDamjan Jovanovic { 535*af2711e0SDamjan Jovanovic rtlCipher aCipher = rtl_cipher_create(rtl_Cipher_AlgorithmBF, rtl_Cipher_ModeECB); 536*af2711e0SDamjan Jovanovic ASSERT_TRUE(aCipher != NULL) << "create failed."; 537*af2711e0SDamjan Jovanovic 538*af2711e0SDamjan Jovanovic sal_uInt32 nKeyLen = 16; 539*af2711e0SDamjan Jovanovic sal_uInt8 *pKeyBuffer = new sal_uInt8[ nKeyLen ]; 540*af2711e0SDamjan Jovanovic memset(pKeyBuffer, 0, nKeyLen); 541*af2711e0SDamjan Jovanovic 542*af2711e0SDamjan Jovanovic sal_uInt32 nArgLen = 16; 543*af2711e0SDamjan Jovanovic sal_uInt8 *pArgBuffer = new sal_uInt8[ nArgLen ]; 544*af2711e0SDamjan Jovanovic memset(pArgBuffer, 0, nArgLen); 545*af2711e0SDamjan Jovanovic pArgBuffer[0] = 1; 546*af2711e0SDamjan Jovanovic 547*af2711e0SDamjan Jovanovic printf("Key: %s\n", createHex(pKeyBuffer, nKeyLen).getStr()); 548*af2711e0SDamjan Jovanovic printf("Arg: %s\n", createHex(pArgBuffer, nArgLen).getStr()); 549*af2711e0SDamjan Jovanovic 550*af2711e0SDamjan Jovanovic rtlCipherError aError = rtl_cipher_init(aCipher, rtl_Cipher_DirectionEncode, pKeyBuffer, nKeyLen, pArgBuffer, nArgLen); 551*af2711e0SDamjan Jovanovic ASSERT_TRUE(aError == rtl_Cipher_E_None) << "wrong init"; 552*af2711e0SDamjan Jovanovic 553*af2711e0SDamjan Jovanovic printf("Key: %s\n", createHex(pKeyBuffer, nKeyLen).getStr()); 554*af2711e0SDamjan Jovanovic printf("Arg: %s\n", createHex(pArgBuffer, nArgLen).getStr()); 555*af2711e0SDamjan Jovanovic 556*af2711e0SDamjan Jovanovic delete [] pArgBuffer; 557*af2711e0SDamjan Jovanovic delete [] pKeyBuffer; 558*af2711e0SDamjan Jovanovic 559*af2711e0SDamjan Jovanovic rtl_cipher_destroy(aCipher); 560*af2711e0SDamjan Jovanovic } 561*af2711e0SDamjan Jovanovic TEST_F(init, init_004) 562*af2711e0SDamjan Jovanovic { 563*af2711e0SDamjan Jovanovic rtlCipher aCipher = rtl_cipher_create(rtl_Cipher_AlgorithmBF, rtl_Cipher_ModeECB); 564*af2711e0SDamjan Jovanovic ASSERT_TRUE(aCipher != NULL) << "create failed."; 565*af2711e0SDamjan Jovanovic 566*af2711e0SDamjan Jovanovic sal_uInt32 nKeyLen = 16; 567*af2711e0SDamjan Jovanovic sal_uInt8 *pKeyBuffer = new sal_uInt8[ nKeyLen ]; 568*af2711e0SDamjan Jovanovic memset(pKeyBuffer, 0, nKeyLen); 569*af2711e0SDamjan Jovanovic pKeyBuffer[0] = 1; 570*af2711e0SDamjan Jovanovic 571*af2711e0SDamjan Jovanovic sal_uInt32 nArgLen = 16; 572*af2711e0SDamjan Jovanovic sal_uInt8 *pArgBuffer = new sal_uInt8[ nArgLen ]; 573*af2711e0SDamjan Jovanovic memset(pArgBuffer, 0, nArgLen); 574*af2711e0SDamjan Jovanovic pArgBuffer[0] = 1; 575*af2711e0SDamjan Jovanovic 576*af2711e0SDamjan Jovanovic printf("Key: %s\n", createHex(pKeyBuffer, nKeyLen).getStr()); 577*af2711e0SDamjan Jovanovic printf("Arg: %s\n", createHex(pArgBuffer, nArgLen).getStr()); 578*af2711e0SDamjan Jovanovic 579*af2711e0SDamjan Jovanovic rtlCipherError aError = rtl_cipher_init(aCipher, rtl_Cipher_DirectionEncode, pKeyBuffer, nKeyLen, pArgBuffer, nArgLen); 580*af2711e0SDamjan Jovanovic ASSERT_TRUE(aError == rtl_Cipher_E_None) << "wrong init"; 581*af2711e0SDamjan Jovanovic 582*af2711e0SDamjan Jovanovic printf("Key: %s\n", createHex(pKeyBuffer, nKeyLen).getStr()); 583*af2711e0SDamjan Jovanovic printf("Arg: %s\n", createHex(pArgBuffer, nArgLen).getStr()); 584*af2711e0SDamjan Jovanovic 585*af2711e0SDamjan Jovanovic delete [] pArgBuffer; 586*af2711e0SDamjan Jovanovic delete [] pKeyBuffer; 587*af2711e0SDamjan Jovanovic 588*af2711e0SDamjan Jovanovic rtl_cipher_destroy(aCipher); 589*af2711e0SDamjan Jovanovic } 590cdf0e10cSrcweir // ----------------------------------------------------------------------------- 591*af2711e0SDamjan Jovanovic class initBF : public ::testing::Test 592cdf0e10cSrcweir { 593cdf0e10cSrcweir public: 594cdf0e10cSrcweir // initialise your test code values here. 595*af2711e0SDamjan Jovanovic void SetUp() 596cdf0e10cSrcweir { 597cdf0e10cSrcweir } 598cdf0e10cSrcweir 599*af2711e0SDamjan Jovanovic void TearDown() 600cdf0e10cSrcweir { 601cdf0e10cSrcweir } 602*af2711e0SDamjan Jovanovic }; // class initBF 603cdf0e10cSrcweir 604*af2711e0SDamjan Jovanovic TEST_F(initBF, initBF_001) 605cdf0e10cSrcweir { 606cdf0e10cSrcweir // seems to be the same as init, so empty 607cdf0e10cSrcweir } 608cdf0e10cSrcweir 609cdf0e10cSrcweir 610cdf0e10cSrcweir } // namespace rtl_cipher 611cdf0e10cSrcweir 612*af2711e0SDamjan Jovanovic int main(int argc, char **argv) 613*af2711e0SDamjan Jovanovic { 614*af2711e0SDamjan Jovanovic ::testing::InitGoogleTest(&argc, argv); 615*af2711e0SDamjan Jovanovic return RUN_ALL_TESTS(); 616*af2711e0SDamjan Jovanovic } 617