summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/BKUSelectionComposite.java89
-rw-r--r--pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/KSState.java113
-rw-r--r--pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/PrepareSigningState.java6
-rw-r--r--pdf-over-gui/src/main/resources/at/asit/pdfover/gui/messages.properties3
-rw-r--r--pdf-over-gui/src/main/resources/at/asit/pdfover/gui/messages_de.properties3
-rw-r--r--pdf-over-signator/src/main/java/at/asit/pdfover/signator/BKUs.java3
-rw-r--r--pdf-over-signator/src/main/java/at/asit/pdfover/signator/SigningState.java12
-rw-r--r--pdf-over-signer/pdf-over-sigpdfas4/src/main/java/at/asit/pdfover/signer/pdfas/PdfAs4Signer.java13
-rw-r--r--pdf-over-signer/pdf-over-sigpdfas4/src/main/java/at/asit/pdfover/signer/pdfas/PdfAs4SigningState.java48
9 files changed, 241 insertions, 49 deletions
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/BKUSelectionComposite.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/BKUSelectionComposite.java
index d21afcaa..8eebe02d 100644
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/BKUSelectionComposite.java
+++ b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/BKUSelectionComposite.java
@@ -17,7 +17,7 @@ package at.asit.pdfover.gui.composites;
// Imports
import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.MouseListener;
+import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Font;
@@ -84,6 +84,23 @@ public class BKUSelectionComposite extends StateComposite {
}
/**
+ * Listener for keystore selection
+ */
+ private final class KSSelectionListener extends SelectionAdapter {
+ /**
+ * Empty constructor
+ */
+ public KSSelectionListener() {
+ }
+
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ log.debug("Setting BKU to KS"); //$NON-NLS-1$
+ setSelected(BKUs.KS);
+ }
+ }
+
+ /**
* SLF4J Logger instance
**/
static final Logger log = LoggerFactory
@@ -94,7 +111,9 @@ public class BKUSelectionComposite extends StateComposite {
private Button btnMobile;
private Button btnCard;
-
+
+ private Button btnKS;
+
/**
* Gets selected BKU type
* @return BKUS enum
@@ -122,68 +141,46 @@ public class BKUSelectionComposite extends StateComposite {
super(parent, style, state);
this.setLayout(new FormLayout());
-
+
ClickableCanvas cc_mobile = new ClickableCanvas(this, SWT.NATIVE | SWT.RESIZE);
FormData fd_cc_mobile = new FormData();
fd_cc_mobile.right = new FormAttachment(50, -5);
fd_cc_mobile.top = new FormAttachment(40, -20);
- cc_mobile.addMouseListener(new MouseListener() {
-
- @Override
- public void mouseUp(org.eclipse.swt.events.MouseEvent e) {
- // Nothing to do here
- }
-
+ cc_mobile.addMouseListener(new MouseAdapter() {
@Override
public void mouseDown(org.eclipse.swt.events.MouseEvent e) {
setSelected(BKUs.MOBILE);
}
-
- @Override
- public void mouseDoubleClick(org.eclipse.swt.events.MouseEvent e) {
- // Nothing to do here
- }
});
cc_mobile.setLayoutData(fd_cc_mobile);
-
+
Image mobile = new Image(getDisplay(), new ImageData(this.getClass().getResourceAsStream(Constants.RES_IMG_MOBILE)));
cc_mobile.setImage(mobile);
FontData[] fD_cc_mobile = cc_mobile.getFont().getFontData();
fD_cc_mobile[0].setHeight(Constants.TEXT_SIZE_BUTTON);
cc_mobile.setFont(new Font(Display.getCurrent(), fD_cc_mobile[0]));
-
+
ClickableCanvas cc_karte = new ClickableCanvas(this, SWT.NATIVE | SWT.RESIZE);
FormData fd_cc_karte = new FormData();
fd_cc_karte.left = new FormAttachment(50, 5);
fd_cc_karte.top = new FormAttachment(40, -20);
- cc_karte.addMouseListener(new MouseListener() {
-
- @Override
- public void mouseUp(org.eclipse.swt.events.MouseEvent e) {
- // Nothing to do here
- }
-
+ cc_karte.addMouseListener(new MouseAdapter() {
@Override
public void mouseDown(org.eclipse.swt.events.MouseEvent e) {
setSelected(BKUs.LOCAL);
}
-
- @Override
- public void mouseDoubleClick(org.eclipse.swt.events.MouseEvent e) {
- // Nothing to do here
- }
});
cc_karte.setLayoutData(fd_cc_karte);
-
+
Image karte = new Image(getDisplay(), new ImageData(this.getClass().getResourceAsStream(Constants.RES_IMG_CARD)));
-
+
cc_karte.setImage(karte);
FontData[] fD_cc_karte = cc_mobile.getFont().getFontData();
fD_cc_karte[0].setHeight(Constants.TEXT_SIZE_BUTTON);
cc_mobile.setFont(new Font(Display.getCurrent(), fD_cc_karte[0]));
-
+
int mobilesize = cc_mobile.computeSize(SWT.DEFAULT, SWT.DEFAULT).x;
-
+
this.btnMobile = new Button(this, SWT.NONE);
FormData fd_btnMobile = new FormData();
fd_btnMobile.top = new FormAttachment(cc_mobile, 10);
@@ -191,27 +188,36 @@ public class BKUSelectionComposite extends StateComposite {
fd_btnMobile.right = new FormAttachment(50, -5);
//fd_btnMobile.width = cc_mobile.computeSize(SWT.DEFAULT, SWT.DEFAULT).x;
this.btnMobile.setLayoutData(fd_btnMobile);
- this.btnMobile.setText(Messages.getString("bku_selection.mobile")); //$NON-NLS-1$
this.btnMobile.addSelectionListener(new MobileSelectionListener());
-
+
int btnmsize = this.btnMobile.computeSize(SWT.DEFAULT, SWT.DEFAULT).x;
-
+
fd_btnMobile.width = (btnmsize > mobilesize) ? btnmsize : mobilesize;
-
+
this.btnCard = new Button(this, SWT.NONE);
FormData fd_btnCard = new FormData();
fd_btnCard.top = new FormAttachment(cc_karte, 10);
//fd_btnMobile.left = new FormAttachment(btn_mobile, 0);
fd_btnCard.left = new FormAttachment(50, 5);
int cardsize = cc_karte.computeSize(SWT.DEFAULT, SWT.DEFAULT).x;
-
+
this.btnCard.setLayoutData(fd_btnCard);
- this.btnCard.setText(Messages.getString("bku_selection.card")); //$NON-NLS-1$
this.btnCard.addSelectionListener(new LocalSelectionListener());
-
+
int btncsize = this.btnCard.computeSize(SWT.DEFAULT, SWT.DEFAULT).x;
-
+
fd_btnCard.width = (btncsize > cardsize) ? btncsize : cardsize;
+
+ this.btnKS = new Button(this, SWT.NONE);
+ FormData fd_btnKS = new FormData();
+ fd_btnKS.top = new FormAttachment(this.btnCard, 10);
+ fd_btnKS.left = new FormAttachment(this.btnMobile, 0, SWT.LEFT);
+ fd_btnKS.right = new FormAttachment(this.btnCard, 0, SWT.RIGHT);
+
+ this.btnKS.setLayoutData(fd_btnKS);
+ this.btnKS.addSelectionListener(new KSSelectionListener());
+
+ reloadResources();
//this.pack();
}
@@ -235,5 +241,6 @@ public class BKUSelectionComposite extends StateComposite {
public void reloadResources() {
this.btnMobile.setText(Messages.getString("bku_selection.mobile")); //$NON-NLS-1$
this.btnCard.setText(Messages.getString("bku_selection.card")); //$NON-NLS-1$
+ this.btnKS.setText(Messages.getString("bku_selection.ks")); //$NON-NLS-1$
}
}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/KSState.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/KSState.java
new file mode 100644
index 00000000..1072942c
--- /dev/null
+++ b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/KSState.java
@@ -0,0 +1,113 @@
+/*
+ * Copyright 2012 by A-SIT, Secure Information Technology Center Austria
+ *
+ * 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://joinup.ec.europa.eu/software/page/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.
+ */
+package at.asit.pdfover.gui.workflow.states;
+
+// Imports
+import org.eclipse.swt.SWT;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import at.asit.pdfover.gui.MainWindow.Buttons;
+import at.asit.pdfover.gui.MainWindowBehavior;
+import at.asit.pdfover.gui.controls.Dialog.BUTTONS;
+import at.asit.pdfover.gui.controls.ErrorDialog;
+import at.asit.pdfover.gui.utils.Messages;
+import at.asit.pdfover.gui.workflow.StateMachine;
+import at.asit.pdfover.gui.workflow.Status;
+import at.asit.pdfover.signator.SignatureException;
+import at.asit.pdfover.signator.SigningState;
+
+/**
+ * Logical state for performing the BKU Request to a local BKU
+ */
+public class KSState extends State {
+
+ /**
+ * SLF4J Logger instance
+ **/
+ static final Logger log = LoggerFactory.getLogger(KSState.class);
+
+ /**
+ * Constructor
+ * @param stateMachine the StateMachine
+ */
+ public KSState(StateMachine stateMachine) {
+ super(stateMachine);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * at.asit.pdfover.gui.workflow.WorkflowState#update(at.asit.pdfover.gui
+ * .workflow.Workflow)
+ */
+ @Override
+ public void run() {
+ Status status = getStateMachine().getStatus();
+
+ SigningState signingState = status.getSigningState();
+
+ try {
+ signingState.setKSSigner("D:/Downloads/test.p12", "ecc_test", "123456", "123456", "PKCS12");
+ } catch (SignatureException e) {
+ log.error("Error loading keystore", e); //$NON-NLS-1$
+ ErrorDialog dialog = new ErrorDialog(
+ getStateMachine().getGUIProvider().getMainShell(),
+ Messages.getString("error.KeyStore"), //$NON-NLS-1$
+ BUTTONS.RETRY_CANCEL);
+ if (dialog.open() != SWT.RETRY) {
+ //getStateMachine().exit();
+ this.setNextState(new BKUSelectionState(getStateMachine()));
+ return;
+ }
+ return;
+ }
+
+ // OK
+ this.setNextState(new at.asit.pdfover.gui.workflow.states.SigningState(getStateMachine()));
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see at.asit.pdfover.gui.workflow.states.State#cleanUp()
+ */
+ @Override
+ public void cleanUp() {
+ // No composite - no cleanup necessary
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see at.asit.pdfover.gui.workflow.states.State#setMainWindowBehavior()
+ */
+ @Override
+ public void updateMainWindowBehavior() {
+ MainWindowBehavior behavior = getStateMachine().getStatus()
+ .getBehavior();
+ behavior.reset();
+ behavior.setActive(Buttons.OPEN, true);
+ behavior.setActive(Buttons.POSITION, true);
+ behavior.setActive(Buttons.SIGN, true);
+ }
+
+ @Override
+ public String toString() {
+ return this.getClass().getName();
+ }
+}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/PrepareSigningState.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/PrepareSigningState.java
index 21664d85..45636568 100644
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/PrepareSigningState.java
+++ b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/PrepareSigningState.java
@@ -235,10 +235,12 @@ public class PrepareSigningState extends State {
// We got the Request set it into status and move on to next state ...
status.setSigningState(this.signingState);
- if (getStateMachine().getStatus().getBKU() == BKUs.LOCAL) {
+ if (status.getBKU() == BKUs.LOCAL) {
this.setNextState(new LocalBKUState(getStateMachine()));
- } else if (getStateMachine().getStatus().getBKU() == BKUs.MOBILE) {
+ } else if (status.getBKU() == BKUs.MOBILE) {
this.setNextState(new MobileBKUState(getStateMachine()));
+ } else if (status.getBKU() == BKUs.KS) {
+ this.setNextState(new KSState(getStateMachine()));
} else {
log.error("Invalid selected BKU Value \"NONE\" in PrepareSigningState!"); //$NON-NLS-1$
this.setNextState(new BKUSelectionState(getStateMachine()));
diff --git a/pdf-over-gui/src/main/resources/at/asit/pdfover/gui/messages.properties b/pdf-over-gui/src/main/resources/at/asit/pdfover/gui/messages.properties
index 7502163c..9b5bd3db 100644
--- a/pdf-over-gui/src/main/resources/at/asit/pdfover/gui/messages.properties
+++ b/pdf-over-gui/src/main/resources/at/asit/pdfover/gui/messages.properties
@@ -1,5 +1,6 @@
#Eclipse messages class
#Fri Jun 26 16:29:30 CEST 2015
+BKU.KS=Keystore
BKU.LOCAL=Local CCE
BKU.MOBILE=Mobile CCE
BKU.NONE=no default
@@ -67,6 +68,7 @@ argument.invalid.proxypass=Proxy password argument invalid\! Usage\:
argument.invalid.proxyport=Proxy port argument invalid\! Usage\:
argument.invalid.proxyuser=Proxy username argument invalid\! Usage\:
bku_selection.card=&Card
+bku_selection.ks=&Keystore
bku_selection.mobile=&Mobile
common.AllExtension_Description=All files
common.Cancel=C&ancel
@@ -102,6 +104,7 @@ error.InvalidBKU=Invalid CCE selection. Please check.
error.InvalidLocale=Locale not valid
error.InvalidPhoneNumber=Given phone number is invalid\! Example\: +43664123456789
error.InvalidSettings=Invalid settings are still present. Please check your input.
+error.KeyStore=Error loading they keystore
error.LocalBKU=Please check if a local CCE (citizen card environment) is running\n\nYou need a CCE to access your citizen card. Further information under www.buergerkarte.at
error.MayNotBeAPDF=This may not be a PDF file
error.NoTan=No TAN entered
diff --git a/pdf-over-gui/src/main/resources/at/asit/pdfover/gui/messages_de.properties b/pdf-over-gui/src/main/resources/at/asit/pdfover/gui/messages_de.properties
index 49359c64..bba89f05 100644
--- a/pdf-over-gui/src/main/resources/at/asit/pdfover/gui/messages_de.properties
+++ b/pdf-over-gui/src/main/resources/at/asit/pdfover/gui/messages_de.properties
@@ -1,5 +1,6 @@
#Eclipse messages class
#Fri Jun 26 18:01:09 CEST 2015
+BKU.KS=KeyStore
BKU.LOCAL=Lokale BKU
BKU.MOBILE=Handy-BKU
BKU.NONE=Keine Voreinstellung
@@ -67,6 +68,7 @@ argument.invalid.proxypass=Proxy-Passwort ung\u00FCltig\! Verwendung\:
argument.invalid.proxyport=Proxy-Port ung\u00FCltig\! Verwendung\:
argument.invalid.proxyuser=Proxy-Benutzername ung\u00FCltig\! Verwendung\:
bku_selection.card=&Karte
+bku_selection.ks=Key&Store
bku_selection.mobile=&Handy
common.AllExtension_Description=Alle Dateien
common.Cancel=&Abbrechen
@@ -102,6 +104,7 @@ error.InvalidBKU=Ung\u00FCltige BKU-Auswahl. Bitte \u00FCberpr\u00FCfen.
error.InvalidLocale=Ung\u00FCltige Sprache
error.InvalidPhoneNumber=Telefonnummer ung\u00FCltig\! Beispiel\: +43664123456789
error.InvalidSettings=Ung\u00FCltige Einstellungen vorhanden. Bitte \u00FCberpr\u00FCfen.
+error.KeyStore=Fehler beim Laden des KeyStores
error.LocalBKU=Bitte pr\u00FCfen sie, ob Ihre lokale BKU (B\u00FCrgerkartenumgebung) l\u00E4uft\n\nSie ben\u00F6tigen eine BKU, um auf Ihre B\u00FCrgerkarte zuzugreifen. Weitere Informationen unter www.buergerkarte.at
error.MayNotBeAPDF=Dies ist m\u00F6glicherweise keine PDF-Datei
error.NoTan=Keine TAN eingeben
diff --git a/pdf-over-signator/src/main/java/at/asit/pdfover/signator/BKUs.java b/pdf-over-signator/src/main/java/at/asit/pdfover/signator/BKUs.java
index 774508a6..8d936d3c 100644
--- a/pdf-over-signator/src/main/java/at/asit/pdfover/signator/BKUs.java
+++ b/pdf-over-signator/src/main/java/at/asit/pdfover/signator/BKUs.java
@@ -26,6 +26,9 @@ public enum BKUs {
/** Mobile BKU */
MOBILE,
+ /** KeyStore */
+ KS,
+
/** No BKU */
NONE
}
diff --git a/pdf-over-signator/src/main/java/at/asit/pdfover/signator/SigningState.java b/pdf-over-signator/src/main/java/at/asit/pdfover/signator/SigningState.java
index f624e5b4..1ca365b4 100644
--- a/pdf-over-signator/src/main/java/at/asit/pdfover/signator/SigningState.java
+++ b/pdf-over-signator/src/main/java/at/asit/pdfover/signator/SigningState.java
@@ -49,4 +49,16 @@ public interface SigningState {
* @param connector the BKU connector
*/
public void setBKUConnector(BkuSlConnector connector);
+
+ /**
+ * Set the KeyStore signer
+ * @param file KeyStore filename
+ * @param alias KeyStore alias
+ * @param kspassword KeyStore password
+ * @param keypassword KeyStore private key password
+ * @param type KeyStore type
+ * @throws SignatureException
+ */
+ public void setKSSigner(String file, String alias, String kspassword,
+ String keypassword, String type) throws SignatureException;
}
diff --git a/pdf-over-signer/pdf-over-sigpdfas4/src/main/java/at/asit/pdfover/signer/pdfas/PdfAs4Signer.java b/pdf-over-signer/pdf-over-sigpdfas4/src/main/java/at/asit/pdfover/signer/pdfas/PdfAs4Signer.java
index efce1c6e..344c2e7e 100644
--- a/pdf-over-signer/pdf-over-sigpdfas4/src/main/java/at/asit/pdfover/signer/pdfas/PdfAs4Signer.java
+++ b/pdf-over-signer/pdf-over-sigpdfas4/src/main/java/at/asit/pdfover/signer/pdfas/PdfAs4Signer.java
@@ -23,6 +23,7 @@ import at.gv.egiz.pdfas.lib.api.Configuration;
import at.gv.egiz.pdfas.lib.api.IConfigurationConstants;
import at.gv.egiz.pdfas.lib.api.PdfAs;
import at.gv.egiz.pdfas.lib.api.PdfAsFactory;
+import at.gv.egiz.pdfas.lib.api.sign.IPlainSigner;
import at.gv.egiz.pdfas.lib.api.sign.SignParameter;
import at.gv.egiz.pdfas.sigs.pades.PAdESSigner;
import at.gv.egiz.sl.util.ISLConnector;
@@ -115,8 +116,16 @@ public class PdfAs4Signer implements Signer {
IConfigurationConstants.SL_REQUEST_TYPE_BASE64 :
IConfigurationConstants.SL_REQUEST_TYPE_UPLOAD);
- ISLConnector connector = new PdfAs4BKUSLConnector(sstate.getBKUConnector());
- param.setPlainSigner(new PAdESSigner(connector));
+ IPlainSigner signer;
+ if (sstate.hasBKUConnector()) {
+ ISLConnector connector = new PdfAs4BKUSLConnector(sstate.getBKUConnector());
+ signer = new PAdESSigner(connector);
+ } else if (sstate.hasKSSigner()) {
+ signer = sstate.getKSSigner();
+ } else {
+ throw new SignatureException("SigningState doesn't have a signer");
+ }
+ param.setPlainSigner(signer);
pdfas.sign(param);
diff --git a/pdf-over-signer/pdf-over-sigpdfas4/src/main/java/at/asit/pdfover/signer/pdfas/PdfAs4SigningState.java b/pdf-over-signer/pdf-over-sigpdfas4/src/main/java/at/asit/pdfover/signer/pdfas/PdfAs4SigningState.java
index ec2efdae..71be5577 100644
--- a/pdf-over-signer/pdf-over-sigpdfas4/src/main/java/at/asit/pdfover/signer/pdfas/PdfAs4SigningState.java
+++ b/pdf-over-signer/pdf-over-sigpdfas4/src/main/java/at/asit/pdfover/signer/pdfas/PdfAs4SigningState.java
@@ -21,8 +21,12 @@ import java.io.ByteArrayOutputStream;
import at.asit.pdfover.signator.BkuSlConnector;
import at.asit.pdfover.signator.SLRequest;
import at.asit.pdfover.signator.SLResponse;
+import at.asit.pdfover.signator.SignatureException;
import at.asit.pdfover.signator.SigningState;
+import at.gv.egiz.pdfas.common.exceptions.PDFASError;
+import at.gv.egiz.pdfas.lib.api.sign.IPlainSigner;
import at.gv.egiz.pdfas.lib.api.sign.SignParameter;
+import at.gv.egiz.pdfas.sigs.pades.PAdESSignerKeystore;
/**
* Signing State for PDFAS Wrapper
@@ -46,7 +50,9 @@ public class PdfAs4SigningState implements SigningState {
private ByteArrayOutputStream output;
- private BkuSlConnector connector;
+ private BkuSlConnector bkuconnector = null;
+
+ private IPlainSigner kssigner = null;
private boolean useBase64Request;
@@ -139,13 +145,47 @@ public class PdfAs4SigningState implements SigningState {
*/
@Override
public void setBKUConnector(BkuSlConnector connector) {
- this.connector = connector;
+ this.bkuconnector = connector;
+ }
+
+ /* (non-Javadoc)
+ * @see at.asit.pdfover.signator.SigningState#setKSSigner(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String)
+ */
+ @Override
+ public void setKSSigner(String file, String alias, String kspassword,
+ String keypassword, String type) throws SignatureException {
+ try {
+ this.kssigner = new PAdESSignerKeystore(file, alias, kspassword, keypassword, type);
+ } catch (PDFASError e) {
+ throw new SignatureException(e);
+ }
+ }
+
+ /**
+ * @return whether a BKU connector was set
+ */
+ public boolean hasBKUConnector() {
+ return this.bkuconnector != null;
}
/**
- * @return the connector
+ * @return the BKU connector
*/
public BkuSlConnector getBKUConnector() {
- return this.connector;
+ return this.bkuconnector;
+ }
+
+ /**
+ * @return whether a KS signer was set
+ */
+ public boolean hasKSSigner() {
+ return this.kssigner != null;
+ }
+
+ /**
+ * @return the KS signer
+ */
+ public IPlainSigner getKSSigner() {
+ return this.kssigner;
}
}