summaryrefslogblamecommitdiffstats
path: root/src/main/java/org/uic/barcode/dynamicFrame/v2/Level1DataType.java
blob: b42e9dc106fdc50597019dd0e54168622319876c (plain) (tree)
1
2
3
4
5
6




                                         
 









                                                            











                                    
                               



                                                           
                               




                                                          
                               
                                             



                                               
                               








                                                                 
                                                             



                                                          
                               


                                                                 
                                    
                               









                                                                 
                                                             



                                                          
                               


                                                                 
                                        
                               



                                                                 
                                        
                               


                                                          


                                               
                                                     



                                           
                                                    


                                         
                                            
                                                     
         



                                                    


         
































































                                                                                                        




                              



                                 




                                       



                                           




                            



                                              




                                    



                                                       




                                       



                                          




                                                       



                                                           




                                           



                                              




                                                               



                                                                   




                                           



                                              




                                                               



                                                                   




                                          



                                                  




                                                             





                                                                      




                                       



                                          




                                                       


                                                           

            
                                           



                                                     
                                          
                 


                                                                  

                                                       
 

                                                                                  

                                                                                           
                                                                   
                  
                                            









                                             
                                                                                                  
                 


                                                                  


                                                              

                                                                                 
                 
                                                      
                 

                                                                              





                                                              


                                            

                          









                                                                 













                                                                                           
package org.uic.barcode.dynamicFrame.v2;

import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;

import org.uic.barcode.asn1.datatypes.Asn1Optional;
import org.uic.barcode.asn1.datatypes.CharacterRestriction;
import org.uic.barcode.asn1.datatypes.FieldOrder;
import org.uic.barcode.asn1.datatypes.IntRange;
import org.uic.barcode.asn1.datatypes.RestrictedString;
import org.uic.barcode.asn1.datatypes.Sequence;
import org.uic.barcode.asn1.datatypesimpl.OctetString;
import org.uic.barcode.asn1.uper.UperEncoder;
import org.uic.barcode.ticket.EncodingFormatException;
import org.uic.barcode.ticket.api.utils.UicEncoderUtils;

/**
 * The Class SignedDataType.
 */
@Sequence
public class Level1DataType {
	
	/** 
	 * The security provider 
	 * numeric codes 1 ...32000
	 *  
	 *   */
	@FieldOrder(order = 0)
	@IntRange(minValue=1,maxValue=32000)
	@Asn1Optional public Long securityProviderNum;

	/**  The security provider  alphanumeric codes. */
	@FieldOrder(order = 1)
	@RestrictedString(CharacterRestriction.IA5String)
	@Asn1Optional public String securityProviderIA5;

	
	/** The key id. */
	@FieldOrder(order = 2)
	@IntRange(minValue=0,maxValue=99999)
	@Asn1Optional public Long	keyId;
	
	
	/** The data. */
	@FieldOrder(order = 3)
	public SequenceOfDataType data;
	
	/** 
	 * The key generator algorithms
	 * Object Identifier of the Algorithm
	 * Number notation:
	 * 
	 *  e.g.:
	 *        	--    DSA SHA224  2.16.840.1.101.3.4.3.1
  	 *          --    DSA SHA256  2.16.840.1.101.3.4.3.2
  	 *          --    ECC 256     1.2.840.10045.3.1.7
	 *  
	 *  
	 */
	@FieldOrder(order = 4)
	@RestrictedString(CharacterRestriction.ObjectIdentifier)
	@Asn1Optional public String level1KeyAlg;		
		
	/** The level 2 key alg. */
	@FieldOrder(order = 5)
	@RestrictedString(CharacterRestriction.ObjectIdentifier)
	@Asn1Optional public String level2KeyAlg;		
	
	/** 
	 * The signing algorithm
	 * Object Identifier of the Algorithms
	 * Number notation:
	 * 
	 *  e.g.:
	 *        	--    DSA SHA224  2.16.840.1.101.3.4.3.1
  	 *          --    DSA SHA256  2.16.840.1.101.3.4.3.2
  	 *          --    ECC 256     1.2.840.10045.3.1.7
	 *  
	 *  
	 */
	@FieldOrder(order = 6)
	@RestrictedString(CharacterRestriction.ObjectIdentifier)
	@Asn1Optional public String level1SigningAlg;	
	
