Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.
 
 
 
 

228 Zeilen
6.7 KiB

  1. #include <string.h>
  2. #include <assert.h>
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include "src/base64.h"
  6. #include "src/hamming.h"
  7. #include "src/xor.h"
  8. #include "src/common.h"
  9. #include "src/xor_char_finder.h"
  10. void hex_to_base64_test() {
  11. const char test_buff1[] ="49276d206b696c6c696e6720796f757220627261696e206c696b65206120706f69736f6e6f7573206d757368726f6f6d";
  12. const char expected_buff1[] ="SSdtIGtpbGxpbmcgeW91ciBicmFpbiBsaWtlIGEgcG9pc29ub3VzIG11c2hyb29t";
  13. const char test_buff2[] ="4927";
  14. const char expected_buff2[] ="SSH";
  15. const char test_buff3[] ="49";
  16. const char expected_buff3[] ="SB";
  17. const char test_buff4[] ="33";
  18. const char expected_buff4[] ="z";
  19. const char test_buff5[] = "616e79";
  20. const char expected_buff5[] = "YW55";
  21. char output[256];
  22. memset (output,'\0', 256);
  23. hex_to_base64(test_buff1, output, strlen(test_buff1) );
  24. CHECK( memcmp(expected_buff1, output, strlen(expected_buff1)) == 0 );
  25. CHECK( strlen(expected_buff1) == strlen(output));
  26. // test case when there are 2 hex'es
  27. memset (output,'\0', 256);
  28. hex_to_base64(test_buff2, output, strlen(test_buff2) );
  29. CHECK( memcmp(expected_buff2, output, strlen(expected_buff2)) == 0 );
  30. CHECK( strlen(expected_buff2) == strlen(output));
  31. // test case when there is 1 hex
  32. memset (output,'\0', 256);
  33. hex_to_base64(test_buff3, output, strlen(test_buff3) );
  34. CHECK( memcmp(expected_buff3, output, strlen(expected_buff3)) == 0 );
  35. CHECK( strlen(expected_buff3) == strlen(output));
  36. // test case when there is 1 char
  37. memset (output,'\0', 256);
  38. hex_to_base64(test_buff4, output, strlen(test_buff4) );
  39. CHECK( memcmp(expected_buff4, output, strlen(expected_buff4)) == 0 );
  40. CHECK( strlen(expected_buff4) == strlen(output));
  41. memset (output,'\0', 256);
  42. hex_to_base64(test_buff5, output, strlen(test_buff5) );
  43. CHECK( memcmp(expected_buff5, output, strlen(expected_buff5)) == 0 );
  44. CHECK( strlen(expected_buff5) == strlen(output));
  45. }
  46. void convert_string_to_hex_test()
  47. {
  48. const char test_buff1[] = "49276d";
  49. unsigned char out_buff[3];
  50. convert_string_to_hex(test_buff1, strlen(test_buff1), out_buff);
  51. CHECK( out_buff[0] == 0x49
  52. && out_buff[1] == 0x27
  53. && out_buff[2] == 0x6d);
  54. // and back
  55. char out_buf[6];
  56. convert_hex_to_string(out_buff, 3, out_buf);
  57. CHECK( memcmp(out_buf, test_buff1, 6) == 0 );
  58. }
  59. void xor_strings_test()
  60. {
  61. const char i_buf_1[] = "1c0111001f010100061a024b53535009181c";
  62. const char i_buf_2[] = "686974207468652062756c6c277320657965";
  63. char out_buf[36];
  64. unsigned char buf[36/2];
  65. xor_strings(i_buf_1, i_buf_2, buf);
  66. convert_hex_to_string(buf, 36/2, out_buf);
  67. CHECK( memcmp(out_buf, "746865206b696420646f6e277420706c6179", 36) == 0);
  68. }
  69. void hamming_test()
  70. {
  71. unsigned char msg[256];
  72. const unsigned char ch1[]="this is a test";
  73. const unsigned char ch2[]="wokka wokka!!!";
  74. sprintf((char*)msg, "GOT: %d", block_distance(ch1, ch2,14));
  75. CHECK(block_distance(ch1,ch2, 14) == 37, msg);
  76. const unsigned char ch3[]="test1";
  77. const unsigned char ch4[]="test3";
  78. sprintf((char*)msg, "GOT: %d", block_distance(ch3, ch4,5));
  79. CHECK(block_distance(ch3,ch4,5)==1, msg);
  80. const unsigned char ch5[]={0x01, 0x03};
  81. const unsigned char ch6[]={0x02, 0x02};
  82. sprintf((char*)msg, "GOT: %d", block_distance(ch5, ch6,2));
  83. CHECK(block_distance(ch5,ch6,2)==3, msg);
  84. }
  85. uint8_t b64_vec_1_hex = 0x66;
  86. uint8_t b64_vec_1_base64[] = "Zg==";
  87. uint8_t b64_vec_2_hex[] = {0x66, 0x6F};
  88. uint8_t b64_vec_2_base64[] = "Zm8=";
  89. uint8_t b64_vec_3_hex[] = {0x66, 0x6F, 0x6F};
  90. uint8_t b64_vec_3_base64[] = "Zm9v";
  91. uint8_t b64_vec_4_hex[] = {0x66, 0x6F, 0x6F, 0x62};
  92. uint8_t b64_vec_4_base64[] = "Zm9vYg==";
  93. uint8_t b64_vec_5_hex[] = {0x66, 0x6F, 0x6F, 0x62, 0x61};
  94. uint8_t b64_vec_5_base64[] = "Zm9vYmE=";
  95. uint8_t b64_vec_6_hex[] = {0x66, 0x6F, 0x6F, 0x62, 0x61, 0x72};
  96. uint8_t b64_vec_6_base64[] = "Zm9vYmFy";
  97. uint8_t b64_vec_7_hex[] = {0x4D, 0x61, 0x6E, 0x4D, 0x61, 0x6E};
  98. uint8_t b64_vec_7_base64[]= "TWFuTWFu"; // 0x41 0x61 0x6E 0x41 0x61 0x6E
  99. uint8_t b64_vec_8_hex[] = { 0x61, 0x6e, 0x79, 0x20, 0x63, 0x61, 0x72, 0x6e, 0x61,
  100. 0x6c, 0x20, 0x70, 0x6c, 0x65, 0x61, 0x73, 0x75};
  101. uint8_t b64_vec_8_base64[]= "YW55IGNhcm5hbCBwbGVhc3U="; // 0x41 0x61 0x6E 0x41 0x61 0x6E
  102. struct Base64_Vector {
  103. const uint8_t* hex;
  104. const uint32_t hex_len;
  105. const uint8_t* base64;
  106. const uint32_t base64_len;
  107. } b64_vectors[]={
  108. {
  109. &b64_vec_1_hex, 1,
  110. b64_vec_1_base64, sizeof(b64_vec_1_base64)
  111. },
  112. {
  113. b64_vec_2_hex, sizeof(b64_vec_2_hex),
  114. b64_vec_2_base64, sizeof(b64_vec_2_base64)
  115. },
  116. {
  117. b64_vec_3_hex, sizeof(b64_vec_3_hex),
  118. b64_vec_3_base64, sizeof(b64_vec_3_base64)
  119. },
  120. {
  121. b64_vec_4_hex, sizeof(b64_vec_4_hex),
  122. b64_vec_4_base64, sizeof(b64_vec_4_base64)
  123. },
  124. {
  125. b64_vec_5_hex, sizeof(b64_vec_5_hex),
  126. b64_vec_5_base64, sizeof(b64_vec_5_base64)
  127. },
  128. {
  129. b64_vec_6_hex, sizeof(b64_vec_6_hex),
  130. b64_vec_6_base64, sizeof(b64_vec_6_base64)
  131. },
  132. {
  133. b64_vec_7_hex, sizeof(b64_vec_7_hex),
  134. b64_vec_7_base64, sizeof(b64_vec_7_base64)
  135. },
  136. {
  137. b64_vec_8_hex, sizeof(b64_vec_8_hex),
  138. b64_vec_8_base64, sizeof(b64_vec_8_base64)
  139. },
  140. };
  141. void base64_test()
  142. {
  143. uint8_t tmpbuf[256];
  144. // BASE64->HEX
  145. // empty string
  146. uint32_t ret = 256;
  147. b64_to_hex((const uint8_t*)"", 0, tmpbuf, &ret);
  148. CHECK(ret == 0);
  149. // vectors
  150. for(size_t i=0; i<sizeof(b64_vectors)/sizeof(Base64_Vector); i++) {
  151. Base64_Vector* vec = &b64_vectors[i];
  152. ret = 256;
  153. b64_to_hex(vec->base64, vec->base64_len, tmpbuf, &ret);
  154. char log_buf[256];
  155. sprintf(log_buf, "Counter %u. Expected %u but got %d\n", i, vec->base64_len-1, ret);
  156. CHECK( memcmp(vec->hex, tmpbuf, ret) == 0, (uint8_t*)log_buf );
  157. }
  158. // HEX->BASE64
  159. /* OZAPTF: hex_to_base64 dosn't work
  160. for(size_t i=0; i<sizeof(b64_vectors)/sizeof(Base64_Vector); i++) {
  161. Base64_Vector* vec = &b64_vectors[i];
  162. ret = hex_to_base64((char*)vec->hex, (char*)tmpbuf, vec->hex_len);
  163. printf("%u %u\n", ret, vec->base64_len);
  164. CHECK(ret == vec->base64_len);
  165. CHECK( memcmp(tmpbuf, vec->base64, ret) == 0);
  166. }
  167. */
  168. }
  169. void c2b_test()
  170. {
  171. CHECK( c2b('A') == 0 );
  172. CHECK( c2b('L') == 11 );
  173. CHECK( c2b('Z') == 25 );
  174. CHECK( c2b('a') == 26 );
  175. CHECK( c2b('z') == 51 );
  176. CHECK( c2b('0') == 52 );
  177. CHECK( c2b('5') == 57 );
  178. CHECK( c2b('9') == 61 );
  179. CHECK( c2b('+') == 62 );
  180. CHECK( c2b('/') == 63 );
  181. CHECK( c2b('=') == 64 );
  182. CHECK( c2b('*') == 0xFF );
  183. }