int generate_key(NUMBER p1, NUMBER p2, NUMBER_SET *g_public_key, NUMBER_SET *g_secret_key) { NUMBER n,d,e,phi,*max_p; int len; if ( !a_cmp( &p1, &p2 ) ) { //fprintf(stderr,"the prime numbers must not be identical!\n"); //exit(1); return -1 ; } if (a_cmp( &p1, &p2 ) > 0) max_p = &p1; else max_p = &p2; a_mult( &p1, &p2, &n ); a_sub( &p1, &a_one, &phi ); a_sub( &p2, &a_one, &e ); a_mult( &phi, &e, &phi ); len = n_bitlen( &phi ); len = ( len + 3 ) / 4; a_assign( &p1, &phi ); a_sub( &p1, &a_one, &p1 ); init_rnd(); do { do { gen_number( len, &d ); } while (a_cmp( &d, max_p ) <= 0 || a_cmp( &d, &p1 ) >= 0); a_ggt( &d, &phi, &e ); } while ( a_cmp( &e, &a_one ) ); inv( &d, &phi, &e ); // public key a_assign(&(g_public_key->n_key1), &n) ; a_assign(&(g_public_key->n_key2), &e) ; // secret key a_assign(&(g_secret_key->n_key1), &n) ; a_assign(&(g_secret_key->n_key2), &d) ; return 0 ; }
static void a_sub_test(void) { printsln((String)__func__); Array array, array2, sub; array = sa_of_string("1, 2, 3, 4"); sub = a_sub(array, 0, a_length(array)); sa_check_expect(array, sub); a_free(sub); sub = a_sub(array, -1, a_length(array) + 1); sa_check_expect(array, sub); a_free(sub); array2 = sa_of_string("2, 3, 4"); // sa_println(array2); // printiln(a_length(array2)); sub = a_sub(array, 1, a_length(array)); sa_check_expect(array2, sub); sa_free(array2); a_free(sub); array2 = sa_of_string("2, 3"); sub = a_sub(array, 1, a_length(array) - 1); sa_check_expect(array2, sub); sa_free(array2); a_free(sub); array2 = sa_create(0, ""); sub = a_sub(array, 1, 1); sa_check_expect(array2, sub); a_free(sub); sub = a_sub(array, 2, 1); sa_check_expect(array2, sub); sa_free(array2); a_free(sub); sa_free(array); }
static void a_sub_test(void) { printsln((String)__func__); Array a, ac, ex; IntPair ip; a = a_create(3, sizeof(IntPair)); ip = make_int_pair(1, 10); a_set(a, 0, &ip); ip = make_int_pair(2, 20); a_set(a, 1, &ip); ip = make_int_pair(3, 30); a_set(a, 2, &ip); a_println(a, print_int_pair); ex = a_create(2, sizeof(IntPair)); ip = make_int_pair(1, 10); a_set(ex, 0, &ip); ip = make_int_pair(2, 20); a_set(ex, 1, &ip); ac = a_sub(a, 0, 2); a_check_expect(ac, ex); ip = make_int_pair(2, 20); a_set(ex, 0, &ip); ip = make_int_pair(3, 30); a_set(ex, 1, &ip); a_free(ac); ac = a_sub(a, 1, 3); a_check_expect(ac, ex); a_free(a); a_free(ac); a_free(ex); Array array, array2, sub; array = ia_of_string("1 2 3 4"); sub = a_sub(array, 0, a_length(array)); ia_check_expect(array, sub); a_free(sub); sub = a_sub(array, -1, a_length(array) + 1); ia_check_expect(array, sub); a_free(sub); array2 = ia_of_string("2 3 4"); sub = a_sub(array, 1, a_length(array)); ia_check_expect(sub, array2); a_free(array2); a_free(sub); array2 = ia_of_string("2 3"); sub = a_sub(array, 1, a_length(array) - 1); ia_check_expect(sub, array2); a_free(array2); a_free(sub); array2 = ia_of_string(""); sub = a_sub(array, 1, 1); ia_check_expect(sub, array2); a_free(sub); sub = a_sub(array, 2, 1); ia_check_expect(sub, array2); a_free(array2); a_free(sub); a_free(array); array = da_range(1, 10, 1); sub = a_sub(array, 0, array->n); da_check_within(sub, array); a_free(sub); sub = a_sub(array, -10, array->n + 10); da_check_within(sub, array); a_free(sub); array2 = da_range(2, 10, 1); sub = a_sub(array, 1, array->n); da_check_within(sub, array2); a_free(array2); a_free(sub); array2 = da_range(2, 9, 1); sub = a_sub(array, 1, array->n - 1); da_check_within(sub, array2); a_free(array2); a_free(sub); array2 = da_range(0, 0, 1); sub = a_sub(array, 1, 1); da_check_within(sub, array2); a_free(sub); sub = a_sub(array, 2, 1); da_check_within(sub, array2); a_free(array2); a_free(sub); array2 = da_range(3, 6, 1); sub = a_sub(array, 2, 5); da_check_within(sub, array2); a_free(array2); a_free(sub); a_free(array); }