1 pièce(s) jointe(s)
Unité BigInt pour la cryptographie RSA
Salut,
Encore dans l'esprit de Noël, je partage le code source d'une unité BigInt que j'ai codée pendant "mes ages de folie" pour faire de la cryptographie RSA sous Turbo Pascal.
L'unité comprend les opérations suivantes :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
|
unit pbigint;
{operations usuelles sur des entiers pouvant atteindre 300 chiffres:bigint
Unité developpée par KPIZINGUI DARRYL
24 novembre 2007}
interface
const maxbig=200;
basemax=200;
type bigint=record
t:array[1..maxbig] of -1..9;
s:shortint;
end;
tbase=array[1..basemax] of bigint;
tbasel=array[1..basemax] of integer;
{----------------------------------------------}
procedure init(var b:bigint); {initialise a
0}
procedure breadln(var a:bigint);{lecture au clavier}
procedure bwriteln(a:bigint);{ecriture sur stdout}
function comp(a,b:bigint):integer; {compare a et b:0 si a=b;1 si b<a;-1 sinon}
procedure plus(a,b:bigint;var c:bigint); {addition comme on le fait au primaire}
procedure moins(a,b:bigint;var c:bigint); {soustraction}
procedure div2(a:bigint;var q:bigint);{division par 2}
procedure mult2(a:bigint;var c:bigint); {multiplication par 2}
procedure conv(a:longint;var c:bigint); {convertit un longint en bigint}
procedure prod(x,y:bigint;var c:bigint);{multiplication comme on le fait au primaire}
procedure babs(a:bigint;var c:bigint); {valeur absolue}
procedure bdiv(a,b:bigint;var c:bigint);{division entiere}
procedure bmod(a,b:bigint;var c:bigint);{reste d' une division euclidienne}
procedure prodmod(x,y,t:bigint;var c:bigint);{multiplication modulo n}
procedure brandom(n:integer;var c:bigint);{rend un nombre au hazard de n chiffres}
procedure expo(x,n:bigint;var c:bigint);{elevation a la puissance n}
function premier(a:bigint):boolean;{determine si un nombre est premier}
procedure euclide(a,b:bigint;var u1,v1,c:bigint);{algorithme d' euclide etendu; c est le reste}
procedure expomod(a,n,b:bigint;var c:bigint); {puissance modulo}
procedure bfwriteln(var f:text;a:bigint);{ecriture de a dans le fichier f}
procedure bfreadln(var f:text;var a:bigint);{lecture d' un bigint dans le fihier f}
procedure tobasex(a,b:bigint;var t:tbase);{conversion de a en base b}
procedure tobase10(t:tbasel;b:bigint;var c:bigint);{conversion en base b}
function bigtolong(a:bigint):longint;{convertit un bigint en longint}
type str100=string[20]; |