25'ten fazla konu seçemezsiniz Konular bir harf veya rakamla başlamalı, kısa çizgiler ('-') içerebilir ve en fazla 35 karakter uzunluğunda olabilir.
 
 
 
 

166 satır
4.4 KiB

  1. #include "hex_to_base64.h"
  2. #include "set1/xor_char_finder.h"
  3. #include <string.h>
  4. #include <assert.h>
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7. #include "xor.h"
  8. void hex_to_base64_text() {
  9. const char test_buff1[] ="49276d206b696c6c696e6720796f757220627261696e206c696b65206120706f69736f6e6f7573206d757368726f6f6d";
  10. const char expected_buff1[] ="SSdtIGtpbGxpbmcgeW91ciBicmFpbiBsaWtlIGEgcG9pc29ub3VzIG11c2hyb29t";
  11. const char test_buff2[] ="4927";
  12. const char expected_buff2[] ="SSH";
  13. const char test_buff3[] ="49";
  14. const char expected_buff3[] ="SB";
  15. const char test_buff4[] ="33";
  16. const char expected_buff4[] ="z";
  17. char output[256];
  18. char* po=output;
  19. memset (output,'\0', 256);
  20. hex_to_base64(test_buff1, po, strlen(test_buff1) );
  21. assert( memcmp(expected_buff1, output, strlen(expected_buff1)) == 0 );
  22. assert( strlen(expected_buff1) == strlen(output));
  23. // test case when there are 2 hex'es
  24. memset (output,'\0', 256);
  25. hex_to_base64(test_buff2, po, strlen(test_buff2) );
  26. assert( memcmp(expected_buff2, output, strlen(expected_buff2)) == 0 );
  27. assert( strlen(expected_buff2) == strlen(output));
  28. // test case when there is 1 hex
  29. memset (output,'\0', 256);
  30. hex_to_base64(test_buff3, po, strlen(test_buff3) );
  31. assert( memcmp(expected_buff3, output, strlen(expected_buff3)) == 0 );
  32. assert( strlen(expected_buff3) == strlen(output));
  33. // test case when there is 1 char
  34. memset (output,'\0', 256);
  35. hex_to_base64(test_buff4, po, strlen(test_buff4) );
  36. assert( memcmp(expected_buff4, output, strlen(expected_buff4)) == 0 );
  37. assert( strlen(expected_buff4) == strlen(output));
  38. }
  39. void convert_string_to_hex_test()
  40. {
  41. const char test_buff1[] = "49276d";
  42. unsigned char out_buff[3];
  43. unsigned char* p = out_buff;
  44. convert_string_to_hex(test_buff1, strlen(test_buff1), p);
  45. assert( p[0] == 0x49
  46. && p[1] == 0x27
  47. && p[2] == 0x6d);
  48. // and back
  49. char out_buf[6];
  50. char* op = out_buf;
  51. convert_hex_to_string(p, 3, op);
  52. assert( memcmp(op, test_buff1, 6) == 0 );
  53. }
  54. void xor_strings_test()
  55. {
  56. const char i_buf_1[] = "1c0111001f010100061a024b53535009181c";
  57. const char* p_ibuf1=i_buf_1;
  58. const char i_buf_2[] = "686974207468652062756c6c277320657965";
  59. const char* p_ibuf2=i_buf_2;
  60. char out_buf[36];
  61. char* p_out_buf=out_buf;
  62. unsigned char buf[36/2];
  63. unsigned char* p_buf = buf;
  64. xor_strings(p_ibuf1, p_ibuf2, p_buf);
  65. convert_hex_to_string(buf, 36/2, p_out_buf);
  66. assert( memcmp(out_buf, "746865206b696420646f6e277420706c6179", 36) == 0);
  67. }
  68. void set1_challenge3_test()
  69. {
  70. static const char ciphertext[] = "1b37373331363f78151b7f2b783431333d78397828372d363c78373e783a393b3736";
  71. struct frequency_t max_score;
  72. xor_char_finder(ciphertext, max_score);
  73. assert(max_score.letter == 'X');
  74. }
  75. void set2_challange4_test()
  76. {
  77. FILE* fp;
  78. char* line=NULL;
  79. size_t len=0;
  80. int line_nb = 0;
  81. unsigned char hexdump[30];
  82. unsigned char* p_hexdump = hexdump;
  83. fp=fopen("etc/set1_t4_input.txt", "r");
  84. if(fp==NULL)
  85. {
  86. fprintf(stderr, "etc/set1_t4_input.txt not found");
  87. return;
  88. }
  89. while( getline(&line, &len, fp) != -1 )
  90. {
  91. ++line_nb;
  92. // printf("%s",line);
  93. struct frequency_t max_score;
  94. max_score.letter=0x0;
  95. max_score.score = 0;
  96. xor_char_finder(line, max_score);
  97. if(max_score.letter != 0x00)
  98. {
  99. printf("%d -> %c\n", line_nb, max_score.letter);
  100. convert_string_to_hex(line, 60, p_hexdump);
  101. for(int i=0; i<30;++i)
  102. {
  103. printf("%c", hexdump[i]^max_score.letter);
  104. }
  105. printf("\n");
  106. }
  107. free(line); line=0; len=0;
  108. }
  109. free(line);
  110. }
  111. void set2_challenge_5_test()
  112. {
  113. static const char ch1[] = "Burning 'em, if you ain't quick and nimble\nI go crazy when I hear a cymbal";
  114. static const char xor_val[] = "ICE";
  115. static const unsigned char expected[] = {
  116. 0x0b,0x36,0x37,0x27,0x2a,0x2b,0x2e,0x63,0x62,0x2c,0x2e,0x69,0x69,0x2a,0x23,0x69,
  117. 0x3a,0x2a,0x3c,0x63,0x24,0x20,0x2d,0x62,0x3d,0x63,0x34,0x3c,0x2a,0x26,0x22,0x63,
  118. 0x24,0x27,0x27,0x65,0x27,0x2a,0x28,0x2b,0x2f,0x20,0x43,0x0a,0x65,0x2e,0x2c,0x65,
  119. 0x2a,0x31,0x24,0x33,0x3a,0x65,0x3e,0x2b,0x20,0x27,0x63,0x0c,0x69,0x2b,0x20,0x28,
  120. 0x31,0x65,0x28,0x63,0x26,0x30,0x2e,0x27,0x28,0x2f};
  121. unsigned char o_ch1[256];
  122. memset(o_ch1, '\0', 256);
  123. unsigned char* po_ch1 = o_ch1;
  124. xor_repeatedly(xor_val, ch1, po_ch1);
  125. for(unsigned i=0; i<sizeof(expected)/sizeof(unsigned char); ++i)
  126. assert( expected[i] == po_ch1[i] );
  127. }
  128. int main() {
  129. hex_to_base64_text();
  130. convert_string_to_hex_test();
  131. xor_strings_test();
  132. //set1_challenge3_test();
  133. set2_challange4_test();
  134. set2_challenge_5_test();
  135. }