220 lines
5.4 KiB
C++
220 lines
5.4 KiB
C++
// NKKyInfo.cpp : implementation file
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
#include "resource.h"
|
|
#include "keyring.h"
|
|
#include "NKChseCA.h"
|
|
#include "NKKyInfo.h"
|
|
|
|
|
|
extern "C"
|
|
{
|
|
#include <wincrypt.h>
|
|
#include <sslsp.h>
|
|
}
|
|
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CNKKeyInfo dialog
|
|
|
|
|
|
CNKKeyInfo::CNKKeyInfo(CWnd* pParent /*=NULL*/)
|
|
: CNKPages(CNKKeyInfo::IDD)
|
|
{
|
|
//{{AFX_DATA_INIT(CNKKeyInfo)
|
|
m_nkki_sz_password = _T("");
|
|
m_nkki_sz_password2 = _T("");
|
|
m_nkki_sz_name = _T("");
|
|
//}}AFX_DATA_INIT
|
|
}
|
|
|
|
|
|
void CNKKeyInfo::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CDialog::DoDataExchange(pDX);
|
|
//{{AFX_DATA_MAP(CNKKeyInfo)
|
|
DDX_Control(pDX, IDC_NEW_NKKI_PASSWORD, m_nkki_cedit_password);
|
|
DDX_Control(pDX, IDC_NKKI_BITS, m_nkki_ccombo_bits);
|
|
DDX_Text(pDX, IDC_NEW_NKKI_PASSWORD, m_nkki_sz_password);
|
|
DDX_Text(pDX, IDC_NEW_NKKI_PASSWORD2, m_nkki_sz_password2);
|
|
DDX_Text(pDX, IDC_NKKI_NAME, m_nkki_sz_name);
|
|
DDV_MaxChars(pDX, m_nkki_sz_name, 128);
|
|
//}}AFX_DATA_MAP
|
|
}
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(CNKKeyInfo, CDialog)
|
|
//{{AFX_MSG_MAP(CNKKeyInfo)
|
|
ON_EN_CHANGE(IDC_NEW_NKKI_PASSWORD, OnChangeNewNkkiPassword)
|
|
ON_EN_CHANGE(IDC_NEW_NKKI_PASSWORD2, OnChangeNewNkkiPassword2)
|
|
ON_EN_CHANGE(IDC_NKKI_NAME, OnChangeNkkiName)
|
|
ON_EN_KILLFOCUS(IDC_NEW_NKKI_PASSWORD2, OnKillfocusNewNkkiPassword2)
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
//----------------------------------------------------------------
|
|
BOOL CNKKeyInfo::OnInitDialog( )
|
|
{
|
|
// give the key a default name
|
|
m_nkki_sz_name.LoadString( IDS_CREATE_KEY_NEW_NAME );
|
|
|
|
// call superclass
|
|
CPropertyPage::OnInitDialog();
|
|
|
|
// to comply with the munitions export laws, we need to limit the max bits available
|
|
m_nMaxBits = 1024;
|
|
m_nMaxBits = SslGetMaximumKeySize(NULL);
|
|
|
|
// set the default bit size
|
|
m_nBits = m_nMaxBits;
|
|
m_nkki_ccombo_bits.SetCurSel( 2 );
|
|
|
|
// if necessary, remove items from the bits combo box
|
|
if ( m_nMaxBits < 1024 )
|
|
{
|
|
m_nkki_ccombo_bits.DeleteString(2);
|
|
m_nkki_ccombo_bits.SetCurSel( 1 );
|
|
}
|
|
if ( m_nMaxBits < 768 )
|
|
{
|
|
m_nkki_ccombo_bits.DeleteString(1);
|
|
m_nkki_ccombo_bits.SetCurSel( 0 );
|
|
}
|
|
|
|
// return 0 to say we set the default item
|
|
// return 1 to just select the default default item
|
|
return 1;
|
|
}
|
|
|
|
//----------------------------------------------------------------
|
|
BOOL CNKKeyInfo::OnSetActive()
|
|
{
|
|
ActivateButtons();
|
|
return CPropertyPage::OnSetActive();
|
|
}
|
|
|
|
//----------------------------------------------------------------
|
|
void CNKKeyInfo::ActivateButtons()
|
|
{
|
|
DWORD flags = PSWIZB_BACK;
|
|
BOOL fCanGoOn = TRUE;
|
|
|
|
UpdateData(TRUE);
|
|
|
|
//now make sure there is something in each of the required fields
|
|
fCanGoOn &= !m_nkki_sz_name.IsEmpty();
|
|
fCanGoOn &= !m_nkki_sz_password.IsEmpty();
|
|
fCanGoOn &= !m_nkki_sz_password2.IsEmpty();
|
|
|
|
// if we can go on, hilite the button
|
|
if ( fCanGoOn )
|
|
{
|
|
flags |= PSWIZB_NEXT;
|
|
}
|
|
|
|
// update the property sheet buttons
|
|
m_pPropSheet->SetWizardButtons( flags );
|
|
}
|
|
|
|
//----------------------------------------------------------------
|
|
LRESULT CNKKeyInfo::OnWizardNext()
|
|
{
|
|
// get the data
|
|
UpdateData(TRUE);
|
|
|
|
// start by testing that the passwords match each other
|
|
if ( m_nkki_sz_password != m_nkki_sz_password2 )
|
|
{
|
|
// the fields are not equal. start with the error dialog
|
|
AfxMessageBox( IDS_PASSWORD_ERROR );
|
|
|
|
// blank out both the fields
|
|
m_nkki_sz_password.Empty();
|
|
m_nkki_sz_password2.Empty();
|
|
UpdateData(FALSE);
|
|
|
|
// set the focus to the first password field
|
|
m_nkki_cedit_password.SetFocus();
|
|
|
|
// return -1 to prevent going to the next pane
|
|
return -1;
|
|
}
|
|
|
|
// get the bit size
|
|
switch( m_nkki_ccombo_bits.GetCurSel() )
|
|
{
|
|
case 0: // bits == 512
|
|
m_nBits = 512;
|
|
break;
|
|
case 1: // bits == 768
|
|
m_nBits = 768;
|
|
break;
|
|
case 2: // bits == 1024
|
|
m_nBits = 1024;
|
|
break;
|
|
};
|
|
|
|
// call the superclass OnWizardNext
|
|
return CPropertyPage::OnWizardNext();
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CNKKeyInfo message handlers
|
|
|
|
//----------------------------------------------------------------
|
|
void CNKKeyInfo::OnChangeNewNkkiPassword()
|
|
{
|
|
// let them know they have to confirm, or re-confirm it
|
|
UpdateData(TRUE);
|
|
m_nkki_sz_password2.Empty();
|
|
UpdateData(FALSE);
|
|
|
|
ActivateButtons();
|
|
}
|
|
|
|
//----------------------------------------------------------------
|
|
void CNKKeyInfo::OnChangeNewNkkiPassword2()
|
|
{
|
|
ActivateButtons();
|
|
}
|
|
|
|
//----------------------------------------------------------------
|
|
void CNKKeyInfo::OnChangeNkkiName()
|
|
{
|
|
ActivateButtons();
|
|
}
|
|
|
|
//----------------------------------------------------------------
|
|
// this is the main place we check to see if the passwords are the same.
|
|
// if they are not, then we should put up an error dialog and blank out
|
|
// both of the password fields, putting the focus into password1
|
|
void CNKKeyInfo::OnKillfocusNewNkkiPassword2()
|
|
{
|
|
/*
|
|
// get the data
|
|
UpdateData(TRUE);
|
|
|
|
// if the fields are equal, leave now
|
|
if ( m_nkki_sz_password == m_nkki_sz_password2 )
|
|
return;
|
|
|
|
// the fields are not equal. start with the error dialog
|
|
AfxMessageBox( IDS_PASSWORD_ERROR );
|
|
|
|
// blank out both the fields
|
|
m_nkki_sz_password.Empty();
|
|
m_nkki_sz_password2.Empty();
|
|
UpdateData(FALSE);
|
|
|
|
// set the focus to the first password field
|
|
m_nkki_cedit_password.SetFocus();
|
|
*/
|
|
}
|