package de.persosim.simulator.crypto.certificates;
import static org.junit.Assert.assertEquals;
import org.junit.Before;
import org.junit.Test;
import de.persosim.simulator.exception.CertificateNotParseableException;
import de.persosim.simulator.protocols.ta.CertificateHolderAuthorizationTemplate;
import de.persosim.simulator.test.PersoSimTestCase;
import de.persosim.simulator.tlv.ConstructedTlvDataObject;
import de.persosim.simulator.utils.HexString;
public class CertificateUtilsTest extends PersoSimTestCase {
byte[] cvCertDETESTeID00004Data, cvCertDETESTeID00004DataWoDomainParams, cvCertDETESTeID00004BodyData, cvCertDETESTeID00004DataWithExtensions, signature;
ConstructedTlvDataObject cvCertDETESTeID00004Tlv, cvCertDETESTeID00004BodyTlv;
@Before
public void setUp() {
cvCertDETESTeID00004BodyData = HexString.toByteArray("7F4E82016E5F290100420E44455445535465494430303030347F4982011D060A04007F000702020202038120A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E537782207D5A0975FC2C3057EEF67530417AFFE7FB8055C126DC5C6CE94A4B44F330B5D9832026DC5C6CE94A4B44F330B5D9BBD77CBF958416295CF7E1CE6BCCDC18FF8C07B68441048BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F0469978520A9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A786410474FF63AB838C73C303AC003DFEE95CF8BF55F91E8FEBCB7395D942036E47CF1845EC786EC95BB453AAC288AD023B6067913CF9B63F908F49304E5CFC8B3050DD8701015F200E44455445535465494430303030347F4C12060904007F0007030102025305FC0F13FFFF5F25060102000501015F2406010500050101");
cvCertDETESTeID00004Data = HexString.toByteArray("7F218201B67F4E82016E5F290100420E44455445535465494430303030347F4982011D060A04007F000702020202038120A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E537782207D5A0975FC2C3057EEF67530417AFFE7FB8055C126DC5C6CE94A4B44F330B5D9832026DC5C6CE94A4B44F330B5D9BBD77CBF958416295CF7E1CE6BCCDC18FF8C07B68441048BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F0469978520A9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A786410474FF63AB838C73C303AC003DFEE95CF8BF55F91E8FEBCB7395D942036E47CF1845EC786EC95BB453AAC288AD023B6067913CF9B63F908F49304E5CFC8B3050DD8701015F200E44455445535465494430303030347F4C12060904007F0007030102025305FC0F13FFFF5F25060102000501015F24060105000501015F37408CAC3E842EB053EE10E9D57FB373FF4E9C36D1EDF966D6535978D498309B00D59C51D83965F4B1C75557FA6B6CA03D360A782B9BC172CE391623D6BB48B9B1AA");
cvCertDETESTeID00004DataWoDomainParams = HexString.toByteArray("7F2181E57F4E819E5F290100420E44455445535465494430303030347F494F060A04007F0007020202020386410474FF63AB838C73C303AC003DFEE95CF8BF55F91E8FEBCB7395D942036E47CF1845EC786EC95BB453AAC288AD023B6067913CF9B63F908F49304E5CFC8B3050DD5F200E44455445535465494430303030347F4C12060904007F0007030102025305FC0F13FFFF5F25060102000501015F24060105000501015F37408CAC3E842EB053EE10E9D57FB373FF4E9C36D1EDF966D6535978D498309B00D59C51D83965F4B1C75557FA6B6CA03D360A782B9BC172CE391623D6BB48B9B1AA");
cvCertDETESTeID00004DataWithExtensions = HexString.toByteArray("7F218201D27F4E82018A5F290100420E44455445535465494430303030347F4982011D060A04007F000702020202038120A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E537782207D5A0975FC2C3057EEF67530417AFFE7FB8055C126DC5C6CE94A4B44F330B5D9832026DC5C6CE94A4B44F330B5D9BBD77CBF958416295CF7E1CE6BCCDC18FF8C07B68441048BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F0469978520A9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A786410474FF63AB838C73C303AC003DFEE95CF8BF55F91E8FEBCB7395D942036E47CF1845EC786EC95BB453AAC288AD023B6067913CF9B63F908F49304E5CFC8B3050DD8701015F200E44455445535465494430303030347F4C12060904007F0007030102025305FC0F13FFFF5F25060102000501015F2406010500050101651A7318060A04007F00070301020201420A001122334455667788995F37408CAC3E842EB053EE10E9D57FB373FF4E9C36D1EDF966D6535978D498309B00D59C51D83965F4B1C75557FA6B6CA03D360A782B9BC172CE391623D6BB48B9B1AA");
cvCertDETESTeID00004BodyTlv = new ConstructedTlvDataObject(cvCertDETESTeID00004BodyData);
cvCertDETESTeID00004Tlv = new ConstructedTlvDataObject(cvCertDETESTeID00004Data);
signature = HexString.toByteArray("8CAC3E842EB053EE10E9D57FB373FF4E9C36D1EDF966D6535978D498309B00D59C51D83965F4B1C75557FA6B6CA03D360A782B9BC172CE391623D6BB48B9B1AA");
}
/**
* Positive test case: check encoding of certificate providing body and signature.
* @throws CertificateNotParseableException
*/
@Test
public void testEncodeCertificate_BodySignature() throws CertificateNotParseableException {
CardVerifiableCertificate cvCertDETESTeID00004 = new CardVerifiableCertificate(cvCertDETESTeID00004Tlv);
CertificateBody body = cvCertDETESTeID00004.getBody();
byte[] signature = cvCertDETESTeID00004.getSignature();
ConstructedTlvDataObject encoding = CertificateUtils.encodeCertificate(body, signature);
assertEquals(cvCertDETESTeID00004Tlv, encoding);
}
/**
* Positive test case: check encoding of certificate providing single parameters.
* @throws CertificateNotParseableException
*/
@Test
public void testEncodeCertificate_SingleParameters() throws CertificateNotParseableException {
CardVerifiableCertificate cvCertDETESTeID00004 = new CardVerifiableCertificate(cvCertDETESTeID00004Tlv);
CertificateBody body = cvCertDETESTeID00004.getBody();
byte[] signature = cvCertDETESTeID00004.getSignature();
ConstructedTlvDataObject encoding = CertificateUtils.encodeCertificate(body.getCertificateProfileIdentifier(), body.getCertificationAuthorityReference(), body.getPublicKey().toTlvDataObject(true), body.getCertificateHolderReference(), body.getCertificateHolderAuthorizationTemplate(), body.getCertificateEffectiveDate(), body.getCertificateExpirationDate(), body.getExtensionRepresentation(), signature);
assertEquals(cvCertDETESTeID00004Tlv, encoding);
}
/**
* Positive test case: check encoding of certificate providing single parameters.
* @throws CertificateNotParseableException
*/
@Test
public void testEncodeCertificateBody_SingleParameters() throws CertificateNotParseableException {
CertificateBody body = new CertificateBody(cvCertDETESTeID00004BodyTlv);
ConstructedTlvDataObject encoding = CertificateUtils.encodeCertificateBody(body.getCertificateProfileIdentifier(), body.getCertificationAuthorityReference(), body.getPublicKey().toTlvDataObject(true), body.getCertificateHolderReference(), body.getCertificateHolderAuthorizationTemplate(), body.getCertificateEffectiveDate(), body.getCertificateExpirationDate(), body.getExtensionRepresentation());
assertEquals(cvCertDETESTeID00004BodyTlv, encoding);
}
/**
* Positive test case: check encoding of certificate holder authorization template providing TLV structure.
* @throws CertificateNotParseableException
*/
@Test
public void testEncodeCertificateHolderAuthorizationTemplate() throws CertificateNotParseableException {
byte[] chatData = HexString.toByteArray("7F4C12060904007F0007030102025305FC0F13FFFF");
ConstructedTlvDataObject chatTlv = new ConstructedTlvDataObject(chatData);
CertificateHolderAuthorizationTemplate chat = new CertificateHolderAuthorizationTemplate(chatTlv);
assertEquals(chatTlv, chat.toTlv());
}
}