📄 paraset.cpp
字号:
// paraset.cpp : implementation file
//
#include "stdafx.h"
#include "forward_secure.h"
#include "paraset.h"
#include "string.h"
#include "BigInt.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// paraset dialog
paraset::paraset(CWnd* pParent /*=NULL*/)
: CDialog(paraset::IDD, pParent)
{
//{{AFX_DATA_INIT(paraset)
m_Vp = _T("");
m_Vq = _T("");
m_Vs0 = _T("");
m_Vk1 = _T("");
m_Vg = _T("");
//}}AFX_DATA_INIT
strcpy(mark,"00000");
}
void paraset::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(paraset)
DDX_Control(pDX, IDOK, m_OK);
DDX_Text(pDX, IDC_PRIMEp, m_Vp);
DDX_Text(pDX, IDC_PRIMEq, m_Vq);
DDX_Text(pDX, IDC_S0, m_Vs0);
DDX_Text(pDX, IDC_K1, m_Vk1);
DDX_Text(pDX, IDC_EDITg, m_Vg);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(paraset, CDialog)
//{{AFX_MSG_MAP(paraset)
ON_BN_CLICKED(IDC_BUTTONp, OnBUTTONp)
ON_BN_CLICKED(IDC_BUTTONq, OnBUTTONq)
ON_BN_CLICKED(IDC_BUTTONs0, OnBUTTONs0)
ON_BN_CLICKED(IDC_BUTTONk1, OnBUTTONk1)
ON_BN_CLICKED(IDC_BUTTONg, OnBUTTONg)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// paraset message handlers
void paraset::OnBUTTONp()
{
// TODO: Add your control notification handler code here
char buffer[9];
CString stemp;
CBigInt temp;
do{
p.GetPrime(t_length);
temp=p.Sub(1);
temp=temp.Div(2);
} while(temp.Rab()!=1);
for(int i=p.m_nLength-1;i>=0;i--)
{
_ltoa( p.m_ulValue[i], buffer, 16 );
stemp.Format("%8s",buffer);
m_Vp+=stemp;
}
m_Vp.Replace (' ','0');
UpdateData(false);
mark[0]='1';
if (strcmp(mark,"11111")==0)
m_OK.EnableWindow (true);
}
void paraset::OnBUTTONq()
{
// TODO: Add your control notification handler code here
char buffer[9];
CString stemp;
q.GetPrime(t_length);
for(int i=q.m_nLength-1;i>=0;i--)
{
_ltoa( q.m_ulValue[i], buffer, 16 );
stemp.Format("%8s",buffer);
m_Vq+=stemp;
}
m_Vq.Replace (' ','0');
UpdateData(false);
mark[1]='1';
if (strcmp(mark,"11111")==0) m_OK.EnableWindow (true);
}
BOOL paraset::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
m_OK.EnableWindow (false);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void paraset::OnBUTTONs0()
{
// TODO: Add your control notification handler code here
char buffer[9];
CBigInt s0,temp;
CString stemp;
//PK=g~so mod p 传输到PK
do{
s0.GetBigInt(t_length);
temp=g.RsaTrans(s0,p);} while(temp.m_nLength==1&&temp.m_ulValue[0]==1);
s.Mov(s0);
PK.Mov(temp);
//display the big integer s0
for(int i=s0.m_nLength-1;i>=0;i--)
{
_ltoa( s0.m_ulValue[i], buffer, 16 );
stemp.Format("%8s",buffer);
m_Vs0+=stemp;
}
m_Vs0.Replace (' ','0');
UpdateData(false);
mark[2]='1';
if (strcmp(mark,"11111")==0) m_OK.EnableWindow (true);
}
void paraset::OnBUTTONk1()
{
// TODO: Add your control notification handler code here
char buffer[9];
CBigInt k1,temp1,temp2,temp3,temp4;
CString stemp;
do{
//s1=s0+i+2k1 传输到s, R1=g~k1 mod p 传输到R
k1.GetBigInt(t_length);
//k1.GetPrime(t_length);
temp3=g.RsaTrans(k1,p);
temp4=temp3.Mul(temp3);
temp4=temp4.Mod(p);
temp1=k1.Add(k1);
temp1=temp1.Add(1);
temp1=temp1.Add(s);
temp2=temp1.Mod(p.Sub(1));}
while((temp2.m_nLength==1&&temp2.m_ulValue[0]==0)||(temp4.m_nLength==1&&temp4.m_ulValue[0]==1));
s.Mov(temp1);
R.Mov(temp3);
for(int i=k1.m_nLength-1;i>=0;i--)
{
_ltoa( k1.m_ulValue[i], buffer, 16 );
stemp.Format("%8s",buffer);
m_Vk1+=stemp;
}
m_Vk1.Replace (' ','0');
UpdateData(false);
//k2=k1~2 mod q 传输到k
/*temp1.Mov(k1);
do{
temp1=temp1.Mul(temp1);
temp1=temp1.Mod(q);
temp2=temp1.Mod(p.Sub(1));}
while(temp2.m_nLength==1&&temp2.m_ulValue[0]==0);*/
temp1=k1.Mul(k1);
temp1=temp1.Mod(q);
k.Mov(temp1);
mark[3]='1';
if (strcmp(mark,"11111")==0) m_OK.EnableWindow (true);
}
void paraset::OnBUTTONg()
{
// TODO: Add your control notification handler code here
char buffer[9];
CString stemp;
do
{
g.GetPrime(t_length);
}while(p.Cmp(g)!=1);
for(int i=g.m_nLength-1;i>=0;i--)
{
_ltoa( g.m_ulValue[i], buffer, 16 );
stemp.Format("%8s",buffer);
m_Vg+=stemp;
}
m_Vg.Replace (' ','0');
UpdateData(false);
mark[4]='1';
if (strcmp(mark,"11111")==0) m_OK.EnableWindow (true);
}
void paraset::OnOK()
{
// TODO: Add extra validation here
timemark=1;
CDialog::OnOK();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -