CertExtPage.cpp
上传用户:dengkfang
上传日期:2008-12-30
资源大小:5233k
文件大小:38k
源码类别:

CA认证

开发平台:

Visual C++

  1. // CertExtPage.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "MiniCA.h"
  5. #include "CertExtPage.h"
  6. #include "MiniMainDlg.h"
  7. #include ".GenericClassLanguage.h"
  8. #include "MiniCt.h"
  9. #ifdef _DEBUG
  10. #define new DEBUG_NEW
  11. #undef THIS_FILE
  12. static char THIS_FILE[] = __FILE__;
  13. #endif
  14. /////////////////////////////////////////////////////////////////////////////
  15. // CCertExtPage property page
  16. IMPLEMENT_DYNCREATE(CCertExtPage, CPropertyPage)
  17. CCertExtPage::CCertExtPage() : CPropertyPage(CCertExtPage::IDD)
  18. {
  19. //{{AFX_DATA_INIT(CCertExtPage)
  20. m_TypeP12 = 0;
  21. m_TypeCert = 0;
  22. //}}AFX_DATA_INIT
  23. m_CertFormat = PEM;
  24. }
  25. CCertExtPage::~CCertExtPage()
  26. {
  27. }
  28. void CCertExtPage::DoDataExchange(CDataExchange* pDX)
  29. {
  30. CPropertyPage::DoDataExchange(pDX);
  31. //{{AFX_DATA_MAP(CCertExtPage)
  32. // DDX_Control(pDX, IDC_EDIT_PASSWORD4, m_XpEditPwd4);
  33. // DDX_Control(pDX, IDC_EDIT_PASSWORD3, m_XpEditPwd3);
  34. // DDX_Control(pDX, IDC_EDIT_PASSWORD2, m_XpEditPwd2);
  35. // DDX_Control(pDX, IDC_EDIT_PASSWORD, m_XpEditPwd);
  36. DDX_Control(pDX, IDC_B_OK2, m_Bok2);
  37. DDX_Control(pDX, IDC_B_OK, m_Bok);
  38. DDX_Radio(pDX, IDC_R_PARSE, m_TypeP12);
  39. DDX_Radio(pDX, IDC_RADIO_DERTOPEM, m_TypeCert);
  40. //}}AFX_DATA_MAP
  41.     DDX_FileEditCtrl(pDX, IDC_EDIT_PATH, m_XpEditPath, FEC_FOLDER);
  42.     DDX_FileEditCtrl(pDX, IDC_EDIT_P12, m_XpEditP12, FEC_FILEOPEN);
  43.     DDX_FileEditCtrl(pDX, IDC_EDIT_KEY, m_XpEditKey, FEC_FILEOPEN);
  44.     DDX_FileEditCtrl(pDX, IDC_EDIT_INFILE, m_XpEditInfile, FEC_FILEOPEN);
  45.     DDX_FileEditCtrl(pDX, IDC_EDIT_OUTFILE, m_XpEditOutfile, FEC_FILEOPEN);
  46. }
  47. BEGIN_MESSAGE_MAP(CCertExtPage, CPropertyPage)
  48. //{{AFX_MSG_MAP(CCertExtPage)
  49. ON_BN_CLICKED(IDC_B_OK, OnBOk)
  50. ON_BN_CLICKED(IDC_R_PARSE, OnRParse)
  51. ON_BN_CLICKED(IDC_R_CREATE, OnRCreate)
  52. ON_BN_CLICKED(IDC_R_CHANGEP, OnRChangep)
  53. ON_BN_CLICKED(IDC_RADIO_PEMTODER, OnRadioPemtoder)
  54. ON_BN_CLICKED(IDC_RADIO_DERTOPEM, OnRadioDertopem)
  55. ON_BN_CLICKED(IDC_RADIO_ROOTCH, OnRadioRootch)
  56. ON_BN_CLICKED(IDC_RADIO_CRLCH, OnRadioCrlch)
  57. ON_BN_CLICKED(IDC_RADIO_TIEMCH, OnRadioTiemch)
  58. ON_BN_CLICKED(IDC_RADIO_KEYPAIRCH, OnRadioKeypairch)
  59. ON_BN_CLICKED(IDC_B_OK2, OnBOk2)
  60. ON_BN_CLICKED(IDC_R_PARSE2, OnRParse2)
  61. ON_BN_CLICKED(IDC_R_CREATE2, OnRCreate2)
  62. ON_BN_CLICKED(IDC_EXT_CHECK1, OnCheck1)
  63. //}}AFX_MSG_MAP
  64. ON_NOTIFY_EX(TTN_NEEDTEXT, 0, OnToolTipNotify)
  65. END_MESSAGE_MAP()
  66. /////////////////////////////////////////////////////////////////////////////
  67. // CCertExtPage message handlers
  68. BOOL CCertExtPage::OnToolTipNotify( UINT id, NMHDR * pTTTStruct, LRESULT * pResult )
  69. {
  70. TOOLTIPTEXT *pTTT = (TOOLTIPTEXT *)pTTTStruct;    
  71.     UINT nID = pTTTStruct->idFrom;
  72. switch(nID)
  73. {
  74. case IDC_EDIT_P12://0-P12提取 1-P12合并 2-P12改密码 3-提取P7 4-合并P7
  75. {
  76. if(m_TypeP12 == 0 || m_TypeP12 == 2)
  77. {
  78. strcpy(pTTT->szText,CMiniCaApp::NormalCode("选择PFX文件"));//设置
  79. }
  80. else if(m_TypeP12 == 1 || m_TypeP12 == 4)
  81. {
  82. strcpy(pTTT->szText,CMiniCaApp::NormalCode("选择公钥证书"));//设置
  83. }
  84. else if(m_TypeP12 == 3)
  85. {
  86. strcpy(pTTT->szText,CMiniCaApp::NormalCode("选择P7B文件"));//设置
  87. }
  88. return TRUE;
  89. }
  90. case IDC_EDIT_KEY://选择PFX,选择公钥
  91. {
  92. if(m_TypeP12 == 1)
  93. {
  94. strcpy(pTTT->szText,CMiniCaApp::NormalCode("选择私钥证书"));//设置
  95. }
  96. else if(m_TypeP12 == 4)
  97. {
  98. strcpy(pTTT->szText,CMiniCaApp::NormalCode("选择黑名单文件"));//设置
  99. }
  100. else
  101. {
  102. strcpy(pTTT->szText, "");//设置
  103. }
  104. return TRUE;
  105. }
  106. case IDC_EDIT_PASSWORD://PFX包的密钥
  107. {
  108. //设置相应的显示字串
  109. if(m_TypeP12 == 0)
  110. {
  111. strcpy(pTTT->szText,CMiniCaApp::NormalCode("用于解密PFX包的密钥"));//设置
  112. }
  113. else if(m_TypeP12 == 1)
  114. {
  115. strcpy(pTTT->szText,CMiniCaApp::NormalCode("用于解密私钥的密钥"));//设置
  116. }
  117. else
  118. {
  119. strcpy(pTTT->szText,CMiniCaApp::NormalCode("PFX包原密钥"));//设置
  120. }
  121. return TRUE;
  122. }
  123. case IDC_EDIT_PASSWORD2://PFX包的密钥
  124. {
  125. //设置相应的显示字串
  126. if(m_TypeP12 == 0)
  127. {
  128. strcpy(pTTT->szText,CMiniCaApp::NormalCode("用于加密私钥的密钥"));//设置
  129. }
  130. else if(m_TypeP12 == 1)
  131. {
  132. strcpy(pTTT->szText,CMiniCaApp::NormalCode("用于加密PFX包的密钥"));//设置
  133. }
  134. else
  135. {
  136. strcpy(pTTT->szText,CMiniCaApp::NormalCode("PFX包新密钥"));//设置
  137. }
  138. return TRUE;
  139. }
  140. case IDC_B_OK://PFX包的密钥
  141. {
  142. CString str;
  143. GetDlgItemText(IDC_EDIT_PASSWORD2,str);//加密密钥
  144. //设置相应的显示字串
  145. if(m_TypeP12 == 0)
  146. {
  147. if(!str.IsEmpty())
  148. strcpy(pTTT->szText,CMiniCaApp::NormalCode("提取公私钥证书r当前私钥保护"));//设置
  149. else
  150. strcpy(pTTT->szText,CMiniCaApp::NormalCode("提取公私钥证书r当前私钥未保护"));//设置
  151. }
  152. else if(m_TypeP12 == 1)
  153. {
  154. if(!str.IsEmpty())
  155. strcpy(pTTT->szText,CMiniCaApp::NormalCode("合并公私钥证书r生成PFX包并加密"));//设置
  156. else
  157. strcpy(pTTT->szText,CMiniCaApp::NormalCode("合并公私钥证书r生成PFX包"));//设置
  158. }
  159. else if(m_TypeP12 == 2)
  160. {
  161. strcpy(pTTT->szText,CMiniCaApp::NormalCode("修改PFX包密码为指定密码"));//设置
  162. }
  163. else if(m_TypeP12 == 3)
  164. {
  165. strcpy(pTTT->szText,CMiniCaApp::NormalCode("分解P7文件r分解为公钥证书和黑名单文件"));//设置
  166. }
  167. else if(m_TypeP12 == 4)
  168. {
  169. strcpy(pTTT->szText,CMiniCaApp::NormalCode("合并P7文件r合并公钥证书和黑名单文件"));//设置
  170. }
  171. return TRUE;
  172. }
  173. case IDC_EDIT_INFILE://选择
  174. {
  175. //设置相应的显示字串
  176. if(m_TypeCert == 0 || m_TypeCert == 1 )
  177. {
  178. strcpy(pTTT->szText,CMiniCaApp::NormalCode("选择证书文件"));//设置
  179. }
  180. else
  181. {
  182. strcpy(pTTT->szText,CMiniCaApp::NormalCode("选择公钥证书"));//设置
  183. }
  184. return TRUE;
  185. }
  186. case IDC_EDIT_OUTFILE://PFX包的密钥
  187. {
  188. //设置相应的显示字串
  189. if(m_TypeCert == 0)
  190. {
  191. strcpy(pTTT->szText, "转换后的PEM格式证书存储信息");//设置
  192. }
  193. else if(m_TypeCert == 1)
  194. {
  195. strcpy(pTTT->szText, "转换后的DER格式证书存储信息");//设置
  196. }
  197. else if(m_TypeCert == 2)
  198. {
  199. strcpy(pTTT->szText, "选择根证书");//设置
  200. }
  201. else if(m_TypeCert == 3)
  202. {
  203. strcpy(pTTT->szText, "选择黑名单");//设置
  204. }
  205. else if(m_TypeCert == 5)
  206. {
  207. strcpy(pTTT->szText, "选择私钥文件");//设置
  208. }
  209. return TRUE;
  210. }
  211. case IDC_B_OK2://PFX包的密钥
  212. {
  213. //设置相应的显示字串
  214. if(m_TypeCert == 0)
  215. {
  216. CString str;
  217. GetDlgItemText(IDC_EDIT_PASSWORD4,str);//加密密钥
  218. if(str.IsEmpty())
  219. strcpy(pTTT->szText,CMiniCaApp::NormalCode("转换证书为PEM格式r当前私钥未保护"));//设置
  220. else
  221. strcpy(pTTT->szText,CMiniCaApp::NormalCode("转换证书为PEM格式r当前私钥保护"));//设置
  222. }
  223. else if(m_TypeCert == 1)
  224. {
  225. CString str;
  226. GetDlgItemText(IDC_EDIT_PASSWORD4,str);//加密密钥
  227. if(str.IsEmpty())
  228. strcpy(pTTT->szText,CMiniCaApp::NormalCode("转换证书为DER格式r当前私钥未保护"));//设置
  229. else
  230. strcpy(pTTT->szText,CMiniCaApp::NormalCode("转换证书为DER格式r当前私钥保护"));//设置
  231. }
  232. else if(m_TypeCert == 2)
  233. {
  234. strcpy(pTTT->szText,CMiniCaApp::NormalCode("根证书验证r验证证书是否由根证书颁发"));//设置
  235. }
  236. else if(m_TypeCert == 3)
  237. {
  238. strcpy(pTTT->szText,CMiniCaApp::NormalCode("黑名单验证r验证证书是否在作废列表中"));//设置
  239. }
  240. else if(m_TypeCert == 4)
  241. {
  242. strcpy(pTTT->szText,CMiniCaApp::NormalCode("时效性验证r验证证书使用期限是否有效期"));//设置
  243. }
  244. else if(m_TypeCert == 5)
  245. {
  246. strcpy(pTTT->szText,CMiniCaApp::NormalCode("公私钥对验证r验证公私钥证书密钥对是否匹配"));//设置
  247. }
  248. return TRUE;
  249. }
  250. }
  251. return(FALSE);
  252. }
  253. BOOL CCertExtPage::OnInitDialog() 
  254. {
  255. CPropertyPage::OnInitDialog();
  256. if(!((CMiniCaApp *)AfxGetApp())->IsXpStyle())
  257. {
  258. ClassXP(GetDlgItem(IDC_R_PARSE)->m_hWnd,TRUE);
  259. ClassXP(GetDlgItem(IDC_R_CREATE)->m_hWnd,TRUE);
  260. ClassXP(GetDlgItem(IDC_R_CHANGEP)->m_hWnd,TRUE);
  261. ClassXP(GetDlgItem(IDC_R_PARSE2)->m_hWnd,TRUE);
  262. ClassXP(GetDlgItem(IDC_R_CREATE2)->m_hWnd,TRUE);
  263. ClassXP(GetDlgItem(IDC_EXT_CHECK1)->m_hWnd,TRUE);
  264. ClassXP(GetDlgItem(IDC_RADIO_DERTOPEM)->m_hWnd,TRUE);
  265. ClassXP(GetDlgItem(IDC_RADIO_ROOTCH)->m_hWnd,TRUE);
  266. ClassXP(GetDlgItem(IDC_RADIO_TIEMCH)->m_hWnd,TRUE);
  267. ClassXP(GetDlgItem(IDC_RADIO_PEMTODER)->m_hWnd,TRUE);
  268. ClassXP(GetDlgItem(IDC_RADIO_KEYPAIRCH)->m_hWnd,TRUE);
  269. ClassXP(GetDlgItem(IDC_RADIO_CRLCH)->m_hWnd,TRUE);
  270. ClassXP(GetDlgItem(IDC_EDIT_PASSWORD)->m_hWnd,TRUE);
  271. ClassXP(GetDlgItem(IDC_EDIT_PASSWORD2)->m_hWnd,TRUE);
  272. ClassXP(GetDlgItem(IDC_EDIT_PASSWORD3)->m_hWnd,TRUE);
  273. ClassXP(GetDlgItem(IDC_EDIT_PASSWORD4)->m_hWnd,TRUE);
  274. }
  275. SetDlgItemText(IDC_EDIT_PASSWORD,  "MiniCA");
  276. SetDlgItemText(IDC_EDIT_PASSWORD2, "MiniCA");
  277. SetDlgItemText(IDC_EDIT_PASSWORD3, "MiniCA");
  278. SetDlgItemText(IDC_EDIT_PASSWORD4, "MiniCA");
  279. SetCheck();
  280. OnRadioDertopem();
  281. CXPStyleButtonST::SetAllThemeHelper(this, ((CMiniCaApp *)AfxGetApp())->GetThemeHelperST());
  282. // m_Bsout.SetIcon(IDI_ICON_SELECTDIR);
  283. // m_Bsout.OffsetColor(CButtonST::BTNST_COLOR_BK_IN, 30);
  284. // m_Bsin.SetIcon(IDI_ICON_SELECTDIR);
  285. // m_Bsin.OffsetColor(CButtonST::BTNST_COLOR_BK_IN, 30);
  286. // m_Bpub.SetIcon(IDI_ICON_SELECTDIR);
  287. // m_Bpub.OffsetColor(CButtonST::BTNST_COLOR_BK_IN, 30);
  288. // m_Bpath.SetIcon(IDI_ICON_DIR);
  289. // m_Bpath.OffsetColor(CButtonST::BTNST_COLOR_BK_IN, 30);
  290. m_Bok2.SetIcon(IDI_ICON20);
  291. m_Bok2.OffsetColor(CButtonST::BTNST_COLOR_BK_IN, 30);
  292. m_Bok.SetIcon(IDI_ICON20);
  293. m_Bok.OffsetColor(CButtonST::BTNST_COLOR_BK_IN, 30);
  294. // m_Bkey.SetIcon(IDI_ICON_SELECTDIR);
  295. // m_Bkey.OffsetColor(CButtonST::BTNST_COLOR_BK_IN, 30);
  296.     HANDLE handle = ::LoadImage(AfxGetInstanceHandle(),
  297.                                 MAKEINTRESOURCE(IDI_ICON_DIR),
  298.                                 IMAGE_ICON,
  299.                                 0,
  300.                                 0,
  301.                                 LR_DEFAULTCOLOR);
  302.     m_XpEditPath.SetButtonImage(handle, PJAI_ICON | PJAI_AUTODELETE | PJAI_STRETCHED );
  303. m_XpEditPath.SetButtonWidth(18);
  304.     m_XpEditP12.SetButtonImage(handle, PJAI_ICON | PJAI_AUTODELETE | PJAI_STRETCHED );
  305. m_XpEditP12.SetButtonWidth(18);
  306. // m_XpEditP12.ModifyStyleEx(0, WS_EX_ACCEPTFILES);
  307.     m_XpEditKey.SetButtonImage(handle, PJAI_ICON | PJAI_AUTODELETE | PJAI_STRETCHED );
  308. m_XpEditKey.SetButtonWidth(18);
  309.     m_XpEditInfile.SetButtonImage(handle, PJAI_ICON | PJAI_AUTODELETE | PJAI_STRETCHED );
  310. m_XpEditInfile.SetButtonWidth(18);
  311.     m_XpEditOutfile.SetButtonImage(handle, PJAI_ICON | PJAI_AUTODELETE | PJAI_STRETCHED );
  312. m_XpEditOutfile.SetButtonWidth(18);
  313. // CG: The following block was added by the ToolTips component. { // Create the ToolTip control. m_toolTip.Create(this); // TODO: Use one of the following forms to add controls: // m_toolTip.AddTool(GetDlgItem(IDC_B_PATH), CMiniCaApp::NormalCode("文件存储路径")); m_toolTip.AddTool(GetDlgItem(IDC_EDIT_PATH), "操作结果文件存储路径");
  314. m_toolTip.AddTool(GetDlgItem(IDC_R_PARSE), CMiniCaApp::NormalCode("分解PKCS#12包r从PKCS#12包中提取公私钥文件")); m_toolTip.AddTool(GetDlgItem(IDC_R_CREATE), CMiniCaApp::NormalCode("合并PKCS#12包r将公私钥文件合并成PKCS#12包"));
  315. m_toolTip.AddTool(GetDlgItem(IDC_R_CHANGEP), CMiniCaApp::NormalCode("修改PKCS#12包密码"));
  316. m_toolTip.AddTool(GetDlgItem(IDC_RADIO_DERTOPEM), CMiniCaApp::NormalCode("转换证书格式为PEM"));
  317. m_toolTip.AddTool(GetDlgItem(IDC_RADIO_PEMTODER), CMiniCaApp::NormalCode("转换证书格式为DER"));
  318. m_toolTip.AddTool(GetDlgItem(IDC_RADIO_ROOTCH), CMiniCaApp::NormalCode("检验证书是否为根机构颁发"));
  319. m_toolTip.AddTool(GetDlgItem(IDC_RADIO_CRLCH), CMiniCaApp::NormalCode("检验证书是否在黑名单中"));
  320. m_toolTip.AddTool(GetDlgItem(IDC_RADIO_TIEMCH), CMiniCaApp::NormalCode("检验证书是否在有效期内"));
  321. m_toolTip.AddTool(GetDlgItem(IDC_RADIO_KEYPAIRCH), CMiniCaApp::NormalCode("检验公私钥对是否匹配"));
  322. m_toolTip.AddTool(GetDlgItem(IDC_EDIT_PASSWORD3), CMiniCaApp::NormalCode("解密密钥r解密私钥文件的密码"));
  323. m_toolTip.AddTool(GetDlgItem(IDC_EDIT_PASSWORD4), CMiniCaApp::NormalCode("加密密钥r加密私钥文件的密码"));
  324. m_toolTip.AddTool(GetDlgItem(IDC_R_PARSE2), CMiniCaApp::NormalCode("分解PKCS#7包r从PKCS#7包中提取公钥和黑名单文件"));
  325. m_toolTip.AddTool(GetDlgItem(IDC_R_CREATE2), CMiniCaApp::NormalCode("合并PKCS#7包r将公钥和黑名单文件合并成PKCS#7包"));
  326. m_toolTip.AddTool(GetDlgItem(IDC_EXT_CHECK1), "新生成证书文件格式");
  327. m_toolTip.AddTool(GetDlgItem(IDC_EDIT_P12), LPSTR_TEXTCALLBACK);
  328. m_toolTip.AddTool(GetDlgItem(IDC_EDIT_KEY), LPSTR_TEXTCALLBACK);
  329. m_toolTip.AddTool(GetDlgItem(IDC_EDIT_PASSWORD), LPSTR_TEXTCALLBACK);
  330. m_toolTip.AddTool(GetDlgItem(IDC_EDIT_PASSWORD2), LPSTR_TEXTCALLBACK);
  331. m_toolTip.AddTool(GetDlgItem(IDC_B_OK), LPSTR_TEXTCALLBACK);
  332. m_toolTip.AddTool(GetDlgItem(IDC_STATIC_EXT10), LPSTR_TEXTCALLBACK);
  333. m_toolTip.AddTool(GetDlgItem(IDC_B_OK2), LPSTR_TEXTCALLBACK);
  334. m_toolTip.AddTool(GetDlgItem(IDC_STATIC_EXT11), LPSTR_TEXTCALLBACK);
  335. m_toolTip.AddTool(GetDlgItem(IDC_EDIT_INFILE), LPSTR_TEXTCALLBACK);
  336. m_toolTip.AddTool(GetDlgItem(IDC_EDIT_OUTFILE), LPSTR_TEXTCALLBACK);
  337. }
  338. return TRUE;  // return TRUE unless you set the focus to a control
  339.               // EXCEPTION: OCX Property Pages should return FALSE
  340. }
  341. /*void CCertExtPage::OnBPath() //设置输出路径,如果路径下有文件则覆盖
  342. {
  343. // TODO: Add your control notification handler code here
  344. LPITEMIDLIST pidlRoot = NULL; 
  345. LPMALLOC pMalloc;   
  346. if(NOERROR == SHGetSpecialFolderLocation(m_hWnd,CSIDL_DRIVES ,&pidlRoot))
  347. {
  348. BROWSEINFO bi;   //必须传入的参数,下面就是这个结构的参数的初始化 
  349. CString strDisplayName;// = CMiniCaApp::NormalCode("选择文件夹");;   //用来得到,你选择的活页夹路径,相当于提供一个缓冲区 
  350. bi.hwndOwner = GetSafeHwnd();   //得到父窗口Handle值 
  351. bi.pidlRoot=0;   //这个变量就是我们在上面得到的. 
  352. bi.pszDisplayName = strDisplayName.GetBuffer(MAX_PATH+1);   //得到缓冲区指针, 
  353. CString strTitle = CMiniCaApp::NormalCode("选择文件输出路径,路径下已有的同名文件将被覆盖!!");
  354. bi.lpszTitle = strTitle;  //设置标题 
  355. bi.ulFlags = BIF_RETURNONLYFSDIRS  | BIF_DONTGOBELOWDOMAIN  ;   //设置标志 
  356. bi.lpfn=NULL; 
  357. bi.lParam=0; 
  358. bi.iImage=0;   //上面这个是一些无关的参数的设置,最好设置起来, 
  359. ITEMIDLIST * pidl;  
  360. pidl = SHBrowseForFolder(&bi);   //打开对话框 
  361. if(!pidl)
  362. return;
  363. SHGetPathFromIDList(pidl,bi.pszDisplayName);
  364. strDisplayName.ReleaseBuffer();   //和上面的GetBuffer()相对应 
  365. m_Path = strDisplayName;
  366. if(m_Path.Right(1) != "\")//最后一个字符不是"/"
  367. m_Path += "\";
  368. SetDlgItemText(IDC_EDIT_PATH,m_Path);
  369. if(SUCCEEDED( SHGetMalloc ( &pMalloc ))) 
  370. pMalloc->Free(pidlRoot); 
  371. pMalloc->Release(); 
  372. }
  373. }
  374. */
  375. /*void CCertExtPage::OnBPub() //选择公钥,选择p12
  376. {
  377. // TODO: Add your control notification handler code here
  378. if(m_TypeP12==1)//选择共钥
  379. {
  380. CFileDialog dlgOpen(true,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
  381. CMiniCaApp::NormalCode("公钥文件(*.der;*.cer;*.crt;*.pem)|*.der;*.cer;*.crt;*.pem|所有文件(*.*)|*.*||"),NULL);
  382. CString strTitle = CMiniCaApp::NormalCode("选择公钥证书文件");
  383. dlgOpen.m_ofn.lpstrTitle = strTitle;//标题条
  384. if(dlgOpen.DoModal()!=IDOK) return;
  385. m_cert = dlgOpen.GetPathName();
  386. SetDlgItemText(IDC_EDIT_P12,m_cert);
  387. }
  388. else if(m_TypeP12==0 || m_TypeP12==2)//选择p12
  389. {
  390. CFileDialog dlgOpen(true,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
  391. CMiniCaApp::NormalCode("个人信息交换(*.pfx;*.p12)|*.pfx;*.p12|所有文件(*.*)|*.*||"),NULL);
  392. CString strTitle = CMiniCaApp::NormalCode("选择个人信息交换文件");
  393. dlgOpen.m_ofn.lpstrTitle = strTitle;//标题条
  394. if(dlgOpen.DoModal()!=IDOK) return;
  395. m_p12 = dlgOpen.GetPathName();
  396. SetDlgItemText(IDC_EDIT_P12,m_p12);
  397. }
  398. if(m_TypeP12==3)//选择共钥
  399. {
  400. CFileDialog dlgOpen(true,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT | OFN_ALLOWMULTISELECT,
  401. CMiniCaApp::NormalCode("加密消息语法标准(*.p7b)|*.p7b|所有文件(*.*)|*.*||"),NULL);
  402. CString strTitle = CMiniCaApp::NormalCode("加密消息语法标准文件");
  403. dlgOpen.m_ofn.lpstrTitle = strTitle;//标题条
  404. if(dlgOpen.DoModal()!=IDOK) return;
  405. m_p7 = dlgOpen.GetPathName();
  406. SetDlgItemText(IDC_EDIT_P12,m_p7);
  407. }
  408. if(m_TypeP12==4)//选择P7B
  409. {
  410. CFileDialog dlgOpen(true,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT | OFN_ALLOWMULTISELECT,
  411. CMiniCaApp::NormalCode("公钥文件(*.der;*.cer;*.crt;*.pem)|*.der;*.cer;*.crt;*.pem|所有文件(*.*)|*.*||"),NULL);
  412. CString strTitle = CMiniCaApp::NormalCode("选择公钥证书文件(可多选)");
  413. dlgOpen.m_ofn.lpstrTitle = strTitle;//标题条
  414. if(dlgOpen.DoModal()!=IDOK) return;
  415. m_cert = dlgOpen.GetPathName();
  416. SetDlgItemText(IDC_EDIT_P12,m_cert);
  417. }
  418. }
  419. void CCertExtPage::OnBKey() //选择私钥
  420. {
  421. // TODO: Add your control notification handler code here
  422. if(m_TypeP12!=4)//选择P7B
  423. {
  424. CFileDialog dlgOpen(true,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
  425. CMiniCaApp::NormalCode("私钥证书文件(*.crt;*.cer;*.der;*.pem)|*.crt;*.cer;*.der;*.pem|所有文件(*.*)|*.*||"),NULL);
  426. CString strTitle = CMiniCaApp::NormalCode("选择私钥证书文件");
  427. dlgOpen.m_ofn.lpstrTitle = strTitle;//标题条
  428. if(dlgOpen.DoModal()!=IDOK) return;
  429. m_key = dlgOpen.GetPathName();
  430. SetDlgItemText(IDC_EDIT_KEY,m_key);
  431. }
  432. else
  433. {
  434. CFileDialog dlgOpen(true,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
  435. CMiniCaApp::NormalCode("黑名单(*.crl)|*.crl|所有文件(*.*)|*.*||"),NULL);
  436. CString strTitle = CMiniCaApp::NormalCode("选择黑名单文件");
  437. dlgOpen.m_ofn.lpstrTitle = strTitle;//标题条
  438. if(dlgOpen.DoModal()!=IDOK) return;
  439. m_crl = dlgOpen.GetPathName();
  440. SetDlgItemText(IDC_EDIT_KEY,m_crl);
  441. }
  442. }*/
  443. void CCertExtPage::OnBOk() //执行操作
  444. {
  445. // TODO: Add your control notification handler code here
  446. GetDlgItemText(IDC_EDIT_PATH, m_Path);
  447. if(m_TypeP12!=2&&m_Path=="") 
  448. {
  449. AddMsg(MiniCT_0112, M_WARING); //MiniCT_0112 "请选择输出路径!"
  450. return;
  451. }
  452. if(m_TypeP12==0)//提取证书操作
  453. {
  454. //读取p12文件
  455. GetDlgItemText(IDC_EDIT_P12, m_p12);
  456. if(m_p12.IsEmpty())
  457. {
  458. AddMsg(MiniCT_0700,M_WARING); //MiniCT_0700 "请选择PFX文件!"
  459. return;
  460. }
  461. CString pwd,pwd2;
  462. GetDlgItemText(IDC_EDIT_PASSWORD,pwd); //p12 密钥
  463. CString filein,certout,keyout;
  464. certout=m_Path+"\UserCert.crt";
  465. keyout=m_Path+"\UserPriKey.crt";
  466. GetDlgItemText(IDC_EDIT_PASSWORD2,pwd2); //加密 私钥 ,密钥
  467. char out[100]={0};
  468. if(!ParsePfx(m_p12.GetBuffer(0),0,pwd.GetBuffer(0),certout.GetBuffer(0),
  469. keyout.GetBuffer(0),pwd2.GetBuffer(0),m_CertFormat,out))
  470. AddMsg(out,M_ERROR);
  471. else//ok
  472. AddMsg(MiniCT_0701); //MiniCT_0701 "分解PFX文件成功"
  473. }
  474. else if(m_TypeP12==1)//合并证书操作
  475. {
  476. GetDlgItemText(IDC_EDIT_P12, m_cert);
  477. GetDlgItemText(IDC_EDIT_KEY, m_key);
  478. if(m_cert.IsEmpty() || m_key.IsEmpty())
  479. {
  480. AddMsg(MiniCT_0702,M_WARING); //MiniCT_0702 "请选择公钥或者私钥文件!"
  481. return;
  482. }
  483. CString fileout;
  484. fileout = m_Path+"\Pkcs12.pfx";
  485. CString pwd,pwd2;
  486. GetDlgItemText(IDC_EDIT_PASSWORD2,pwd2);//加密PFX密钥
  487. GetDlgItemText(IDC_EDIT_PASSWORD,pwd);//解密私钥密钥
  488. char StreamP12[10240] = {0};
  489. UINT uP12Len = 10240;
  490. char out[100]={0};
  491. if(CreatePfx(StreamP12, uP12Len, pwd2.GetBuffer(0),
  492.    "MiniCA",/*IN 好记名称*/
  493.    m_cert.GetBuffer(0), 0,
  494.    m_key.GetBuffer(0), 0, pwd.GetBuffer(0),out))
  495. {
  496. CFile File;
  497. if(File.Open(fileout, CFile::modeCreate|CFile::modeWrite)) //存文件
  498. {
  499. File.Write(StreamP12, uP12Len);
  500. File.Close();
  501. AddMsg(MiniCT_0703); //MiniCT_0703 "合并证书文件成功"
  502. }
  503. else
  504. {
  505. AddMsg(MiniCT_0704, M_ERROR); //MiniCT_0704 "保存P12文件失败"
  506. }
  507. }
  508. else
  509. AddMsg(out,M_ERROR);
  510. }
  511. else if(m_TypeP12 == 2)//修改密钥
  512. {
  513. GetDlgItemText(IDC_EDIT_P12, m_p12);
  514. if(m_p12.IsEmpty())
  515. {
  516. AddMsg(MiniCT_0700,M_WARING); //MiniCT_0700 "请选择PFX文件!"
  517. return;
  518. }
  519. CString pwd,pwd2,fileOut;
  520. GetDlgItemText(IDC_EDIT_PASSWORD,pwd);
  521. GetDlgItemText(IDC_EDIT_PASSWORD2,pwd2);
  522. char out[100]={0};
  523. if(ChangePfxPwd(m_p12.GetBuffer(0),pwd.GetBuffer(0),pwd2.GetBuffer(0),
  524. m_p12.GetBuffer(0),out))
  525. AddMsg(MiniCT_0705); //MiniCT_0705 "修改PFX密码成功"
  526. else
  527. AddMsg(out,M_ERROR);
  528. }
  529. else if(m_TypeP12 == 3)//提取P7
  530. {
  531. GetDlgItemText(IDC_EDIT_P12, m_p7);
  532. if(m_p7.IsEmpty())
  533. {
  534. AddMsg(MiniCT_0706,M_WARING); //MiniCT_0706 "请选择P7B文件!"
  535. return;
  536. }
  537. CString certout,keyout;
  538. certout = m_Path + "\P7Cert";
  539. keyout = m_Path + "\P7Crl";
  540. char out[100]={0};
  541. if(!ParseP7b(m_p7.GetBuffer(0), 0, m_CertFormat, certout, keyout, NULL, out))
  542. AddMsg(out,M_ERROR);
  543. else//ok
  544. AddMsg(MiniCT_0707); //MiniCT_0707 "分解P7文件成功" 
  545. }
  546. else if(m_TypeP12==4)//合并P7操作
  547. {
  548. GetDlgItemText(IDC_EDIT_P12, m_cert);
  549. GetDlgItemText(IDC_EDIT_KEY, m_crl);
  550. if(m_cert.IsEmpty() && m_crl.IsEmpty())
  551. {
  552. AddMsg(MiniCT_0708,M_WARING); //MiniCT_0708 "请选择公钥或者CRL文件!"
  553. return;
  554. }
  555. CString fileout;
  556. fileout = m_Path + "\P7.p7b";
  557. char out[100]={0};
  558. std::list<std::string> CertList;
  559. // call GetStartPosition() to get the position of the first file in the control
  560. POSITION pos = m_XpEditP12.GetStartPosition();
  561. while (pos)
  562. {
  563. // add the file paths to the list
  564. CString str = m_XpEditP12.GetNextPathName(pos);
  565. CertList.push_back(str.GetBuffer(0));
  566. str.ReleaseBuffer();
  567. }
  568. if(CreateP7b(&CertList, m_crl.GetBuffer(0),
  569. fileout.GetBuffer(0), m_CertFormat, out))
  570. AddMsg(MiniCT_0709); //MiniCT_0709 "合并证书文件成功"
  571. else
  572. AddMsg(out,M_ERROR);
  573. }
  574. }
  575. void CCertExtPage::SetCheck()
  576. {
  577. // SetDlgItemText(IDC_EDIT_P12,"");
  578. // SetDlgItemText(IDC_EDIT_KEY,"");
  579. GetDlgItem(IDC_EXT_CHECK1)->EnableWindow(0);
  580. if(m_TypeP12 == 4)
  581. m_XpEditP12.ModifyFlags(0, FEC_MULTIPLE);
  582. else
  583.         m_XpEditP12.ModifyFlags(FEC_MULTIPLE, 0);
  584. if(m_TypeP12==0) //分解P12
  585. {
  586. //0,3,4
  587. GetDlgItem(IDC_EXT_CHECK1)->EnableWindow(1);
  588. GetDlgItem(IDC_STATIC_DEC)->EnableWindow(1);
  589. GetDlgItem(IDC_STATIC_ENC)->EnableWindow(1);
  590. GetDlgItem(IDC_EDIT_PASSWORD)->EnableWindow(1);
  591. GetDlgItem(IDC_EDIT_PASSWORD2)->EnableWindow(1);
  592. GetDlgItem(IDC_EDIT_P12)->EnableWindow(1);
  593. SetDlgItemText(IDC_STATIC_EXT8,MiniCT_0710);//MiniCT_0710 "选择PFX:"
  594. m_XpEditP12.SetCaption(MiniCT_0711);//MiniCT_0711 "选择个人信息交换文件"
  595. m_XpEditP12.SetFilter(MiniCT_0712);//MiniCT_0712 "个人信息交换(*.pfx;*.p12)|*.pfx;*.p12|所有文件(*.*)|*.*||"
  596.  
  597. SetDlgItemText(IDC_STATIC_EXT9,MiniCT_0713);//MiniCT_0713 "选择私钥:"
  598. m_XpEditKey.SetCaption(MiniCT_0714);//MiniCT_0714 "选择私钥证书文件"
  599. m_XpEditKey.SetFilter(MiniCT_0715);//MiniCT_0715 "私钥证书文件(*.crt;*.cer;*.der;*.pem)|*.crt;*.cer;*.der;*.pem|所有文件(*.*)|*.*||"
  600. SetDlgItemText(IDC_STATIC_DEC,MiniCT_0716);//MiniCT_0716 "解密PFX包密钥:"
  601. SetDlgItemText(IDC_STATIC_ENC,MiniCT_0717);//MiniCT_0717 "加密私钥密钥:"
  602. // SetDlgItemText(IDC_EDIT_P12,m_p12); //复原原选择
  603. GetDlgItem(IDC_STATIC_EXT8)->EnableWindow(1);
  604. GetDlgItem(IDC_EDIT_PASSWORD)->EnableWindow(1);
  605. GetDlgItem(IDC_EDIT_KEY)->EnableWindow(0);
  606. GetDlgItem(IDC_STATIC_EXT9)->EnableWindow(0);
  607. GetDlgItem(IDC_EDIT_PASSWORD2)->EnableWindow(1);
  608. GetDlgItem(IDC_EDIT_PASSWORD)->EnableWindow(1);
  609. SetDlgItemText(IDC_B_OK,MiniCT_0718);//MiniCT_0718 "提取证书"
  610. // GetDlgItem(IDC_EDIT_PASSWORD2)->EnableWindow(0);
  611. }
  612. else if(m_TypeP12==1) //合并P12
  613. {
  614. GetDlgItem(IDC_EDIT_P12)->EnableWindow(1);
  615. SetDlgItemText(IDC_STATIC_EXT8,MiniCT_0719);//MiniCT_0719 "选择公钥:"
  616. m_XpEditP12.SetCaption(MiniCT_0720);//MiniCT_0720 "选择公钥证书文件"
  617. m_XpEditP12.SetFilter(MiniCT_0721);//MiniCT_0721 "公钥文件(*.der;*.cer;*.crt;*.pem)|*.der;*.cer;*.crt;*.pem|所有文件(*.*)|*.*||"
  618. SetDlgItemText(IDC_STATIC_DEC,MiniCT_0722);//MiniCT_0722 "解密私钥密钥:"
  619. SetDlgItemText(IDC_STATIC_ENC,MiniCT_0723);//MiniCT_0723 "加密PFX包密钥:"
  620. SetDlgItemText(IDC_STATIC_EXT9, MiniCT_0713);//MiniCT_0713
  621. m_XpEditKey.SetCaption(MiniCT_0714);//MiniCT_0714
  622. m_XpEditKey.SetFilter(MiniCT_0715);//MiniCT_0715
  623. SetDlgItemText(IDC_EDIT_P12, m_cert); //复原原选择
  624. SetDlgItemText(IDC_EDIT_KEY, m_key); //复原原选择
  625. GetDlgItem(IDC_STATIC_EXT8)->EnableWindow(1);
  626. GetDlgItem(IDC_EDIT_PASSWORD)->EnableWindow(1);
  627. GetDlgItem(IDC_STATIC_DEC)->EnableWindow(1);
  628. GetDlgItem(IDC_STATIC_ENC)->EnableWindow(1);
  629. GetDlgItem(IDC_EDIT_PASSWORD)->EnableWindow(1);
  630. GetDlgItem(IDC_EDIT_PASSWORD2)->EnableWindow(1);
  631. GetDlgItem(IDC_EDIT_KEY)->EnableWindow(1);
  632. GetDlgItem(IDC_STATIC_EXT9)->EnableWindow(1);
  633. GetDlgItem(IDC_EDIT_PASSWORD2)->EnableWindow(1);
  634. GetDlgItem(IDC_EDIT_PASSWORD2)->EnableWindow(1);
  635. SetDlgItemText(IDC_B_OK,MiniCT_0724);//MiniCT_0724 "合并证书"
  636. }
  637. else if(m_TypeP12 == 2) //修改P12密码
  638. {
  639. GetDlgItem(IDC_STATIC_DEC)->EnableWindow(1);
  640. GetDlgItem(IDC_STATIC_ENC)->EnableWindow(1);
  641. GetDlgItem(IDC_EDIT_PASSWORD)->EnableWindow(1);
  642. GetDlgItem(IDC_EDIT_PASSWORD2)->EnableWindow(1);
  643. GetDlgItem(IDC_EDIT_P12)->EnableWindow(1);
  644. SetDlgItemText(IDC_STATIC_EXT8,MiniCT_0710);//MiniCT_0710 "选择PFX:"
  645. m_XpEditP12.SetCaption(MiniCT_0711);//MiniCT_0711 "选择个人信息交换文件"
  646. m_XpEditP12.SetFilter(MiniCT_0712);//MiniCT_0712 "个人信息交换(*.pfx;*.p12)|*.pfx;*.p12|所有文件(*.*)|*.*||"
  647. SetDlgItemText(IDC_STATIC_EXT9,MiniCT_0713);//MiniCT_0713 "选择私钥:"
  648. m_XpEditKey.SetCaption(MiniCT_0714);//MiniCT_0714 "选择私钥证书文件"
  649. m_XpEditKey.SetFilter(MiniCT_0715);//MiniCT_0715 "私钥证书文件(*.crt;*.cer;*.der;*.pem)|*.crt;*.cer;*.der;*.pem|所有文件(*.*)|*.*||"
  650. SetDlgItemText(IDC_STATIC_DEC,MiniCT_0725);//MiniCT_0725 "原PFX包密钥:"
  651. SetDlgItemText(IDC_STATIC_ENC,MiniCT_0726);//MiniCT_0726 "新PFX包密钥:"
  652. SetDlgItemText(IDC_EDIT_P12, m_p12); //复原原选择
  653. GetDlgItem(IDC_STATIC_EXT8)->EnableWindow(1);
  654. GetDlgItem(IDC_EDIT_PASSWORD)->EnableWindow(1);
  655. GetDlgItem(IDC_EDIT_KEY)->EnableWindow(0);
  656. GetDlgItem(IDC_STATIC_EXT9)->EnableWindow(0);
  657. GetDlgItem(IDC_EDIT_PASSWORD2)->EnableWindow(1);
  658. SetDlgItemText(IDC_B_OK,MiniCT_0727);//MiniCT_0727 "修改密码"
  659. }
  660. else if(m_TypeP12 == 3) //P7分解
  661. {
  662. //0,3
  663. GetDlgItem(IDC_EXT_CHECK1)->EnableWindow(1);
  664. GetDlgItem(IDC_EDIT_P12)->EnableWindow(1);
  665. //加密消息语法标注
  666. SetDlgItemText(IDC_STATIC_EXT8,MiniCT_0728);//MiniCT_0728 "选择P7B:"
  667. m_XpEditP12.SetCaption(MiniCT_0729);//MiniCT_0729 "选择加密消息语法标准文件"
  668. m_XpEditP12.SetFilter(MiniCT_0730);//MiniCT_0730 "加密消息语法标准(*.p7b)|*p7b|所有文件(*.*)|*.*||"
  669. SetDlgItemText(IDC_STATIC_EXT9,MiniCT_0731);//MiniCT_0731 "选择CRL:"
  670. m_XpEditKey.SetCaption(MiniCT_0732);//MiniCT_0732 "选择黑名单文件"
  671. m_XpEditKey.SetFilter(MiniCT_0733);//MiniCT_0733 "黑名单(*.crl)|*.crl|所有文件(*.*)|*.*||"
  672. GetDlgItem(IDC_STATIC_DEC)->EnableWindow(0);
  673. GetDlgItem(IDC_STATIC_ENC)->EnableWindow(0);
  674. GetDlgItem(IDC_EDIT_PASSWORD)->EnableWindow(0);
  675. GetDlgItem(IDC_EDIT_PASSWORD2)->EnableWindow(0);
  676. // SetDlgItemText(IDC_EDIT_P12, m_cert); //复原原选择
  677. // SetDlgItemText(IDC_EDIT_KEY, m_key); //复原原选择
  678. GetDlgItem(IDC_STATIC_EXT8)->EnableWindow(1);
  679. GetDlgItem(IDC_EDIT_KEY)->EnableWindow(0);
  680. GetDlgItem(IDC_STATIC_EXT9)->EnableWindow(0);
  681. SetDlgItemText(IDC_B_OK,MiniCT_0718);//MiniCT_0719
  682. }
  683. else//P7合并
  684. {
  685. GetDlgItem(IDC_EXT_CHECK1)->EnableWindow(1);
  686. GetDlgItem(IDC_EDIT_P12)->EnableWindow(1);
  687. SetDlgItemText(IDC_STATIC_EXT8,MiniCT_0719);//MiniCT_0719 "选择公钥:"
  688. m_XpEditP12.SetCaption(MiniCT_0734);//MiniCT_0734 "选择公钥证书文件(可多选)"
  689. m_XpEditP12.SetFilter(MiniCT_0721);//MiniCT_0721 "公钥文件(*.der;*.cer;*.crt;*.pem)|*.der;*.cer;*.crt;*.pem|所有文件(*.*)|*.*||"
  690. SetDlgItemText(IDC_STATIC_EXT9,MiniCT_0731);//MiniCT_0731 "选择CRL:"
  691. m_XpEditKey.SetCaption(MiniCT_0732);//MiniCT_0732 "选择黑名单文件"
  692. m_XpEditKey.SetFilter(MiniCT_0733);//MiniCT_0733 "黑名单(*.crl)|*.crl|所有文件(*.*)|*.*||"
  693. GetDlgItem(IDC_STATIC_DEC)->EnableWindow(0);
  694. GetDlgItem(IDC_STATIC_ENC)->EnableWindow(0);
  695. GetDlgItem(IDC_EDIT_PASSWORD)->EnableWindow(0);
  696. GetDlgItem(IDC_EDIT_PASSWORD2)->EnableWindow(0);
  697. SetDlgItemText(IDC_EDIT_P12, m_cert); //复原原选择
  698. SetDlgItemText(IDC_EDIT_KEY, m_key); //复原原选择
  699. GetDlgItem(IDC_STATIC_EXT8)->EnableWindow(1);
  700. GetDlgItem(IDC_EDIT_KEY)->EnableWindow(1);
  701. GetDlgItem(IDC_STATIC_EXT9)->EnableWindow(1);
  702. SetDlgItemText(IDC_B_OK,MiniCT_0724);//MiniCT_0724 "合并证书"
  703. }
  704. }
  705. void CCertExtPage::OnRParse() //提取证书操作
  706. {
  707. // TODO: Add your control notification handler code here
  708. m_TypeP12=0;
  709. SetCheck();
  710. }
  711. void CCertExtPage::OnRCreate() //合并证书操作
  712. {
  713. // TODO: Add your control notification handler code here
  714. m_TypeP12=1;
  715. SetCheck();
  716. }
  717. void CCertExtPage::OnRChangep() //修改密钥操作
  718. {
  719. // TODO: Add your control notification handler code here
  720. m_TypeP12=2;
  721. SetCheck();
  722. }
  723. void CCertExtPage::OnRParse2() //P7证书提取
  724. {
  725. // TODO: Add your control notification handler code here
  726. m_TypeP12=3;
  727. SetCheck();
  728. }
  729. void CCertExtPage::OnRCreate2() //合并证书到P7
  730. {
  731. // TODO: Add your control notification handler code here
  732. m_TypeP12 = 4;
  733. SetCheck();
  734. }
  735. void CCertExtPage::OnRadioDertopem() //TO->PEM
  736. {
  737. // TODO: Add your control notification handler code here
  738. m_TypeCert = 0;
  739. SetDlgItemText(IDC_STATIC_EXT10,MiniCT_0735);//MiniCT_0735 "选择证书:"
  740. SetDlgItemText(IDC_STATIC_EXT11,MiniCT_0736);//MiniCT_0736 "输出PEM:"
  741. m_XpEditInfile.SetCaption(MiniCT_0747);//MiniCT_0747 "选择证书文件"
  742. m_XpEditInfile.SetFilter(MiniCT_0748);//MiniCT_0748 "证书文件(*.der;*.cer;*.crt;*.pem)|*.der;*.cer;*.crt;*.pem|所有文件(*.*)|*.*||"
  743. m_XpEditOutfile.SetCaption(MiniCT_0749);//MiniCT_0749 "选择要保存的证书文件"
  744. m_XpEditOutfile.SetFilter(MiniCT_0748);//MiniCT_0748 "证书文件(*.der;*.cer;*.crt;*.pem)|*.der;*.cer;*.crt;*.pem|所有文件(*.*)|*.*||"
  745. GetDlgItem(IDC_EDIT_OUTFILE)->EnableWindow(1); 
  746. GetDlgItem(IDC_STATIC_EXT11)->EnableWindow(1);
  747. GetDlgItem(IDC_EDIT_PASSWORD3)->EnableWindow(1);
  748. GetDlgItem(IDC_EDIT_PASSWORD4)->EnableWindow(1);
  749. }
  750. void CCertExtPage::OnRadioPemtoder() //->DER
  751. {
  752. // TODO: Add your control notification handler code here
  753. m_TypeCert = 1;
  754. SetDlgItemText(IDC_STATIC_EXT10,MiniCT_0735);//MiniCT_0735 "选择证书:"
  755. SetDlgItemText(IDC_STATIC_EXT11,MiniCT_0737);//MiniCT_0737 "输出DER:"
  756. m_XpEditInfile.SetCaption(MiniCT_0747);//MiniCT_0747 "选择证书文件"
  757. m_XpEditInfile.SetFilter(MiniCT_0748);//MiniCT_0748 "证书文件(*.der;*.cer;*.crt;*.pem)|*.der;*.cer;*.crt;*.pem|所有文件(*.*)|*.*||"
  758. m_XpEditOutfile.SetCaption(MiniCT_0749);//MiniCT_0749 "选择要保存的证书文件"
  759. m_XpEditOutfile.SetFilter(MiniCT_0748);//MiniCT_0748 "证书文件(*.der;*.cer;*.crt;*.pem)|*.der;*.cer;*.crt;*.pem|所有文件(*.*)|*.*||"
  760. GetDlgItem(IDC_EDIT_OUTFILE)->EnableWindow(1);
  761. GetDlgItem(IDC_STATIC_EXT11)->EnableWindow(1);
  762. GetDlgItem(IDC_EDIT_PASSWORD3)->EnableWindow(1);
  763. GetDlgItem(IDC_EDIT_PASSWORD4)->EnableWindow(1);
  764. }
  765. void CCertExtPage::OnRadioRootch() //ROOT CHECK
  766. {
  767. // TODO: Add your control notification handler code here
  768. m_TypeCert = 2;
  769. SetDlgItemText(IDC_STATIC_EXT10,MiniCT_0719);//MiniCT_0719 "选择公钥:"
  770. SetDlgItemText(IDC_STATIC_EXT11,MiniCT_0738);//MiniCT_0738 "选择ROOT:"
  771. m_XpEditInfile.SetCaption(MiniCT_0720);//MiniCT_0720
  772. m_XpEditInfile.SetFilter(MiniCT_0721);//MiniCT_0721
  773. m_XpEditOutfile.SetCaption(MiniCT_0750);//MiniCT_0750 "选择根证书公钥文件"
  774. m_XpEditOutfile.SetFilter(MiniCT_0751);//MiniCT_0751 "根证书文件(*.der;*.cer;*.crt;*.pem)|*.der;*.cer;*.crt;*.pem|所有文件(*.*)|*.*||"
  775. GetDlgItem(IDC_EDIT_OUTFILE)->EnableWindow(1);
  776. GetDlgItem(IDC_STATIC_EXT11)->EnableWindow(1);
  777. GetDlgItem(IDC_EDIT_PASSWORD3)->EnableWindow(0);
  778. GetDlgItem(IDC_EDIT_PASSWORD4)->EnableWindow(0);
  779. }
  780. void CCertExtPage::OnRadioCrlch() //CRL CHECK
  781. {
  782. // TODO: Add your control notification handler code here
  783. m_TypeCert = 3;
  784. SetDlgItemText(IDC_STATIC_EXT10,MiniCT_0719);//MiniCT_0719 "选择公钥:"
  785. SetDlgItemText(IDC_STATIC_EXT11,MiniCT_0731);//MiniCT_0731 "选择CRL:"
  786. m_XpEditInfile.SetCaption(MiniCT_0720);//MiniCT_0720
  787. m_XpEditInfile.SetFilter(MiniCT_0721);//MiniCT_0721
  788. m_XpEditOutfile.SetCaption(MiniCT_0732);//MiniCT_0732
  789. m_XpEditOutfile.SetFilter(MiniCT_0733);//MiniCT_0733
  790. GetDlgItem(IDC_EDIT_OUTFILE)->EnableWindow(1);
  791. GetDlgItem(IDC_STATIC_EXT11)->EnableWindow(1);
  792. GetDlgItem(IDC_EDIT_PASSWORD3)->EnableWindow(0);
  793. GetDlgItem(IDC_EDIT_PASSWORD4)->EnableWindow(0);
  794. }
  795. void CCertExtPage::OnRadioTiemch() //TIME CHECK
  796. {
  797. // TODO: Add your control notification handler code here
  798. m_TypeCert = 4; 
  799. SetDlgItemText(IDC_STATIC_EXT10,MiniCT_0719);//MiniCT_0719 "选择公钥:"
  800. m_XpEditInfile.SetCaption(MiniCT_0720);//MiniCT_0720
  801. m_XpEditInfile.SetFilter(MiniCT_0721);//MiniCT_0721
  802. GetDlgItem(IDC_EDIT_OUTFILE)->EnableWindow(0);
  803. GetDlgItem(IDC_STATIC_EXT11)->EnableWindow(0);
  804. GetDlgItem(IDC_EDIT_PASSWORD3)->EnableWindow(0);
  805. GetDlgItem(IDC_EDIT_PASSWORD4)->EnableWindow(0);
  806. }
  807. void CCertExtPage::OnRadioKeypairch() //KEY PARI CHECK
  808. {
  809. // TODO: Add your control notification handler code here
  810. m_TypeCert = 5;
  811. SetDlgItemText(IDC_STATIC_EXT10,MiniCT_0719);//MiniCT_0719 "选择公钥:"
  812. SetDlgItemText(IDC_STATIC_EXT11,MiniCT_0713);//MiniCT_0713 "选择私钥:"
  813. m_XpEditInfile.SetCaption(MiniCT_0720);//MiniCT_0720
  814. m_XpEditInfile.SetFilter(MiniCT_0721);//MiniCT_0721
  815. m_XpEditOutfile.SetCaption(MiniCT_0714);//MiniCT_0714
  816. m_XpEditOutfile.SetFilter(MiniCT_0715);//MiniCT_0715
  817. GetDlgItem(IDC_EDIT_OUTFILE)->EnableWindow(1);
  818. GetDlgItem(IDC_STATIC_EXT11)->EnableWindow(1);
  819. GetDlgItem(IDC_EDIT_PASSWORD3)->EnableWindow(1);
  820. GetDlgItem(IDC_EDIT_PASSWORD4)->EnableWindow(0);
  821. }
  822. void CCertExtPage::OnBOk2() 
  823. {
  824. // TODO: Add your control notification handler code here
  825. //获得输入文件和输出文件
  826. CString infile,outfile;
  827. char out[100]={0};
  828. GetDlgItemText(IDC_EDIT_INFILE,infile);
  829. GetDlgItemText(IDC_EDIT_OUTFILE,outfile);
  830. CString strPwdEnc,strPwdDec;//加密密钥,和解密密钥
  831. GetDlgItemText(IDC_EDIT_PASSWORD3,strPwdDec);
  832. GetDlgItemText(IDC_EDIT_PASSWORD4,strPwdEnc);
  833. if(m_TypeCert == 0)//der -> pem
  834. {
  835. if(infile=="")
  836. {
  837. AddMsg(MiniCT_0739,M_WARING);//MiniCT_0739 "没有选择证书文件"
  838. return;
  839. }
  840. if(outfile=="")
  841. {
  842. AddMsg(MiniCT_0740,M_WARING);//MiniCT_0740 "没有指定PEM文件"
  843. return;
  844. }
  845. if(CertFormatConver(infile.GetBuffer(0),0,strPwdDec.GetBuffer(0),
  846. outfile.GetBuffer(0),0,strPwdEnc.GetBuffer(0),PEM,out))
  847. AddMsg(out);
  848. else
  849. AddMsg(out,M_ERROR);
  850. }
  851. else if(m_TypeCert == 1) //pem -> der
  852. {
  853. if(infile=="")
  854. {
  855. AddMsg(MiniCT_0739,M_WARING);//MiniCT_0739 "没有选择证书文件"
  856. return;
  857. }
  858. if(outfile=="")
  859. {
  860. AddMsg(MiniCT_0741,M_WARING);//MiniCT_0741 "没有指定DER文件"
  861. return;
  862. }
  863. if(CertFormatConver(infile.GetBuffer(0),0,strPwdDec.GetBuffer(0),
  864. outfile.GetBuffer(0),0,strPwdEnc.GetBuffer(0),DER,out))
  865. AddMsg(out);
  866. else
  867. AddMsg(out,M_ERROR);
  868. }
  869. else if(m_TypeCert == 2)
  870. {
  871. if(infile=="")
  872. {
  873. AddMsg(MiniCT_0739,M_WARING);//MiniCT_0739 "没有选择证书文件"
  874. return;
  875. }
  876. if(outfile=="")
  877. {
  878. AddMsg(MiniCT_0742,M_WARING);//MiniCT_0742 "没有选择根证书文件"
  879. return;
  880. }
  881. if(CheckCertWithRoot(infile.GetBuffer(0),0,outfile.GetBuffer(0),0,out))
  882. {
  883. AddMsg(out);
  884. }
  885. else
  886. {
  887. AddMsg(out,M_ERROR);
  888. }
  889. }
  890. else if(m_TypeCert == 3)
  891. {
  892. if(infile=="")
  893. {
  894. AddMsg(MiniCT_0743,M_WARING);//MiniCT_0743 "没有选择公钥文件"
  895. return;
  896. }
  897. if(outfile=="")
  898. {
  899. AddMsg(MiniCT_0744,M_WARING);//MiniCT_0744 "没有选择黑名单文件"
  900. return;
  901. }
  902. if(CheckCertWithCrl(infile.GetBuffer(0),0,outfile.GetBuffer(0),0,out))
  903. {
  904. AddMsg(out);
  905. }
  906. else
  907. {
  908. AddMsg(out,M_ERROR);
  909. }
  910. }
  911. else if(m_TypeCert == 4)
  912. {
  913. if(infile=="")
  914. {
  915. AddMsg(MiniCT_0743,M_WARING);//MiniCT_0743 "没有选择公钥文件"
  916. return;
  917. }
  918. if(CheckCertLife(infile.GetBuffer(0),0,out))
  919. {
  920. AddMsg(out);
  921. }
  922. else
  923. {
  924. AddMsg(out,M_ERROR);
  925. }
  926. }
  927. else if(m_TypeCert == 5)
  928. {
  929. if(infile=="")
  930. {
  931. AddMsg(MiniCT_0743,M_WARING);//MiniCT_0743 "没有选择公钥文件"
  932. return;
  933. }
  934. if(outfile=="")
  935. {
  936. AddMsg(MiniCT_0745,M_WARING);//MiniCT_0745 "没有选择私钥文件"
  937. return;
  938. }
  939. BOOL bCheck = CertPairCheck(infile.GetBuffer(0),outfile.GetBuffer(0),out,strPwdDec.GetBuffer(0));
  940. infile.ReleaseBuffer();
  941. outfile.ReleaseBuffer();
  942. strPwdDec.ReleaseBuffer();
  943. if(bCheck)
  944. AddMsg(MiniCT_0746);//MiniCT_0746 "公私钥对匹配"
  945. else
  946. AddMsg(out,M_ERROR);
  947. }
  948. }
  949. BOOL CCertExtPage::PreTranslateMessage(MSG* pMsg)
  950. {
  951. // CG: The following block was added by the ToolTips component. { // Let the ToolTip process this message. m_toolTip.RelayEvent(pMsg); } return CPropertyPage::PreTranslateMessage(pMsg); // CG: This was added by the ToolTips component.
  952. }
  953. void CCertExtPage::AddMsg(CString info, DWORD type)
  954. {
  955. ((CMiniMainDlg *)GetParent())->AddMsg("数证辅助",info, type); //MiniCT_0001
  956. }
  957. void CCertExtPage::OnCheck1() 
  958. {
  959. // TODO: Add your control notification handler code here
  960. int check=((CButton *)GetDlgItem(IDC_EXT_CHECK1))->GetCheck();
  961. if(check)
  962. {
  963. m_CertFormat = DER;
  964. }
  965. else
  966. {
  967. m_CertFormat = PEM;
  968. }
  969. }
  970. void CCertExtPage::TranslateCT()
  971. {
  972. SetDlgItemText(IDC_STATIC_EXT1, MiniCT_11201);
  973. SetDlgItemText(IDC_STATIC_EXT2, MiniCT_11202);
  974. SetDlgItemText(IDC_STATIC_EXT3, MiniCT_11203);
  975. SetDlgItemText(IDC_STATIC_EXT4, MiniCT_11204);
  976. SetDlgItemText(IDC_STATIC_EXT5, MiniCT_11205);
  977. SetDlgItemText(IDC_STATIC_EXT6, MiniCT_11206);
  978. SetDlgItemText(IDC_STATIC_EXT7, MiniCT_11207);
  979. SetDlgItemText(IDC_STATIC_EXT8, MiniCT_11208);
  980. SetDlgItemText(IDC_STATIC_EXT9, MiniCT_11209);
  981. SetDlgItemText(IDC_STATIC_EXT10, MiniCT_11210);
  982. SetDlgItemText(IDC_STATIC_EXT11, MiniCT_11211);
  983. SetDlgItemText(IDC_STATIC_DEC, MiniCT_11212);
  984. SetDlgItemText(IDC_STATIC_ENC, MiniCT_11213);
  985. SetDlgItemText(IDC_STATIC_DEC2, MiniCT_11214);
  986. SetDlgItemText(IDC_STATIC_ENC2, MiniCT_11215);
  987. SetDlgItemText(IDC_R_PARSE, MiniCT_11216);
  988. SetDlgItemText(IDC_R_CREATE, MiniCT_11217);
  989. SetDlgItemText(IDC_R_CHANGEP, MiniCT_11218);
  990. SetDlgItemText(IDC_B_OK, MiniCT_11219);
  991. SetDlgItemText(IDC_RADIO_DERTOPEM, MiniCT_11220);
  992. SetDlgItemText(IDC_RADIO_PEMTODER, MiniCT_11221);
  993. SetDlgItemText(IDC_RADIO_CRLCH, MiniCT_11222);
  994. SetDlgItemText(IDC_RADIO_ROOTCH, MiniCT_11223);
  995. SetDlgItemText(IDC_RADIO_KEYPAIRCH, MiniCT_11224);
  996. SetDlgItemText(IDC_RADIO_TIEMCH, MiniCT_11225);
  997. SetDlgItemText(IDC_B_OK2, MiniCT_11226);
  998. SetDlgItemText(IDC_EXT_CHECK1, MiniCT_11227);
  999. SetDlgItemText(IDC_R_PARSE2, MiniCT_11228);
  1000. SetDlgItemText(IDC_R_CREATE2, MiniCT_11229);
  1001. }