diff options
| author | clemenso <clemenso@8a26b1a7-26f0-462f-b9ef-d0e30c41f5a4> | 2009-03-27 17:33:11 +0000 | 
|---|---|---|
| committer | clemenso <clemenso@8a26b1a7-26f0-462f-b9ef-d0e30c41f5a4> | 2009-03-27 17:33:11 +0000 | 
| commit | 616e06910051528674165319a1d6d161dff5859c (patch) | |
| tree | c5295e32d65bf5895b2b6c1e9662d5fe358091ce /BKULocal/src | |
| parent | 2a1df5e58e44f8d77f34eb80df74e8c0d27caceb (diff) | |
| download | mocca-616e06910051528674165319a1d6d161dff5859c.tar.gz mocca-616e06910051528674165319a1d6d161dff5859c.tar.bz2 mocca-616e06910051528674165319a1d6d161dff5859c.zip | |
1.1-RC6 (pinpad, pinmgmt, secureviewer)
git-svn-id: https://joinup.ec.europa.eu/svn/mocca/trunk@323 8a26b1a7-26f0-462f-b9ef-d0e30c41f5a4
Diffstat (limited to 'BKULocal/src')
4 files changed, 132 insertions, 71 deletions
| diff --git a/BKULocal/src/main/java/at/gv/egiz/bku/local/stal/BKUGuiProxy.java b/BKULocal/src/main/java/at/gv/egiz/bku/local/stal/BKUGuiProxy.java index 5a0ba84a..3f560967 100644 --- a/BKULocal/src/main/java/at/gv/egiz/bku/local/stal/BKUGuiProxy.java +++ b/BKULocal/src/main/java/at/gv/egiz/bku/local/stal/BKUGuiProxy.java @@ -144,4 +144,12 @@ public class BKUGuiProxy implements BKUGUIFacade {      showDialog();
      delegate.showMessageDialog(titleKey, msgKey);
    }
 +
 +  @Override
 +  public void showPinpadSignaturePINDialog(PINSpec pinSpec, int numRetries,
 +          ActionListener viewerListener, String viewerCommand) {
 +    showDialog();
 +    delegate.showPinpadSignaturePINDialog(pinSpec, numRetries,
 +            viewerListener, viewerCommand);
 +  }
  }
 diff --git a/BKULocal/src/main/java/at/gv/egiz/bku/local/stal/LocalBKUWorker.java b/BKULocal/src/main/java/at/gv/egiz/bku/local/stal/LocalBKUWorker.java index 61cc7c4c..a782de1a 100644 --- a/BKULocal/src/main/java/at/gv/egiz/bku/local/stal/LocalBKUWorker.java +++ b/BKULocal/src/main/java/at/gv/egiz/bku/local/stal/LocalBKUWorker.java @@ -37,7 +37,8 @@ public class LocalBKUWorker extends AbstractBKUWorker {    public LocalBKUWorker(BKUGUIFacade gui, JDialog container) {      super(gui);      this.container = container; -    addRequestHandler(SignRequest.class, new LocalSignRequestHandler()); +    addRequestHandler(SignRequest.class,  +            new LocalSignRequestHandler(new LocalSecureViewer(gui)));    }    @Override diff --git a/BKULocal/src/main/java/at/gv/egiz/bku/local/stal/LocalSecureViewer.java b/BKULocal/src/main/java/at/gv/egiz/bku/local/stal/LocalSecureViewer.java new file mode 100644 index 00000000..cbe5af7a --- /dev/null +++ b/BKULocal/src/main/java/at/gv/egiz/bku/local/stal/LocalSecureViewer.java @@ -0,0 +1,109 @@ + +package at.gv.egiz.bku.local.stal; + +import at.gv.egiz.bku.slcommands.impl.DataObjectHashDataInput; +import at.gv.egiz.bku.smccstal.SecureViewer; +import java.io.IOException; +import java.util.ArrayList; + +import at.gv.egiz.bku.gui.BKUGUIFacade; +import at.gv.egiz.stal.HashDataInput; +import at.gv.egiz.stal.impl.ByteArrayHashDataInput; +import at.gv.egiz.stal.signedinfo.ReferenceType; +import at.gv.egiz.stal.signedinfo.SignedInfoType; +import java.awt.event.ActionListener; +import java.io.ByteArrayOutputStream; +import java.io.InputStream; +import java.util.Collections; +import java.util.List; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +public class LocalSecureViewer implements SecureViewer { + +  private static final Log log = LogFactory.getLog(LocalSignRequestHandler.class); +  private List<HashDataInput> hashDataInputs = Collections.EMPTY_LIST; + +  protected BKUGUIFacade gui; + +  public LocalSecureViewer(BKUGUIFacade gui) { +    this.gui = gui; +  } + +  public void setDataToBeSigned(List<HashDataInput> dataToBeSigned) { +    this.hashDataInputs = dataToBeSigned; +  } + +  /** +   * +   * @param dsigReferences +   * @throws java.lang.Exception +   */ +  @Override +  public void displayDataToBeSigned(SignedInfoType signedInfo, +          ActionListener okListener, String okCommand) +          throws Exception { +    if (signedInfo.getReference().size() == 0) { +      log.error("No hashdata input selected to be displayed: null"); +      throw new Exception("No HashData Input selected to be displayed"); +    } + +    ArrayList<HashDataInput> selectedHashDataInputs = new ArrayList<HashDataInput>(); +    for (ReferenceType dsigRef : signedInfo.getReference()) { +      // don't get Manifest, QualifyingProperties, ... +      if (dsigRef.getType() == null) { +        String dsigRefId = dsigRef.getId(); +        if (dsigRefId != null) { +          boolean hdiAvailable = false; +          for (HashDataInput hashDataInput : hashDataInputs) { +            if (dsigRefId.equals(hashDataInput.getReferenceId())) { +              log.debug("display hashdata input for dsig:SignedReference " + +                      dsigRefId); +              selectedHashDataInputs.add( +                      ensureCachedHashDataInput(hashDataInput)); +              hdiAvailable = true; +              break; +            } +          } +          if (!hdiAvailable) { +            log.error("no hashdata input for dsig:SignedReference " + dsigRefId); +            throw new Exception( +              "No HashDataInput available for dsig:SignedReference " + dsigRefId); +          } +        } else { +          throw new Exception( +            "Cannot get HashDataInput for dsig:Reference without Id attribute"); +        } +      } +    } + +    if (selectedHashDataInputs.size() < 1) { +      log.error("dsig:SignedInfo does not contain a data reference"); +      throw new Exception("dsig:SignedInfo does not contain a data reference"); +    } +    gui.showSecureViewer(selectedHashDataInputs, okListener, okCommand); +  } + + +  private HashDataInput ensureCachedHashDataInput(HashDataInput hashDataInput) +          throws IOException { +    if (!(hashDataInput instanceof DataObjectHashDataInput)) { +       +      log.warn("expected DataObjectHashDataInput for LocalSignRequestHandler, got " + +              hashDataInput.getClass().getName()); + +      InputStream hdIs = hashDataInput.getHashDataInput(); +      ByteArrayOutputStream baos = new ByteArrayOutputStream(hdIs.available()); +      int b; +      while ((b = hdIs.read()) != -1) { +        baos.write(b); +      } +      hashDataInput = new ByteArrayHashDataInput(baos.toByteArray(), +              hashDataInput.getReferenceId(), +              hashDataInput.getMimeType(), +              hashDataInput.getEncoding()); +    } +    return hashDataInput; +  } + +} diff --git a/BKULocal/src/main/java/at/gv/egiz/bku/local/stal/LocalSignRequestHandler.java b/BKULocal/src/main/java/at/gv/egiz/bku/local/stal/LocalSignRequestHandler.java index 531e6591..492b8a05 100644 --- a/BKULocal/src/main/java/at/gv/egiz/bku/local/stal/LocalSignRequestHandler.java +++ b/BKULocal/src/main/java/at/gv/egiz/bku/local/stal/LocalSignRequestHandler.java @@ -16,9 +16,7 @@   */  package at.gv.egiz.bku.local.stal; -import at.gv.egiz.bku.slcommands.impl.DataObjectHashDataInput; -import java.io.IOException; -import java.util.ArrayList; +import at.gv.egiz.bku.smccstal.SecureViewer;  import java.util.Collections;  import java.util.List; @@ -40,9 +38,16 @@ import java.io.InputStream;   * @author clemens   */  public class LocalSignRequestHandler extends SignRequestHandler { +//        implements SecureViewer {    private static final Log log = LogFactory.getLog(LocalSignRequestHandler.class); -  private List<HashDataInput> hashDataInputs = Collections.EMPTY_LIST; + +  protected LocalSecureViewer secureViewer; + +  public LocalSignRequestHandler(LocalSecureViewer secureViewer) { +    super(secureViewer); +  } +    /**     * If the request is a SIGN request, it contains a list of DataObjectHashDataInput  @@ -53,75 +58,13 @@ public class LocalSignRequestHandler extends SignRequestHandler {     */    @SuppressWarnings("unchecked")    @Override -  public STALResponse handleRequest(STALRequest request) throws InterruptedException { +  public STALResponse handleRequest(STALRequest request)  +          throws InterruptedException { +          if (request instanceof SignRequest) {        SignRequest signReq = (SignRequest) request; -      hashDataInputs = signReq.getHashDataInput(); +      secureViewer.setDataToBeSigned(signReq.getHashDataInput());      }      return super.handleRequest(request);    } - -  /** -   *  -   * @param dsigReferences -   * @throws java.lang.Exception -   */ -  @Override -  public void displayDataToBeSigned(List<ReferenceType> dsigReferences) throws Exception { -    if (dsigReferences == null || dsigReferences.size() < 1) { -      log.error("No hashdata input selected to be displayed: null"); -      throw new Exception("No HashData Input selected to be displayed"); -    } - -    ArrayList<HashDataInput> selectedHashDataInputs = new ArrayList<HashDataInput>(); -    for (ReferenceType dsigRef : dsigReferences) { -      // don't get Manifest, QualifyingProperties, ... -      if (dsigRef.getType() == null) { -        String dsigRefId = dsigRef.getId(); -        if (dsigRefId != null) { -          boolean hdiAvailable = false; -          for (HashDataInput hashDataInput : hashDataInputs) { -            if (dsigRefId.equals(hashDataInput.getReferenceId())) { -              log.debug("display hashdata input for dsig:SignedReference " + dsigRefId); -              if (!(hashDataInput instanceof DataObjectHashDataInput)) { -                log.warn( -                  "expected DataObjectHashDataInput for LocalSignRequestHandler, got " + hashDataInput.getClass().getName()); -                hashDataInput = getByteArrayHashDataInput(hashDataInput); -              } -              selectedHashDataInputs.add(hashDataInput); -              hdiAvailable = true; -              break; -            } -          } -          if (!hdiAvailable) { -            log.error("no hashdata input for dsig:SignedReference " + dsigRefId); -            throw new Exception( -              "No HashDataInput available for dsig:SignedReference " + dsigRefId); -          } -        } else { -          throw new Exception( -            "Cannot get HashDataInput for dsig:Reference without Id attribute"); -        } -      } -    } - -    if (selectedHashDataInputs.size() < 1) { -      log.error("dsig:SignedInfo does not contain a data reference"); -      throw new Exception("dsig:SignedInfo does not contain a data reference"); -    } -    gui.showSecureViewer(selectedHashDataInputs, this, "hashDataDone"); -  } - -  private ByteArrayHashDataInput getByteArrayHashDataInput(HashDataInput hashDataInput) throws IOException { - -    InputStream hdIs = hashDataInput.getHashDataInput(); -    ByteArrayOutputStream baos = new ByteArrayOutputStream(hdIs.available()); -    int b; -    while ((b = hdIs.read()) != -1) { -      baos.write(b); -    } -    ByteArrayHashDataInput hdi = new ByteArrayHashDataInput(baos.toByteArray(), hashDataInput.getReferenceId(), hashDataInput.getMimeType(), hashDataInput.getEncoding()); - -    return hdi; -  }  } | 
