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.test.PersoSimTestCase; import de.persosim.simulator.tlv.ConstructedTlvDataObject; import de.persosim.simulator.utils.HexString; public class ReducedCardVerifiableCertificateTest extends PersoSimTestCase { byte[] reducedBodyData, reducedCertificateData, cvCertDETESTeID00004ReducedBodyData, cvCertDETESTeID00004ReducedData, cvCertDETESTeID00004ReducedWoDomainParamsData, cvCertDETESTeID00004ReducedWithExtensionsData, cvCertDETESTeID00004Data, signature; ConstructedTlvDataObject reducedBodyTlv, reducedCertificateTlv, cvCertDETESTeID00004ReducedBodyTlv, cvCertDETESTeID00004ReducedTlv, cvCertDETESTeID00004ReducedWoDomainParamsTlv, cvCertDETESTeID00004ReducedWithExtensionsTlv, cvCertDETESTeID00004Tlv; @Before public void setUp() { reducedBodyData = HexString.toByteArray("7F4E8201485F290100420E44455445535465494430303030357F4982011D060A04007F000702020202038120A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E537782207D5A0975FC2C3057EEF67530417AFFE7FB8055C126DC5C6CE94A4B44F330B5D9832026DC5C6CE94A4B44F330B5D9BBD77CBF958416295CF7E1CE6BCCDC18FF8C07B68441048BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F0469978520A9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A7864104A721269A8EB45C216AA59060B424A57EE8769E4C1A47564F3DC4B75C33702CB7A736D3CDDDB899528CC55B472843DFA072B510DC0672E95FC4D597DAD91241C48701015F200F44454456544944484A503030303036"); reducedCertificateData = HexString.toByteArray("7F218201907F4E8201485F290100420E44455445535465494430303030357F4982011D060A04007F000702020202038120A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E537782207D5A0975FC2C3057EEF67530417AFFE7FB8055C126DC5C6CE94A4B44F330B5D9832026DC5C6CE94A4B44F330B5D9BBD77CBF958416295CF7E1CE6BCCDC18FF8C07B68441048BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F0469978520A9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A7864104A721269A8EB45C216AA59060B424A57EE8769E4C1A47564F3DC4B75C33702CB7A736D3CDDDB899528CC55B472843DFA072B510DC0672E95FC4D597DAD91241C48701015F200F44454456544944484A5030303030365F374083B7E4CB46023B66EEB30CFC9E391283B1EE4F873527CF6C738A4C1EB4E212D0357C2D1264712253D6FF2ABC813A4FF5BCB8D3D070CFF32B319D6AB7E45DCB14"); cvCertDETESTeID00004ReducedBodyData = HexString.toByteArray("7F4E8201475F290100420E44455445535465494430303030347F4982011D060A04007F000702020202038120A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E537782207D5A0975FC2C3057EEF67530417AFFE7FB8055C126DC5C6CE94A4B44F330B5D9832026DC5C6CE94A4B44F330B5D9BBD77CBF958416295CF7E1CE6BCCDC18FF8C07B68441048BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F0469978520A9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A786410474FF63AB838C73C303AC003DFEE95CF8BF55F91E8FEBCB7395D942036E47CF1845EC786EC95BB453AAC288AD023B6067913CF9B63F908F49304E5CFC8B3050DD8701015F200E4445544553546549443030303034"); cvCertDETESTeID00004ReducedData = HexString.toByteArray("7F2182018F7F4E8201475F290100420E44455445535465494430303030347F4982011D060A04007F000702020202038120A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E537782207D5A0975FC2C3057EEF67530417AFFE7FB8055C126DC5C6CE94A4B44F330B5D9832026DC5C6CE94A4B44F330B5D9BBD77CBF958416295CF7E1CE6BCCDC18FF8C07B68441048BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F0469978520A9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A786410474FF63AB838C73C303AC003DFEE95CF8BF55F91E8FEBCB7395D942036E47CF1845EC786EC95BB453AAC288AD023B6067913CF9B63F908F49304E5CFC8B3050DD8701015F200E44455445535465494430303030345F37408CAC3E842EB053EE10E9D57FB373FF4E9C36D1EDF966D6535978D498309B00D59C51D83965F4B1C75557FA6B6CA03D360A782B9BC172CE391623D6BB48B9B1AA"); cvCertDETESTeID00004Data = HexString.toByteArray("7F218201B67F4E82016E5F290100420E44455445535465494430303030347F4982011D060A04007F000702020202038120A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E537782207D5A0975FC2C3057EEF67530417AFFE7FB8055C126DC5C6CE94A4B44F330B5D9832026DC5C6CE94A4B44F330B5D9BBD77CBF958416295CF7E1CE6BCCDC18FF8C07B68441048BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F0469978520A9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A786410474FF63AB838C73C303AC003DFEE95CF8BF55F91E8FEBCB7395D942036E47CF1845EC786EC95BB453AAC288AD023B6067913CF9B63F908F49304E5CFC8B3050DD8701015F200E44455445535465494430303030347F4C12060904007F0007030102025305FC0F13FFFF5F25060102000501015F24060105000501015F37408CAC3E842EB053EE10E9D57FB373FF4E9C36D1EDF966D6535978D498309B00D59C51D83965F4B1C75557FA6B6CA03D360A782B9BC172CE391623D6BB48B9B1AA"); cvCertDETESTeID00004ReducedWoDomainParamsData = HexString.toByteArray("7F2181BE7F4E81775F290100420E44455445535465494430303030347F494F060A04007F0007020202020386410474FF63AB838C73C303AC003DFEE95CF8BF55F91E8FEBCB7395D942036E47CF1845EC786EC95BB453AAC288AD023B6067913CF9B63F908F49304E5CFC8B3050DD5F200E44455445535465494430303030345F37408CAC3E842EB053EE10E9D57FB373FF4E9C36D1EDF966D6535978D498309B00D59C51D83965F4B1C75557FA6B6CA03D360A782B9BC172CE391623D6BB48B9B1AA"); cvCertDETESTeID00004ReducedWithExtensionsData = HexString.toByteArray("7F218201AB7F4E8201635F290100420E44455445535465494430303030347F4982011D060A04007F000702020202038120A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E537782207D5A0975FC2C3057EEF67530417AFFE7FB8055C126DC5C6CE94A4B44F330B5D9832026DC5C6CE94A4B44F330B5D9BBD77CBF958416295CF7E1CE6BCCDC18FF8C07B68441048BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F0469978520A9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A786410474FF63AB838C73C303AC003DFEE95CF8BF55F91E8FEBCB7395D942036E47CF1845EC786EC95BB453AAC288AD023B6067913CF9B63F908F49304E5CFC8B3050DD8701015F200E4445544553546549443030303034651A7318060A04007F00070301020201420A001122334455667788995F37408CAC3E842EB053EE10E9D57FB373FF4E9C36D1EDF966D6535978D498309B00D59C51D83965F4B1C75557FA6B6CA03D360A782B9BC172CE391623D6BB48B9B1AA"); reducedBodyTlv = new ConstructedTlvDataObject(reducedBodyData); reducedCertificateTlv = new ConstructedTlvDataObject(reducedCertificateData); cvCertDETESTeID00004ReducedBodyTlv = new ConstructedTlvDataObject(cvCertDETESTeID00004ReducedBodyData); cvCertDETESTeID00004ReducedTlv = new ConstructedTlvDataObject(cvCertDETESTeID00004ReducedData); cvCertDETESTeID00004Tlv = new ConstructedTlvDataObject(cvCertDETESTeID00004Data); cvCertDETESTeID00004ReducedWoDomainParamsTlv = new ConstructedTlvDataObject(cvCertDETESTeID00004ReducedWoDomainParamsData); cvCertDETESTeID00004ReducedWithExtensionsTlv = new ConstructedTlvDataObject(cvCertDETESTeID00004ReducedWithExtensionsData); signature = HexString.toByteArray("83B7E4CB46023B66EEB30CFC9E391283B1EE4F873527CF6C738A4C1EB4E212D0357C2D1264712253D6FF2ABC813A4FF5BCB8D3D070CFF32B319D6AB7E45DCB14"); } /** * Positive test case: check constructor for parsing certificate from TLV encoding. * @throws CertificateNotParseableException */ @Test public void testConstructor_ConstructedTlvDataObject() throws CertificateNotParseableException { ReducedCardVerifiableCertificate cvCertDETESTeID00004 = new ReducedCardVerifiableCertificate(cvCertDETESTeID00004ReducedTlv); assertEquals(cvCertDETESTeID00004ReducedTlv, cvCertDETESTeID00004.getEncoded()); } /** * Positive test case: check constructor for parsing certificate from full TLV encoding. * @throws CertificateNotParseableException */ @Test public void testConstructor_FullCvCertConstructedTlvDataObject() throws CertificateNotParseableException { ReducedCardVerifiableCertificate cvCertDETESTeID00004 = new ReducedCardVerifiableCertificate(cvCertDETESTeID00004Tlv); assertEquals(cvCertDETESTeID00004ReducedTlv, cvCertDETESTeID00004.getEncoded()); } /** * Positive test case: check constructor for instantiating from body and signature. * @throws CertificateNotParseableException */ @Test public void testConstructor_BodyByteArray() throws CertificateNotParseableException { ReducedCertificateBody body = new ReducedCertificateBody(reducedBodyTlv); ReducedCardVerifiableCertificate cvCertDETESTeID00004 = new ReducedCardVerifiableCertificate(body, signature); assertEquals(reducedCertificateTlv, cvCertDETESTeID00004.getEncoded()); } /** * Negative test case: parse CVCA root certificate without domain parameters * @throws CertificateNotParseableException */ @Test(expected = IllegalArgumentException.class) public void test_CvcaRootWithoutDomParams() throws CertificateNotParseableException { new ReducedCardVerifiableCertificate(cvCertDETESTeID00004ReducedWoDomainParamsTlv); } /** * Positive test case: check constructor for parsing certificate containing certificate extensions from full TLV encoding. * @throws CertificateNotParseableException */ @Test public void test_CvCertWithCertificateExtensions() throws CertificateNotParseableException { ReducedCardVerifiableCertificate certificate = new ReducedCardVerifiableCertificate(cvCertDETESTeID00004ReducedWithExtensionsTlv); assertEquals(cvCertDETESTeID00004ReducedWithExtensionsTlv, certificate.getEncoded()); } }