diff options
Diffstat (limited to 'moaSig/moa-sig-lib/src/main/java/at/gv/egovernment/moa/spss/server/invoke')
-rw-r--r-- | moaSig/moa-sig-lib/src/main/java/at/gv/egovernment/moa/spss/server/invoke/CMSSignatureCreationInvoker.java | 40 |
1 files changed, 31 insertions, 9 deletions
diff --git a/moaSig/moa-sig-lib/src/main/java/at/gv/egovernment/moa/spss/server/invoke/CMSSignatureCreationInvoker.java b/moaSig/moa-sig-lib/src/main/java/at/gv/egovernment/moa/spss/server/invoke/CMSSignatureCreationInvoker.java index 718673a..df04434 100644 --- a/moaSig/moa-sig-lib/src/main/java/at/gv/egovernment/moa/spss/server/invoke/CMSSignatureCreationInvoker.java +++ b/moaSig/moa-sig-lib/src/main/java/at/gv/egovernment/moa/spss/server/invoke/CMSSignatureCreationInvoker.java @@ -50,6 +50,8 @@ import java.util.List; import java.util.Map; import java.util.Set; +import org.apache.commons.io.IOUtils; + import at.gv.egovernment.moa.logging.LogMsg; import at.gv.egovernment.moa.logging.Logger; import at.gv.egovernment.moa.spss.MOAApplicationException; @@ -71,6 +73,7 @@ import at.gv.egovernment.moa.spss.server.iaik.cmssign.CMSSignatureCreationProfil import at.gv.egovernment.moa.spss.server.logging.TransactionId; import at.gv.egovernment.moa.spss.server.transaction.TransactionContext; import at.gv.egovernment.moa.spss.server.transaction.TransactionContextManager; +import at.gv.egovernment.moa.spss.util.FilteredOutputStream; import at.gv.egovernment.moa.spss.util.MessageProvider; import at.gv.egovernment.moa.util.Constants; @@ -238,25 +241,44 @@ public class CMSSignatureCreationInvoker { // now write the data to be signed to the signedDataStream + // int byteRead; + /* BigDecimal counter = new BigDecimal("0"); BigDecimal one = new BigDecimal("1"); + ByteArrayOutputStream filteredStream = new ByteArrayOutputStream(); + while ((byteRead=contentIs.read()) >= 0) { //System.out.println("counterXX: " + counter); - if (inRange(counter, dataobject)) { - //System.out.println("Lösche..."); - // set byte to 0x00 - signedDataStream.write(0); - } - else - signedDataStream.write(byteRead); + // Wrong behaviour < 3 + // excluded bytes should not be part of the signature as 0 bytes + // they should be not part of the signature at all! + +// if (inRange(counter, dataobject)) +// filteredStream.write(0); +// else +// filteredStream.write(byteRead); +// - counter = counter.add(one); + // correct behaviour + if (!inRange(counter, dataobject)) { + filteredStream.write(byteRead); + } + + counter = counter.add(one); } + byte[] data = filteredStream.toByteArray(); + signedDataStream.write(data, 0, data.length); + */ + // Stream based, this should have a better performance + FilteredOutputStream filteredOuputStream = new FilteredOutputStream( + signedDataStream, 4096, dataobject.getExcludeByteRangeFrom(), + dataobject.getExcludeByteRangeTo()); - + IOUtils.copyLarge(contentIs, filteredOuputStream); + filteredOuputStream.flush(); // byte[] buf = new byte[4096]; // int bytesRead; // while ((bytesRead = contentIs.read(buf)) >= 0) { |