Advertisement
jukaukor

RSAprivatKeyComp.cpp

Aug 12th, 2019
134
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.95 KB | None | 0 0
  1. // C++ ohjelma kysyy kaksi alkulukua
  2. // Laskee niiden tulona RSA:n julkisen avaimen n
  3. // Kysyy eksponentin e
  4. // Laskee niiden avulla privaatin purkuavaimen d
  5. // Käyttää GMP-kirjastoa joka mahdollistaa
  6. // Tässä erittäin suurten konaislukujen käytön
  7. // Ohjelman tarkoitus valaista GMP-kirjaston
  8. // käyttöä C++ ja C-ohjelmissa
  9.  
  10. // Juhani Kaukoranta 12.8.2019
  11.  
  12. #include <gmp.h>
  13. #include <stdio.h>
  14. #include <assert.h>
  15.  
  16. int main(){
  17.  
  18. char inputStr[1024];
  19. int flag;
  20. /*
  21. mpz_t is the type defined for GMP integers.
  22. It is a pointer to the internals of the GMP integer data structure
  23. */
  24. mpz_t p,p1,q,q1,n,e,moduli,d;
  25. mpz_init(p);
  26. mpz_init(q);
  27. mpz_init(n);
  28. mpz_init(e);
  29. mpz_init(moduli);
  30. mpz_init(d);
  31. mpz_init(p1); // p - 1
  32. mpz_init(q1); // q - 1
  33.  
  34.  
  35. printf ("Anna tulontekijä p: ");
  36. scanf("%1023s" , inputStr);
  37. flag = mpz_set_str(p,inputStr, 10);
  38. assert (flag == 0); // Jos flag ei ole 0, jokin pielessä
  39.  
  40. printf("Anna tulontekijä q: ");
  41. scanf("%1023s" , inputStr);
  42. flag = mpz_set_str(q,inputStr, 10);
  43. assert (flag == 0);
  44.  
  45. printf("Anna eksponentti e: ");
  46. scanf("%1023s" , inputStr);
  47. flag = mpz_set_str(e,inputStr, 10);
  48. assert (flag == 0);
  49.  
  50. mpz_mul(n,p,q); // Lasketaan julkinen avain n = p * q
  51. mpz_sub_ui(p1,p,1); // p1 = p - 1
  52. mpz_sub_ui(q1,q,1); // q1 = q - 1
  53. mpz_lcm(moduli,p1,q1); // moduli= lcm(p-1,q-1)
  54. mpz_invert(d,e,moduli); // inverse e mod moduli laskee privaatin d
  55.  
  56. /* Print n */
  57. printf ("n = ");
  58. mpz_out_str(stdout,10,n);
  59. printf ("\n");
  60. printf ("e = ");
  61. mpz_out_str(stdout,10,e);
  62. printf ("\n");
  63. printf ("privaattiavain d = ");
  64. mpz_out_str(stdout,10,d);
  65. printf ("\n");
  66. printf ("moduli lcm(p-1,q-1) = ");
  67. mpz_out_str(stdout,10,moduli);
  68. printf ("\n");
  69.  
  70. // clear variables
  71. mpz_clear(n);
  72. mpz_clear(p);
  73. mpz_clear(q);
  74. mpz_clear(p1);
  75. mpz_clear(q1);
  76. mpz_clear(d);
  77. mpz_clear(moduli);
  78.  
  79. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement