Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // C++ ohjelma kysyy kaksi alkulukua
- // Laskee niiden tulona RSA:n julkisen avaimen n
- // Kysyy eksponentin e
- // Laskee niiden avulla privaatin purkuavaimen d
- // Käyttää GMP-kirjastoa joka mahdollistaa
- // Tässä erittäin suurten konaislukujen käytön
- // Ohjelman tarkoitus valaista GMP-kirjaston
- // käyttöä C++ ja C-ohjelmissa
- // Juhani Kaukoranta 12.8.2019
- #include <gmp.h>
- #include <stdio.h>
- #include <assert.h>
- int main(){
- char inputStr[1024];
- int flag;
- /*
- mpz_t is the type defined for GMP integers.
- It is a pointer to the internals of the GMP integer data structure
- */
- mpz_t p,p1,q,q1,n,e,moduli,d;
- mpz_init(p);
- mpz_init(q);
- mpz_init(n);
- mpz_init(e);
- mpz_init(moduli);
- mpz_init(d);
- mpz_init(p1); // p - 1
- mpz_init(q1); // q - 1
- printf ("Anna tulontekijä p: ");
- scanf("%1023s" , inputStr);
- flag = mpz_set_str(p,inputStr, 10);
- assert (flag == 0); // Jos flag ei ole 0, jokin pielessä
- printf("Anna tulontekijä q: ");
- scanf("%1023s" , inputStr);
- flag = mpz_set_str(q,inputStr, 10);
- assert (flag == 0);
- printf("Anna eksponentti e: ");
- scanf("%1023s" , inputStr);
- flag = mpz_set_str(e,inputStr, 10);
- assert (flag == 0);
- mpz_mul(n,p,q); // Lasketaan julkinen avain n = p * q
- mpz_sub_ui(p1,p,1); // p1 = p - 1
- mpz_sub_ui(q1,q,1); // q1 = q - 1
- mpz_lcm(moduli,p1,q1); // moduli= lcm(p-1,q-1)
- mpz_invert(d,e,moduli); // inverse e mod moduli laskee privaatin d
- /* Print n */
- printf ("n = ");
- mpz_out_str(stdout,10,n);
- printf ("\n");
- printf ("e = ");
- mpz_out_str(stdout,10,e);
- printf ("\n");
- printf ("privaattiavain d = ");
- mpz_out_str(stdout,10,d);
- printf ("\n");
- printf ("moduli lcm(p-1,q-1) = ");
- mpz_out_str(stdout,10,moduli);
- printf ("\n");
- // clear variables
- mpz_clear(n);
- mpz_clear(p);
- mpz_clear(q);
- mpz_clear(p1);
- mpz_clear(q1);
- mpz_clear(d);
- mpz_clear(moduli);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement