code_junkie

Understanding engine initialization in OpenSSL

Nov 11th, 2011
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.69 KB | None | 0 0
  1. #include <openssl/hmac.h>
  2. #include <openssl/evp.h>
  3. #include <stdio.h>
  4. #include <string.h>
  5. #include <stdlib.h>
  6.  
  7. int main() {
  8. unsigned char* key = (unsigned char*) "0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b";
  9. unsigned char* data = (unsigned char*) "4869205468657265";
  10. unsigned char* expected = (unsigned char*) "b0344c61d8db38535ca8afceaf0bf12b881dc200c9833da726e9376c2e32cff7";
  11. unsigned char* result;
  12. HMAC_CTX* ctx;
  13. ENGINE* e;
  14.  
  15. ENGINE_load_builtin_engines();
  16. ENGINE_register_all_complete();
  17. ENGINE_set_default_digests(e);
  18.  
  19. HMAC_CTX_init(ctx);
  20. HMAC_Init_ex(ctx, key, 40, EVP_sha256(), e);
  21. result = HMAC(NULL, NULL, 40, data, 16, NULL, NULL);
  22. HMAC_CTX_cleanup(ctx);
  23.  
  24. ENGINE_finish(e);
  25. ENGINE_free(e);
  26.  
  27. if (strcmp((char*) result, (char*) expected) == 0) {
  28. printf("Test okn");
  29. } else {
  30. printf("Got %s instead of %sn", result, expected);
  31. }
  32. }
  33.  
  34. unsigned char* key = (unsigned char*) "0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b";
  35. unsigned char* data = (unsigned char*) "4869205468657265";
  36. unsigned char* expected = (unsigned char*) "b0344c61d8db38535ca8afceaf0bf12b881dc200c9833da726e9376c2e32cff7";
  37. unsigned char* result;
  38. unsigned int result_len = 64;
  39. HMAC_CTX ctx;
  40. ENGINE* e;
  41.  
  42. result = (unsigned char*) malloc(sizeof(char) * result_len);
  43. e = (ENGINE*) ENGINE_new();
  44.  
  45. ENGINE_load_builtin_engines();
  46. ENGINE_register_all_complete();
  47. ENGINE_set_default_digests(e);
  48.  
  49. HMAC_CTX_init(&ctx);
  50. HMAC_Init_ex(&ctx, key, 16, EVP_sha256(), e);
  51. HMAC_Update(&ctx, data, 40);
  52. HMAC_Final(&ctx, result, &result_len);
  53. HMAC_CTX_cleanup(&ctx);
  54.  
  55. ENGINE_finish(e);
  56. ENGINE_free(e);
  57.  
  58. #include <openssl/engine.h>
  59. #include <openssl/hmac.h>
  60. #include <openssl/evp.h>
  61. #include <stdio.h>
  62. #include <string.h>
  63. #include <stdlib.h>
  64.  
  65.  
  66. int main(void)
  67. {
  68. unsigned char* key = (unsigned char*) "x0bx0bx0bx0bx0bx0bx0bx0bx0bx0bx0bx0bx0bx0bx0bx0bx0bx0bx0bx0b";
  69. unsigned char* data = (unsigned char*) "x48x69x20x54x68x65x72x65";
  70. unsigned char* expected = (unsigned char*) "x49x2cxe0x20xfex25x34xa5x78x9dxc3x84x88x06xc7x8fx4fx67x11x39x7fx08xe7xe7xa1x2cxa5xa4x48x3cx8axa6";
  71. unsigned char* result;
  72. unsigned int result_len = 32;
  73. int i;
  74. HMAC_CTX ctx;
  75.  
  76. result = (unsigned char*) malloc(sizeof(char) * result_len);
  77.  
  78. ENGINE_load_builtin_engines();
  79. ENGINE_register_all_complete();
  80.  
  81. HMAC_CTX_init(&ctx);
  82. HMAC_Init_ex(&ctx, key, 16, EVP_sha256(), NULL);
  83. HMAC_Update(&ctx, data, 8);
  84. HMAC_Final(&ctx, result, &result_len);
  85. HMAC_CTX_cleanup(&ctx);
  86.  
  87. for (i=0; i!=result_len; i++)
  88. {
  89. if (expected[i]!=result[i])
  90. {
  91. printf("Got %02X instead of %02X at byte %d!n", result[i], expected[i], i);
  92. break;
  93. }
  94. }
  95. if (i==result_len)
  96. {
  97. printf("Test ok!n");
  98. }
  99. return 0;
  100. }
  101.  
  102. int main() {
  103. unsigned char* key = (unsigned char*) "Jefe";
  104. unsigned char* data = (unsigned char*) "what do ya want for nothing?";
  105. unsigned char* expected = (unsigned char*) "5bdcc146bf60754e6a042426089575c75a003f089d2739839dec58b964ec3843";
  106. unsigned char* result;
  107. unsigned int result_len = 32;
  108. int i;
  109. static char res_hexstring[32];
  110.  
  111. result = HMAC(EVP_sha256(), key, 4, data, 28, NULL, NULL);
  112. for (i = 0; i < result_len; i++) {
  113. sprintf(&(res_hexstring[i * 2]), "%02x", result[i]);
  114. }
  115.  
  116. if (strcmp((char*) res_hexstring, (char*) expected) == 0) {
  117. printf("Test ok, result length %dn", result_len);
  118. } else {
  119. printf("Got %s instead of %sn", res_hexstring, expected);
  120. }
  121. }
  122.  
  123. HMAC_CTX ctx;
  124. HMAC_CTX_init(&ctx);
  125. HMAC_Init_ex(&ctx, key, 40, EVP_sha256(), e);
  126. ...
  127.  
  128. unsigned int len;
  129. HMAC_Final(&ctx, result, &len);
Add Comment
Please, Sign In to add comment