void GenerateKeys(mp_int *d, mp_int *e, mp_int *n) { while (1) { mp_int p; mp_init(&p); mp_prime_random_ex(&p,8,2048, LTM_PRIME_2MSB_ON, &createRandom,NULL); mp_print("P",&p); mp_int q; mp_init(&q); mp_prime_random_ex(&q,8,2048, LTM_PRIME_2MSB_ON, &createRandom,NULL); mp_print("Q",&q); mp_int pp; mp_init(&pp); mp_sub_d(&p,1,&pp); mp_int qq; mp_init(&qq); mp_sub_d(&q,1,&qq); mp_int pq; mp_init(&pq); mp_mul(&pp,&qq,&pq); mp_mul(&p,&q,n); mp_set(d, 5); mp_int temp; mp_init(&temp); mp_int g; mp_init(&g); mp_int t; mp_init(&t); mp_exteuclid(d,&pq,e, &temp,&g); if (mp_cmp_d(&g,1) == 0) return ; // now we would have to add 1, but we prefer to get some new numbers /* printf("Havve to add 1\n"); mp_add_d(d, 1, &t); printf("Exchange 1\n"); mp_copy(&t,d);*/ } }
BigNum BigNum::ExtendedGcd(const BigNum &other, BigNum &u, BigNum &v) const { BigNum result; mp_exteuclid(*this, other, u, v, result); return result; }