package de.persosim.simulator.protocols.ta;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import de.persosim.simulator.crypto.certificates.CertificateExtension;
import de.persosim.simulator.secstatus.AbstractSecMechanism;
import de.persosim.simulator.secstatus.SecMechanism;
import de.persosim.simulator.secstatus.SecurityEvent;
/**
* This {@link SecMechanism} is used to communicate all useful information
* created while executing terminal authentication.
*
* @author mboonk
*
*/
public class TerminalAuthenticationMechanism extends AbstractSecMechanism {
private Collection<AuthenticatedAuxiliaryData> auxiliaryData;
private TerminalType terminalType;
private byte [] compressedTerminalEphemeralPublicKey;
private byte [] firstSectorPublicKeyHash;
private byte [] secondSectorPublicKeyHash;
private String sectorPublicKeyHashAlgorithm;
private List<CertificateExtension> certificateExtensions;
public TerminalAuthenticationMechanism(byte [] compressedEphemeralTerminalPublicKey, TerminalType terminalType,
Collection<AuthenticatedAuxiliaryData> auxiliaryData, byte [] firstSectorPublicKeyHash, byte [] secondSectorPublicKeyHash, String sectorPublicKeyHashAlgorithm, List<CertificateExtension> certificateExtensions) {
this.auxiliaryData = auxiliaryData;
this.terminalType = terminalType;
this.compressedTerminalEphemeralPublicKey = Arrays.copyOf(compressedEphemeralTerminalPublicKey, compressedEphemeralTerminalPublicKey.length);
if (firstSectorPublicKeyHash != null){
this.firstSectorPublicKeyHash = Arrays.copyOf(firstSectorPublicKeyHash, firstSectorPublicKeyHash.length);
}
if (secondSectorPublicKeyHash != null){
this.secondSectorPublicKeyHash = Arrays.copyOf(secondSectorPublicKeyHash, secondSectorPublicKeyHash.length);
}
this.sectorPublicKeyHashAlgorithm = sectorPublicKeyHashAlgorithm;
this.certificateExtensions = certificateExtensions;
}
/**
* @return the firstSectorPublicKeyHash or null if none set
*/
public byte[] getFirstSectorPublicKeyHash() {
if (firstSectorPublicKeyHash != null){
return Arrays.copyOf(firstSectorPublicKeyHash, firstSectorPublicKeyHash.length);
}
return null;
}
/**
* @return the secondSectorPublicKeyHash or null if none set
*/
public byte[] getSecondSectorPublicKeyHash() {
if (secondSectorPublicKeyHash != null){
return Arrays.copyOf(secondSectorPublicKeyHash, secondSectorPublicKeyHash.length);
}
return null;
}
/**
* @return the sectorPublicKeyHashAlgorithm
*/
public String getSectorPublicKeyHashAlgorithm() {
return sectorPublicKeyHashAlgorithm;
}
/**
* @return the terminalType
*/
public TerminalType getTerminalType() {
return terminalType;
}
/**
* @return the auxiliaryData
*/
public Collection<AuthenticatedAuxiliaryData> getAuxiliaryData() {
return auxiliaryData;
}
@Override
public boolean needsDeletionInCaseOf(SecurityEvent event) {
return true;
}
/**
* @return the compressedTerminalEphemeralPublicKey or null if none set
*/
public byte[] getCompressedTerminalEphemeralPublicKey() {
if (compressedTerminalEphemeralPublicKey != null){
return Arrays.copyOf(compressedTerminalEphemeralPublicKey, compressedTerminalEphemeralPublicKey.length);
}
return null;
}
public List<CertificateExtension> getCertificateExtensions() {
return certificateExtensions;
}
}