?? usbprocpage.cpp
字號:
// UsbProcPage.cpp : implementation file
//
#include "stdafx.h"
#include "UsbKey.h"
#include "UsbProcPage.h"
#include "usbinfopage.h"
#include "usbpwdpage.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#include "..\evp.h"
/////////////////////////////////////////////////////////////////////////////
// CUsbProcPage property page
IMPLEMENT_DYNCREATE(CUsbProcPage, CPropertyPage)
CUsbProcPage::CUsbProcPage() : CPropertyPage(CUsbProcPage::IDD)
{
//{{AFX_DATA_INIT(CUsbProcPage)
//}}AFX_DATA_INIT
m_handle=((CUsbKeyApp * )AfxGetApp())->m_handle;
m_OpenPub=false;
m_OpenPri=false;
}
CUsbProcPage::~CUsbProcPage()
{
}
void CUsbProcPage::DoDataExchange(CDataExchange* pDX)
{
CPropertyPage::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CUsbProcPage)
DDX_Control(pDX, IDC_PROGRESS, m_Progress);
DDX_Control(pDX, IDC_LIST_PROC, m_List);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CUsbProcPage, CPropertyPage)
//{{AFX_MSG_MAP(CUsbProcPage)
ON_BN_CLICKED(IDC_B_ENC, OnBEnc)
ON_BN_CLICKED(IDC_B_DEC, OnBDec)
ON_BN_CLICKED(IDC_BSIGN, OnBsign)
ON_BN_CLICKED(IDC_B_VERIFY, OnBVerify)
ON_BN_CLICKED(IDC_B_SEAL, OnBSeal)
ON_BN_CLICKED(IDC_B_OPEN, OnBOpen)
ON_BN_CLICKED(IDC_B_GETRAND, OnBGetrand)
ON_BN_CLICKED(IDC_BSOUT, OnBsout)
ON_BN_CLICKED(IDC_BSIN, OnBsin)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CUsbProcPage message handlers
void CUsbProcPage::GetUsbState()
{
if(((CUsbKeyApp * )AfxGetApp())->m_VerifyUser!=true)//未認證用戶-關閉
{
GetDlgItem(IDC_B_ENC)->EnableWindow(0);
GetDlgItem(IDC_B_VERIFY)->EnableWindow(0);
GetDlgItem(IDC_B_SEAL)->EnableWindow(0);
GetDlgItem(IDC_B_ENC)->EnableWindow(0);
GetDlgItem(IDC_B_VERIFY)->EnableWindow(0);
GetDlgItem(IDC_B_SEAL)->EnableWindow(0);
return;
}
else//使用USB共鑰
{
if(((CUsbKeyApp * )AfxGetApp())->m_ChangeKey==false)//磁盤沒有改變
{
if(m_OpenPub!=true&&GetUsbPubCert()==true)
{
GetDlgItem(IDC_B_ENC)->EnableWindow(1);
GetDlgItem(IDC_B_VERIFY)->EnableWindow(1);
GetDlgItem(IDC_B_SEAL)->EnableWindow(1);
}
if(m_OpenPri!=true&&GetUsbPriCert()==true)
{
GetDlgItem(IDC_B_DEC)->EnableWindow(1);
GetDlgItem(IDC_BSIGN)->EnableWindow(1);
GetDlgItem(IDC_B_OPEN)->EnableWindow(1);
}
}
else if(((CUsbKeyApp * )AfxGetApp())->m_ChangeKey==true)//磁盤改變
{
GetDlgItem(IDC_B_ENC)->EnableWindow(0);
GetDlgItem(IDC_B_VERIFY)->EnableWindow(0);
GetDlgItem(IDC_B_SEAL)->EnableWindow(0);
GetDlgItem(IDC_B_DEC)->EnableWindow(0);
GetDlgItem(IDC_BSIGN)->EnableWindow(0);
GetDlgItem(IDC_B_OPEN)->EnableWindow(0);
if(GetUsbPubCert()==true)//取得公鑰//開放公鑰程序
{
GetDlgItem(IDC_B_ENC)->EnableWindow(1);
GetDlgItem(IDC_B_VERIFY)->EnableWindow(1);
GetDlgItem(IDC_B_SEAL)->EnableWindow(1);
}
if(GetUsbPriCert()==true)//開放私鑰程序
{
GetDlgItem(IDC_B_DEC)->EnableWindow(1);
GetDlgItem(IDC_BSIGN)->EnableWindow(1);
GetDlgItem(IDC_B_OPEN)->EnableWindow(1);
}
((CUsbKeyApp * )AfxGetApp())->m_ChangeKey=false;
}
}
}
bool CUsbProcPage::GetUsbPubCert()//取得usb共鑰
{
if(USBKey_ReadCert(m_handle,1,(unsigned char *)m_pubkey,&m_pubkey_len)==FALSE)//成功
{
m_List.AddMsg("找不到USB公鑰證書",M_ERROR);
return FALSE;
}
m_OpenPub=true;
m_List.AddMsg("獲得公鑰成功");
return true;
}
bool CUsbProcPage::GetUsbPriCert()
{
//////////////讀出私鑰文件///////////////////////////
if(USBKey_ReadCert(m_handle,0,(unsigned char *)m_prikey,(ULONG *)&m_prikey_len)==FALSE)
{
m_List.AddMsg("獲得私鑰失敗",M_ERROR);
return false;
}
/////////////////////////////////////////////////////
m_OpenPri=true;
m_List.AddMsg("獲得私鑰成功");
return true;
}
BOOL CUsbProcPage::OnInitDialog()
{
CPropertyPage::OnInitDialog();
// TODO: Add extra initialization here
// GetUsbState();
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CUsbProcPage::DrawProg(int i)
{
((CUsbProcPage *)((CPropertySheet *)AfxGetMainWnd())->GetPage(2))->
m_Progress.SetPos(i);
}
void CUsbProcPage::OnBEnc() //公鑰加密
{
// TODO: Add your control notification handler code here
CString cert,filein,fileout;
char outMsg[100]="";
GetDlgItemText(IDC_EDIT_INFILE,filein);
GetDlgItemText(IDC_EDIT_OUTFILE,fileout);
m_Progress.SetPos(0);
if(!RSAEnc(m_pubkey,m_pubkey_len,filein.GetBuffer(0),fileout.GetBuffer(0),outMsg,DrawProg))
{
m_List.AddMsg(outMsg,M_ERROR);
return;
}
m_List.AddMsg("加密成功");
}
void CUsbProcPage::OnBDec() //私鑰解密
{
// TODO: Add your control notification handler code here
CString key,filein,fileout;
char outMsg[100]="";
GetDlgItemText(IDC_EDIT_INFILE,filein);
GetDlgItemText(IDC_EDIT_OUTFILE,fileout);
m_Progress.SetPos(0);
if(!RSADec(m_prikey,m_prikey_len,filein.GetBuffer(0),
fileout.GetBuffer(0),outMsg,DrawProg))
{
m_List.AddMsg(outMsg,M_ERROR);
return;
}
m_List.AddMsg("解密成功");
}
void CUsbProcPage::OnBsign() //數字簽名-----使用簽名私鑰進行簽名
{
// TODO: Add your control notification handler code here
CString mdname("sha1"),filein,fileout;
char outMsg[100]="";
GetDlgItemText(IDC_EDIT_INFILE,filein);
GetDlgItemText(IDC_EDIT_OUTFILE,fileout);
m_Progress.SetPos(0);
if(!Sign(m_prikey,m_prikey_len,mdname.GetBuffer(0),filein.GetBuffer(0),
fileout.GetBuffer(0),outMsg,DrawProg))
{
m_List.AddMsg(outMsg,M_ERROR);
return;
}
m_List.AddMsg("數字簽名成功");
}
void CUsbProcPage::OnBVerify() //驗證數字簽名---公鑰
{
// TODO: Add your control notification handler code here
CString mdname("sha1"),filein,fileout;
char outMsg[100]="";
GetDlgItemText(IDC_EDIT_INFILE,filein);
GetDlgItemText(IDC_EDIT_OUTFILE,fileout);
m_Progress.SetPos(0);
if(!VerifySign(m_pubkey,m_pubkey_len,mdname.GetBuffer(0),filein.GetBuffer(0),
fileout.GetBuffer(0),outMsg,DrawProg))
{
m_List.AddMsg(outMsg,M_ERROR);
return;
}
m_List.AddMsg("驗證簽名成功");
}
void CUsbProcPage::OnBSeal() //裝信封--公鑰
{
// TODO: Add your control notification handler code here
CString cpname("idea-cbc"),filein,fileout;
char outMsg[100]="";
GetDlgItemText(IDC_EDIT_INFILE,filein);
GetDlgItemText(IDC_EDIT_OUTFILE,fileout);
m_Progress.SetPos(0);
if(!Seal(m_pubkey,m_pubkey_len,cpname.GetBuffer(0),filein.GetBuffer(0),
fileout.GetBuffer(0),outMsg,DrawProg))
m_List.AddMsg(outMsg,M_ERROR);
else
m_List.AddMsg("封裝文件成功");
}
void CUsbProcPage::OnBOpen() //打開數字信封--私鑰
{
// TODO: Add your control notification handler code here
CString cpname("idea-cbc"),filein,fileout;
char outMsg[100]="";
GetDlgItemText(IDC_EDIT_INFILE,filein);
GetDlgItemText(IDC_EDIT_OUTFILE,fileout);
m_Progress.SetPos(0);
if(!OpenSeal(m_prikey,m_prikey_len,cpname.GetBuffer(0),filein.GetBuffer(0),
fileout.GetBuffer(0),outMsg,DrawProg))
m_List.AddMsg(outMsg,M_ERROR);
else
m_List.AddMsg("拆封文件成功");
}
void CUsbProcPage::OnBGetrand()
{
// TODO: Add your control notification handler code here
CString strLeng;
GetDlgItemText(IDC_EDIT_LEN,strLeng);
if(strLeng=="")
{
m_List.AddMsg("長度為空",M_WARING);
return;
}
UCHAR buf[1024]={0};
USBKey_GetRandom(m_handle,atoi(strLeng),buf);
CString str;
SetDlgItemText(IDC_EDIT_RAND,(LPCTSTR)buf);
}
BOOL CUsbProcPage::OnSetActive()
{
// TODO: Add your specialized code here and/or call the base class
GetUsbState();
return CPropertyPage::OnSetActive();
}
void CUsbProcPage::OnBsout()
{
// TODO: Add your control notification handler code here
CFileDialog dlgOpen(true,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
"所有文件(*.*)|*.*||",NULL);
dlgOpen.m_ofn.lpstrTitle="選擇文件";//標題條
if(dlgOpen.DoModal()!=IDOK) return;
SetDlgItemText(IDC_EDIT_INFILE,dlgOpen.GetPathName());
}
void CUsbProcPage::OnBsin()
{
// TODO: Add your control notification handler code here
CFileDialog dlgOpen(true,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
"所有文件(*.*)|*.*||",NULL);
dlgOpen.m_ofn.lpstrTitle="選擇保存文件";//標題條
if(dlgOpen.DoModal()!=IDOK) return;
SetDlgItemText(IDC_EDIT_OUTFILE,dlgOpen.GetPathName());
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -