From f8db5af9c94285c4946bdf38407fe15ed1b7f818 Mon Sep 17 00:00:00 2001 From: tkellner Date: Mon, 2 Apr 2012 16:38:59 +0000 Subject: * Save certificates to local file system * Show cardreader and smartcard information for Webstart and Applet version git-svn-id: https://joinup.ec.europa.eu/svn/mocca/trunk@1042 8a26b1a7-26f0-462f-b9ef-d0e30c41f5a4 --- .../bku/smccstal/GETCertificateRequestHandler.java | 129 +++++++++++++++++++++ .../smccstal/GETHardwareInfoRequestHandler.java | 106 +++++++++++++++++ 2 files changed, 235 insertions(+) create mode 100644 smccSTALExt/src/main/java/at/gv/egiz/bku/smccstal/GETCertificateRequestHandler.java create mode 100644 smccSTALExt/src/main/java/at/gv/egiz/bku/smccstal/GETHardwareInfoRequestHandler.java (limited to 'smccSTALExt/src') diff --git a/smccSTALExt/src/main/java/at/gv/egiz/bku/smccstal/GETCertificateRequestHandler.java b/smccSTALExt/src/main/java/at/gv/egiz/bku/smccstal/GETCertificateRequestHandler.java new file mode 100644 index 00000000..d564b735 --- /dev/null +++ b/smccSTALExt/src/main/java/at/gv/egiz/bku/smccstal/GETCertificateRequestHandler.java @@ -0,0 +1,129 @@ +/* + * Copyright 2011 by Graz University of Technology, Austria + * MOCCA has been developed by the E-Government Innovation Center EGIZ, a joint + * initiative of the Federal Chancellery Austria and Graz University of Technology. + * + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by + * the European Commission - subsequent versions of the EUPL (the "Licence"); + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: + * http://www.osor.eu/eupl/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the Licence is distributed on an "AS IS" basis, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the Licence for the specific language governing permissions and + * limitations under the Licence. + * + * This product combines work with different licenses. See the "NOTICE" text + * file for details on the various modules and licenses. + * The "NOTICE" text file is part of the distribution. Any derivative works + * that you distribute must include a readable copy of the "NOTICE" text file. + */ + +package at.gv.egiz.bku.smccstal; + +/** +* +* @author Thomas Lenz +*/ + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import at.gv.egiz.bku.gui.GetCertificateGUIFacade; +import at.gv.egiz.bku.pin.gui.VerifyPINGUI; +import at.gv.egiz.smcc.SignatureCard; +import at.gv.egiz.smcc.SignatureCardException; +import at.gv.egiz.stal.STALRequest; +import at.gv.egiz.stal.STALResponse; +import at.gv.egiz.stal.ext.GETCertificateRequest; +import at.gv.egiz.stal.ext.GETCertificateResponse; + +public class GETCertificateRequestHandler extends AbstractRequestHandler { + + private final Logger log = LoggerFactory.getLogger(GETCertificateRequestHandler.class); + + @Override + public boolean requireCard() { + return true; + } + + @Override + public STALResponse handleRequest(STALRequest request) + throws InterruptedException { + + log.debug("handle a GETCertificateRequest"); + + if (request instanceof GETCertificateRequest) { + + GetCertificateGUIFacade gui = (GetCertificateGUIFacade) this.gui; + + gui.showGETCertificateDialog(this, "getqualcert", "getsimcert", this, "cancel"); + + while (true) { + + waitForAction(); + + try { + + if ("cancel".equals(actionCommand)) { + log.debug("get certificate response cancel."); + return new GETCertificateResponse(); + + } else if ("getqualcert".equals(actionCommand)) { + + File file = gui.showSaveDialog(GetCertificateGUIFacade.FILENAME_QUAL_CERT); + byte[] cert = card.getCertificate(SignatureCard.KeyboxName.SECURE_SIGNATURE_KEYPAIR, + new VerifyPINGUI(gui)); + + FileOutputStream fstream = new FileOutputStream(file); + fstream.write(cert); + fstream.close(); + + log.debug("qualified certificate are saved to | " + file.getAbsolutePath() + "."); + + return new GETCertificateResponse(); + + } else if ("getsimcert".equals(actionCommand)) { + + File file = gui.showSaveDialog(GetCertificateGUIFacade.FILENAME_SIM_CERT); + + FileOutputStream fstream = new FileOutputStream(file); + fstream.write(card.getCertificate(SignatureCard.KeyboxName.CERTIFIED_KEYPAIR, + new VerifyPINGUI(gui))); + fstream.close(); + + log.debug("simple certificate are saved to | " + file.getAbsolutePath() + "."); + + return new GETCertificateResponse(); + } + else { + log.info("unknown command resolved."); + } + + } catch (FileNotFoundException e) { + log.error("file to save the certificate could not be found.", e); + + } catch (SignatureCardException e) { + log.error("Card not activated or certificate is not available.", e); + gui.showErrorDialog(GetCertificateGUIFacade.ERR_CARD_NOTACTIVATED, + null, this, "cancel"); + + } catch (NullPointerException e) { + log.error("save certificate file selection aborted.", e); + + } catch (Exception e) { + log.error("a general error occur during the certificate save operation.", e); + } + } + } + + return new GETCertificateResponse(); + } + +} diff --git a/smccSTALExt/src/main/java/at/gv/egiz/bku/smccstal/GETHardwareInfoRequestHandler.java b/smccSTALExt/src/main/java/at/gv/egiz/bku/smccstal/GETHardwareInfoRequestHandler.java new file mode 100644 index 00000000..d2b3b050 --- /dev/null +++ b/smccSTALExt/src/main/java/at/gv/egiz/bku/smccstal/GETHardwareInfoRequestHandler.java @@ -0,0 +1,106 @@ +/* + * Copyright 2011 by Graz University of Technology, Austria + * MOCCA has been developed by the E-Government Innovation Center EGIZ, a joint + * initiative of the Federal Chancellery Austria and Graz University of Technology. + * + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by + * the European Commission - subsequent versions of the EUPL (the "Licence"); + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: + * http://www.osor.eu/eupl/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the Licence is distributed on an "AS IS" basis, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the Licence for the specific language governing permissions and + * limitations under the Licence. + * + * This product combines work with different licenses. See the "NOTICE" text + * file for details on the various modules and licenses. + * The "NOTICE" text file is part of the distribution. Any derivative works + * that you distribute must include a readable copy of the "NOTICE" text file. + */ + +package at.gv.egiz.bku.smccstal; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import at.gv.egiz.bku.gui.GetHardwareInfoGUIFacade; +import at.gv.egiz.stal.STALRequest; +import at.gv.egiz.stal.STALResponse; +import at.gv.egiz.stal.ext.GETHardwareInfoRequest; +import at.gv.egiz.stal.ext.GETHardwareInfoResponse; + +/** +* +* @author Thomas Lenz +*/ + +public class GETHardwareInfoRequestHandler extends AbstractRequestHandler { + + private final Logger log = LoggerFactory.getLogger(GETHardwareInfoRequestHandler.class); + + @Override + public boolean requireCard() { + return true; + } + + @Override + public STALResponse handleRequest(STALRequest request) + throws InterruptedException { + + log.debug("handle a get-hardware info request"); + + if (request instanceof GETHardwareInfoRequest) { + + try { + String terminal = card.getTerminalName(); + String smartcard = card.toString(); + String smartcard_ATR = toString(card.getCard().getATR().getBytes()); + + } catch (SignatureCardException e) { + log.error("Some error occur during card communication.", e); + gui.showErrorDialog(GetHardwareInfoGUIFacade.ERR_CARD_NOTACTIVATED, + null, this, "cancel"); + } + + + + GetHardwareInfoGUIFacade gui = (GetHardwareInfoGUIFacade) this.gui; + + gui.showHardwareInfoDialog(this, "back", terminal, smartcard, smartcard_ATR); + + while (true) { + + waitForAction(); + + if ("back".equals(actionCommand)) { + log.debug("show hardware info response back."); + return new GETHardwareInfoResponse(); + + } else { + log.info("unknown command resolved."); + } + } + } + return new GETHardwareInfoResponse(); + } + + private static String toString(byte[] b) { + StringBuffer sb = new StringBuffer(); + sb.append('['); + if (b != null && b.length > 0) { + sb.append(Integer.toHexString((b[0] & 240) >> 4)); + sb.append(Integer.toHexString(b[0] & 15)); + for (int i = 1; i < b.length; i++) { + sb.append((i % 32 == 0) ? '\n' : ':'); + sb.append(Integer.toHexString((b[i] & 240) >> 4)); + sb.append(Integer.toHexString(b[i] & 15)); + } + } + sb.append(']'); + return sb.toString(); + } + +} -- cgit v1.2.3