int test_tobin(testspec_t *t, FILE *ofp) { mp_int in[1]; int test_len, out_len; mp_result res; if(!parse_int_values(t, in, NULL, NULL)) return imath_errno = MP_BADARG, 0; trim_line(t->output[0]); if((out_len = parse_binary(t->output[0], g_bin1, sizeof(g_bin1))) < 0) return imath_errno = MP_BADARG, 0; if((test_len = mp_int_binary_len(in[0])) != out_len) { sprintf(g_output, "Output lengths do not match (want %d, got %d)", test_len, out_len); return imath_errno = OTHER_ERROR, 0; } if((res = mp_int_to_binary(in[0], g_bin2, sizeof(g_bin2))) != MP_OK) return imath_errno = res, 0; if(memcmp(g_bin1, g_bin2, test_len) != 0) { int pos = 0, i; for(i = 0; i < test_len - 1; ++i) pos += sprintf(g_output + pos, "%d.", g_bin2[i]); sprintf(g_output + pos, "%d", g_bin2[i]); return imath_errno = OTHER_ERROR, 0; } return 1; }
/* Convert integer to octet string, per PKCS#1 v.2.1 */ mp_result rsa_i2osp(mp_int z, unsigned char *out, int len) { int excess_len = mp_int_binary_len(z); if(excess_len < len) return MP_RANGE; memset(out, 0, len); excess_len -= len; mp_int_to_binary(z, out + excess_len, len); return MP_OK; }