@Test public void getSKI() { byte[] ski = DSSASN1Utils.getSki(certificateWithAIA); assertEquals("4c4c4cfcacace6bb", Utils.toHex(ski)); CertificateToken certNoSKIextension = DSSUtils.loadCertificateFromBase64EncodedString( "MIICaDCCAdSgAwIBAgIDDIOqMAoGBiskAwMBAgUAMG8xCzAJBgNVBAYTAkRFMT0wOwYDVQQKFDRSZWd1bGllcnVuZ3NiZWjIb3JkZSBmyHVyIFRlbGVrb21tdW5pa2F0aW9uIHVuZCBQb3N0MSEwDAYHAoIGAQoHFBMBMTARBgNVBAMUCjVSLUNBIDE6UE4wIhgPMjAwMDAzMjIwODU1NTFaGA8yMDA1MDMyMjA4NTU1MVowbzELMAkGA1UEBhMCREUxPTA7BgNVBAoUNFJlZ3VsaWVydW5nc2JlaMhvcmRlIGbIdXIgVGVsZWtvbW11bmlrYXRpb24gdW5kIFBvc3QxITAMBgcCggYBCgcUEwExMBEGA1UEAxQKNVItQ0EgMTpQTjCBoTANBgkqhkiG9w0BAQEFAAOBjwAwgYsCgYEAih5BUycfBpqKhU8RDsaSvV5AtzWeXQRColL9CH3t0DKnhjKAlJ8iccFtJNv+d3bh8bb9sh0maRSo647xP7hsHTjKgTE4zM5BYNfXvST79OtcMgAzrnDiGjQIIWv8xbfV1MqxxdtZJygrwzRMb9jGCAGoJEymoyzAMNG7tSdBWnUCBQDAAAABoxIwEDAOBgNVHQ8BAf8EBAMCAQYwCgYGKyQDAwECBQADgYEAOaK8ihVSBUcL2IdVBxZYYUKwMz5m7H3zqhN8W9w+iafWudH6b+aahkbENEwzg3C3v5g8nze7v7ssacQze657LHjP+e7ksUDIgcS4R1pU2eN16bjSP/qGPF3rhrIEHoK5nJULkjkZYTtNiOvmQ/+G70TXDi3Os/TwLlWRvu+7YLM="); assertNull(DSSASN1Utils.getSki(certNoSKIextension)); assertNull(DSSASN1Utils.getSki(certNoSKIextension, false)); assertNotNull(DSSASN1Utils.getSki(certNoSKIextension, true)); CertificateToken c1 = DSSUtils.loadCertificateFromBase64EncodedString( "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"); CertificateToken c2 = DSSUtils.loadCertificateFromBase64EncodedString( "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"); byte[] skiC1 = DSSASN1Utils.getSki(c1); assertNotNull(skiC1); byte[] skiC2 = DSSASN1Utils.getSki(c2); assertNotNull(skiC2); assertFalse(Arrays.equals(skiC1, skiC2)); byte[] encodedPKC1 = c1.getPublicKey().getEncoded(); byte[] encodedPKC2 = c2.getPublicKey().getEncoded(); assertArrayEquals(encodedPKC1, encodedPKC2); byte[] fixedSkiC1 = DSSASN1Utils.computeSkiFromCert(c1); byte[] fixedSkiC2 = DSSASN1Utils.computeSkiFromCert(c2); assertArrayEquals(fixedSkiC1, fixedSkiC2); }
public static byte[] getSki(final CertificateToken certificateToken) { return getSki(certificateToken, false); }
DSSASN1Utils { public static byte[] getSki(final CertificateToken certificateToken) { return getSki(certificateToken, false); } }
DSSASN1Utils { public static byte[] getSki(final CertificateToken certificateToken) { return getSki(certificateToken, false); } private  DSSASN1Utils(); }
DSSASN1Utils { public static byte[] getSki(final CertificateToken certificateToken) { return getSki(certificateToken, false); } private  DSSASN1Utils(); @SuppressWarnings("unchecked") static T toASN1Primitive(final byte[] bytes); static byte[] getDEREncoded(ASN1Encodable asn1Encodable); static byte[] getBEREncoded(ASN1Encodable asn1Encodable); static byte[] getEncoded(BasicOCSPResp basicOCSPResp); static Date toDate(final ASN1GeneralizedTime asn1Date); static String toString(final ASN1OctetString value); static byte[] getEncoded(final TimeStampToken timeStampToken); static byte[] getEncoded(final CMSSignedData cmsSignedData); static byte[] getDEREncoded(final TimeStampToken timeStampToken); static byte[] getDEREncoded(final CMSSignedData data); static byte[] getDEREncoded(final TimestampBinary timestampBinary); static byte[] getDEREncoded(final byte[] bytes); static ASN1Sequence getAsn1SequenceFromDerOctetString(byte[] bytes); static byte[] getAsn1SignaturePolicyDigest(DigestAlgorithm digestAlgorithm, byte[] policyBytes); static AlgorithmIdentifier getAlgorithmIdentifier(final ASN1Sequence atsHashIndexValue); static AlgorithmIdentifier getAlgorithmIdentifier(DigestAlgorithm digestAlgorithm); static ASN1Sequence getCertificatesHashIndex(final ASN1Sequence atsHashIndexValue); static ASN1Sequence getCRLHashIndex(final ASN1Sequence atsHashIndexValue); static ASN1Sequence getUnsignedAttributesHashIndex(final ASN1Sequence atsHashIndexValue); @SuppressWarnings("unchecked") static List<DEROctetString> getDEROctetStrings(final ASN1Sequence asn1Sequence); static boolean hasIdPkixOcspNoCheckExtension(CertificateToken token); static List<CertificatePolicy> getCertificatePolicies(final CertificateToken certToken); static List<String> getQCStatementsIdList(final CertificateToken certToken); static List<String> getQCTypesIdList(final CertificateToken certToken); static List<String> getQCLegislations(CertificateToken certToken); static byte[] getSki(final CertificateToken certificateToken); static byte[] getSki(final CertificateToken certificateToken, boolean computeIfMissing); static byte[] getAuthorityKeyIdentifier(CertificateToken certificateToken); static byte[] computeSkiFromCert(final CertificateToken certificateToken); static byte[] computeSkiFromCertPublicKey(final PublicKey publicKey); static boolean isSkiEqual(final byte[] ski, final CertificateToken certificateToken); static List<String> getCAAccessLocations(final CertificateToken certificate); static List<String> getOCSPAccessLocations(final CertificateToken certificate); static List<String> getCrlUrls(final CertificateToken certificateToken); static boolean isOCSPSigning(CertificateToken certToken); static boolean isExtendedKeyUsagePresent(CertificateToken certToken, ASN1ObjectIdentifier oid); static X509CertificateHolder getX509CertificateHolder(CertificateToken certToken); static CertificateToken getCertificate(final X509CertificateHolder x509CertificateHolder); static CertificateIdentifier toIssuerSerialInfo(SignerId signerId); static X500Principal toX500Principal(X500Name x500Name); static CertificateIdentifier toCertificateIdentifier(final X500Principal issuerX500Principal, final BigInteger serialNumber, final byte[] ski); static IssuerSerial getIssuerSerial(final CertificateToken certToken); static boolean x500PrincipalAreEquals(final X500Principal firstX500Principal, final X500Principal secondX500Principal); static Map<String, String> get(final X500Principal x500Principal); static X500Principal getNormalizedX500Principal(final X500Principal x500Principal); static String getUtf8String(final X500Principal x500Principal); static String getString(ASN1Encodable attributeValue); static String extractAttributeFromX500Principal(ASN1ObjectIdentifier identifier, X500PrincipalHelper principal); static String getSubjectCommonName(CertificateToken cert); static String getHumanReadableName(CertificateToken cert); static SignerInformation getFirstSignerInformation(final CMSSignedData cms); static boolean isASN1SequenceTag(byte tagByte); static Date getDate(ASN1Encodable encodable); static boolean isEmpty(AttributeTable attributeTable); static AttributeTable emptyIfNull(AttributeTable original); static List<String> getExtendedKeyUsage(CertificateToken certToken); static IssuerSerial getIssuerSerial(byte[] binaries); static CertificateIdentifier toCertificateIdentifier(IssuerSerial issuerAndSerial); static ASN1Sequence getAtsHashIndex(AttributeTable timestampUnsignedAttributes); static ASN1Sequence getAtsHashIndexByVersion(AttributeTable timestampUnsignedAttributes, 
			ASN1ObjectIdentifier atsHashIndexVersionIdentifier); static ASN1ObjectIdentifier getAtsHashIndexVersionIdentifier(AttributeTable timestampUnsignedAttributes); static List<byte[]> getOctetStringForAtsHashIndex(Attribute attribute, ASN1ObjectIdentifier atsHashIndexVersionIdentifier); static ASN1Encodable getAsn1Encodable(AttributeTable unsignedAttributes, ASN1ObjectIdentifier oid); static ASN1Set getAsn1AttributeSet(AttributeTable unsignedAttributes, ASN1ObjectIdentifier oid); static Attribute[] getAsn1Attributes(AttributeTable unsignedAttributes, ASN1ObjectIdentifier oid); static List<TimeStampToken> findArchiveTimeStampTokens(AttributeTable unsignedAttributes); static boolean isArchiveTimeStampToken(Attribute attribute); static boolean isAttributeOfType(Attribute attribute, ASN1ObjectIdentifier asn1ObjectIdentifier); static TimeStampToken getTimeStampToken(Attribute attribute); static CMSSignedData getCMSSignedData(Attribute attribute); static ASN1Encodable getAsn1Encodable(Attribute attribute); static Date getTimeStampTokenGenerationTime(TimeStampToken timeStampToken); static RevocationValues getRevocationValues(ASN1Encodable encodable); static CertificateRef getCertificateRef(OtherCertID otherCertId); static PSD2QcType getPSD2QcStatement(CertificateToken certToken); static List<String> getSubjectAlternativeNames(CertificateToken certToken); static SemanticsIdentifier getSemanticsIdentifier(CertificateToken certToken); }
