⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 paraset.cpp

📁 ElGamal 数字签名源码
💻 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 + -