NO DOC.
#include <iostream>
#include <fstream>
#include <sys/stat.h>
#include <openssl/rsa.h>
#include <openssl/pem.h>
extern "C" {
#include "openssh/digest.h"
#include "openssh/key.h"
}
#include <givaro/givintrsa.h>
#include <givaro/givtimer.h>
template<class RandIter=GivRandom>
Integer& iqmp,
long size,
unsigned long seed) {
IRD.keys_gen(gen, (size>>1)+1, (size>>1)-1, n, e, d, p, q);
Integer phim,p1,q1; IRD.
mul(phim, IRD.sub(p1,p,IRD.one), IRD.sub(q1,q,IRD.one));
if ( IRD.islt(d,IRD.zero) ) IRD.
addin(d,phim);
if ( IRD.islt(iqmp,IRD.zero) ) IRD.
addin(iqmp,p);
}
};
std::string str(a);
BN_dec2bn(&n,str.c_str());
return n;
}
int mymain(FILE* fileout, FILE* filepub,
long s,
unsigned long seed) {
Integer in, ie, id, ip, iq, idmp1, idmq1, iiqmp;
std::cerr << tim << std::endl;
#if OPENSSL_VERSION_NUMBER < 0x010100000L
RSA *rsa= new RSA();
rsa->dmp1 = BN_new();
Integer2BN(rsa->dmp1, idmp1);
rsa->dmq1 = BN_new();
Integer2BN(rsa->dmq1, idmq1);
rsa->iqmp = BN_new();
Integer2BN(rsa->iqmp, iiqmp);
#else
RSA *rsa= RSA_new();
BIGNUM * bdmp1 = BN_new();
Integer2BN(bdmp1, idmp1);
BIGNUM * bdmq1 = BN_new();
Integer2BN(bdmq1, idmq1);
BIGNUM * biqmp = BN_new();
Integer2BN(biqmp, iiqmp);
RSA_set0_key(rsa, bn, be, bd);
RSA_set0_factors(rsa, bp, bq);
RSA_set0_crt_params(rsa, bdmp1, bdmq1, biqmp);
#endif
rsakey.type=KEY_RSA;
rsakey.rsa = rsa;
std::cerr << "key's randomart: \n" << sshkey_fingerprint(&rsakey, SSH_FP_HASH_DEFAULT, SSH_FP_RANDOMART) << std::endl;
PEM_write_RSAPrivateKey(fileout,rsa,NULL,NULL,0,NULL,NULL);
key_write(&rsakey, filepub);
fprintf(filepub," givaro\n");
return 0;
}
std::ifstream filrand(filename);
unsigned long seed=0;
for(unsigned int i=0; i<sizeof(unsigned long); ++i) {
unsigned char t; filrand >> t;
seed <<= 8;
seed |= t;
}
std::cerr << "Generated seed: " << seed << ", using " << filename << std::endl;
return seed;
}
std::cerr << "Usage: givaro-ssh-keygen [-b bits] [-f private-key-file] [-p public-key-file] [-r randomness-file]" << std::endl;
}
int main(
int argc,
char** argv)
{
if (argc > 10) {
}
long s = 4096;
unsigned long seed = 0;
long files = 0;
std::string filprivname, filpubname;
for (long i = 1; i < argc; i++) {
if (argv[i][0] == '-') {
switch(argv[i][1]) {
case 'h':; case 'H': {
}
case 'b':; case 'B': {
s = atoi(argv[++i]);
break;
}
case 'f':; case 'F': {
filprivname = std::string(argv[++i]);
++files;
break;
}
case 'p':; case 'P': {
filpubname = std::string(argv[++i]);
++files;
break;
}
case 'r':; case 'R': {
break;
}
}
}
}
if (files > 1) {
FILE * filpriv;
filpriv = fopen(filprivname.c_str(),"w");
if (argc>3) {
FILE * filpub ;
filpub = fopen(filpubname.c_str(),"w");
mymain(filpriv,filpub,s,seed);
fclose(filpub);
} else
mymain(filpriv,stdout,s,seed);
fclose(filpriv);
chmod(filprivname.c_str(),(S_IRUSR|S_IWUSR));
} else
return 0;
}
RSA domain.
Definition givintrsa.h:36
IntFactorDom< MyRandIter >::random_generator random_generator
Definition givintrsa.h:43
This is the Integer class.
Definition gmp++_int.h:160
static giv_all_inlined Integer & modin(Integer &r, const Integer &n)
Function mod (inplace).
Definition gmp++_int_mod.C:30
static giv_all_inlined Integer & mul(Integer &res, const Integer &n1, const Integer &n2)
Multiplication res=n1*n2.
Definition gmp++_int_mul.C:55
static giv_all_inlined Integer & addin(Integer &res, const Integer &n)
Addition (inplace) res+=n.
Definition gmp++_int_add.C:26
static void seeding(uint64_t s)
Random numbers (no doc)
Definition gmp++_int_rand.inl:44
static giv_all_inlined Integer & mod(Integer &r, const Integer &n, const Integer &d)
Function mod.
Definition gmp++_int_mod.C:61
friend giv_all_inlined Integer gcd(const Integer &a, const Integer &b)
gcd.
Definition gmp++_int_gcd.C:43
The class Key.
Definition givhashtable.h:31
Timer.
Definition givtimer.h:129
void start()
Start timer.
Definition givtimer.C:164
void stop()
Stop timer.
Definition givtimer.C:172
void clear()
Clear timer.
Definition givtimer.C:155
int main()
Definition f4n3.cpp:22
unsigned long seedfromfile(char *filename)
Definition givaro-ssh-keygen.C:161
void usage()
Definition givaro-ssh-keygen.C:173
BIGNUM * Integer2BN(BIGNUM *n, const Integer &a)
Definition givaro-ssh-keygen.C:84
int mymain(FILE *fileout, FILE *filepub, long s, unsigned long seed)
Definition givaro-ssh-keygen.C:90
Namespace in which the whole Givaro library resides.
Definition all_field.C:23
Definition givaro-ssh-keygen.C:52
void operator()(Integer &n, Integer &e, Integer &d, Integer &p, Integer &q, Integer &dmp1, Integer &dmq1, Integer &iqmp, long size, unsigned long seed)
Definition givaro-ssh-keygen.C:53