Advertisement
Guest User

Untitled

a guest
Sep 23rd, 2019
162
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.77 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <openssl/bn.h>
  3. #include <string.h>
  4.  
  5. #define NBITS 256
  6.  
  7. void printBN(char* msg, BIGNUM * a)
  8. {
  9. char * number_str = BN_bn2hex(a);
  10. printf("%s 0x%s\n", msg, number_str);
  11. OPENSSL_free(number_str);
  12. }
  13.  
  14. int main(){
  15. /*Task 1: Deriving the private key*/
  16. BN_CTX *ctx = BN_CTX_new();
  17. BIGNUM *p = BN_new();
  18. BIGNUM *q = BN_new();
  19. BIGNUM *e = BN_new();
  20. BIGNUM *d = BN_new();
  21.  
  22. BIGNUM *one = BN_new();
  23. BIGNUM *p1 = BN_new();
  24. BIGNUM *q1 = BN_new();
  25. BIGNUM *fi = BN_new();
  26.  
  27. BN_hex2bn(&p, "F7E75FDC469067FFDC4E847C51F452DF");
  28. BN_hex2bn(&q, "E85CED54AF57E53E092113E62F436F4F");
  29. BN_hex2bn(&e, "0D88C3");
  30.  
  31. BN_dec2bn(&one, "1");
  32. BN_sub(p1, p, one);
  33. BN_sub(q1, q, one);
  34. BN_mul(fi, p1, q1, ctx);
  35.  
  36. BN_mod_inverse(d, e, fi, ctx);
  37.  
  38. printBN("Task1: Private key: ", d);
  39. printf("\n");
  40.  
  41.  
  42.  
  43. /*Task2: Encrypting a message*/
  44. BIGNUM *n = BN_new();
  45. BIGNUM *msg = BN_new();
  46. BIGNUM *enc = BN_new();
  47.  
  48. BN_hex2bn(&n, "DCBFFE3E51F62E09CE7032E2677A78946A849DC4CDDE3A4D0CB81629242FB1A5");
  49. BN_hex2bn(&msg, "4120746f702073656372657421");
  50. BN_hex2bn(&d, "74D806F9F3A62BAE331FFE3F0A68AFE35B3D2E4794148AACBC26AA381CD7D30D");
  51. BN_hex2bn(&e, "010001");
  52.  
  53. BN_mod_exp(enc, msg, e, n, ctx);
  54.  
  55. printBN("Task2: Encrypted msg: ",enc);
  56. printf("\n");
  57.  
  58.  
  59.  
  60. /*Task3: Decrypting a message*/
  61.  
  62. BIGNUM *dec = BN_new();
  63.  
  64. BN_hex2bn(&enc, "8C0F971DF2F3672B28811407E2DABBE1DA0FEBBBDFC7DCB67396567EA1E2493F");
  65.  
  66. BN_mod_exp(dec, enc, d, n, ctx);
  67. printBN("Task 3: Decrypted msg: ",dec);
  68. printf("\n");
  69.  
  70.  
  71.  
  72. /*Task4: Signing a message*/
  73.  
  74. BN_hex2bn(&msg, "49206f776520796f752024323030302e");
  75. BN_mod_exp(enc, msg, e, n, ctx);
  76. printBN("Task4: Signature1: ",enc);
  77.  
  78. BN_mod_exp(dec, enc, d, n, ctx);
  79. printBN("Task4: Message1: ",dec);
  80.  
  81. BN_hex2bn(&msg, "49206f776520796f752024333030302e");
  82. BN_mod_exp(enc, msg, e, n, ctx);
  83. printBN("Task4: Signature2: ",enc);
  84.  
  85. BN_mod_exp(dec, enc, d, n, ctx);
  86. printBN("Task4: Message2: ",dec);
  87. printf("\n");
  88.  
  89.  
  90. /*Task5: Verifying a signature*/
  91. BIGNUM *s = BN_new();
  92.  
  93. BN_hex2bn(&s, "643D6F34902D9C7EC90CB0B2BCA36C47FA37165C0005CAB026C0542CBDB6802F");
  94. BN_hex2bn(&n, "AE1CD4DC432798D933779FBD46C6E1247F0CF1233595113AA51B450F18116115");
  95. BN_hex2bn(&msg, "4c61756e63682061206d6973736c652e0a");
  96. BN_hex2bn(&e, "010001");
  97.  
  98.  
  99. BN_mod_exp(dec, s, e, n, ctx);
  100. printBN("Task5: Msg1: ",dec);
  101.  
  102. BN_hex2bn(&s, "643D6F34902D9C7EC90CB0B2BCA36C47FA37165C0005CAB026C0542CBDB6803F");
  103. BN_mod_exp(dec, s, e, n, ctx);
  104. printBN("Task5: Msg2: ",dec);
  105.  
  106.  
  107.  
  108. /*Task6: Manually verifying an x.509 certificate*/
  109. BN_hex2bn(&e, "10001");
  110. BN_hex2bn(&n, "DFAFE99750088357B4CC6265F69082ECC7D32C6B30CA5BECD9C37DC740C118148BE0E83376492AE33F214993AC4E0EAF3E48CB65EEFCD3210F65D22AD9328F8CE5F777B0127BB595C089A3A9BAED732E7A0C063283A27E8A1430CD11A0E12A38B9790A31FD50BD8065DFB7516383C8E28861EA4B6181EC526BB9A2E24B1A289F48A39E0CDA098E3E172E1EDD20DF5BC62A8AAB2EBD70ADC50B1A25907472C57B6AAB34D63089FFE568137B540BC8D6AEEC5A9C921E3D64B38CC6DFBFC94170EC1672D526EC38553943D0FCFD185C40F197EBD59A9B8D1DBADA25B9C6D8DFC115023AABDA6EF13E2EF55C089C3CD68369E4109B192AB62957E3E53D9B9FF0025D");
  111. BN_hex2bn(&s, "dd33d711f3635838dd1815fb0955be7656b97048a56947277bc2240892f15a1f4a1229372474511c6268b8cd957067e5f7a4bc4e2851cd9be8ae879dead8ba5aa1019adcf0dd6a1d6ad83e57239ea61e04629affd705cab71f3fc00a48bc94b0b66562e0c154e5a32aad20c4e9e6bbdcc8f6b5c332a398cc77a8e67965072bcb28fe3a165281ce520c2e5f83e8d50633fb776cce40ea329e1f925c41c1746c5b5d0a5f33cc4d9fac38f02f7b2c629dd9a3916f251b2f90b119463df67e1ba67a87b9a37a6d18fa25a5918715e0f2162f58b0062f2c6826c64b98cdda9f0cf97f90ed434a12444e6f737a28eaa4aa6e7b4c7d87dde0c90244a787afc3345bb442");
  112.  
  113. BN_mod_exp(dec, s, e, n, ctx);
  114.  
  115. printBN("Task6: ",dec);
  116.  
  117.  
  118.  
  119. BN_CTX_free(ctx);
  120. return 0;
  121. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement