From 7ec06722923d96d2e51300bafb44b920ca341d58 Mon Sep 17 00:00:00 2001 From: CGantert345 <57003061+CGantert345@users.noreply.github.com> Date: Fri, 10 Mar 2023 16:49:58 +0100 Subject: ssb unit tests --- .../uic/barcode/test/SsbFrameBarcodeTestGroup.java | 220 ++++++++++++++++++++ .../barcode/test/SsbFrameBarcodeTestNonUic.java | 207 +++++++++++++++++++ .../uic/barcode/test/SsbFrameBarcodeTestNrt.java | 214 ++++++++++++++++++++ .../uic/barcode/test/SsbFrameBarcodeTestPass.java | 215 ++++++++++++++++++++ .../test/SsbFrameBarcodeTestReservation.java | 222 +++++++++++++++++++++ .../uic/barcode/test/utils/SsbTicketFactory.java | 193 ++++++++++++++++++ 6 files changed, 1271 insertions(+) create mode 100644 src/test/java/org/uic/barcode/test/SsbFrameBarcodeTestGroup.java create mode 100644 src/test/java/org/uic/barcode/test/SsbFrameBarcodeTestNonUic.java create mode 100644 src/test/java/org/uic/barcode/test/SsbFrameBarcodeTestNrt.java create mode 100644 src/test/java/org/uic/barcode/test/SsbFrameBarcodeTestPass.java create mode 100644 src/test/java/org/uic/barcode/test/SsbFrameBarcodeTestReservation.java create mode 100644 src/test/java/org/uic/barcode/test/utils/SsbTicketFactory.java (limited to 'src/test/java/org/uic') diff --git a/src/test/java/org/uic/barcode/test/SsbFrameBarcodeTestGroup.java b/src/test/java/org/uic/barcode/test/SsbFrameBarcodeTestGroup.java new file mode 100644 index 0000000..f6ec58b --- /dev/null +++ b/src/test/java/org/uic/barcode/test/SsbFrameBarcodeTestGroup.java @@ -0,0 +1,220 @@ +package org.uic.barcode.test; + +import java.io.IOException; +import java.security.InvalidAlgorithmParameterException; +import java.security.InvalidKeyException; +import java.security.KeyPair; +import java.security.KeyPairGenerator; +import java.security.NoSuchAlgorithmException; +import java.security.NoSuchProviderException; +import java.security.SecureRandom; +import java.security.Security; +import java.security.SignatureException; +import java.util.zip.DataFormatException; + +import org.bouncycastle.jce.provider.BouncyCastleProvider; +import org.junit.Before; +import org.junit.Test; +import org.uic.barcode.Decoder; +import org.uic.barcode.Encoder; +import org.uic.barcode.dynamicFrame.Constants; +import org.uic.barcode.logger.LoggerFactory; +import org.uic.barcode.ssbFrame.SsbFrame; +import org.uic.barcode.test.utils.SsbTicketFactory; +import org.uic.barcode.ticket.EncodingFormatException; + +/** + * The Class StaticFrameBarcodeTest. + */ +public class SsbFrameBarcodeTestGroup { + + /** The algorithm OID. */ + public String algorithmOID = Constants.DSA_SHA224; + + public int keySize = 2048; + + /** The key pair. */ + public KeyPair keyPair = null; + + + public SsbFrame ssbFrame = null; + + + /** + * Initialize. + * + * set the signature algorithm + * generate a key pair + * set the test content + * for ticket and layout + */ + @Before public void initialize() { + + LoggerFactory.setActivateConsoleLog(true); + + algorithmOID = Constants.DSA_SHA224; + keySize = 1024; + + Security.addProvider(new BouncyCastleProvider()); + + try { + keyPair = generateDSAKeys(keySize); + } catch (NoSuchAlgorithmException | NoSuchProviderException | InvalidAlgorithmParameterException e) { + e.printStackTrace(); + } + + assert(keyPair != null); + + } + + + + + + /** + * Test ssb pass encoding. + */ + @Test public void testSsbEncoding() { + + + Encoder enc = null; + + try { + enc = new Encoder(null, null, Encoder.UIC_BARCODE_TYPE_SSB, 0, 0); + } catch (IOException | EncodingFormatException e1) { + assert(false); + } + + enc.setSsbFrame(SsbTicketFactory.getSsbGroup()); + + assert(enc != null); + + try { + enc.signLevel1("1080", keyPair.getPrivate(), algorithmOID, "1"); + } catch (Exception e) { + assert(false); + } + + byte[] encoded = null; + try { + encoded = enc.encode(); + } catch (Exception e) { + assert(false); + } + + assert(encoded != null); + + assert(encoded.length == 114); + + } + + /** + * Test ssb barcode decoding. + */ + @Test public void testSsbDecoding() { + + + + + Encoder enc = null; + + try { + enc = new Encoder(null, null, Encoder.UIC_BARCODE_TYPE_SSB, 1, 0); + } catch (IOException | EncodingFormatException e1) { + assert(false); + } + + enc.setSsbFrame( SsbTicketFactory.getSsbGroup()); + + assert(enc != null); + + try { + enc.signLevel1("4711", keyPair.getPrivate(), algorithmOID, "1"); + } catch (Exception e) { + assert(false); + } + + + byte[] encoded = null; + try { + encoded = enc.encode(); + } catch (Exception e) { + assert(false); + } + + assert(encoded != null); + + Decoder dec = null; + try { + dec = new Decoder(encoded); + } catch (IOException e) { + assert(false); + } catch (EncodingFormatException e) { + assert(false); + } catch (DataFormatException e) { + assert(false); + } + assert(dec != null); + + int signatureCheck = 0; + try { + signatureCheck = dec.validateLevel1(keyPair.getPublic(),algorithmOID); + } catch (InvalidKeyException | NoSuchAlgorithmException | SignatureException | IllegalArgumentException + | UnsupportedOperationException | IOException | EncodingFormatException e) { + assert(false); + } + + assert(signatureCheck == Constants.LEVEL1_VALIDATION_OK); + + assert(dec.getSsbFrame() != null); + + assert(dec.getSsbFrame().getHeader() != null); + + SsbFrame ref = SsbTicketFactory.getSsbGroup(); + + assert(dec.getSsbFrame().getHeader().getKeyId() == 1); + assert(dec.getSsbFrame().getHeader().getIssuer() == 4711); + assert(dec.getSsbFrame().getHeader().getTicketType().equals(ref.getHeader().getTicketType())); + assert(dec.getSsbFrame().getHeader().getVersion() == 1); + + assert(dec.getSsbFrame().getGroupData() != null); + + assert(dec.getSsbFrame().getGroupData().getClassCode().equals(ref.getGroupData().getClassCode())); + assert(dec.getSsbFrame().getGroupData().isSpecimen() == ref.getGroupData().isSpecimen()); + assert(dec.getSsbFrame().getGroupData().getFirstDayOfValidity() == ref.getGroupData().getFirstDayOfValidity()); + assert(dec.getSsbFrame().getGroupData().getLastDayOfValidity() == ref.getGroupData().getLastDayOfValidity()); + + + assert(dec.getSsbFrame().getGroupData().getStations() != null); + + SsbTicketFactory.compareStations(dec.getSsbFrame().getGroupData().getStations(), ref.getGroupData().getStations()); + + SsbTicketFactory.compareCommonTicketPart(dec.getSsbFrame().getGroupData(), ref.getGroupData()); + + + assert(dec.getSsbFrame().getGroupData().getFirstDayOfValidity() == ref.getGroupData().getFirstDayOfValidity()); + assert(dec.getSsbFrame().getGroupData().getLastDayOfValidity() == ref.getGroupData().getLastDayOfValidity()); + + assert(dec.getSsbFrame().getGroupData().getInfoCode() == ref.getGroupData().getInfoCode()); + assert(dec.getSsbFrame().getGroupData().getText().equalsIgnoreCase(ref.getGroupData().getText())); + + assert(dec.getSsbFrame().getGroupData().getCounterMarkNumber() == ref.getGroupData().getCounterMarkNumber()); + assert(dec.getSsbFrame().getGroupData().getGroupName().equalsIgnoreCase(ref.getGroupData().getGroupName())); + + } + + /** + * Generate DSA keys. + * + * @return the key pair + * @throws NoSuchAlgorithmException the no such algorithm exception + * @throws NoSuchProviderException the no such provider exception + * @throws InvalidAlgorithmParameterException the invalid algorithm parameter exception + */ + public KeyPair generateDSAKeys(int keySize) throws NoSuchAlgorithmException, NoSuchProviderException, InvalidAlgorithmParameterException{ + KeyPairGenerator g = KeyPairGenerator.getInstance("DSA", "BC"); + g.initialize(keySize, new SecureRandom()); + return g.generateKeyPair(); + } + +} diff --git a/src/test/java/org/uic/barcode/test/SsbFrameBarcodeTestNonUic.java b/src/test/java/org/uic/barcode/test/SsbFrameBarcodeTestNonUic.java new file mode 100644 index 0000000..2a28d80 --- /dev/null +++ b/src/test/java/org/uic/barcode/test/SsbFrameBarcodeTestNonUic.java @@ -0,0 +1,207 @@ +package org.uic.barcode.test; + +import java.io.IOException; +import java.security.InvalidAlgorithmParameterException; +import java.security.InvalidKeyException; +import java.security.KeyPair; +import java.security.KeyPairGenerator; +import java.security.NoSuchAlgorithmException; +import java.security.NoSuchProviderException; +import java.security.SecureRandom; +import java.security.Security; +import java.security.SignatureException; +import java.util.zip.DataFormatException; + +import org.bouncycastle.jce.provider.BouncyCastleProvider; +import org.junit.Before; +import org.junit.Test; +import org.uic.barcode.Decoder; +import org.uic.barcode.Encoder; +import org.uic.barcode.dynamicFrame.Constants; +import org.uic.barcode.logger.LoggerFactory; +import org.uic.barcode.ssbFrame.SsbFrame; +import org.uic.barcode.test.utils.SsbTicketFactory; +import org.uic.barcode.ticket.EncodingFormatException; + +/** + * The Class StaticFrameBarcodeTest. + */ +public class SsbFrameBarcodeTestNonUic { + + /** The algorithm OID. */ + public String algorithmOID = Constants.DSA_SHA224; + + public int keySize = 2048; + + /** The key pair. */ + public KeyPair keyPair = null; + + + public SsbFrame ssbFrame = null; + + + /** + * Initialize. + * + * set the signature algorithm + * generate a key pair + * set the test content + * for ticket and layout + */ + @Before public void initialize() { + + LoggerFactory.setActivateConsoleLog(true); + + algorithmOID = Constants.DSA_SHA224; + keySize = 1024; + + Security.addProvider(new BouncyCastleProvider()); + + try { + keyPair = generateDSAKeys(keySize); + } catch (NoSuchAlgorithmException | NoSuchProviderException | InvalidAlgorithmParameterException e) { + e.printStackTrace(); + } + + assert(keyPair != null); + + } + + + + + + /** + * Test ssb pass encoding. + */ + @Test public void testSsbEncoding() { + + + Encoder enc = null; + + try { + enc = new Encoder(null, null, Encoder.UIC_BARCODE_TYPE_SSB, 0, 0); + } catch (IOException | EncodingFormatException e1) { + assert(false); + } + + enc.setSsbFrame(SsbTicketFactory.getSsbNonUic()); + + assert(enc != null); + + try { + enc.signLevel1("1080", keyPair.getPrivate(), algorithmOID, "1"); + } catch (Exception e) { + assert(false); + } + + byte[] encoded = null; + try { + encoded = enc.encode(); + } catch (Exception e) { + assert(false); + } + + assert(encoded != null); + + assert(encoded.length == 114); + + } + + /** + * Test dynamic header barcode decoding. + */ + @Test public void testSsbDecoding() { + + + + + Encoder enc = null; + + try { + enc = new Encoder(null, null, Encoder.UIC_BARCODE_TYPE_SSB, 1, 0); + } catch (IOException | EncodingFormatException e1) { + assert(false); + } + + enc.setSsbFrame( SsbTicketFactory.getSsbNonUic()); + + assert(enc != null); + + try { + enc.signLevel1("4711", keyPair.getPrivate(), algorithmOID, "1"); + } catch (Exception e) { + assert(false); + } + + + byte[] encoded = null; + try { + encoded = enc.encode(); + } catch (Exception e) { + assert(false); + } + + assert(encoded != null); + + Decoder dec = null; + try { + dec = new Decoder(encoded); + } catch (IOException e) { + assert(false); + } catch (EncodingFormatException e) { + assert(false); + } catch (DataFormatException e) { + assert(false); + } + assert(dec != null); + + int signatureCheck = 0; + try { + signatureCheck = dec.validateLevel1(keyPair.getPublic(),algorithmOID); + } catch (InvalidKeyException | NoSuchAlgorithmException | SignatureException | IllegalArgumentException + | UnsupportedOperationException | IOException | EncodingFormatException e) { + assert(false); + } + + assert(signatureCheck == Constants.LEVEL1_VALIDATION_OK); + + assert(dec.getSsbFrame() != null); + + assert(dec.getSsbFrame().getHeader() != null); + + SsbFrame ref = SsbTicketFactory.getSsbNonUic(); + + assert(dec.getSsbFrame().getHeader().getKeyId() == 1); + assert(dec.getSsbFrame().getHeader().getIssuer() == 4711); + assert(dec.getSsbFrame().getHeader().getTicketType().equals(ref.getHeader().getTicketType())); + assert(dec.getSsbFrame().getHeader().getVersion() == 1); + + assert(dec.getSsbFrame().getNonUicData() != null); + + assert(dec.getSsbFrame().getNonUicData().getOpenData() != null); + + + + for (int i = 0; i < ref.getNonUicData().getOpenData().length; i++) { + assert (dec.getSsbFrame().getNonUicData().getOpenData()[i] == (ref.getNonUicData().getOpenData())[i] ); + } + + + } + + /** + * Generate DSA keys. + * + * @return the key pair + * @throws NoSuchAlgorithmException the no such algorithm exception + * @throws NoSuchProviderException the no such provider exception + * @throws InvalidAlgorithmParameterException the invalid algorithm parameter exception + */ + public KeyPair generateDSAKeys(int keySize) throws NoSuchAlgorithmException, NoSuchProviderException, InvalidAlgorithmParameterException{ + KeyPairGenerator g = KeyPairGenerator.getInstance("DSA", "BC"); + g.initialize(keySize, new SecureRandom()); + return g.generateKeyPair(); + } + +} diff --git a/src/test/java/org/uic/barcode/test/SsbFrameBarcodeTestNrt.java b/src/test/java/org/uic/barcode/test/SsbFrameBarcodeTestNrt.java new file mode 100644 index 0000000..2000ee1 --- /dev/null +++ b/src/test/java/org/uic/barcode/test/SsbFrameBarcodeTestNrt.java @@ -0,0 +1,214 @@ +package org.uic.barcode.test; + +import java.io.IOException; +import java.security.InvalidAlgorithmParameterException; +import java.security.InvalidKeyException; +import java.security.KeyPair; +import java.security.KeyPairGenerator; +import java.security.NoSuchAlgorithmException; +import java.security.NoSuchProviderException; +import java.security.SecureRandom; +import java.security.Security; +import java.security.SignatureException; +import java.util.zip.DataFormatException; + +import org.bouncycastle.jce.provider.BouncyCastleProvider; +import org.junit.Before; +import org.junit.Test; +import org.uic.barcode.Decoder; +import org.uic.barcode.Encoder; +import org.uic.barcode.dynamicFrame.Constants; +import org.uic.barcode.logger.LoggerFactory; +import org.uic.barcode.ssbFrame.SsbFrame; +import org.uic.barcode.test.utils.SsbTicketFactory; +import org.uic.barcode.ticket.EncodingFormatException; + +/** + * The Class StaticFrameBarcodeTest. + */ +public class SsbFrameBarcodeTestNrt { + + /** The algorithm OID. */ + public String algorithmOID = Constants.DSA_SHA224; + + public int keySize = 1024; + + /** The key pair. */ + public KeyPair keyPair = null; + + + public SsbFrame ssbFrame = null; + + + /** + * Initialize. + * + * set the signature algorithm + * generate a key pair + * set the test content + * for ticket and layout + */ + @Before public void initialize() { + + LoggerFactory.setActivateConsoleLog(true); + + algorithmOID = Constants.DSA_SHA224; + keySize = 1024; + + Security.addProvider(new BouncyCastleProvider()); + + try { + keyPair = generateDSAKeys(keySize); + } catch (NoSuchAlgorithmException | NoSuchProviderException | InvalidAlgorithmParameterException e) { + e.printStackTrace(); + } + + assert(keyPair != null); + + } + + + + + + /** + * Test ssb pass encoding. + */ + @Test public void testSsbEncoding() { + + + Encoder enc = null; + + try { + enc = new Encoder(null, null, Encoder.UIC_BARCODE_TYPE_SSB, 0, 0); + } catch (IOException | EncodingFormatException e1) { + assert(false); + } + + enc.setSsbFrame(SsbTicketFactory.getSsbNonReservation()); + + assert(enc != null); + + try { + enc.signLevel1("1080", keyPair.getPrivate(), algorithmOID, "1"); + } catch (Exception e) { + assert(false); + } + + byte[] encoded = null; + try { + encoded = enc.encode(); + } catch (Exception e) { + assert(false); + } + + assert(encoded != null); + + assert(encoded.length == 114); + + } + + /** + * Test dynamic header barcode decoding. + */ + @Test public void testSsbDecoding() { + + + + + Encoder enc = null; + + try { + enc = new Encoder(null, null, Encoder.UIC_BARCODE_TYPE_SSB, 1, 0); + } catch (IOException | EncodingFormatException e1) { + assert(false); + } + + enc.setSsbFrame( SsbTicketFactory.getSsbNonReservation()); + + assert(enc != null); + + try { + enc.signLevel1("4711", keyPair.getPrivate(), algorithmOID, "1"); + } catch (Exception e) { + assert(false); + } + + + byte[] encoded = null; + try { + encoded = enc.encode(); + } catch (Exception e) { + assert(false); + } + + assert(encoded != null); + + Decoder dec = null; + try { + dec = new Decoder(encoded); + } catch (IOException e) { + assert(false); + } catch (EncodingFormatException e) { + assert(false); + } catch (DataFormatException e) { + assert(false); + } + assert(dec != null); + + int signatureCheck = 0; + try { + signatureCheck = dec.validateLevel1(keyPair.getPublic(),algorithmOID); + } catch (InvalidKeyException | NoSuchAlgorithmException | SignatureException | IllegalArgumentException + | UnsupportedOperationException | IOException | EncodingFormatException e) { + assert(false); + } + + assert(signatureCheck == Constants.LEVEL1_VALIDATION_OK); + + assert(dec.getSsbFrame() != null); + + assert(dec.getSsbFrame().getHeader() != null); + + SsbFrame ref = SsbTicketFactory.getSsbNonReservation(); + + assert(dec.getSsbFrame().getHeader().getKeyId() == 1); + assert(dec.getSsbFrame().getHeader().getIssuer() == 4711); + assert(dec.getSsbFrame().getHeader().getTicketType().equals(ref.getHeader().getTicketType())); + assert(dec.getSsbFrame().getHeader().getVersion() == 1); + + assert(dec.getSsbFrame().getNonReservationData() != null); + + assert(dec.getSsbFrame().getNonReservationData().getClassCode().equals(ref.getNonReservationData().getClassCode())); + assert(dec.getSsbFrame().getNonReservationData().isSpecimen() == ref.getNonReservationData().isSpecimen()); + assert(dec.getSsbFrame().getNonReservationData().getFirstDayOfValidity() == ref.getNonReservationData().getFirstDayOfValidity()); + assert(dec.getSsbFrame().getNonReservationData().getLastDayOfValidity() == ref.getNonReservationData().getLastDayOfValidity()); + + + assert(dec.getSsbFrame().getNonReservationData().getStations() != null); + + SsbTicketFactory.compareStations(dec.getSsbFrame().getNonReservationData().getStations(), ref.getNonReservationData().getStations()); + + SsbTicketFactory.compareCommonTicketPart(dec.getSsbFrame().getNonReservationData(), ref.getNonReservationData()); + + + assert(dec.getSsbFrame().getNonReservationData().getInfoCode() == ref.getNonReservationData().getInfoCode()); + assert(dec.getSsbFrame().getNonReservationData().getText().equalsIgnoreCase(ref.getNonReservationData().getText())); + + } + + /** + * Generate DSA keys. + * + * @return the key pair + * @throws NoSuchAlgorithmException the no such algorithm exception + * @throws NoSuchProviderException the no such provider exception + * @throws InvalidAlgorithmParameterException the invalid algorithm parameter exception + */ + public KeyPair generateDSAKeys(int keySize) throws NoSuchAlgorithmException, NoSuchProviderException, InvalidAlgorithmParameterException{ + KeyPairGenerator g = KeyPairGenerator.getInstance("DSA", "BC"); + g.initialize(keySize, new SecureRandom()); + return g.generateKeyPair(); + } + +} diff --git a/src/test/java/org/uic/barcode/test/SsbFrameBarcodeTestPass.java b/src/test/java/org/uic/barcode/test/SsbFrameBarcodeTestPass.java new file mode 100644 index 0000000..dd2101a --- /dev/null +++ b/src/test/java/org/uic/barcode/test/SsbFrameBarcodeTestPass.java @@ -0,0 +1,215 @@ +package org.uic.barcode.test; + +import java.io.IOException; +import java.security.InvalidAlgorithmParameterException; +import java.security.InvalidKeyException; +import java.security.KeyPair; +import java.security.KeyPairGenerator; +import java.security.NoSuchAlgorithmException; +import java.security.NoSuchProviderException; +import java.security.SecureRandom; +import java.security.Security; +import java.security.SignatureException; +import java.util.zip.DataFormatException; + +import org.bouncycastle.jce.provider.BouncyCastleProvider; +import org.junit.Before; +import org.junit.Test; +import org.uic.barcode.Decoder; +import org.uic.barcode.Encoder; +import org.uic.barcode.dynamicFrame.Constants; +import org.uic.barcode.logger.LoggerFactory; +import org.uic.barcode.ssbFrame.SsbFrame; +import org.uic.barcode.test.utils.SsbTicketFactory; +import org.uic.barcode.ticket.EncodingFormatException; + +/** + * The Class StaticFrameBarcodeTest. + */ +public class SsbFrameBarcodeTestPass { + + /** The algorithm OID. */ + public String algorithmOID = Constants.DSA_SHA224; + + public int keySize = 1024; + + /** The key pair. */ + public KeyPair keyPair = null; + + + public SsbFrame ssbFrame = null; + + + /** + * Initialize. + * + * set the signature algorithm + * generate a key pair + * set the test content + * for ticket and layout + */ + @Before public void initialize() { + + LoggerFactory.setActivateConsoleLog(true); + + algorithmOID = Constants.DSA_SHA224; + keySize = 1024; + + Security.addProvider(new BouncyCastleProvider()); + + try { + keyPair = generateDSAKeys(keySize); + } catch (NoSuchAlgorithmException | NoSuchProviderException | InvalidAlgorithmParameterException e) { + e.printStackTrace(); + } + + assert(keyPair != null); + + } + + + + + + /** + * Test ssb pass encoding. + */ + @Test public void testSsbPassEncoding() { + + + Encoder enc = null; + + try { + enc = new Encoder(null, null, Encoder.UIC_BARCODE_TYPE_SSB, 0, 0); + } catch (IOException | EncodingFormatException e1) { + assert(false); + } + + enc.setSsbFrame(SsbTicketFactory.getSsbPass()); + + assert(enc != null); + + try { + enc.signLevel1("1080", keyPair.getPrivate(), algorithmOID, "1"); + } catch (Exception e) { + assert(false); + } + + byte[] encoded = null; + try { + encoded = enc.encode(); + } catch (Exception e) { + assert(false); + } + + assert(encoded != null); + + assert(encoded.length == 114); + + } + + /** + * Test dynamic header barcode decoding. + */ + @Test public void testSsbPassDecoding() { + + + + + Encoder enc = null; + + try { + enc = new Encoder(null, null, Encoder.UIC_BARCODE_TYPE_SSB, 1, 0); + } catch (IOException | EncodingFormatException e1) { + assert(false); + } + + enc.setSsbFrame( SsbTicketFactory.getSsbPass()); + + assert(enc != null); + + try { + enc.signLevel1("4711", keyPair.getPrivate(), algorithmOID, "1"); + } catch (Exception e) { + assert(false); + } + + + byte[] encoded = null; + try { + encoded = enc.encode(); + } catch (Exception e) { + assert(false); + } + + assert(encoded != null); + + Decoder dec = null; + try { + dec = new Decoder(encoded); + } catch (IOException e) { + assert(false); + } catch (EncodingFormatException e) { + assert(false); + } catch (DataFormatException e) { + assert(false); + } + assert(dec != null); + + int signatureCheck = 0; + try { + signatureCheck = dec.validateLevel1(keyPair.getPublic(),algorithmOID); + } catch (InvalidKeyException | NoSuchAlgorithmException | SignatureException | IllegalArgumentException + | UnsupportedOperationException | IOException | EncodingFormatException e) { + assert(false); + } + + assert(signatureCheck == Constants.LEVEL1_VALIDATION_OK); + + assert(dec.getSsbFrame() != null); + + assert(dec.getSsbFrame().getHeader() != null); + + SsbFrame ref = SsbTicketFactory.getSsbPass(); + + assert(dec.getSsbFrame().getHeader().getKeyId() == 1); + assert(dec.getSsbFrame().getHeader().getIssuer() == 4711); + assert(dec.getSsbFrame().getHeader().getTicketType().equals(ref.getHeader().getTicketType())); + assert(dec.getSsbFrame().getHeader().getVersion() == 1); + + assert(dec.getSsbFrame().getPassData() != null); + assert(dec.getSsbFrame().getPassData().getClassCode().equals(ref.getPassData().getClassCode())); + assert(dec.getSsbFrame().getPassData().isSpecimen() == ref.getPassData().isSpecimen()); + assert(dec.getSsbFrame().getPassData().isHasSecondPage() == ref.getPassData().isHasSecondPage()); + assert(dec.getSsbFrame().getPassData().getCountry_1() == ref.getPassData().getCountry_1()); + assert(dec.getSsbFrame().getPassData().getCountry_2() == ref.getPassData().getCountry_2()); + assert(dec.getSsbFrame().getPassData().getCountry_3() == ref.getPassData().getCountry_3()); + assert(dec.getSsbFrame().getPassData().getCountry_4() == ref.getPassData().getCountry_4()); + assert(dec.getSsbFrame().getPassData().getCountry_5() == ref.getPassData().getCountry_5()); + assert(dec.getSsbFrame().getPassData().getDay() == ref.getPassData().getDay()); + assert(dec.getSsbFrame().getPassData().getFirstDayOfValidity() == ref.getPassData().getFirstDayOfValidity()); + assert(dec.getSsbFrame().getPassData().getInfoCode() == ref.getPassData().getInfoCode()); + assert(dec.getSsbFrame().getPassData().getMaximumValidityDuration() == ref.getPassData().getMaximumValidityDuration()); + assert(dec.getSsbFrame().getPassData().getNumberOfAdults() == ref.getPassData().getNumberOfAdults()); + assert(dec.getSsbFrame().getPassData().getNumberOfChildren() == ref.getPassData().getNumberOfChildren()); + assert(dec.getSsbFrame().getPassData().getNumberOfTravels() == ref.getPassData().getNumberOfTravels()); + assert(dec.getSsbFrame().getPassData().getText().equalsIgnoreCase(ref.getPassData().getText())); + assert(dec.getSsbFrame().getPassData().getTicketNumber().equals(ref.getPassData().getTicketNumber())); + assert(dec.getSsbFrame().getPassData().getYear() == ref.getPassData().getYear()); + } + + /** + * Generate DSA keys. + * + * @return the key pair + * @throws NoSuchAlgorithmException the no such algorithm exception + * @throws NoSuchProviderException the no such provider exception + * @throws InvalidAlgorithmParameterException the invalid algorithm parameter exception + */ + public KeyPair generateDSAKeys(int keySize) throws NoSuchAlgorithmException, NoSuchProviderException, InvalidAlgorithmParameterException{ + KeyPairGenerator g = KeyPairGenerator.getInstance("DSA", "BC"); + g.initialize(keySize, new SecureRandom()); + return g.generateKeyPair(); + } + +} diff --git a/src/test/java/org/uic/barcode/test/SsbFrameBarcodeTestReservation.java b/src/test/java/org/uic/barcode/test/SsbFrameBarcodeTestReservation.java new file mode 100644 index 0000000..5f9e11e --- /dev/null +++ b/src/test/java/org/uic/barcode/test/SsbFrameBarcodeTestReservation.java @@ -0,0 +1,222 @@ +package org.uic.barcode.test; + +import java.io.IOException; +import java.security.InvalidAlgorithmParameterException; +import java.security.InvalidKeyException; +import java.security.KeyPair; +import java.security.KeyPairGenerator; +import java.security.NoSuchAlgorithmException; +import java.security.NoSuchProviderException; +import java.security.SecureRandom; +import java.security.Security; +import java.security.SignatureException; +import java.util.zip.DataFormatException; + +import org.bouncycastle.jce.provider.BouncyCastleProvider; +import org.junit.Before; +import org.junit.Test; +import org.uic.barcode.Decoder; +import org.uic.barcode.Encoder; +import org.uic.barcode.dynamicFrame.Constants; +import org.uic.barcode.logger.LoggerFactory; +import org.uic.barcode.ssbFrame.SsbFrame; +import org.uic.barcode.test.utils.SsbTicketFactory; +import org.uic.barcode.ticket.EncodingFormatException; + +/** + * The Class StaticFrameBarcodeTest. + */ +public class SsbFrameBarcodeTestReservation { + + /** The algorithm OID. */ + public String algorithmOID = Constants.DSA_SHA224; + + public int keySize = 1024; + + /** The key pair. */ + public KeyPair keyPair = null; + + + public SsbFrame ssbFrame = null; + + + /** + * Initialize. + * + * set the signature algorithm + * generate a key pair + * set the test content + * for ticket and layout + */ + @Before public void initialize() { + + LoggerFactory.setActivateConsoleLog(true); + + algorithmOID = Constants.DSA_SHA224; + keySize = 1024; + + Security.addProvider(new BouncyCastleProvider()); + + try { + keyPair = generateDSAKeys(keySize); + } catch (NoSuchAlgorithmException | NoSuchProviderException | InvalidAlgorithmParameterException e) { + e.printStackTrace(); + } + + assert(keyPair != null); + + } + + + + + + /** + * Test ssb pass encoding. + */ + @Test public void testSsbEncoding() { + + + Encoder enc = null; + + try { + enc = new Encoder(null, null, Encoder.UIC_BARCODE_TYPE_SSB, 0, 0); + } catch (IOException | EncodingFormatException e1) { + assert(false); + } + + enc.setSsbFrame(SsbTicketFactory.getSsbReservation()); + + assert(enc != null); + + try { + enc.signLevel1("1080", keyPair.getPrivate(), algorithmOID, "1"); + } catch (Exception e) { + assert(false); + } + + byte[] encoded = null; + try { + encoded = enc.encode(); + } catch (Exception e) { + assert(false); + } + + assert(encoded != null); + + assert(encoded.length == 114); + + } + + /** + * Test dynamic header barcode decoding. + */ + @Test public void testSsbDecoding() { + + + + + Encoder enc = null; + + try { + enc = new Encoder(null, null, Encoder.UIC_BARCODE_TYPE_SSB, 1, 0); + } catch (IOException | EncodingFormatException e1) { + assert(false); + } + + enc.setSsbFrame( SsbTicketFactory.getSsbReservation()); + + assert(enc != null); + + try { + enc.signLevel1("4711", keyPair.getPrivate(), algorithmOID, "1"); + } catch (Exception e) { + assert(false); + } + + + byte[] encoded = null; + try { + encoded = enc.encode(); + } catch (Exception e) { + assert(false); + } + + assert(encoded != null); + + Decoder dec = null; + try { + dec = new Decoder(encoded); + } catch (IOException e) { + assert(false); + } catch (EncodingFormatException e) { + assert(false); + } catch (DataFormatException e) { + assert(false); + } + assert(dec != null); + + int signatureCheck = 0; + try { + signatureCheck = dec.validateLevel1(keyPair.getPublic(),algorithmOID); + } catch (InvalidKeyException | NoSuchAlgorithmException | SignatureException | IllegalArgumentException + | UnsupportedOperationException | IOException | EncodingFormatException e) { + assert(false); + } + + assert(signatureCheck == Constants.LEVEL1_VALIDATION_OK); + + assert(dec.getSsbFrame() != null); + + assert(dec.getSsbFrame().getHeader() != null); + + SsbFrame ref = SsbTicketFactory.getSsbReservation(); + + assert(dec.getSsbFrame().getHeader().getKeyId() == 1); + assert(dec.getSsbFrame().getHeader().getIssuer() == 4711); + assert(dec.getSsbFrame().getHeader().getTicketType().equals(ref.getHeader().getTicketType())); + assert(dec.getSsbFrame().getHeader().getVersion() == 1); + + assert(dec.getSsbFrame().getReservationData() != null); + + assert(dec.getSsbFrame().getReservationData().getClassCode().equals(ref.getReservationData().getClassCode())); + assert(dec.getSsbFrame().getReservationData().isSpecimen() == ref.getReservationData().isSpecimen()); + assert(dec.getSsbFrame().getReservationData().getCoach() == ref.getReservationData().getCoach()); + assert(dec.getSsbFrame().getReservationData().getDepartureDate() == ref.getReservationData().getDepartureDate()); + assert(dec.getSsbFrame().getReservationData().getDepartureTime() == ref.getReservationData().getDepartureTime()); + + + assert(dec.getSsbFrame().getReservationData().getStations() != null); + + SsbTicketFactory.compareStations(dec.getSsbFrame().getReservationData().getStations(), ref.getReservationData().getStations()); + + SsbTicketFactory.compareCommonTicketPart(dec.getSsbFrame().getReservationData(), ref.getReservationData()); + + + assert(dec.getSsbFrame().getReservationData().getPlace().equals(ref.getReservationData().getPlace())); + assert(dec.getSsbFrame().getReservationData().getTicketSubType() == ref.getReservationData().getTicketSubType()); + assert(dec.getSsbFrame().getReservationData().getTrain().equals(ref.getReservationData().getTrain())); + assert(dec.getSsbFrame().getReservationData().isOverbooking() == ref.getReservationData().isOverbooking()); + + assert(dec.getSsbFrame().getReservationData().getInfoCode() == ref.getReservationData().getInfoCode()); + assert(dec.getSsbFrame().getReservationData().getText().equalsIgnoreCase(ref.getReservationData().getText())); + + + + } + + /** + * Generate DSA keys. + * + * @return the key pair + * @throws NoSuchAlgorithmException the no such algorithm exception + * @throws NoSuchProviderException the no such provider exception + * @throws InvalidAlgorithmParameterException the invalid algorithm parameter exception + */ + public KeyPair generateDSAKeys(int keySize) throws NoSuchAlgorithmException, NoSuchProviderException, InvalidAlgorithmParameterException{ + KeyPairGenerator g = KeyPairGenerator.getInstance("DSA", "BC"); + g.initialize(keySize, new SecureRandom()); + return g.generateKeyPair(); + } + +} diff --git a/src/test/java/org/uic/barcode/test/utils/SsbTicketFactory.java b/src/test/java/org/uic/barcode/test/utils/SsbTicketFactory.java new file mode 100644 index 0000000..539fced --- /dev/null +++ b/src/test/java/org/uic/barcode/test/utils/SsbTicketFactory.java @@ -0,0 +1,193 @@ +package org.uic.barcode.test.utils; + +import org.uic.barcode.ssbFrame.SsbClass; +import org.uic.barcode.ssbFrame.SsbCommonTicketPart; +import org.uic.barcode.ssbFrame.SsbFrame; +import org.uic.barcode.ssbFrame.SsbGroup; +import org.uic.barcode.ssbFrame.SsbHeader; +import org.uic.barcode.ssbFrame.SsbNonReservation; +import org.uic.barcode.ssbFrame.SsbNonUic; +import org.uic.barcode.ssbFrame.SsbPass; +import org.uic.barcode.ssbFrame.SsbReservation; +import org.uic.barcode.ssbFrame.SsbStationCodeTable; +import org.uic.barcode.ssbFrame.SsbStations; +import org.uic.barcode.ssbFrame.SsbTicketType; + +public class SsbTicketFactory { + + public static SsbFrame getSsbPass() { + + SsbFrame ssbPass = new SsbFrame(); + + ssbPass.setHeader(new SsbHeader()); + ssbPass.getHeader().setIssuer(4711); + ssbPass.getHeader().setTicketType(SsbTicketType.UIC_4_RPT); + ssbPass.getHeader().setVersion(1); + + + ssbPass.setPassData(new SsbPass()); + ssbPass.getPassData().setClassCode(SsbClass.FIRST); + ssbPass.getPassData().setCountry_1(10); + ssbPass.getPassData().setCountry_2(12); + ssbPass.getPassData().setDay(1); + ssbPass.getPassData().setFirstDayOfValidity(120); + ssbPass.getPassData().setHasSecondPage(false); + ssbPass.getPassData().setInfoCode(12); + ssbPass.getPassData().setMaximumValidityDuration(2); + ssbPass.getPassData().setNumberOfAdults(2); + ssbPass.getPassData().setNumberOfChildren(3); + ssbPass.getPassData().setNumberOfTravels(3); + ssbPass.getPassData().setPassSubType(1); + ssbPass.getPassData().setSpecimen(true); + ssbPass.getPassData().setText("Test"); + ssbPass.getPassData().setTicketNumber("SKCTS86"); + ssbPass.getPassData().setYear(3); + + return ssbPass; + } + + public static SsbFrame getSsbGroup() { + + SsbFrame ssb = new SsbFrame(); + + ssb.setHeader(new SsbHeader()); + ssb.getHeader().setIssuer(4711); + ssb.getHeader().setTicketType(SsbTicketType.UIC_3_GRP); + ssb.getHeader().setVersion(1); + + + ssb.setGroupData(new SsbGroup()); + ssb.getGroupData().setClassCode(SsbClass.FIRST); + ssb.getGroupData().setCounterMarkNumber(1); + ssb.getGroupData().setDay(1); + ssb.getGroupData().setFirstDayOfValidity(10); + ssb.getGroupData().setFirstDayOfValidity(120); + ssb.getGroupData().setGroupName("GroupName"); + ssb.getGroupData().setInfoCode(12); + ssb.getGroupData().setLastDayOfValidity(3); + ssb.getGroupData().setNumberOfAdults(2); + ssb.getGroupData().setNumberOfChildren(3); + ssb.getGroupData().setReturnJourney(false); + ssb.getGroupData().setSpecimen(true); + ssb.getGroupData().setText("Test"); + ssb.getGroupData().setTicketNumber("SKCTS86"); + ssb.getGroupData().setYear(3); + + ssb.getGroupData().getStations().setArrivalStationCode("8012345"); + ssb.getGroupData().getStations().setDepartureStationCode("8054321"); + ssb.getGroupData().getStations().setCodeTable(SsbStationCodeTable.NRT); + + return ssb; + } + + public static SsbFrame getSsbNonReservation() { + + SsbFrame ssb = new SsbFrame(); + + ssb.setHeader(new SsbHeader()); + ssb.getHeader().setIssuer(4711); + ssb.getHeader().setTicketType(SsbTicketType.UIC_2_NRT); + ssb.getHeader().setVersion(1); + + + ssb.setNonReservationData(new SsbNonReservation()); + ssb.getNonReservationData().setClassCode(SsbClass.FIRST); + ssb.getNonReservationData().setDay(1); + ssb.getNonReservationData().setFirstDayOfValidity(10); + ssb.getNonReservationData().setFirstDayOfValidity(120); + ssb.getNonReservationData().setInfoCode(12); + ssb.getNonReservationData().setLastDayOfValidity(3); + ssb.getNonReservationData().setNumberOfAdults(2); + ssb.getNonReservationData().setNumberOfChildren(3); + ssb.getNonReservationData().setReturnJourney(false); + ssb.getNonReservationData().setSpecimen(true); + ssb.getNonReservationData().setText("Test"); + ssb.getNonReservationData().setTicketNumber("SKCTS86"); + ssb.getNonReservationData().setYear(3); + + + ssb.getNonReservationData().getStations().setArrivalStationCode("8012345"); + ssb.getNonReservationData().getStations().setDepartureStationCode("8054321"); + ssb.getNonReservationData().getStations().setCodeTable(SsbStationCodeTable.NRT); + + return ssb; + } + + public static SsbFrame getSsbReservation() { + + SsbFrame ssb = new SsbFrame(); + + ssb.setHeader(new SsbHeader()); + ssb.getHeader().setIssuer(4711); + ssb.getHeader().setTicketType(SsbTicketType.UIC_1_IRT_RES_BOA); + ssb.getHeader().setVersion(1); + + + ssb.setReservationData(new SsbReservation()); + ssb.getReservationData().setClassCode(SsbClass.FIRST); + ssb.getReservationData().setDay(1); + ssb.getReservationData().setCoach(123); + ssb.getReservationData().setDepartureDate(120); + ssb.getReservationData().setDepartureTime(500); + ssb.getReservationData().setOverbooking(false); + ssb.getReservationData().setNumberOfAdults(2); + ssb.getReservationData().setNumberOfChildren(3); + ssb.getReservationData().setPlace("05B"); + ssb.getReservationData().setTicketSubType(2); + ssb.getReservationData().setTrain("1234B"); + + ssb.getReservationData().setSpecimen(true); + ssb.getReservationData().setText("Test"); + ssb.getReservationData().setTicketNumber("SKCTS86"); + ssb.getReservationData().setYear(3); + + + ssb.getReservationData().getStations().setArrivalStationCode("8012345"); + ssb.getReservationData().getStations().setDepartureStationCode("8054321"); + ssb.getReservationData().getStations().setCodeTable(SsbStationCodeTable.NRT); + + return ssb; + } + + public static SsbFrame getSsbNonUic() { + + SsbFrame ssb = new SsbFrame(); + + ssb.setHeader(new SsbHeader()); + ssb.getHeader().setIssuer(4711); + ssb.getHeader().setTicketType(SsbTicketType.NONUIC_23_BILATERAL); + ssb.getHeader().setVersion(1); + + + ssb.setNonUicData(new SsbNonUic()); + ssb.getNonUicData().setOpenData("TestData".getBytes()); + + + return ssb; + } + + public static void compareStations(SsbStations stations, SsbStations stations2) { + + assert (stations.getCodeTable().equals(stations2.getCodeTable())); + + assert (stations.getArrivalStationCode().equals(stations2.getArrivalStationCode())); + + assert (stations.getDepartureStationCode().equals(stations2.getDepartureStationCode())); + + } + + public static void compareCommonTicketPart(SsbCommonTicketPart part, SsbCommonTicketPart part2) { + + assert(part.isSpecimen() == part2.isSpecimen()); + assert(part.getDay() == part2.getDay()); + assert(part.getNumberOfAdults() == part2.getNumberOfAdults()); + assert(part.getNumberOfChildren() == part2.getNumberOfChildren()); + assert(part.getTicketNumber().equals(part2.getTicketNumber())); + assert(part.getYear() == part2.getYear()); + + } + + + + +} -- cgit v1.2.3