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
createHex(sal_uInt8 * _pKeyBuffer,sal_uInt32 _nKeyLen)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.
SetUp()59*af2711e0SDamjan Jovanovic void SetUp()
60cdf0e10cSrcweir {
61cdf0e10cSrcweir }
62cdf0e10cSrcweir
TearDown()63*af2711e0SDamjan Jovanovic void TearDown()
64cdf0e10cSrcweir {
65cdf0e10cSrcweir }
66cdf0e10cSrcweir }; // class create
67cdf0e10cSrcweir
TEST_F(create,create_001)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 }
TEST_F(create,create_002)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 }
TEST_F(create,create_003)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 }
TEST_F(create,create_004)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 }
TEST_F(create,create_005)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 }
TEST_F(create,create_006)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 }
TEST_F(create,create_007)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 }
TEST_F(create,create_008)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.
SetUp()116*af2711e0SDamjan Jovanovic void SetUp()
117cdf0e10cSrcweir {
118cdf0e10cSrcweir }
119cdf0e10cSrcweir
TearDown()120*af2711e0SDamjan Jovanovic void TearDown()
121cdf0e10cSrcweir {
122cdf0e10cSrcweir }
123*af2711e0SDamjan Jovanovic }; // class createBF
124cdf0e10cSrcweir
TEST_F(createBF,createBF_001)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 }
TEST_F(createBF,createBF_002)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 }
TEST_F(createBF,createBF_003)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 }
TEST_F(createBF,createBF_004)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.
SetUp()154*af2711e0SDamjan Jovanovic void SetUp()
155cdf0e10cSrcweir {
156cdf0e10cSrcweir }
157cdf0e10cSrcweir
TearDown()158*af2711e0SDamjan Jovanovic void TearDown()
159cdf0e10cSrcweir {
160cdf0e10cSrcweir }
161cdf0e10cSrcweir
test_encode(sal_uInt8 _nKeyValue,sal_uInt8 _nArgValue,rtl::OString const & _sPlainTextStr)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
test_encode_and_decode(sal_uInt8 _nKeyValue,sal_uInt8 _nArgValue,rtl::OString const & _sPlainTextStr)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
TEST_F(decode,decode_001)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
TEST_F(decode,decode_002)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.
SetUp()315*af2711e0SDamjan Jovanovic void SetUp()
316cdf0e10cSrcweir {
317cdf0e10cSrcweir }
318cdf0e10cSrcweir
TearDown()319*af2711e0SDamjan Jovanovic void TearDown()
320cdf0e10cSrcweir {
321cdf0e10cSrcweir }
322cdf0e10cSrcweir }; // class decodeBF
323*af2711e0SDamjan Jovanovic
TEST_F(decodeBF,decodeBF_001)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.
SetUp()333*af2711e0SDamjan Jovanovic void SetUp()
334cdf0e10cSrcweir {
335cdf0e10cSrcweir }
336cdf0e10cSrcweir
TearDown()337*af2711e0SDamjan Jovanovic void TearDown()
338cdf0e10cSrcweir {
339cdf0e10cSrcweir }
340*af2711e0SDamjan Jovanovic }; // class destroy
341cdf0e10cSrcweir
TEST_F(destroy,destroy_001)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.
SetUp()354*af2711e0SDamjan Jovanovic void SetUp()
355cdf0e10cSrcweir {
356cdf0e10cSrcweir }
357cdf0e10cSrcweir
TearDown()358*af2711e0SDamjan Jovanovic void TearDown()
359cdf0e10cSrcweir {
360cdf0e10cSrcweir }
361*af2711e0SDamjan Jovanovic }; // class destroyBF
362cdf0e10cSrcweir
TEST_F(destroyBF,destroyBF_001)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.
SetUp()377*af2711e0SDamjan Jovanovic void SetUp()
378cdf0e10cSrcweir {
379cdf0e10cSrcweir }
380cdf0e10cSrcweir
TearDown()381*af2711e0SDamjan Jovanovic void TearDown()
382cdf0e10cSrcweir {
383cdf0e10cSrcweir }
384*af2711e0SDamjan Jovanovic }; // class encode
385cdf0e10cSrcweir
test_encode(sal_uInt8 _nKeyValue,sal_uInt8 _nArgValue,sal_uInt8 _nDataValue)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
encode_001()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.
SetUp()450*af2711e0SDamjan Jovanovic void SetUp()
451cdf0e10cSrcweir {
452cdf0e10cSrcweir }
453cdf0e10cSrcweir
TearDown()454*af2711e0SDamjan Jovanovic void TearDown()
455cdf0e10cSrcweir {
456cdf0e10cSrcweir }
457cdf0e10cSrcweir }; // class encodeBF
458*af2711e0SDamjan Jovanovic
TEST_F(encodeBF,encodeBF_001)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.
SetUp()468*af2711e0SDamjan Jovanovic void SetUp()
469cdf0e10cSrcweir {
470cdf0e10cSrcweir }
471cdf0e10cSrcweir
TearDown()472*af2711e0SDamjan Jovanovic void TearDown()
473cdf0e10cSrcweir {
474cdf0e10cSrcweir }
475cdf0e10cSrcweir }; // class init
476*af2711e0SDamjan Jovanovic
TEST_F(init,init_001)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
TEST_F(init,init_002)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 }
TEST_F(init,init_003)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 }
TEST_F(init,init_004)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.
SetUp()595*af2711e0SDamjan Jovanovic void SetUp()
596cdf0e10cSrcweir {
597cdf0e10cSrcweir }
598cdf0e10cSrcweir
TearDown()599*af2711e0SDamjan Jovanovic void TearDown()
600cdf0e10cSrcweir {
601cdf0e10cSrcweir }
602*af2711e0SDamjan Jovanovic }; // class initBF
603cdf0e10cSrcweir
TEST_F(initBF,initBF_001)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
main(int argc,char ** argv)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