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()); } }