	/** The level 2 signing alg. */
	@FieldOrder(order = 7)
	@RestrictedString(CharacterRestriction.ObjectIdentifier)
	@Asn1Optional public String level2SigningAlg;		
	
	
	/**  The level 2 public key. */
	@FieldOrder(order = 8)
	@Asn1Optional public OctetString level2publicKey;
	

	/** The End of validity year. */
	@FieldOrder(order = 9)
	@IntRange(minValue=2016,maxValue=2269)
	@Asn1Optional public Long endOfValidityYear;

	/** The End of validity day. */
	@FieldOrder(order = 10)
	@IntRange(minValue=1,maxValue=366)
	@Asn1Optional public Long endOfValidityDay;

	/** The End of validity time. */
	@FieldOrder(order = 11)
	@IntRange(minValue=0,maxValue=1439)
	@Asn1Optional public Long endOfValidityTime;
	
	/** The validity duration in seconds. */
	@FieldOrder(order = 12)
	@IntRange(minValue=1,maxValue=3600)
	@Asn1Optional public Long validityDuration;
	
	
	
	
	/**
	 * Gets the security provider num.
	 *
	 * @return the security provider num
	 */
	public Long getSecurityProviderNum() {
		return securityProviderNum;
	}

	/**
	 * Sets the security provider num.
	 * 
	 * in case the security provider code is encoded in IA5 this will return null
	 *
	 * @param securityProviderNum the new security provider num
	 */
	public void setSecurityProviderNum(Long securityProviderNum) {
		this.securityProviderNum = securityProviderNum;
	}

	/**
	 * Gets the security provider IA5.
	 * 
	 * in case the security provider code is encoded numerically this will return null
	 *
	 * @return the security provider IA5
	 */
	public String getSecurityProviderIA5() {
		return securityProviderIA5;
	}
	
	/**
	 * Sets the security provider
	 * 
	 * The security provider code must use the IA5 Alphabet .
	 *
	 * @param securityProvider the new security provider
	 * @throws EncodingFormatException the encoding format exception
	 */
	public void setSecurityProvider(String securityProvider) throws EncodingFormatException {
		this.securityProviderNum = UicEncoderUtils.getNum(securityProvider);
		this.securityProviderIA5 = UicEncoderUtils.getIA5NonNum(securityProvider);
	}
	
	
	/**
	 * Gets the security provider.
	 *
	 * @return the security provider
	 */
	public String getSecurityProvider() {
		return UicEncoderUtils.mapToString(this.securityProviderNum, this.securityProviderIA5);
	}
	

	/**
	 * Sets the security provider IA 5.
	 *
	 * @param securityProviderIA5 the new security provider IA 5
	 */
	public void setSecurityProviderIA5(String securityProviderIA5) {
		this.securityProviderIA5 = securityProviderIA5;
	}
	
	/**
	 * Gets the key id.
	 *
	 * @return the key id
	 */
	public Long getKeyId() {
		return keyId;
	}

	/**
	 * Sets the key id.
	 *
	 * @param keyId the new key id
	 */
	public void setKeyId(Long keyId) {
		this.keyId = keyId;
	}

	/**
	 * Gets the data.
	 *
	 * @return the data
	 */
	public SequenceOfDataType getData() {
		return data;
	}

	/**
	 * Sets the data.
	 *
	 * @param data the new data
	 */
	public void setData(SequenceOfDataType data) {
		this.data = data;
	}

	/**
	 * Gets the level 2 key alg.
	 *
	 * @return the level 2 key alg
	 */
	public String getLevel2KeyAlg() {
		return level2KeyAlg;
	}

	/**
	 * Sets the level 2 key alg.
	 *
	 * @param level2KeyAlg the new level 2 key alg
	 */
	public void setLevel2KeyAlg(String level2KeyAlg) {
		this.level2KeyAlg = level2KeyAlg;
	}