DSSASN1Utils { public static byte[] getSki(final CertificateToken certificateToken) { return getSki(certificateToken, false); } private  DSSASN1Utils(); @SuppressWarnings("unchecked") static T toASN1Primitive(final byte[] bytes); static byte[] getDEREncoded(ASN1Encodable asn1Encodable); static byte[] getBEREncoded(ASN1Encodable asn1Encodable); static byte[] getEncoded(BasicOCSPResp basicOCSPResp); static Date toDate(final ASN1GeneralizedTime asn1Date); static String toString(final ASN1OctetString value); static byte[] getEncoded(final TimeStampToken timeStampToken); static byte[] getEncoded(final CMSSignedData cmsSignedData); static byte[] getDEREncoded(final TimeStampToken timeStampToken); static byte[] getDEREncoded(final CMSSignedData data); static byte[] getDEREncoded(final TimestampBinary timestampBinary); static byte[] getDEREncoded(final byte[] bytes); static ASN1Sequence getAsn1SequenceFromDerOctetString(byte[] bytes); static byte[] getAsn1SignaturePolicyDigest(DigestAlgorithm digestAlgorithm, byte[] policyBytes); static AlgorithmIdentifier getAlgorithmIdentifier(final ASN1Sequence atsHashIndexValue); static AlgorithmIdentifier getAlgorithmIdentifier(DigestAlgorithm digestAlgorithm); static ASN1Sequence getCertificatesHashIndex(final ASN1Sequence atsHashIndexValue); static ASN1Sequence getCRLHashIndex(final ASN1Sequence atsHashIndexValue); static ASN1Sequence getUnsignedAttributesHashIndex(final ASN1Sequence atsHashIndexValue); @SuppressWarnings("unchecked") static List<DEROctetString> getDEROctetStrings(final ASN1Sequence asn1Sequence); static boolean hasIdPkixOcspNoCheckExtension(CertificateToken token); static List<CertificatePolicy> getCertificatePolicies(final CertificateToken certToken); static List<String> getQCStatementsIdList(final CertificateToken certToken); static List<String> getQCTypesIdList(final CertificateToken certToken); static List<String> getQCLegislations(CertificateToken certToken); static byte[] getSki(final CertificateToken certificateToken); static byte[] getSki(final CertificateToken certificateToken, boolean computeIfMissing); static byte[] getAuthorityKeyIdentifier(CertificateToken certificateToken); static byte[] computeSkiFromCert(final CertificateToken certificateToken); static byte[] computeSkiFromCertPublicKey(final PublicKey publicKey); static boolean isSkiEqual(final byte[] ski, final CertificateToken certificateToken); static List<String> getCAAccessLocations(final CertificateToken certificate); static List<String> getOCSPAccessLocations(final CertificateToken certificate); static List<String> getCrlUrls(final CertificateToken certificateToken); static boolean isOCSPSigning(CertificateToken certToken); static boolean isExtendedKeyUsagePresent(CertificateToken certToken, ASN1ObjectIdentifier oid); static X509CertificateHolder getX509CertificateHolder(CertificateToken certToken); static CertificateToken getCertificate(final X509CertificateHolder x509CertificateHolder); static CertificateIdentifier toIssuerSerialInfo(SignerId signerId); static X500Principal toX500Principal(X500Name x500Name); static CertificateIdentifier toCertificateIdentifier(final X500Principal issuerX500Principal, final BigInteger serialNumber, final byte[] ski); static IssuerSerial getIssuerSerial(final CertificateToken certToken); static boolean x500PrincipalAreEquals(final X500Principal firstX500Principal, final X500Principal secondX500Principal); static Map<String, String> get(final X500Principal x500Principal); static X500Principal getNormalizedX500Principal(final X500Principal x500Principal); static String getUtf8String(final X500Principal x500Principal); static String getString(ASN1Encodable attributeValue); static String extractAttributeFromX500Principal(ASN1ObjectIdentifier identifier, X500PrincipalHelper principal); static String getSubjectCommonName(CertificateToken cert); static String getHumanReadableName(CertificateToken cert); static SignerInformation getFirstSignerInformation(final CMSSignedData cms); static boolean isASN1SequenceTag(byte tagByte); static Date getDate(ASN1Encodable encodable); static boolean isEmpty(AttributeTable attributeTable); static AttributeTable emptyIfNull(AttributeTable original); static List<String> getExtendedKeyUsage(CertificateToken certToken); static IssuerSerial getIssuerSerial(byte[] binaries); static CertificateIdentifier toCertificateIdentifier(IssuerSerial issuerAndSerial); static ASN1Sequence getAtsHashIndex(AttributeTable timestampUnsignedAttributes); static ASN1Sequence getAtsHashIndexByVersion(AttributeTable timestampUnsignedAttributes, 
			ASN1ObjectIdentifier atsHashIndexVersionIdentifier); static ASN1ObjectIdentifier getAtsHashIndexVersionIdentifier(AttributeTable timestampUnsignedAttributes); static List<byte[]> getOctetStringForAtsHashIndex(Attribute attribute, ASN1ObjectIdentifier atsHashIndexVersionIdentifier); static ASN1Encodable getAsn1Encodable(AttributeTable unsignedAttributes, ASN1ObjectIdentifier oid); static ASN1Set getAsn1AttributeSet(AttributeTable unsignedAttributes, ASN1ObjectIdentifier oid); static Attribute[] getAsn1Attributes(AttributeTable unsignedAttributes, ASN1ObjectIdentifier oid); static List<TimeStampToken> findArchiveTimeStampTokens(AttributeTable unsignedAttributes); static boolean isArchiveTimeStampToken(Attribute attribute); static boolean isAttributeOfType(Attribute attribute, ASN1ObjectIdentifier asn1ObjectIdentifier); static TimeStampToken getTimeStampToken(Attribute attribute); static CMSSignedData getCMSSignedData(Attribute attribute); static ASN1Encodable getAsn1Encodable(Attribute attribute); static Date getTimeStampTokenGenerationTime(TimeStampToken timeStampToken); static RevocationValues getRevocationValues(ASN1Encodable encodable); static CertificateRef getCertificateRef(OtherCertID otherCertId); static PSD2QcType getPSD2QcStatement(CertificateToken certToken); static List<String> getSubjectAlternativeNames(CertificateToken certToken); static SemanticsIdentifier getSemanticsIdentifier(CertificateToken certToken);  }