xref: /trunk/main/sal/qa/rtl/cipher/rtl_cipher.cxx (revision cf6516809c57e1bb0a940545cca99cdad54d4ce2)
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