llxorcipher_tut.cpp
上传用户:king477883
上传日期:2021-03-01
资源大小:9553k
文件大小:5k
源码类别:

游戏引擎

开发平台:

C++ Builder

  1. /**
  2.  * @file llxorcipher_tut.cpp
  3.  * @author Adroit
  4.  * @date 2007-03
  5.  * @brief llxorcipher, llnullcipher test cases.
  6.  *
  7.  * $LicenseInfo:firstyear=2007&license=viewergpl$
  8.  * 
  9.  * Copyright (c) 2007-2010, Linden Research, Inc.
  10.  * 
  11.  * Second Life Viewer Source Code
  12.  * The source code in this file ("Source Code") is provided by Linden Lab
  13.  * to you under the terms of the GNU General Public License, version 2.0
  14.  * ("GPL"), unless you have obtained a separate licensing agreement
  15.  * ("Other License"), formally executed by you and Linden Lab.  Terms of
  16.  * the GPL can be found in doc/GPL-license.txt in this distribution, or
  17.  * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
  18.  * 
  19.  * There are special exceptions to the terms and conditions of the GPL as
  20.  * it is applied to this Source Code. View the full text of the exception
  21.  * in the file doc/FLOSS-exception.txt in this software distribution, or
  22.  * online at
  23.  * http://secondlifegrid.net/programs/open_source/licensing/flossexception
  24.  * 
  25.  * By copying, modifying or distributing this software, you acknowledge
  26.  * that you have read and understood your obligations described above,
  27.  * and agree to abide by those obligations.
  28.  * 
  29.  * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
  30.  * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
  31.  * COMPLETENESS OR PERFORMANCE.
  32.  * $/LicenseInfo$
  33.  */
  34.  
  35. #include "linden_common.h"
  36. #include "lltut.h"
  37. #include "llxorcipher.h"
  38. #include "llnullcipher.h"
  39. namespace tut
  40. {
  41. struct cipher
  42. {
  43. };
  44. typedef test_group<cipher> cipher_t;
  45. typedef cipher_t::object cipher_object_t;
  46. tut::cipher_t tut_cipher("cipher");
  47. //encrypt->decrypt
  48. template<> template<>
  49. void cipher_object_t::test<1>()
  50. {
  51. const U32 len = 3;
  52. const U8 pad[] = "abc";
  53. const char str[] = "SecondLife";
  54. const S32 str_len = sizeof(str);
  55. U8 encrypted[str_len];
  56. U8 decrypted[str_len];
  57. LLXORCipher xorCipher(pad, len);
  58. LLXORCipher xorCipher1(pad, len);
  59. U32 length = xorCipher.requiredEncryptionSpace(50);
  60. ensure("requiredEncryptionSpace() function failed", (length == 50));
  61. U32 lenEncrypted = xorCipher.encrypt((U8 *) str, str_len, encrypted, str_len);
  62. ensure("Encryption failed", (lenEncrypted == str_len));
  63. U32 lenDecrypted = xorCipher1.decrypt(encrypted, str_len, decrypted, str_len);
  64. ensure("Decryption failed", (lenDecrypted == str_len));
  65. ensure_memory_matches("LLXORCipher Encrypt/Decrypt failed", str, str_len, decrypted, lenDecrypted);
  66. }
  67. // operator=
  68. template<> template<>
  69. void cipher_object_t::test<2>()
  70. {
  71. const U8 pad[] = "ABCDEFGHIJKLMNOPQ"; // pad len longer than data to be ciphered
  72. const U32 pad_len = sizeof(pad);
  73. const U8 pad1[] = "SecondLife";
  74. const U32 pad_len1 = sizeof(pad1);
  75. const char str[] = "To Be Ciphered";
  76. const S32 str_len = sizeof(str);
  77. U8 encrypted[str_len];
  78. U8 decrypted[str_len];
  79. LLXORCipher xorCipher(pad, pad_len);
  80. LLXORCipher xorCipher1(pad1, pad_len1);
  81. xorCipher.encrypt((U8 *) str, str_len, encrypted, str_len);
  82. // make xorCipher1 same as xorCipher..so that xorCipher1 can decrypt what was 
  83. // encrypted using xorCipher
  84. xorCipher1 = xorCipher;
  85. U32 lenDecrypted = xorCipher1.decrypt(encrypted, str_len, decrypted, str_len);
  86. ensure_memory_matches("LLXORCipher operator= failed", str, str_len, decrypted, lenDecrypted);
  87. }
  88. //in place encrypt->decrypt
  89. template<> template<>
  90. void cipher_object_t::test<3>()
  91. {
  92. U32 padNum = 0x12349087;
  93. const U8* pad = (U8*) &padNum;
  94. const U32 pad_len = sizeof(U32);
  95. char str[] = "To Be Ciphered a long string.........!!!.";
  96. char str1[] = "To Be Ciphered a long string.........!!!."; // same as str
  97. const S32 str_len = sizeof(str);
  98. LLXORCipher xorCipher(pad, pad_len);
  99. LLXORCipher xorCipher1(pad, pad_len);
  100. xorCipher.encrypt((U8 *) str, str_len);
  101. // it should not be the same as original data!
  102. ensure("LLXORCipher: In Place encrypt failed", memcmp(str, str1, str_len) != 0);
  103. xorCipher1.decrypt((U8 *) str, str_len);
  104. // it should not be the same as original data!
  105. ensure_memory_matches("LLXORCipher: In Place decrypt failed", str, str_len, str1, str_len);
  106. }
  107. //LLNullCipher encrypt->decrypt
  108. template<> template<>
  109. void cipher_object_t::test<4>()
  110. {
  111. const char str[] = "SecondLife";
  112. const S32 str_len = sizeof(str);
  113. U8 encrypted[str_len];
  114. U8 decrypted[str_len];
  115. LLNullCipher nullCipher;
  116. LLNullCipher nullCipher1;
  117. U32 length = nullCipher.requiredEncryptionSpace(50);
  118. ensure("LLNullCipher::requiredEncryptionSpace() function failed", (length == 50));
  119. U32 len1 = nullCipher.encrypt((U8 *) str, str_len, encrypted, str_len);
  120. ensure_memory_matches("LLNullCipher - Source transformed during encryption.", encrypted, len1, str, str_len);
  121. U32 len2 = nullCipher1.decrypt(encrypted, str_len, decrypted, str_len);
  122. ensure_memory_matches("LLNullCipher - Decryption failed", decrypted, len2, str, str_len);
  123. }
  124. }