
Криптографическая система RSA 381
Продолжение листинга 18.2
interface
const BIGNUM_DWORD = 31;
type TBigNum = array[0..BIGNUM_DWORD] of Cardinal;
procedure BN_bignum_to_hex(var a: TBigNum; var s: string);
procedure BN_hex_to_bignum(var s: string; var a: TBigNum);
procedure BN_bignum_to_dec(var a: TBigNum; var s: string);
procedure BN_dec_to_bignum(var s: string; var a: TBigNum);
function BN_a_cmp_b(var a,b: TBigNum): Integer;
procedure BN_a_add_b(var a,b,res: TBigNum);
procedure BN_a_sub_b(var a,b,res: TBigNum);
procedure BN_a_mul_b(var a,b,res: TBigNum);
procedure BN_a_shl_k(var a: TBigNum; k: Integer;
var res: TBigNum);
procedure BN_a_shr_k(var a: TBigNum; k: Integer;
var res: TBigNum);
function BN_a_upbit(var a: TBigNum): Integer;
procedure BN_a_setbit_k(var a: TBigNum; k: Integer);
procedure BN_a_mod_b(var a,b,res: TBigNum);
procedure BN_a_div_b(var a,b,res: TBigNum);
procedure BN_a_exp_b_mod_c(var a,b,c,res: TBigNum);
procedure BN_ab_GCD(var a,b,res: TBigNum);
procedure BN_a_modinv_b(var a,b,res: TBigNum);
function BN_PrimeTest(var a: TBigNum): Integer;
implementation
uses SysUtils;
var primes: array[0..53] of Integer =
( 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37,
41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89,
97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151,
157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223,
227, 229, 233, 239, 241, 251);
procedure BN_bignum_to_hex(var a: TBigNum; var s: string);
var i: Integer;
begin
i := BIGNUM_DWORD;
while (i>=0) and (a[i]=0) do Dec(i);