	/**
	 * Gets the level 1 signing alg.
	 *
	 * @return the level 1 signing alg
	 */
	public String getLevel1SigningAlg() {
		return level1SigningAlg;
	}

	/**
	 * Sets the level 1 signing alg.
	 *
	 * @param level1SigningAlg the new level 1 signing alg
	 */
	public void setLevel1SigningAlg(String level1SigningAlg) {
		this.level1SigningAlg = level1SigningAlg;
	}

	/**
	 * Gets the level 2 signing alg.
	 *
	 * @return the level 2 signing alg
	 */
	public String getLevel2SigningAlg() {
		return level2SigningAlg;
	}

	/**
	 * Sets the level 2 signing alg.
	 *
	 * @param level2SigningAlg the new level 2 signing alg
	 */
	public void setLevel2SigningAlg(String level2SigningAlg) {
		this.level2SigningAlg = level2SigningAlg;
	}

	/**
	 * Gets the level 2 public key.
	 *
	 * @return the level 2 public key
	 */
	public OctetString getLevel2publicKey() {
		return level2publicKey;
	}

	/**
	 * Sets the level 2 public key.
	 *
	 * @param level2publicKey the new level 2 public key
	 */
	public void setLevel2publicKey(OctetString level2publicKey) {
		this.level2publicKey = level2publicKey;
	}

	
	
	/**
	 * Gets the level 1 key alg.
	 *
	 * @return the level 1 key alg
	 */
	public String getLevel1KeyAlg() {
		return level1KeyAlg;
	}

	/**
	 * Sets the level 1 key alg.
	 *
	 * @param level1KeyAlg the new level 1 key alg
	 */
	public void setLevel1KeyAlg(String level1KeyAlg) {
		this.level1KeyAlg = level1KeyAlg;
	}
	
	/**
	 * Sets the end of validity date. 
	 * @param date the new end of validity date
	 */
	public void setEndOfValidityDate(Date date){
		
		if (date == null) return;
		
		TimeZone local = TimeZone.getDefault();
		TimeZone.setDefault(TimeZone.getTimeZone("UTC"));

		Calendar cal = Calendar.getInstance();
		cal.setTime(date);

		this.endOfValidityYear = new Long( cal.get(Calendar.YEAR));
		this.endOfValidityDay = new Long (cal.get(Calendar.DAY_OF_YEAR));
		int time =  cal.get(Calendar.HOUR_OF_DAY) * 60 + cal.get(Calendar.MINUTE);
		if (time >= 0) {
			this.endOfValidityTime = new Long (time );
		}
		TimeZone.setDefault(local);
		
	}
	
	/**
	 * Gets the end of validity date.
	 *
	 * @return the end of validity date
	 */
	public Date getEndOfValidityDate() {
		
		if (this.endOfValidityYear == null || this.endOfValidityDay == null) return null;
		
		TimeZone local = TimeZone.getDefault();
		TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
		
		Calendar cal = Calendar.getInstance();
		cal.clear();
		cal.setTimeZone(TimeZone.getTimeZone("UTC"));
		cal.set(Calendar.YEAR, this.endOfValidityYear.intValue());
		cal.set(Calendar.DAY_OF_YEAR, this.endOfValidityDay.intValue());
		
		if (this.endOfValidityTime != null) {
		
			int hours = this.endOfValidityTime.intValue() / 60;
			int minutes = this.endOfValidityTime.intValue() % 60;
			cal.set(Calendar.HOUR_OF_DAY, hours);
			cal.set(Calendar.MINUTE,minutes);

		}
		
		Date d = cal.getTime();
		
		TimeZone.setDefault(local);
		
		return d;
	}
	
	

	public Long getValidityDuration() {
		return validityDuration;
	}

	public void setValidityDuration(Long validityDuration) {
		this.validityDuration = validityDuration;
	}

	/**
	 * Gets the data for signature.
	 *
	 * The byte array containing the ASN.1 PER UNALIGNED encoded data of the DataBlock
	 *
	 *
	 * @return the data for signature
	 */
	public byte[] encode() {
		return UperEncoder.encode(this);

	}
}