📄 zrsa.cpp
字号:
/*************************************************************************
** **
** zrsa.cxx **
** **
** INTERFACE FUNCTION FOR ZRSA **
** **
** Copyright (c)1996 Markku-Juhani O. Saarinen <mjos@math.jyu.fi> **
** **
** Rewriten by Alfred Meng <alfredmeng@163.net **
*************************************************************************/
#include <stdio.h>
#include "rsa.h"
extern "C" {
//-----------------------------------------------------------------------------
void rsa_keygen(int bits, char *pN, char *pE, char *pD)
//-----------------------------------------------------------------------------
{
int bits_p,bits_q;
static kbn phi, p, q, e, d, n, one,pmod,qmod;
static kbn p1mod;
e.load((unsigned char *)"\x00\x01\x00\x01",4);
bits_p = bits /2;
bits_q = bits_p;
one = 1;
do{
// generate prime
p = random_prime( bits_p );
q = random_prime( bits_q );
// n = pq and j(n) = (p-1)(q-1)
n = p * q;
--p;
--q;
phi = p * q;
++p;
++q;
// gcd(e, phi(n)) = 1 ===> e
}while( one != gcd( e, phi ) );
// ( e * d ) mod phi = 1 ===> d
d = inverse( e, phi );
strcpy(pN,n.saveasc());
strcpy(pE,e.saveasc());
strcpy(pD,d.saveasc());
return;
}
//-----------------------------------------------------------------------------
void rsa_encrypt(char *pN, char *pE, char *pData,char *pOUT )
//-----------------------------------------------------------------------------
{
static kbn n, e, m, f;
n.loadasc(pN);
e.loadasc(pE);
f.loadasc(pData);
m = modexp( f, e, n );
strcpy(pOUT,m.saveasc());
}
//-----------------------------------------------------------------------------
void rsa_decrypt(char *pN, char *pD, char *pData, char *pOUT )
//-----------------------------------------------------------------------------
{
rsa_encrypt(pN, pD, pData,pOUT );
}
//-----------------------------------------------------------------------------
void rsa_sign( char *pN, char *pD, char *hash, short hash_len, char *pSign)
//-----------------------------------------------------------------------------
{
static kbn n, e, m, f;
n.loadasc(pN);
e.loadasc(pD);
f.load((unsigned char *)hash,hash_len);
m = modexp( f, e, n );
strcpy(pSign,m.saveasc());
}
//-----------------------------------------------------------------------------
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -