All pastes #3881 Raw Edit

Anonymous

public cpp v1 · immutable
#3881 ·published 2005-01-07 20:29 UTC
rendered paste body
//---------------------------------------------------------------------------#include <vcl.h>#pragma hdrstopextern "C" { #include "miracl.h"}//#include <stdio.h>//#include <windows.h>#include <math.h>#include "Unit1.h"//---------------------------------------------------------------------------#pragma package(smart_init)#pragma resource "*.dfm"TForm1 *Form1;miracl *mip=mirsys(5000,10);//---------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)        : TForm(Owner){}//---------------------------------------------------------------------------void GenPrimes(big a, big b, int BITS){   csprng RNG;   strong_init(&RNG,1,"a",GetTickCount());   //Generate Prime 1   strong_bigdig(&RNG,BITS,10,a);   if(subdivisible(a,2))   {      incr(a,1,a);   }   while(!isprime(a))   {      incr(a,2,a);      //cotnum(a,stdout);   }   //Generate Prime 2   strong_bigdig(&RNG,BITS,10,b);   if(subdivisible(b,2))   {      incr(b,1,b);   }   while(!isprime(b))   {      incr(b,2,b);   }}//Generates F which is (P-1)(Q-1)void GenF(big p, big q, big f){   big p1=mirvar(0),q1=mirvar(0);   decr(p,1,p1);   decr(q,1,q1);   multiply(p1,q1,f);}//Generates number E for RSA encryption.//Number is BITS long and requires an F void GenE(big f, big e, int BITS){   csprng RNG;   big x=mirvar(0);   big z=mirvar(0);   convert(1,x);   strong_init(&RNG,1,"a",GetTickCount());   strong_bigdig(&RNG,BITS/2,10,e);   //cotnum(e,stdout);   if(subdivisible(e,2))   {      //cotnum(e,stdout);      incr(e,1,e);   }   //cotnum(z,stdout);   egcd(f,e,z);   while(compare(z,x)!=0)   {      incr(e,2,e);      egcd(f,e,z);      //cotnum(e,stdout);   }}//Generates D. don't quite know how. Requires a variable to store it//D and requres E and number Fvoid GenD(big d,big e, big f){   copy(e,d);   xgcd(d,f,d,d,d);}void RSAEnc(big plaintext, big e, big p, big q, big cyphered){   big pq = mirvar(0);   multiply(p,q,pq);   powmod(plaintext,e,pq,cyphered);}void RSADec(big t, big e, big p, big q, big w){   big pq = mirvar(0);   multiply(p,q,pq);   powmod(t,e,pq,w);}void __fastcall TForm1::Button1Click(TObject *Sender){   int BITS=2048;   BITS=ceil((BITS)*log10(2.0)/2);   //2048/log[2](10) = number of digits in a 2048 bit number.   char *nump;   char *numq;	big p,q,f,p1,q1,e,d,n,w,l;   char *nick;   String A;   nick = (char*)malloc(258);   p=mirvar(0);   q=mirvar(0);   f=mirvar(0);   e=mirvar(0);   d=mirvar(0);   n=mirvar(0);   w=mirvar(0);   l=mirvar(0);   convert(695,n);      nump = new char[256+1];   numq = new char[256+1];   GenPrimes(p,q,BITS);   big_to_bytes(257,p,nump,false);   big_to_bytes(257,q,numq,false);   cotstr(p,nick);   A=nick;   Form1->Memo1->Text = A;   cotstr(q,nick);   A=nick;   Form1->Memo2->Text = A;   //printf("P=");   //cotnum(p,stdout);   //printf("Q=");   //cotnum(q,stdout);   GenF(p,q,f);   cotstr(f,nick);   A=nick;   Form1->Memo3->Text = A;   GenE(f,e,BITS);   cotstr(e,nick);   A=nick;   Form1->Memo4->Text = A;   GenD(d,e,f);   cotstr(d,nick);   A=nick;   Form1->Memo5->Text = A;   RSAEnc(n,e,p,q,w);   //printf("Cipher=");   //cotnum(w,stdout);   RSADec(w,d,p,q,l);   //printf("Plaintext=");   //cotnum(l,stdout);}//---------------------------------------------------------------------------