diff options
author | CGantert345 <57003061+CGantert345@users.noreply.github.com> | 2023-05-30 09:28:14 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-05-30 09:28:14 +0200 |
commit | 804b064202a8212bba0a1e2f69b66adc6336c575 (patch) | |
tree | 15610c6226033753cbc77a3d060bd834f85471af /src/main/java/org/uic/barcode/ssbFrame/SsbFrame.java | |
parent | Merge pull request #63 from irrationalism/bugfix/fix-productIdNum-range-v2 (diff) | |
parent | fix on productId in version 1 FCB (diff) | |
download | UIC-barcode-804b064202a8212bba0a1e2f69b66adc6336c575.tar UIC-barcode-804b064202a8212bba0a1e2f69b66adc6336c575.tar.gz UIC-barcode-804b064202a8212bba0a1e2f69b66adc6336c575.tar.bz2 UIC-barcode-804b064202a8212bba0a1e2f69b66adc6336c575.tar.lz UIC-barcode-804b064202a8212bba0a1e2f69b66adc6336c575.tar.xz UIC-barcode-804b064202a8212bba0a1e2f69b66adc6336c575.tar.zst UIC-barcode-804b064202a8212bba0a1e2f69b66adc6336c575.zip |
Diffstat (limited to 'src/main/java/org/uic/barcode/ssbFrame/SsbFrame.java')
-rw-r--r-- | src/main/java/org/uic/barcode/ssbFrame/SsbFrame.java | 25 |
1 files changed, 15 insertions, 10 deletions
diff --git a/src/main/java/org/uic/barcode/ssbFrame/SsbFrame.java b/src/main/java/org/uic/barcode/ssbFrame/SsbFrame.java index b473c1e..2c8f66f 100644 --- a/src/main/java/org/uic/barcode/ssbFrame/SsbFrame.java +++ b/src/main/java/org/uic/barcode/ssbFrame/SsbFrame.java @@ -1,6 +1,5 @@ package org.uic.barcode.ssbFrame; -import java.io.ByteArrayOutputStream; import java.io.IOException; import java.math.BigInteger; import java.security.InvalidKeyException; @@ -14,7 +13,6 @@ import java.security.SignatureException; import java.security.Provider.Service; import java.util.Arrays; - import org.uic.barcode.ticket.EncodingFormatException; import org.uic.barcode.utils.AlgorithmNameResolver; import org.uic.barcode.utils.SecurityUtils; @@ -83,7 +81,7 @@ public class SsbFrame { try { //check for non-standard signature encoding BigInteger[] bInts = SecurityUtils.decodeSignatureIntegerSequence(signatureBytes); - byte[] sig = SecurityUtils.encodeSignatureIntegerSequence(bInts[0],bInts[1]); + SecurityUtils.encodeSignatureIntegerSequence(bInts[0],bInts[1]); signaturePart1 = bInts[0].toByteArray(); signaturePart2 = bInts[1].toByteArray(); //decoding the entire signature was ok, so there was no split @@ -334,8 +332,20 @@ public class SsbFrame { //find the algorithm name for the signature OID String algo = null; + + BigInteger r = new BigInteger(1,signaturePart1); + BigInteger s = new BigInteger(1,signaturePart2); + byte[] signature = SecurityUtils.encodeSignatureIntegerSequence(r,s); + + String signatureAlgorithmOid = signingAlg; + + // guess the signature algorithm based on the signature size + if ((signingAlg == null || signingAlg.length() < 1) && signature != null) { + signatureAlgorithmOid = SecurityUtils.getDsaAlgorithm(signature); + } + if (prov != null) { - Service service = prov.getService("Signature",signingAlg); + Service service = prov.getService("Signature",signatureAlgorithmOid); if (service != null) { algo = service.getAlgorithm(); } @@ -343,7 +353,7 @@ public class SsbFrame { Provider[] provs = Security.getProviders(); for (Provider p : provs) { if (algo == null) { - Service service = p.getService("Signature",signingAlg); + Service service = p.getService("Signature",signatureAlgorithmOid); if (service != null) { algo = service.getAlgorithm(); } @@ -359,11 +369,6 @@ public class SsbFrame { sig.initVerify(key); sig.update(getDataForSignature()); - BigInteger r = new BigInteger(1,signaturePart1); - BigInteger s = new BigInteger(1,signaturePart2); - - byte[] signature = SecurityUtils.encodeSignatureIntegerSequence(r,s); - return sig.verify(signature); } |