summaryrefslogblamecommitdiffstats
path: root/src/test/java/org/uic/barcode/test/DynamicFrameDoubleSignatureProviderSelectionTest.java
blob: 59f3b477712c412a1dd80a0ddfbb83a874fd9e1b (plain) (tree)
1
2
3
4
5
6
7


                              



                                               














                                                           
                                               
                                             



                                                         
                                                    















                                                                

                                                           

                                                                
                                            














































                                                                                                                 
                                                                                    








































                                                                                                                        
                                        



                                                                                
                                                   

                                                                          
                                                                                     




                                                                      


                                                                                               
                                                                                                                                        







                                                                                       
package org.uic.barcode.test;

import java.io.IOException;
import java.security.InvalidKeyException;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.Provider;
import java.security.SecureRandom;
import java.security.Security;
import java.security.SignatureException;
import java.util.Arrays;
import java.util.zip.DataFormatException;

import org.bouncycastle.jce.ECNamedCurveTable;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.bouncycastle.jce.spec.ECParameterSpec;
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.dynamicFrame.api.IData;
import org.uic.barcode.logger.LoggerFactory;
import org.uic.barcode.test.utils.Level2TestDataFactory;
import org.uic.barcode.test.utils.SimpleUICTestTicket;
import org.uic.barcode.ticket.EncodingFormatException;
import org.uic.barcode.ticket.api.spec.IUicRailTicket;
import org.uic.barcode.utils.AlgorithmNameResolver;

public class DynamicFrameDoubleSignatureProviderSelectionTest {
	
	public String signatureAlgorithmOID = null;
	public String elipticCurve = null;
	public String keyPairAlgorithmOID = null;
	
	public KeyPair keyPairLevel1 = null;
	public KeyPair keyPairLevel2 = null;
	
	public IUicRailTicket testFCBticket = null;
	
	public Provider prov = null;
	
	@Before public void initialize() {
		
		LoggerFactory.setActivateConsoleLog(true);
		
		signatureAlgorithmOID = Constants.ECDSA_SHA256;
		keyPairAlgorithmOID = Constants.KG_EC_256;
		elipticCurve = "secp256r1";
		
	    testFCBticket = SimpleUICTestTicket.getUicTestTicket();
			
	    prov =  new BouncyCastleProvider();
		
		Security.addProvider(prov);

		try {
			keyPairLevel1  = generateECKeys(keyPairAlgorithmOID, elipticCurve);
			keyPairLevel2  = generateECKeys(keyPairAlgorithmOID, elipticCurve);
		} catch (Exception e) {
			assert(false);
		}

        assert(keyPairLevel1 != null);
        
        assert(keyPairLevel2 != null);
        
	}
	
	

	@Test public void testDynamicHeaderBarcodeDecoding() {
		
		IUicRailTicket ticket = testFCBticket;

		Encoder enc = null;

		try {
			enc = new Encoder(ticket, null, Encoder.UIC_BARCODE_TYPE_DOSIPAS, 1, 13);
		} catch (IOException | EncodingFormatException e1) {
			assert(false);
		}
		
		assert(enc != null);
		
		try {
			enc.setLevel1Algs(signatureAlgorithmOID, keyPairAlgorithmOID);
			enc.setLevel2Algs(signatureAlgorithmOID, keyPairAlgorithmOID,keyPairLevel2.getPublic());
			enc.signLevel1("1080", keyPairLevel1.getPrivate(), signatureAlgorithmOID, "1",prov);
		} catch (Exception e) {
			assert(false);
		}
		
		assert(enc != null);
		
		
		IData level2Data = Level2TestDataFactory.getLevel2SimpleTestData();
		try {
			enc.setLevel2Data(level2Data);
			enc.signLevel2(keyPairLevel2.getPrivate(),prov);
		} 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(keyPairLevel1.getPublic(), null, prov);
		} catch (InvalidKeyException | NoSuchAlgorithmException | SignatureException | IllegalArgumentException
				| UnsupportedOperationException | IOException | EncodingFormatException e) {
			assert(false);
		}
        assert(signatureCheck == Constants.LEVEL1_VALIDATION_OK);

        signatureCheck = 0;
		try {
			signatureCheck = dec.validateLevel2(prov);
		} catch (Exception e) {
			assert(false);
		}
        assert(signatureCheck == Constants.LEVEL2_VALIDATION_OK);              
        
        IData level2DataDec = dec.getLevel2Data();
        
        assert(level2Data.getFormat().equals(level2DataDec.getFormat()));
        assert(Arrays.equals(level2Data.getData(),level2DataDec.getData()));        
        
        SimpleUICTestTicket.compare(ticket, dec.getUicTicket());     
        
	}	
	
		
	public KeyPair generateECKeys(String keyAlgorithmOid, String curve)  throws Exception{
		
		String keyAlgorithmName = AlgorithmNameResolver.getName(AlgorithmNameResolver.TYPE_KEY_GENERATOR_ALG, keyAlgorithmOid);
		ECParameterSpec ecSpec = ECNamedCurveTable.getParameterSpec(curve);
	    KeyPairGenerator g = KeyPairGenerator.getInstance(keyAlgorithmName, "BC");
	    g.initialize(ecSpec, new SecureRandom());
	    return g.generateKeyPair();	    
    }


}