## rsa_san.cpp in RSA_file_encryption.

``````
#include "stdafx.h"
// This is a slow but easy RSA encryption class
// By sanicle,2005.12
// 3mn@3mn.net

#include "stdio.h"
#include "rsa_san.h"

class Prime_factory_san
{
unsigned np;
unsigned *pl;
public:
Prime_factory_san();
~Prime_factory_san();
vlong find_prime( vlong & start );
};

// prime factory implementation

static int is_probable_prime_san( const vlong &p )
{
// Test based on Fermats theorem a**(p-1) = 1 mod p for prime p
// For 1000 bit numbers this can take quite a while
const rep = 4;
const unsigned any[rep] = { 2,3,5,7 };
for ( unsigned i=0; i<rep; i+=1 )
if ( modexp( any[i], p-vlong(1), p ) != vlong(1) )
return 0;
return 1;
}

Prime_factory_san::Prime_factory_san()
{
np = 0;
unsigned NP = 200;
pl = new unsigned[NP];

// Initialise pl
unsigned SS = 8*NP; // Rough estimate to fill pl
char * b = new char[SS+1]; // one extra to stop search
for (unsigned i=0;i<=SS;i+=1) b[i] = 1;
unsigned p = 2;
while (1)
{
// skip composites
while ( b[p] == 0 ) p += 1;
if ( p == SS ) break;
pl[np] = p;
np += 1;
if ( np == NP ) break;
// cross off multiples
unsigned c = p*2;
while ( c < SS )
{
b[c] = 0;
c += p;
}
p += 1;
}
delete [] b;
}

Prime_factory_san::~Prime_factory_san()
{
delete [] pl;
}

vlong Prime_factory_san::find_prime( vlong & start )
{
unsigned SS = 1000; // should be enough unless we are unlucky
char * b = new char[SS]; // bitset of candidate primes
unsigned tested = 0;
while (1)
{
unsigned i;
for (i=0;i<SS;i++)
b[i] = 1;
for (i=0;i<np;i++)
{
unsigned p = pl[i];
unsigned r = start % vlong(p); // not as fast as it should be - could do with special routine
if (r) r = p - r;
// cross off multiples of p
while ( r < SS )
{
b[r] = 0;
r += p;
}
}
// now test candidates
for (i=0;i<SS;i++)
{

...
...
... to be continued.

This is a preview. To get the complete source file,

```
```

#### Project Files

 Name Size Date ReadMe.txt 1,003.00 B 18-01-06 12:31 rsa_draft.cpp 3.30 kB 18-01-06 23:20 rsa_draft.h 522.00 B 18-01-06 23:21 rsa_san.cpp 9.02 kB 21-01-06 15:30 rsa_san.h 1.11 kB 21-01-06 15:30 sanpack_rsa.cpp 2.92 kB 23-01-06 11:43 sanpack_rsa.h 1.56 kB 23-01-06 11:48 stdafx.cpp 215.00 B 18-01-06 12:31 stdafx.h 263.00 B 18-01-06 12:31 vlong.cpp 10.56 kB 19-01-06 13:38 vlong.h 1.74 kB 19-01-06 13:37 ReadMe.txt 1.04 kB 19-01-06 15:14 rsa_draft.cpp 3.30 kB 18-01-06 23:20 rsa_draft.h 522.00 B 18-01-06 23:21 rsa_san.cpp 9.02 kB 21-01-06 15:30 rsa_san.h 1.11 kB 21-01-06 15:30 sanpack_rsa.cpp 2.92 kB 23-01-06 11:43 sanpack_rsa.h 1.56 kB 23-01-06 11:48 sanpack_rsa_c_debug.cpp 90.00 B 19-01-06 15:20 stdafx.cpp 223.00 B 19-01-06 15:14 stdafx.h 195.00 B 19-01-06 15:14 vlong.cpp 10.56 kB 19-01-06 13:38 vlong.h 1.74 kB 19-01-06 13:37 0.00 B 24-04-08 09:20 0.00 B 24-04-08 09:21 0.00 B 22-04-09 08:21
...