From 3d55c0b45bf43a8aee2030d79cd3d4f3a546144b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Daniel=20Mart=C3=AD?=
- * The
- * Each element of the set is a
- * All X.509 certificate extensions that a Note: if you're trying to be ultra orthodox, don't use this! It shouldn't be in here.
- */
- public static final ASN1ObjectIdentifier EmailAddress = PKCSObjectIdentifiers.pkcs_9_at_emailAddress;
-
- /**
- * more from PKCS#9
- */
- public static final ASN1ObjectIdentifier UnstructuredName = PKCSObjectIdentifiers.pkcs_9_at_unstructuredName;
- public static final ASN1ObjectIdentifier UnstructuredAddress = PKCSObjectIdentifiers.pkcs_9_at_unstructuredAddress;
-
- /**
- * email address in Verisign certificates
- */
- public static final ASN1ObjectIdentifier E = EmailAddress;
-
- /*
- * others...
- */
- public static final ASN1ObjectIdentifier DC = new ASN1ObjectIdentifier("0.9.2342.19200300.100.1.25");
-
- /**
- * LDAP User id.
- */
- public static final ASN1ObjectIdentifier UID = new ASN1ObjectIdentifier("0.9.2342.19200300.100.1.1");
-
- /**
- * default look up table translating OID values into their common symbols following
- * the convention in RFC 2253 with a few extras
- */
- private static final Hashtable DefaultSymbols = new Hashtable();
-
- /**
- * look up table translating common symbols into their OIDS.
- */
- private static final Hashtable DefaultLookUp = new Hashtable();
-
- static
- {
- DefaultSymbols.put(C, "C");
- DefaultSymbols.put(O, "O");
- DefaultSymbols.put(T, "T");
- DefaultSymbols.put(OU, "OU");
- DefaultSymbols.put(CN, "CN");
- DefaultSymbols.put(L, "L");
- DefaultSymbols.put(ST, "ST");
- DefaultSymbols.put(SN, "SERIALNUMBER");
- DefaultSymbols.put(EmailAddress, "E");
- DefaultSymbols.put(DC, "DC");
- DefaultSymbols.put(UID, "UID");
- DefaultSymbols.put(STREET, "STREET");
- DefaultSymbols.put(SURNAME, "SURNAME");
- DefaultSymbols.put(GIVENNAME, "GIVENNAME");
- DefaultSymbols.put(INITIALS, "INITIALS");
- DefaultSymbols.put(GENERATION, "GENERATION");
- DefaultSymbols.put(UnstructuredAddress, "unstructuredAddress");
- DefaultSymbols.put(UnstructuredName, "unstructuredName");
- DefaultSymbols.put(UNIQUE_IDENTIFIER, "UniqueIdentifier");
- DefaultSymbols.put(DN_QUALIFIER, "DN");
- DefaultSymbols.put(PSEUDONYM, "Pseudonym");
- DefaultSymbols.put(POSTAL_ADDRESS, "PostalAddress");
- DefaultSymbols.put(NAME_AT_BIRTH, "NameAtBirth");
- DefaultSymbols.put(COUNTRY_OF_CITIZENSHIP, "CountryOfCitizenship");
- DefaultSymbols.put(COUNTRY_OF_RESIDENCE, "CountryOfResidence");
- DefaultSymbols.put(GENDER, "Gender");
- DefaultSymbols.put(PLACE_OF_BIRTH, "PlaceOfBirth");
- DefaultSymbols.put(DATE_OF_BIRTH, "DateOfBirth");
- DefaultSymbols.put(POSTAL_CODE, "PostalCode");
- DefaultSymbols.put(BUSINESS_CATEGORY, "BusinessCategory");
- DefaultSymbols.put(TELEPHONE_NUMBER, "TelephoneNumber");
- DefaultSymbols.put(NAME, "Name");
-
- DefaultLookUp.put("c", C);
- DefaultLookUp.put("o", O);
- DefaultLookUp.put("t", T);
- DefaultLookUp.put("ou", OU);
- DefaultLookUp.put("cn", CN);
- DefaultLookUp.put("l", L);
- DefaultLookUp.put("st", ST);
- DefaultLookUp.put("sn", SN);
- DefaultLookUp.put("serialnumber", SN);
- DefaultLookUp.put("street", STREET);
- DefaultLookUp.put("emailaddress", E);
- DefaultLookUp.put("dc", DC);
- DefaultLookUp.put("e", E);
- DefaultLookUp.put("uid", UID);
- DefaultLookUp.put("surname", SURNAME);
- DefaultLookUp.put("givenname", GIVENNAME);
- DefaultLookUp.put("initials", INITIALS);
- DefaultLookUp.put("generation", GENERATION);
- DefaultLookUp.put("unstructuredaddress", UnstructuredAddress);
- DefaultLookUp.put("unstructuredname", UnstructuredName);
- DefaultLookUp.put("uniqueidentifier", UNIQUE_IDENTIFIER);
- DefaultLookUp.put("dn", DN_QUALIFIER);
- DefaultLookUp.put("pseudonym", PSEUDONYM);
- DefaultLookUp.put("postaladdress", POSTAL_ADDRESS);
- DefaultLookUp.put("nameofbirth", NAME_AT_BIRTH);
- DefaultLookUp.put("countryofcitizenship", COUNTRY_OF_CITIZENSHIP);
- DefaultLookUp.put("countryofresidence", COUNTRY_OF_RESIDENCE);
- DefaultLookUp.put("gender", GENDER);
- DefaultLookUp.put("placeofbirth", PLACE_OF_BIRTH);
- DefaultLookUp.put("dateofbirth", DATE_OF_BIRTH);
- DefaultLookUp.put("postalcode", POSTAL_CODE);
- DefaultLookUp.put("businesscategory", BUSINESS_CATEGORY);
- DefaultLookUp.put("telephonenumber", TELEPHONE_NUMBER);
- DefaultLookUp.put("name", NAME);
- }
-
- /**
- * Singleton instance.
- */
- public static final X500NameStyle INSTANCE = new BCStyle();
-
- protected Hashtable defaultLookUp;
- protected Hashtable defaultSymbols;
-
- protected BCStyle()
- {
- defaultSymbols = copyHashTable(DefaultSymbols);
- defaultLookUp = copyHashTable(DefaultLookUp);
- }
-
- public ASN1Encodable stringToValue(ASN1ObjectIdentifier oid, String value)
- {
- if (value.length() != 0 && value.charAt(0) == '#')
- {
- try
- {
- return IETFUtils.valueFromHexString(value, 1);
- }
- catch (IOException e)
- {
- throw new RuntimeException("can't recode value for oid " + oid.getId());
- }
- }
- else
- {
- if (value.length() != 0 && value.charAt(0) == '\\')
- {
- value = value.substring(1);
- }
- if (oid.equals(EmailAddress) || oid.equals(DC))
- {
- return new DERIA5String(value);
- }
- else if (oid.equals(DATE_OF_BIRTH)) // accept time string as well as # (for compatibility)
- {
- return new ASN1GeneralizedTime(value);
- }
- else if (oid.equals(C) || oid.equals(SN) || oid.equals(DN_QUALIFIER)
- || oid.equals(TELEPHONE_NUMBER))
- {
- return new DERPrintableString(value);
- }
- }
-
- return new DERUTF8String(value);
- }
-
- public String oidToDisplayName(ASN1ObjectIdentifier oid)
- {
- return (String)DefaultSymbols.get(oid);
- }
-
- public String[] oidToAttrNames(ASN1ObjectIdentifier oid)
- {
- return IETFUtils.findAttrNamesForOID(oid, defaultLookUp);
- }
-
- public ASN1ObjectIdentifier attrNameToOID(String attrName)
- {
- return IETFUtils.decodeAttrName(attrName, defaultLookUp);
- }
-
- public boolean areEqual(X500Name name1, X500Name name2)
- {
- RDN[] rdns1 = name1.getRDNs();
- RDN[] rdns2 = name2.getRDNs();
-
- if (rdns1.length != rdns2.length)
- {
- return false;
- }
-
- boolean reverse = false;
-
- if (rdns1[0].getFirst() != null && rdns2[0].getFirst() != null)
- {
- reverse = !rdns1[0].getFirst().getType().equals(rdns2[0].getFirst().getType()); // guess forward
- }
-
- for (int i = 0; i != rdns1.length; i++)
- {
- if (!foundMatch(reverse, rdns1[i], rdns2))
- {
- return false;
- }
- }
-
- return true;
- }
-
- private boolean foundMatch(boolean reverse, RDN rdn, RDN[] possRDNs)
- {
- if (reverse)
- {
- for (int i = possRDNs.length - 1; i >= 0; i--)
- {
- if (possRDNs[i] != null && rdnAreEqual(rdn, possRDNs[i]))
- {
- possRDNs[i] = null;
- return true;
- }
- }
- }
- else
- {
- for (int i = 0; i != possRDNs.length; i++)
- {
- if (possRDNs[i] != null && rdnAreEqual(rdn, possRDNs[i]))
- {
- possRDNs[i] = null;
- return true;
- }
- }
- }
-
- return false;
- }
-
- protected boolean rdnAreEqual(RDN rdn1, RDN rdn2)
- {
- return IETFUtils.rDNAreEqual(rdn1, rdn2);
- }
-
- public RDN[] fromString(String dirName)
- {
- return IETFUtils.rDNsFromString(dirName, this);
- }
-
- public int calculateHashCode(X500Name name)
- {
- int hashCodeValue = 0;
- RDN[] rdns = name.getRDNs();
-
- // this needs to be order independent, like equals
- for (int i = 0; i != rdns.length; i++)
- {
- if (rdns[i].isMultiValued())
- {
- AttributeTypeAndValue[] atv = rdns[i].getTypesAndValues();
-
- for (int j = 0; j != atv.length; j++)
- {
- hashCodeValue ^= atv[j].getType().hashCode();
- hashCodeValue ^= calcHashCode(atv[j].getValue());
- }
- }
- else
- {
- hashCodeValue ^= rdns[i].getFirst().getType().hashCode();
- hashCodeValue ^= calcHashCode(rdns[i].getFirst().getValue());
- }
- }
-
- return hashCodeValue;
- }
-
- private int calcHashCode(ASN1Encodable enc)
- {
- String value = IETFUtils.valueToString(enc);
-
- value = IETFUtils.canonicalize(value);
-
- return value.hashCode();
- }
-
- public String toString(X500Name name)
- {
- StringBuffer buf = new StringBuffer();
- boolean first = true;
-
- RDN[] rdns = name.getRDNs();
-
- for (int i = 0; i < rdns.length; i++)
- {
- if (first)
- {
- first = false;
- }
- else
- {
- buf.append(',');
- }
-
- IETFUtils.appendRDN(buf, rdns[i], defaultSymbols);
- }
-
- return buf.toString();
- }
-
- private static Hashtable copyHashTable(Hashtable paramsMap)
- {
- Hashtable newTable = new Hashtable();
-
- Enumeration keys = paramsMap.keys();
- while (keys.hasMoreElements())
- {
- Object key = keys.nextElement();
- newTable.put(key, paramsMap.get(key));
- }
-
- return newTable;
- }
-}
diff --git a/extern/spongycastle/core/src/main/jdk1.1/org/spongycastle/asn1/x500/style/RFC4519Style.java b/extern/spongycastle/core/src/main/jdk1.1/org/spongycastle/asn1/x500/style/RFC4519Style.java
deleted file mode 100644
index 0fd117850..000000000
--- a/extern/spongycastle/core/src/main/jdk1.1/org/spongycastle/asn1/x500/style/RFC4519Style.java
+++ /dev/null
@@ -1,380 +0,0 @@
-package org.spongycastle.asn1.x500.style;
-
-import java.io.IOException;
-import java.util.Enumeration;
-import java.util.Hashtable;
-
-import org.spongycastle.asn1.ASN1Encodable;
-import org.spongycastle.asn1.ASN1ObjectIdentifier;
-import org.spongycastle.asn1.DERIA5String;
-import org.spongycastle.asn1.DERPrintableString;
-import org.spongycastle.asn1.DERUTF8String;
-import org.spongycastle.asn1.x500.AttributeTypeAndValue;
-import org.spongycastle.asn1.x500.RDN;
-import org.spongycastle.asn1.x500.X500Name;
-import org.spongycastle.asn1.x500.X500NameStyle;
-
-public class RFC4519Style
- implements X500NameStyle
-{
- public static final ASN1ObjectIdentifier businessCategory = new ASN1ObjectIdentifier("2.5.4.15");
- public static final ASN1ObjectIdentifier c = new ASN1ObjectIdentifier("2.5.4.6");
- public static final ASN1ObjectIdentifier cn = new ASN1ObjectIdentifier("2.5.4.3");
- public static final ASN1ObjectIdentifier dc = new ASN1ObjectIdentifier("0.9.2342.19200300.100.1.25");
- public static final ASN1ObjectIdentifier description = new ASN1ObjectIdentifier("2.5.4.13");
- public static final ASN1ObjectIdentifier destinationIndicator = new ASN1ObjectIdentifier("2.5.4.27");
- public static final ASN1ObjectIdentifier distinguishedName = new ASN1ObjectIdentifier("2.5.4.49");
- public static final ASN1ObjectIdentifier dnQualifier = new ASN1ObjectIdentifier("2.5.4.46");
- public static final ASN1ObjectIdentifier enhancedSearchGuide = new ASN1ObjectIdentifier("2.5.4.47");
- public static final ASN1ObjectIdentifier facsimileTelephoneNumber = new ASN1ObjectIdentifier("2.5.4.23");
- public static final ASN1ObjectIdentifier generationQualifier = new ASN1ObjectIdentifier("2.5.4.44");
- public static final ASN1ObjectIdentifier givenName = new ASN1ObjectIdentifier("2.5.4.42");
- public static final ASN1ObjectIdentifier houseIdentifier = new ASN1ObjectIdentifier("2.5.4.51");
- public static final ASN1ObjectIdentifier initials = new ASN1ObjectIdentifier("2.5.4.43");
- public static final ASN1ObjectIdentifier internationalISDNNumber = new ASN1ObjectIdentifier("2.5.4.25");
- public static final ASN1ObjectIdentifier l = new ASN1ObjectIdentifier("2.5.4.7");
- public static final ASN1ObjectIdentifier member = new ASN1ObjectIdentifier("2.5.4.31");
- public static final ASN1ObjectIdentifier name = new ASN1ObjectIdentifier("2.5.4.41");
- public static final ASN1ObjectIdentifier o = new ASN1ObjectIdentifier("2.5.4.10");
- public static final ASN1ObjectIdentifier ou = new ASN1ObjectIdentifier("2.5.4.11");
- public static final ASN1ObjectIdentifier owner = new ASN1ObjectIdentifier("2.5.4.32");
- public static final ASN1ObjectIdentifier physicalDeliveryOfficeName = new ASN1ObjectIdentifier("2.5.4.19");
- public static final ASN1ObjectIdentifier postalAddress = new ASN1ObjectIdentifier("2.5.4.16");
- public static final ASN1ObjectIdentifier postalCode = new ASN1ObjectIdentifier("2.5.4.17");
- public static final ASN1ObjectIdentifier postOfficeBox = new ASN1ObjectIdentifier("2.5.4.18");
- public static final ASN1ObjectIdentifier preferredDeliveryMethod = new ASN1ObjectIdentifier("2.5.4.28");
- public static final ASN1ObjectIdentifier registeredAddress = new ASN1ObjectIdentifier("2.5.4.26");
- public static final ASN1ObjectIdentifier roleOccupant = new ASN1ObjectIdentifier("2.5.4.33");
- public static final ASN1ObjectIdentifier searchGuide = new ASN1ObjectIdentifier("2.5.4.14");
- public static final ASN1ObjectIdentifier seeAlso = new ASN1ObjectIdentifier("2.5.4.34");
- public static final ASN1ObjectIdentifier serialNumber = new ASN1ObjectIdentifier("2.5.4.5");
- public static final ASN1ObjectIdentifier sn = new ASN1ObjectIdentifier("2.5.4.4");
- public static final ASN1ObjectIdentifier st = new ASN1ObjectIdentifier("2.5.4.8");
- public static final ASN1ObjectIdentifier street = new ASN1ObjectIdentifier("2.5.4.9");
- public static final ASN1ObjectIdentifier telephoneNumber = new ASN1ObjectIdentifier("2.5.4.20");
- public static final ASN1ObjectIdentifier teletexTerminalIdentifier = new ASN1ObjectIdentifier("2.5.4.22");
- public static final ASN1ObjectIdentifier telexNumber = new ASN1ObjectIdentifier("2.5.4.21");
- public static final ASN1ObjectIdentifier title = new ASN1ObjectIdentifier("2.5.4.12");
- public static final ASN1ObjectIdentifier uid = new ASN1ObjectIdentifier("0.9.2342.19200300.100.1.1");
- public static final ASN1ObjectIdentifier uniqueMember = new ASN1ObjectIdentifier("2.5.4.50");
- public static final ASN1ObjectIdentifier userPassword = new ASN1ObjectIdentifier("2.5.4.35");
- public static final ASN1ObjectIdentifier x121Address = new ASN1ObjectIdentifier("2.5.4.24");
- public static final ASN1ObjectIdentifier x500UniqueIdentifier = new ASN1ObjectIdentifier("2.5.4.45");
-
- /**
- * default look up table translating OID values into their common symbols following
- * the convention in RFC 2253 with a few extras
- */
- private static final Hashtable DefaultSymbols = new Hashtable();
-
- /**
- * look up table translating common symbols into their OIDS.
- */
- private static final Hashtable DefaultLookUp = new Hashtable();
-
- static
- {
- DefaultSymbols.put(businessCategory, "businessCategory");
- DefaultSymbols.put(c, "c");
- DefaultSymbols.put(cn, "cn");
- DefaultSymbols.put(dc, "dc");
- DefaultSymbols.put(description, "description");
- DefaultSymbols.put(destinationIndicator, "destinationIndicator");
- DefaultSymbols.put(distinguishedName, "distinguishedName");
- DefaultSymbols.put(dnQualifier, "dnQualifier");
- DefaultSymbols.put(enhancedSearchGuide, "enhancedSearchGuide");
- DefaultSymbols.put(facsimileTelephoneNumber, "facsimileTelephoneNumber");
- DefaultSymbols.put(generationQualifier, "generationQualifier");
- DefaultSymbols.put(givenName, "givenName");
- DefaultSymbols.put(houseIdentifier, "houseIdentifier");
- DefaultSymbols.put(initials, "initials");
- DefaultSymbols.put(internationalISDNNumber, "internationalISDNNumber");
- DefaultSymbols.put(l, "l");
- DefaultSymbols.put(member, "member");
- DefaultSymbols.put(name, "name");
- DefaultSymbols.put(o, "o");
- DefaultSymbols.put(ou, "ou");
- DefaultSymbols.put(owner, "owner");
- DefaultSymbols.put(physicalDeliveryOfficeName, "physicalDeliveryOfficeName");
- DefaultSymbols.put(postalAddress, "postalAddress");
- DefaultSymbols.put(postalCode, "postalCode");
- DefaultSymbols.put(postOfficeBox, "postOfficeBox");
- DefaultSymbols.put(preferredDeliveryMethod, "preferredDeliveryMethod");
- DefaultSymbols.put(registeredAddress, "registeredAddress");
- DefaultSymbols.put(roleOccupant, "roleOccupant");
- DefaultSymbols.put(searchGuide, "searchGuide");
- DefaultSymbols.put(seeAlso, "seeAlso");
- DefaultSymbols.put(serialNumber, "serialNumber");
- DefaultSymbols.put(sn, "sn");
- DefaultSymbols.put(st, "st");
- DefaultSymbols.put(street, "street");
- DefaultSymbols.put(telephoneNumber, "telephoneNumber");
- DefaultSymbols.put(teletexTerminalIdentifier, "teletexTerminalIdentifier");
- DefaultSymbols.put(telexNumber, "telexNumber");
- DefaultSymbols.put(title, "title");
- DefaultSymbols.put(uid, "uid");
- DefaultSymbols.put(uniqueMember, "uniqueMember");
- DefaultSymbols.put(userPassword, "userPassword");
- DefaultSymbols.put(x121Address, "x121Address");
- DefaultSymbols.put(x500UniqueIdentifier, "x500UniqueIdentifier");
-
- DefaultLookUp.put("businesscategory", businessCategory);
- DefaultLookUp.put("c", c);
- DefaultLookUp.put("cn", cn);
- DefaultLookUp.put("dc", dc);
- DefaultLookUp.put("description", description);
- DefaultLookUp.put("destinationindicator", destinationIndicator);
- DefaultLookUp.put("distinguishedname", distinguishedName);
- DefaultLookUp.put("dnqualifier", dnQualifier);
- DefaultLookUp.put("enhancedsearchguide", enhancedSearchGuide);
- DefaultLookUp.put("facsimiletelephonenumber", facsimileTelephoneNumber);
- DefaultLookUp.put("generationqualifier", generationQualifier);
- DefaultLookUp.put("givenname", givenName);
- DefaultLookUp.put("houseidentifier", houseIdentifier);
- DefaultLookUp.put("initials", initials);
- DefaultLookUp.put("internationalisdnnumber", internationalISDNNumber);
- DefaultLookUp.put("l", l);
- DefaultLookUp.put("member", member);
- DefaultLookUp.put("name", name);
- DefaultLookUp.put("o", o);
- DefaultLookUp.put("ou", ou);
- DefaultLookUp.put("owner", owner);
- DefaultLookUp.put("physicaldeliveryofficename", physicalDeliveryOfficeName);
- DefaultLookUp.put("postaladdress", postalAddress);
- DefaultLookUp.put("postalcode", postalCode);
- DefaultLookUp.put("postofficebox", postOfficeBox);
- DefaultLookUp.put("preferreddeliverymethod", preferredDeliveryMethod);
- DefaultLookUp.put("registeredaddress", registeredAddress);
- DefaultLookUp.put("roleoccupant", roleOccupant);
- DefaultLookUp.put("searchguide", searchGuide);
- DefaultLookUp.put("seealso", seeAlso);
- DefaultLookUp.put("serialnumber", serialNumber);
- DefaultLookUp.put("sn", sn);
- DefaultLookUp.put("st", st);
- DefaultLookUp.put("street", street);
- DefaultLookUp.put("telephonenumber", telephoneNumber);
- DefaultLookUp.put("teletexterminalidentifier", teletexTerminalIdentifier);
- DefaultLookUp.put("telexnumber", telexNumber);
- DefaultLookUp.put("title", title);
- DefaultLookUp.put("uid", uid);
- DefaultLookUp.put("uniquemember", uniqueMember);
- DefaultLookUp.put("userpassword", userPassword);
- DefaultLookUp.put("x121address", x121Address);
- DefaultLookUp.put("x500uniqueidentifier", x500UniqueIdentifier);
-
- // TODO: need to add correct matching for equality comparisons.
- }
-
- /**
- * Singleton instance.
- */
- public static final X500NameStyle INSTANCE = new RFC4519Style();
-
- protected Hashtable defaultLookUp;
- protected Hashtable defaultSymbols;
-
- protected RFC4519Style()
- {
- defaultSymbols = copyHashTable(DefaultSymbols);
- defaultLookUp = copyHashTable(DefaultLookUp);
- }
-
- public ASN1Encodable stringToValue(ASN1ObjectIdentifier oid, String value)
- {
- if (value.length() != 0 && value.charAt(0) == '#')
- {
- try
- {
- return IETFUtils.valueFromHexString(value, 1);
- }
- catch (IOException e)
- {
- throw new RuntimeException("can't recode value for oid " + oid.getId());
- }
- }
- else
- {
- if (value.length() != 0 && value.charAt(0) == '\\')
- {
- value = value.substring(1);
- }
- if (oid.equals(dc))
- {
- return new DERIA5String(value);
- }
- else if (oid.equals(c) || oid.equals(serialNumber) || oid.equals(dnQualifier)
- || oid.equals(telephoneNumber))
- {
- return new DERPrintableString(value);
- }
- }
-
- return new DERUTF8String(value);
- }
-
- public String oidToDisplayName(ASN1ObjectIdentifier oid)
- {
- return (String)DefaultSymbols.get(oid);
- }
-
- public String[] oidToAttrNames(ASN1ObjectIdentifier oid)
- {
- return IETFUtils.findAttrNamesForOID(oid, defaultLookUp);
- }
-
- public ASN1ObjectIdentifier attrNameToOID(String attrName)
- {
- return IETFUtils.decodeAttrName(attrName, defaultLookUp);
- }
-
- public boolean areEqual(X500Name name1, X500Name name2)
- {
- RDN[] rdns1 = name1.getRDNs();
- RDN[] rdns2 = name2.getRDNs();
-
- if (rdns1.length != rdns2.length)
- {
- return false;
- }
-
- boolean reverse = false;
-
- if (rdns1[0].getFirst() != null && rdns2[0].getFirst() != null)
- {
- reverse = !rdns1[0].getFirst().getType().equals(rdns2[0].getFirst().getType()); // guess forward
- }
-
- for (int i = 0; i != rdns1.length; i++)
- {
- if (!foundMatch(reverse, rdns1[i], rdns2))
- {
- return false;
- }
- }
-
- return true;
- }
-
- private boolean foundMatch(boolean reverse, RDN rdn, RDN[] possRDNs)
- {
- if (reverse)
- {
- for (int i = possRDNs.length - 1; i >= 0; i--)
- {
- if (possRDNs[i] != null && rdnAreEqual(rdn, possRDNs[i]))
- {
- possRDNs[i] = null;
- return true;
- }
- }
- }
- else
- {
- for (int i = 0; i != possRDNs.length; i++)
- {
- if (possRDNs[i] != null && rdnAreEqual(rdn, possRDNs[i]))
- {
- possRDNs[i] = null;
- return true;
- }
- }
- }
-
- return false;
- }
-
- protected boolean rdnAreEqual(RDN rdn1, RDN rdn2)
- {
- return IETFUtils.rDNAreEqual(rdn1, rdn2);
- }
-
- // parse backwards
- public RDN[] fromString(String dirName)
- {
- RDN[] tmp = IETFUtils.rDNsFromString(dirName, this);
- RDN[] res = new RDN[tmp.length];
-
- for (int i = 0; i != tmp.length; i++)
- {
- res[res.length - i - 1] = tmp[i];
- }
-
- return res;
- }
-
- public int calculateHashCode(X500Name name)
- {
- int hashCodeValue = 0;
- RDN[] rdns = name.getRDNs();
-
- // this needs to be order independent, like equals
- for (int i = 0; i != rdns.length; i++)
- {
- if (rdns[i].isMultiValued())
- {
- AttributeTypeAndValue[] atv = rdns[i].getTypesAndValues();
-
- for (int j = 0; j != atv.length; j++)
- {
- hashCodeValue ^= atv[j].getType().hashCode();
- hashCodeValue ^= calcHashCode(atv[j].getValue());
- }
- }
- else
- {
- hashCodeValue ^= rdns[i].getFirst().getType().hashCode();
- hashCodeValue ^= calcHashCode(rdns[i].getFirst().getValue());
- }
- }
-
- return hashCodeValue;
- }
-
- private int calcHashCode(ASN1Encodable enc)
- {
- String value = IETFUtils.valueToString(enc);
-
- value = IETFUtils.canonicalize(value);
-
- return value.hashCode();
- }
-
- // convert in reverse
- public String toString(X500Name name)
- {
- StringBuffer buf = new StringBuffer();
- boolean first = true;
-
- RDN[] rdns = name.getRDNs();
-
- for (int i = rdns.length - 1; i >= 0; i--)
- {
- if (first)
- {
- first = false;
- }
- else
- {
- buf.append(',');
- }
-
- IETFUtils.appendRDN(buf, rdns[i], defaultSymbols);
- }
-
- return buf.toString();
- }
-
- private static Hashtable copyHashTable(Hashtable paramsMap)
- {
- Hashtable newTable = new Hashtable();
-
- Enumeration keys = paramsMap.keys();
- while (keys.hasMoreElements())
- {
- Object key = keys.nextElement();
- newTable.put(key, paramsMap.get(key));
- }
-
- return newTable;
- }
-}
diff --git a/extern/spongycastle/core/src/main/jdk1.1/org/spongycastle/crypto/agreement/jpake/JPAKEParticipant.java b/extern/spongycastle/core/src/main/jdk1.1/org/spongycastle/crypto/agreement/jpake/JPAKEParticipant.java
deleted file mode 100644
index 17554b960..000000000
--- a/extern/spongycastle/core/src/main/jdk1.1/org/spongycastle/crypto/agreement/jpake/JPAKEParticipant.java
+++ /dev/null
@@ -1,573 +0,0 @@
-package org.spongycastle.crypto.agreement.jpake;
-
-import java.math.BigInteger;
-import java.security.SecureRandom;
-
-import org.spongycastle.crypto.CryptoException;
-import org.spongycastle.crypto.Digest;
-import org.spongycastle.crypto.digests.SHA256Digest;
-import org.spongycastle.util.Arrays;
-
-/**
- * A participant in a Password Authenticated Key Exchange by Juggling (J-PAKE) exchange.
- *
- * The system property is checked during construction of the encoding object, it is set to
- * true by default.
- *
- * Any SecureRandom created from a builder constructed like this will make use of input passed to SecureRandom.setSeed() if
- * the default SecureRandom does for its generateSeed() call.
- *
- * Any SecureRandom created from a builder constructed like this will make use of input passed to SecureRandom.setSeed() if
- * the passed in SecureRandom does for its generateSeed() call.
- *
- * Note: If this constructor is used any calls to setSeed() in the resulting SecureRandom will be ignored.
- *
- * For example:
- * CRL
s.
- * Classes that implement this interface are often used to specify
- * which CRL
s should be retrieved from a CertStore
.
- *
- * Concurrent Access
- *
- * Unless otherwise specified, the methods defined in this interface are not
- * thread-safe. Multiple threads that need to access a single
- * object concurrently should synchronize amongst themselves and
- * provide the necessary locking. Multiple threads each manipulating
- * separate objects need not synchronize.
- *
- * @see CRL
- * @see CertStore
- * @see CertStore#getCRLs
- **/
-public interface CRLSelector extends Cloneable
-{
- /**
- * Decides whether a CRL
should be selected.
- *
- * @param crl the CRL
to be checked
- *
- * @return true
if the CRL
should be selected,
- * false
otherwise
- */
- public boolean match(CRL crl);
-
- /**
- * Makes a copy of this CRLSelector
. Changes to the
- * copy will not affect the original and vice versa.
- *
- * @return a copy of this CRLSelector
- */
- public Object clone();
-}
diff --git a/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/CertPath.java b/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/CertPath.java
deleted file mode 100644
index ceb5cd189..000000000
--- a/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/CertPath.java
+++ /dev/null
@@ -1,283 +0,0 @@
-package java.security.cert;
-
-import java.io.ByteArrayInputStream;
-import java.io.NotSerializableException;
-import java.io.ObjectStreamException;
-import java.io.Serializable;
-import java.util.Iterator;
-import java.util.List;
-import java.util.ListIterator;
-
-/**
- * An immutable sequence of certificates (a certification path).
- *
- * This is an abstract class that defines the methods common to all
- * CertPaths. Subclasses can handle different kinds of certificates
- * (X.509, PGP, etc.).
- *
- * All CertPath objects have a type, a list of Certificates, and one
- * or more supported encodings. Because the CertPath class is
- * immutable, a CertPath cannot change in any externally visible way
- * after being constructed. This stipulation applies to all public
- * fields and methods of this class and any added or overridden by
- * subclasses.
- *
- * The type is a String that identifies the type of Certificates in
- * the certification path. For each certificate cert in a
- * certification path certPath,
- * cert.getType().equals(certPath.getType()) must be true.
- *
- * The list of Certificates is an ordered List of zero or more
- * Certificates. This List and all of the Certificates contained in it
- * must be immutable.
- *
- * Each CertPath object must support one or more encodings so that the
- * object can be translated into a byte array for storage or
- * transmission to other parties. Preferably, these encodings should
- * be well-documented standards (such as PKCS#7). One of the encodings
- * supported by a CertPath is considered the default encoding. This
- * encoding is used if no encoding is explicitly requested (for the
- * {@link #getEncoded()} method, for instance).
- *
- * All CertPath objects are also Serializable. CertPath objects are
- * resolved into an alternate {@link CertPathRep} object during
- * serialization. This allows a CertPath object to be serialized into
- * an equivalent representation regardless of its underlying
- * implementation.
- *
- * CertPath objects can be created with a CertificateFactory or they
- * can be returned by other classes, such as a CertPathBuilder.
- *
- * By convention, X.509 CertPaths (consisting of X509Certificates),
- * are ordered starting with the target certificate and ending with a
- * certificate issued by the trust anchor. That is, the issuer of one
- * certificate is the subject of the following one. The certificate
- * representing the {@link TrustAnchor TrustAnchor} should not be included in the
- * certification path. Unvalidated X.509 CertPaths may not follow
- * these conventions. PKIX CertPathValidators will detect any
- * departure from these conventions that cause the certification path
- * to be invalid and throw a CertPathValidatorException.
- *
- * Concurrent Access
- *
- * All CertPath objects must be thread-safe. That is, multiple threads
- * may concurrently invoke the methods defined in this class on a
- * single CertPath object (or more than one) with no ill effects. This
- * is also true for the List returned by CertPath.getCertificates.
- *
- * Requiring CertPath objects to be immutable and thread-safe allows
- * them to be passed around to various pieces of code without worrying
- * about coordinating access. Providing this thread-safety is
- * generally not difficult, since the CertPath and List objects in
- * question are immutable.
- *
- * @see CertificateFactory
- * @see CertPathBuilder
- */
-public abstract class CertPath extends Object implements Serializable
-{
- private String type;
-
- /**
- * Alternate CertPath
class for serialization.
- **/
- protected static class CertPathRep
- implements Serializable
- {
- private String type;
- private byte[] data;
-
- /**
- * Creates a CertPathRep
with the specified
- * type and encoded form of a certification path.
- *
- * @param type the standard name of a CertPath
- * @param typedata the encoded form of the certification
- * path
- **/
- protected CertPathRep(String type, byte[] data)
- {
- this.type = type;
- this.data = data;
- }
-
- /**
- * Returns a CertPath constructed from the type and data.
- *
- * @return the resolved CertPath object
- * @exception ObjectStreamException if a CertPath could not be constructed
- **/
- protected Object readResolve()
- throws ObjectStreamException
- {
- try {
- ByteArrayInputStream inStream = new ByteArrayInputStream(data);
- CertificateFactory cf = CertificateFactory.getInstance(type);
- return cf.generateCertPath(inStream);
- } catch ( CertificateException ce ) {
- throw new NotSerializableException(" java.security.cert.CertPath: " + type);
- }
- }
- }
-
- /**
- * Creates a CertPath of the specified type.
- * This constructor is protected because most users should use
- * a CertificateFactory to create CertPaths.
- * @param type the standard name of the type of Certificatesin this path
- **/
- protected CertPath(String type)
- {
- this.type = type;
- }
-
- /**
- * Returns the type of Certificates in this certification
- * path. This is the same string that would be returned by
- * {@link Certificate#getType() cert.getType()} for all
- * Certificates in the certification path.
- *
- * @return the type of Certificates in this certification path (never null)
- **/
- public String getType()
- {
- return type;
- }
-
- /**
- * Returns an iteration of the encodings supported by this
- * certification path, with the default encoding
- * first. Attempts to modify the returned Iterator via its
- * remove method result in an UnsupportedOperationException.
- *
- * @return an Iterator over the names of the supported encodings (as Strings)
- **/
- public abstract Iterator getEncodings();
-
- /**
- * Compares this certification path for equality with the
- * specified object. Two CertPaths are equal if and only if
- * their types are equal and their certificate Lists (and by
- * implication the Certificates in those Lists) are equal. A
- * CertPath is never equal to an object that is not a
- * CertPath.
- *
- * This algorithm is implemented by this method. If it is
- * overridden, the behavior specified here must be maintained.
- *
- * @param other the object to test for equality with this
- * certification path
- *
- * @return true if the specified object is equal to this
- * certification path, false otherwise
- *
- * @see Object#hashCode() Object.hashCode()
- **/
- public boolean equals(Object other)
- {
- if (!( other instanceof CertPath ) )
- return false;
-
- CertPath otherCertPath = (CertPath)other;
- if ( ! getType().equals(otherCertPath.getType()) )
- return false;
- return getCertificates().equals(otherCertPath.getCertificates());
- }
-
- /**
- * Returns the hashcode for this certification path. The hash
- * code of a certification path is defined to be the result of
- * the following calculation:
- *
- * hashCode = path.getType().hashCode();
- * hashCode = 31 * hashCode + path.getCertificates().hashCode();
- *
- * This ensures that path1.equals(path2) implies that
- * path1.hashCode()==path2.hashCode() for any two
- * certification paths, path1 and path2, as required by the
- * general contract of Object.hashCode.
- *
- * @return The hashcode value for this certification path
- *
- * @see #equals(Object)
- **/
- public int hashCode()
- {
- return getType().hashCode() * 31 + getCertificates().hashCode();
- }
-
- /**
- * Returns a string representation of this certification
- * path. This calls the toString method on each of the
- * Certificates in the path.
- *
- * @return a string representation of this certification path
- **/
- public String toString()
- {
- StringBuffer s = new StringBuffer();
- List certs = getCertificates();
- ListIterator iter = certs.listIterator();
- s.append('\n').append(getType()).append(" Cert Path: length = ").append(certs.size()).append("\n[\n");
- while ( iter.hasNext() ) {
- s.append("=========================================================Certificate ").append(iter.nextIndex()).append('\n');
- s.append(iter.next()).append('\n');
- s.append("========================================================Certificate end\n\n\n");
- }
- s.append("\n]");
- return s.toString();
- }
-
- /**
- * Returns the encoded form of this certification path, using
- * the default encoding.
- *
- * @return the encoded bytes
- *
- * @exception CertificateEncodingException if an encoding error occurs
- **/
- public abstract byte[] getEncoded()
- throws CertificateEncodingException;
-
- /**
- * Returns the encoded form of this certification path, using
- * the specified encoding.
- *
- * @param encoding the name of the encoding to use
- *
- * @return the encoded bytes
- *
- * @exception CertificateEncodingException if an encoding error
- * occurs or the encoding requested is not supported
- **/
- public abstract byte[] getEncoded(String encoding)
- throws CertificateEncodingException;
-
- /**
- * Returns the list of certificates in this certification
- * path. The List returned must be immutable and thread-safe.
- *
- * @return an immutable List of Certificates (may be empty, but not null)
- **/
- public abstract List getCertificates();
-
- /**
- * Replaces the CertPath to be serialized with a CertPathRep
- * object.
- *
- * @return the CertPathRep to be serialized
- *
- * @exception ObjectStreamException if a CertPathRep object
- * representing this certification path could not be created
- **/
- protected Object writeReplace()
- throws ObjectStreamException
- {
- try {
- return new CertPathRep( getType(), getEncoded() );
- } catch ( CertificateException ce ) {
- throw new NotSerializableException( " java.security.cert.CertPath: " + getType() );
- }
- }
-}
-
diff --git a/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/CertPathBuilder.java b/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/CertPathBuilder.java
deleted file mode 100644
index b3adbf15f..000000000
--- a/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/CertPathBuilder.java
+++ /dev/null
@@ -1,243 +0,0 @@
-package java.security.cert;
-
-import java.security.InvalidAlgorithmParameterException;
-import java.security.NoSuchAlgorithmException;
-import java.security.NoSuchProviderException;
-import java.security.Provider;
-import java.security.Security;
-
-/**
- * A class for building certification paths (also known as certificate
- * chains).
- *
- * This class uses a provider-based architecture, as described in the
- * Java Cryptography Architecture. To create a
- * CertPathBuilder
, call one of the static
- * getInstance
methods, passing in the algorithm name of
- * the CertPathBuilder desired and optionally the name of the provider
- * desired.
- *
- * Once a CertPathBuilder
object has been created,
- * certification paths can be constructed by calling the
- * {@link #build build} method and passing it an algorithm-specific set
- * of parameters. If successful, the result (including the CertPath
- * that was built) is returned in an object that implements the
- * CertPathBuilderResult
interface.
- *
- * Concurrent Access
- *
- * The static methods of this class are guaranteed to be
- * thread-safe. Multiple threads may concurrently invoke the static
- * methods defined in this class with no ill effects.
- *
- * However, this is not true for the non-static methods defined by
- * this class. Unless otherwise documented by a specific provider,
- * threads that need to access a single CertPathBuilder
- * instance concurrently should synchronize amongst themselves and
- * provide the necessary locking. Multiple threads each manipulating a
- * different CertPathBuilder
instance need not
- * synchronize.
- *
- * Uses {@link CertUtil CertUtil} to actualiy load the SPI classes.
- *
- * @see CertUtil
- **/
-public class CertPathBuilder extends Object
-{
- private CertPathBuilderSpi builderSpi;
- private Provider provider;
- private String algorithm;
-
- /**
- * Creates a CertPathBuilder object of the given algorithm, and
- * encapsulates the given provider implementation (SPI object)
- * in it.
- *
- * @param builderSpi the provider implementation
- * @param provider the provider
- * @param algorithm the algorithm name
- **/
- protected CertPathBuilder(CertPathBuilderSpi builderSpi,
- Provider provider,
- String algorithm)
- {
- this.builderSpi = builderSpi;
- this.provider = provider;
- this.algorithm = algorithm;
- }
-
- /**
- * Returns a CertPathBuilder object that implements the
- * specified algorithm.
- *
- * If the default provider package provides an implementation
- * of the specified CertPathBuilder algorithm, an instance of
- * CertPathBuilder containing that implementation is
- * returned. If the requested algorithm is not available in
- * the default package, other packages are searched.
- *
- * @param algorithm the name of the requested CertPathBuilder algorithm
- *
- * @return a CertPathBuilder object that implements the
- * specified algorithm
- *
- * @exception NoSuchAlgorithmException if the requested
- * algorithm is not available in the default provider package
- * or any of the other provider packages that were searched
- **/
- public static CertPathBuilder getInstance(String algorithm)
- throws NoSuchAlgorithmException
- {
- try {
- CertUtil.Implementation imp =
- CertUtil.getImplementation("CertPathBuilder", algorithm, (String)null);
- if (imp != null)
- {
- return new CertPathBuilder((CertPathBuilderSpi)imp.getEngine(),
- imp.getProvider(), algorithm);
- }
- } catch ( NoSuchProviderException ex ) {}
- throw new NoSuchAlgorithmException("can't find type " + algorithm);
- }
-
- /**
- * Returns a CertPathBuilder object that implements the
- * specified algorithm, as supplied by the specified provider.
- *
- * @param algorithm the name of the requested CertPathBuilder
- * algorithm
- * @param provider the name of the provider
- *
- * @return a CertPathBuilder object that implements the
- * specified algorithm, as supplied by the specified provider
- *
- * @exception NoSuchAlgorithmException if the requested algorithm
- * is not available from the specified provider
- * @exception NoSuchProviderException if the provider has not
- * been configured
- * @exception IllegalArgumentException if the provider is null
- **/
- public static CertPathBuilder getInstance(String algorithm,
- String provider)
- throws NoSuchAlgorithmException,
- NoSuchProviderException
- {
- if ( provider == null )
- throw new IllegalArgumentException("provider must be non-null");
- CertUtil.Implementation imp =
- CertUtil.getImplementation("CertPathBuilder", algorithm, provider);
-
- if (imp != null)
- {
- return new CertPathBuilder((CertPathBuilderSpi)imp.getEngine(),
- imp.getProvider(), algorithm);
- }
- throw new NoSuchAlgorithmException("can't find type " + algorithm);
- }
-
- /**
- * Returns a CertPathBuilder object that implements the
- * specified algorithm, as supplied by the specified
- * provider. Note: the provider doesn't have to be registered.
- *
- * @param algorithm the name of the requested CertPathBuilder
- * algorithm
- * @param provider the provider
- * @return a CertPathBuilder object that implements the
- * specified algorithm, as supplied by the specified provider
- *
- * @exception NoSuchAlgorithmException if the requested algorithm
- * is not available from the specified provider
- * @exception IllegalArgumentException if the provider is null.
- **/
- public static CertPathBuilder getInstance(String algorithm,
- Provider provider)
- throws NoSuchAlgorithmException
- {
- if ( provider == null )
- throw new IllegalArgumentException("provider must be non-null");
- CertUtil.Implementation imp =
- CertUtil.getImplementation("CertPathBuilder", algorithm, provider);
-
- if (imp != null)
- {
- return new CertPathBuilder((CertPathBuilderSpi)imp.getEngine(),
- provider, algorithm);
- }
- throw new NoSuchAlgorithmException("can't find type " + algorithm);
- }
-
- /**
- * Returns the provider of this CertPathBuilder
.
- *
- * @return the provider of this CertPathBuilder
- **/
- public final Provider getProvider()
- {
- return provider;
- }
-
- /**
- * Returns the name of the algorithm of this
- * CertPathBuilder
.
- *
- * @return the name of the algorithm of this CertPathBuilder
- **/
- public final String getAlgorithm()
- {
- return algorithm;
- }
-
- /**
- * Attempts to build a certification path using the specified algorithm
- * parameter set.
- *
- * @param params the algorithm parameters
- *
- * @return the result of the build algorithm
- *
- * @exception CertPathBuilderException if the builder is unable to construct
- * a certification path that satisfies the specified parameters
- * @exception InvalidAlgorithmParameterException if the specified parameters * are inappropriate for this CertPathBuilder
- */
- public final CertPathBuilderResult build(CertPathParameters params)
- throws CertPathBuilderException,
- InvalidAlgorithmParameterException
- {
- return builderSpi.engineBuild(params);
- }
-
-
- /**
- * Returns the default CertPathBuilder
type as specified in
- * the Java security properties file, or the string "PKIX"
- * if no such property exists. The Java security properties file is
- * located in the file named <JAVA_HOME>/lib/security/java.security,
- * where <JAVA_HOME> refers to the directory where the SDK was
- * installed.
- *
- * The default CertPathBuilder
type can be used by
- * applications that do not want to use a hard-coded type when calling one
- * of the getInstance
methods, and want to provide a default
- * type in case a user does not specify its own.
- *
- * The default CertPathBuilder
type can be changed by
- * setting the value of the "certpathbuilder.type" security property
- * (in the Java security properties file) to the desired type.
- *
- * @return the default CertPathBuilder
type as specified
- * in the Java security properties file, or the string "PKIX"
- * if no such property exists.
- */
- public static final String getDefaultType()
- {
- String defaulttype = null;
- defaulttype = Security.getProperty("certpathbuilder.type");
-
- if ( defaulttype == null || defaulttype.length() <= 0 )
- return "PKIX";
- else
- return defaulttype;
- }
-}
-
diff --git a/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/CertPathBuilderException.java b/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/CertPathBuilderException.java
deleted file mode 100644
index 13b60891e..000000000
--- a/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/CertPathBuilderException.java
+++ /dev/null
@@ -1,182 +0,0 @@
-package java.security.cert;
-
-import java.io.PrintStream;
-import java.io.PrintWriter;
-import java.security.GeneralSecurityException;
-
-/**
- * An exception indicating one of a variety of problems encountered
- * when building a certification path with a
- * CertPathBuilder
.
- *
- * A CertPathBuilderException
provides support for
- * wrapping exceptions. The {@link #getCause() getCause} method
- * returns the throwable, if any, that caused this exception to be
- * thrown.
- *
- * Concurrent Access
- *
- * Unless otherwise specified, the methods defined in this class are
- * not thread-safe. Multiple threads that need to access a single
- * object concurrently should synchronize amongst themselves and
- * provide the necessary locking. Multiple threads each manipulating
- * separate objects need not synchronize.
- *
- * @see CertPathBuilder
- **/
-public class CertPathBuilderException extends GeneralSecurityException
-{
- private Throwable cause;
-
- /**
- * Creates a CertPathBuilderException
with null
- * as its detail message.
- */
- public CertPathBuilderException()
- {
- }
-
- /**
- * Creates a CertPathBuilderException
with the given detail
- * message. The detail message is a String
that describes
- * this particular exception in more detail.
- *
- * @param msg
- * the detail message
- */
- public CertPathBuilderException(String message)
- {
- super(message);
- }
-
- /**
- * Creates a CertPathBuilderException
that wraps the
- * specified throwable. This allows any exception to be converted into a
- * CertPathBuilderException
, while retaining information
- * about the wrapped exception, which may be useful for debugging. The
- * detail message is set to
- * (cause==null ? null : cause.toString())
(which typically
- * contains the class and detail message of cause).
- *
- * @param cause
- * the cause (which is saved for later retrieval by the
- * {@link #getCause()} method). (A null value is permitted, and
- * indicates that the cause is nonexistent or unknown.)
- */
- public CertPathBuilderException(String message, Throwable cause)
- {
- super(message);
- this.cause = cause;
- }
-
- /**
- * Creates a CertPathBuilderException
with the specified
- * detail message and cause.
- *
- * @param msg
- * the detail message
- * @param cause
- * the cause (which is saved for later retrieval by the
- * {@link #getCause()} method). (A null value is permitted, and
- * indicates that the cause is nonexistent or unknown.)
- */
- public CertPathBuilderException(Throwable cause)
- {
- this.cause = cause;
- }
-
- /**
- * Returns the internal (wrapped) cause, or null if the cause is nonexistent
- * or unknown.
- *
- * @return the cause of this throwable or null
if the cause
- * is nonexistent or unknown.
- */
- public Throwable getCause()
- {
- return cause;
- }
-
- /**
- * Returns the detail message for this CertPathBuilderException.
- *
- * @return the detail message, or null
if neither the message
- * nor internal cause were specified
- */
- public String getMessage()
- {
- String message = super.getMessage();
-
- if (message == null && cause == null)
- {
- return null;
- }
-
- if (cause != null)
- {
- return cause.getMessage();
- }
-
- return message;
- }
-
- /**
- * Returns a string describing this exception, including a description of
- * the internal (wrapped) cause if there is one.
- *
- * @return a string representation of this
- * CertPathBuilderException
- */
- public String toString()
- {
- String message = getMessage();
- if (message == null)
- {
- return "";
- }
-
- return message;
- }
-
- /**
- * Prints a stack trace to System.err
, including the
- * backtrace of the cause, if any.
- */
- public void printStackTrace()
- {
- printStackTrace(System.err);
- }
-
- /**
- * Prints a stack trace to a PrintStream
, including the
- * backtrace of the cause, if any.
- *
- * @param ps
- * the PrintStream
to use for output
- */
- public void printStackTrace(PrintStream ps)
- {
- super.printStackTrace(ps);
- if (getCause() != null)
- {
- getCause().printStackTrace(ps);
- }
- }
-
- /**
- * Prints a stack trace to a PrintWriter
, including the
- * backtrace of the cause, if any.
- *
- * @param ps
- * the PrintWriter
to use for output
- */
- public void printStackTrace(PrintWriter pw)
- {
- super.printStackTrace(pw);
- if (getCause() != null)
- {
- getCause().printStackTrace(pw);
- }
- }
-}
-
diff --git a/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/CertPathBuilderResult.java b/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/CertPathBuilderResult.java
deleted file mode 100644
index c0482bc4e..000000000
--- a/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/CertPathBuilderResult.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package java.security.cert;
-
-/**
- * A specification of the result of a certification path builder algorithm.
- * All results returned by the {@link CertPathBuilder#build CertPathBuilder.build} method
- * must implement this interface.
- *
- * At a minimum, a CertPathBuilderResult contains the CertPath built by the
- * CertPathBuilder instance. Implementations of this interface may add methods
- * to return implementation or algorithm specific information, such as
- * debugging information or certification path validation results.
- *
- * Concurrent Access
- *
- * Unless otherwise specified, the methods defined in this interface are not
- * thread-safe. Multiple threads that need to access a single object
- * concurrently should synchronize amongst themselves and provide the
- * necessary locking. Multiple threads each manipulating separate objects
- * need not synchronize.
- **/
-public interface CertPathBuilderResult extends Cloneable
-{
- /**
- * Returns the built certification path.
- *
- * @return the certification path (never null
)
- */
- public CertPath getCertPath();
-
- /**
- * Makes a copy of this CertPathBuilderResult
.
- * Changes to the copy will not affect the original and vice
- * versa.
- *
- * @return a copy of this CertPathBuilderResult
- */
- public Object clone();
-}
diff --git a/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/CertPathBuilderSpi.java b/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/CertPathBuilderSpi.java
deleted file mode 100644
index be044fa30..000000000
--- a/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/CertPathBuilderSpi.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package java.security.cert;
-
-import java.security.InvalidAlgorithmParameterException;
-
-/**
- * The Service Provider Interface (SPI) for the CertPathBuilder
- * class. All CertPathBuilder implementations must include a class
- * (the SPI class) that extends this class (CertPathBuilderSpi) and
- * implements all of its methods. In general, instances of this class
- * should only be accessed through the CertPathBuilder class. For
- * details, see the Java Cryptography Architecture.
- *
- * Concurrent Access
- *
- * Instances of this class need not be protected against concurrent
- * access from multiple threads. Threads that need to access a single
- * CertPathBuilderSpi instance concurrently should synchronize amongst
- * themselves and provide the necessary locking before calling the
- * wrapping CertPathBuilder object.
- *
- * However, implementations of CertPathBuilderSpi may still encounter
- * concurrency issues, since multiple threads each manipulating a
- * different CertPathBuilderSpi instance need not synchronize.
- **/
-public abstract class CertPathBuilderSpi
- extends Object
-{
- /**
- * The default constructor.
- */
- public CertPathBuilderSpi() {}
-
- /**
- * Attempts to build a certification path using the specified
- * algorithm parameter set.
- *
- * @param params the algorithm parameters
- *
- * @return the result of the build algorithm
- *
- * @exception CertPathBuilderException if the builder is unable
- * to construct a certification path that satisfies the
- * specified
- * @exception parametersInvalidAlgorithmParameterException if the
- * specified parameters are inappropriate for this CertPathBuilder
- */
- public abstract CertPathBuilderResult engineBuild( CertPathParameters params )
- throws CertPathBuilderException,
- InvalidAlgorithmParameterException;
-}
diff --git a/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/CertPathParameters.java b/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/CertPathParameters.java
deleted file mode 100644
index caff291a8..000000000
--- a/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/CertPathParameters.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package java.security.cert;
-
-/**
- * A specification of certification path algorithm parameters. The purpose
- * of this interface is to group (and provide type safety for) all CertPath
- * parameter specifications. All CertPath
parameter specifications must
- * implement this interface.
- **/
-public interface CertPathParameters extends Cloneable
-{
- /**
- * Makes a copy of this CertPathParameters
. Changes to the
- * copy will not affect the original and vice versa.
- *
- * @return a copy of this CertPathParameters
- **/
- public Object clone();
-}
diff --git a/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/CertPathValidator.java b/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/CertPathValidator.java
deleted file mode 100644
index aaddbf0e5..000000000
--- a/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/CertPathValidator.java
+++ /dev/null
@@ -1,250 +0,0 @@
-package java.security.cert;
-
-import java.security.InvalidAlgorithmParameterException;
-import java.security.NoSuchAlgorithmException;
-import java.security.NoSuchProviderException;
-import java.security.Provider;
-import java.security.Security;
-
-/**
- * A class for validating certification paths (also known as certificate
- * chains).
- *
- * This class uses a provider-based architecture, as described in the Java
- * Cryptography Architecture. To create a CertPathValidator
,
- * call one of the static getInstance
methods, passing in the
- * algorithm name of the CertPathValidator
desired and
- * optionally the name of the provider desired.
- *
- * Once a CertPathValidator
object has been created, it can
- * be used to validate certification paths by calling the {@link #validate
- * validate} method and passing it the CertPath
to be validated
- * and an algorithm-specific set of parameters. If successful, the result is
- * returned in an object that implements the
- * CertPathValidatorResult
interface.
- *
- * Concurrent Access
- *
- * The static methods of this class are guaranteed to be thread-safe.
- * Multiple threads may concurrently invoke the static methods defined in
- * this class with no ill effects.
- *
- * However, this is not true for the non-static methods defined by this class.
- * Unless otherwise documented by a specific provider, threads that need to
- * access a single CertPathValidator
instance concurrently should
- * synchronize amongst themselves and provide the necessary locking. Multiple
- * threads each manipulating a different CertPathValidator
- * instance need not synchronize.
- *
- * Uses {@link CertUtil CertUtil} to actualiy load the SPI classes.
- *
- * @see CertPath
- * @see CertUtil
- **/
-public class CertPathValidator extends Object
-{
- private CertPathValidatorSpi validatorSpi;
- private Provider provider;
- private String algorithm;
-
- /**
- * Creates a CertPathValidator
object of the given algorithm,
- * and encapsulates the given provider implementation (SPI object) in it.
- *
- * @param validatorSpi the provider implementation
- * @param provider the provider
- * @param algorithm the algorithm name
- */
- protected CertPathValidator( CertPathValidatorSpi validatorSpi,
- Provider provider,
- String algorithm)
- {
- this.validatorSpi = validatorSpi;
- this.provider = provider;
- this.algorithm = algorithm;
- }
-
- /**
- * Returns a CertPathValidator
object that implements the
- * specified algorithm.
- *
- * If the default provider package provides an implementation of the
- * specified CertPathValidator
algorithm, an instance of
- * CertPathValidator
containing that implementation is
- * returned. If the requested algorithm is not available in the default
- * package, other packages are searched.
- *
- * @param algorithm the name of the requested CertPathValidator
- * algorithm
- *
- * @return a CertPathValidator
object that implements the
- * specified algorithm
- *
- * @exception NoSuchAlgorithmException if the requested algorithm
- * is not available in the default provider package or any of the other
- * provider packages that were searched
- */
- public static CertPathValidator getInstance(String algorithm)
- throws NoSuchAlgorithmException
- {
- try {
- CertUtil.Implementation imp =
- CertUtil.getImplementation("CertPathValidator", algorithm, (String)null );
- if (imp != null)
- {
- return new CertPathValidator((CertPathValidatorSpi)imp.getEngine(), imp.getProvider(), algorithm);
- }
- } catch (NoSuchProviderException ex ) {}
- throw new NoSuchAlgorithmException("can't find algorithm " + algorithm);
- }
-
- /**
- * Returns a CertPathValidator
object that implements the
- * specified algorithm, as supplied by the specified provider.
- *
- * @param algorithm the name of the requested CertPathValidator
- * algorithm
- * @param provider the name of the provider
- *
- * @return a CertPathValidator
object that implements the
- * specified algorithm, as supplied by the specified provider
- *
- * @exception NoSuchAlgorithmException if the requested algorithm
- * is not available from the specified provider
- * @exception NoSuchProviderException if the provider has not been
- * configured
- * @exception IllegalArgumentException if the provider
is
- * null
- */
- public static CertPathValidator getInstance(String algorithm,
- String provider)
- throws NoSuchAlgorithmException,
- NoSuchProviderException
- {
- if ( provider == null )
- throw new IllegalArgumentException("provider must be non-null");
-
- CertUtil.Implementation imp = CertUtil.getImplementation("CertPathValidator", algorithm, provider );
- if (imp != null)
- {
- return new CertPathValidator((CertPathValidatorSpi)imp.getEngine(), imp.getProvider(), algorithm);
- }
- throw new NoSuchAlgorithmException("can't find algorithm " + algorithm);
- }
-
- /**
- * Returns a CertPathValidator
object that implements the
- * specified algorithm, as supplied by the specified provider.
- * Note: the provider
doesn't have to be registered.
- *
- * @param algorithm the name of the requested
- * CertPathValidator
algorithm
- * @param provider the provider
- *
- * @return a CertPathValidator
object that implements the
- * specified algorithm, as supplied by the specified provider
- *
- * @exception NoSuchAlgorithmException if the requested algorithm
- * is not available from the specified provider
- * @exception IllegalArgumentException if the provider
is
- * null
- */
- public static CertPathValidator getInstance(String algorithm,
- Provider provider)
- throws NoSuchAlgorithmException
- {
- if ( provider == null )
- throw new IllegalArgumentException("provider must be non-null");
-
- CertUtil.Implementation imp = CertUtil.getImplementation("CertPathValidator", algorithm, provider );
- if (imp != null)
- {
- return new CertPathValidator((CertPathValidatorSpi)imp.getEngine(), provider, algorithm);
- }
- throw new NoSuchAlgorithmException("can't find algorithm " + algorithm);
- }
-
- /**
- * Returns the Provider
of this
- * CertPathValidator
.
- *
- * @return the Provider
of this CertPathValidator
- */
- public final Provider getProvider()
- {
- return provider;
- }
-
- /**
- * Returns the algorithm name of this CertPathValidator
.
- *
- * @return the algorithm name of this CertPathValidator
- */
- public final String getAlgorithm()
- {
- return algorithm;
- }
-
- /**
- * Validates the specified certification path using the specified
- * algorithm parameter set.
- *
- * The CertPath
specified must be of a type that is
- * supported by the validation algorithm, otherwise an
- * InvalidAlgorithmParameterException
will be thrown. For
- * example, a CertPathValidator
that implements the PKIX
- * algorithm validates CertPath
objects of type X.509.
- *
- * @param certPath the CertPath
to be validated
- * @param params the algorithm parameters
- *
- * @return the result of the validation algorithm
- *
- * @exception CertPathValidatorException if the CertPath
- * does not validate
- * @exception InvalidAlgorithmParameterException if the specified
- * parameters or the type of the specified CertPath
are
- * inappropriate for this CertPathValidator
- */
- public final CertPathValidatorResult validate( CertPath certPath,
- CertPathParameters params)
- throws CertPathValidatorException,
- InvalidAlgorithmParameterException
- {
- return validatorSpi.engineValidate( certPath, params );
- }
-
-
- /**
- * Returns the default CertPathValidator
type as specified in
- * the Java security properties file, or the string "PKIX"
- * if no such property exists. The Java security properties file is
- * located in the file named <JAVA_HOME>/lib/security/java.security,
- * where <JAVA_HOME> refers to the directory where the SDK was
- * installed.
- *
- * The default CertPathValidator
type can be used by
- * applications that do not want to use a hard-coded type when calling one
- * of the getInstance
methods, and want to provide a default
- * type in case a user does not specify its own.
- *
- * The default CertPathValidator
type can be changed by
- * setting the value of the "certpathvalidator.type" security property
- * (in the Java security properties file) to the desired type.
- *
- * @return the default CertPathValidator
type as specified
- * in the Java security properties file, or the string "PKIX"
- * if no such property exists.
- */
- public static final String getDefaultType()
- {
- String defaulttype = null;
- defaulttype = Security.getProperty("certpathvalidator.type");
-
- if ( defaulttype == null || defaulttype.length() <= 0 )
- return "PKIX";
- else
- return defaulttype;
- }
-}
-
diff --git a/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/CertPathValidatorException.java b/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/CertPathValidatorException.java
deleted file mode 100644
index 2088ab1a4..000000000
--- a/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/CertPathValidatorException.java
+++ /dev/null
@@ -1,248 +0,0 @@
-package java.security.cert;
-
-import java.io.PrintStream;
-import java.io.PrintWriter;
-import java.security.GeneralSecurityException;
-
-/**
- * An exception indicating one of a variety of problems encountered when
- * validating a certification path.
- *
- * A CertPathValidatorException
provides support for wrapping
- * exceptions. The {@link #getCause getCause} method returns the throwable,
- * if any, that caused this exception to be thrown.
- *
- * A CertPathValidatorException
may also include the
- * certification path that was being validated when the exception was thrown
- * and the index of the certificate in the certification path that caused the
- * exception to be thrown. Use the {@link #getCertPath getCertPath} and
- * {@link #getIndex getIndex} methods to retrieve this information.
- *
- * Concurrent Access
- *
- * Unless otherwise specified, the methods defined in this class are not
- * thread-safe. Multiple threads that need to access a single
- * object concurrently should synchronize amongst themselves and
- * provide the necessary locking. Multiple threads each manipulating
- * separate objects need not synchronize.
- *
- * @see CertPathValidator
- **/
-public class CertPathValidatorException extends GeneralSecurityException
-{
- private Throwable cause;
- private CertPath certPath;
- private int index = -1;
-
- /**
- * Creates a CertPathValidatorException
with
- * no detail message.
- */
- public CertPathValidatorException()
- {
- super();
- }
-
- /**
- * Creates a CertPathValidatorException
with the given
- * detail message. A detail message is a String
that
- * describes this particular exception.
- *
- * @param messag the detail message
- */
- public CertPathValidatorException(String message)
- {
- super(message);
- }
-
- /**
- * Creates a CertPathValidatorException
with the specified
- * detail message and cause.
- *
- * @param msg the detail message
- * @param cause the cause (which is saved for later retrieval by the
- * {@link #getCause getCause()} method). (A null
value is
- * permitted, and indicates that the cause is nonexistent or unknown.)
- */
- public CertPathValidatorException(String message, Throwable cause)
- {
- super(message);
- this.cause = cause;
- }
-
- /**
- * Creates a CertPathValidatorException
with the specified
- * detail message, cause, certification path, and index.
- *
- * @param msg the detail message (or null
if none)
- * @param cause the cause (or null
if none)
- * @param certPath the certification path that was in the process of
- * being validated when the error was encountered
- * @param index the index of the certificate in the certification path
- * that caused the error (or -1 if not applicable). Note that
- * the list of certificates in a CertPath
is zero based.
- *
- * @exception IndexOutOfBoundsException if the index is out of range
- * (index < -1 || (certPath != null && index >=
- * certPath.getCertificates().size())
- * @exception IllegalArgumentException if certPath
is
- * null
and index
is not -1
- */
- public CertPathValidatorException(String message, Throwable cause, CertPath certPath, int index)
- {
- super( message );
-
- if ( certPath == null && index != -1 )
- throw new IllegalArgumentException( "certPath = null and index != -1" );
- if ( index < -1 || ( certPath != null && index >= certPath.getCertificates().size() ) )
- throw new IndexOutOfBoundsException( " index < -1 or out of bound of certPath.getCertificates()" );
-
- this.cause = cause;
- this.certPath = certPath;
- this.index = index;
- }
-
- /**
- * Creates a CertPathValidatorException
that wraps the
- * specified throwable. This allows any exception to be converted into a
- * CertPathValidatorException
, while retaining information
- * about the wrapped exception, which may be useful for debugging. The
- * detail message is set to (cause==null ? null : cause.toString()
- *
) (which typically contains the class and detail message of
- * cause).
- *
- * @param cause the cause (which is saved for later retrieval by the
- * {@link #getCause getCause()} method). (A null
value is
- * permitted, and indicates that the cause is nonexistent or unknown.)
- */
- public CertPathValidatorException(Throwable cause)
- {
- this.cause = cause;
- }
-
- /**
- * Returns the detail message for this
- * CertPathValidatorException
.
- *
- * @return the detail message, or null
if neither the message
- * nor cause were specified
- */
- public String getMessage()
- {
- String message = super.getMessage();
-
- if ( message == null && cause == null )
- return null;
-
- StringBuffer s = new StringBuffer();
- if ( message != null )
- {
- s.append(message).append('\n');
- }
- if ( cause != null )
- {
- s.append("Cause:\n").append(cause.getMessage()).append('\n');
- }
- return s.toString();
- }
-
- /**
- * Returns the certification path that was being validated when
- * the exception was thrown.
- *
- * @return the CertPath
that was being validated when
- * the exception was thrown (or null
if not specified)
- */
- public CertPath getCertPath()
- {
- return certPath;
- }
-
- /**
- * Returns the index of the certificate in the certification path
- * that caused the exception to be thrown. Note that the list of
- * certificates in a CertPath
is zero based. If no
- * index has been set, -1 is returned.
- *
- * @return the index that has been set, or -1 if none has been set
- */
- public int getIndex()
- {
- return index;
- }
-
- /**
- * Returns the cause of this CertPathValidatorException
or
- * null
if the cause is nonexistent or unknown.
- *
- * @return the cause of this throwable or null
if the cause
- * is nonexistent or unknown.
- */
- public Throwable getCause()
- {
- return cause;
- }
-
- /**
- * Returns a string describing this exception, including a description
- * of the internal (wrapped) cause if there is one.
- *
- * @return a string representation of this
- * CertPathValidatorException
- */
- public String toString()
- {
- StringBuffer sb = new StringBuffer();
- String s = getMessage();
- if ( s != null )
- {
- sb.append( s );
- }
- if ( getIndex() >= 0 )
- {
- sb.append("index in certpath: ").append(getIndex()).append('\n');
- sb.append(getCertPath());
- }
- return sb.toString();
- }
-
- /**
- * Prints a stack trace to System.err
, including the backtrace
- * of the cause, if any.
- */
- public void printStackTrace()
- {
- printStackTrace(System.err);
- }
-
- /**
- * Prints a stack trace to a PrintStream
, including the
- * backtrace of the cause, if any.
- *
- * @param ps the PrintStream
to use for output
- */
- public void printStackTrace(PrintStream ps)
- {
- super.printStackTrace(ps);
- if ( getCause() != null )
- {
- getCause().printStackTrace(ps);
- }
- }
-
- /**
- * Prints a stack trace to a PrintWriter
, including the
- * backtrace of the cause, if any.
- *
- * @param pw the PrintWriter
to use for output
- */
- public void printStackTrace(PrintWriter pw)
- {
- super.printStackTrace(pw);
- if ( getCause() != null )
- {
- getCause().printStackTrace(pw);
- }
- }
-}
-
diff --git a/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/CertPathValidatorResult.java b/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/CertPathValidatorResult.java
deleted file mode 100644
index ec09641d5..000000000
--- a/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/CertPathValidatorResult.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package java.security.cert;
-
-/**
- * A specification of the result of a certification path validator algorithm.
- *
- * The purpose of this interface is to group (and provide type safety
- * for) all certification path validator results. All results returned
- * by the {@link CertPathValidator#validate CertPathValidator.validate}
- * method must implement this interface.
- *
- * @see CertPathValidator
- **/
-public interface CertPathValidatorResult extends Cloneable
-{
- /**
- * Makes a copy of this CertPathValidatorResult
. Changes to the
- * copy will not affect the original and vice versa.
- *
- * @return a copy of this CertPathValidatorResult
- */
- public Object clone();
-}
diff --git a/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/CertPathValidatorSpi.java b/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/CertPathValidatorSpi.java
deleted file mode 100644
index c70bc47fc..000000000
--- a/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/CertPathValidatorSpi.java
+++ /dev/null
@@ -1,59 +0,0 @@
-package java.security.cert;
-
-import java.security.InvalidAlgorithmParameterException;
-
-/**
- *
- * The Service Provider Interface (SPI)
- * for the {@link CertPathValidator CertPathValidator} class. All
- * CertPathValidator
implementations must include a class (the
- * SPI class) that extends this class (CertPathValidatorSpi
)
- * and implements all of its methods. In general, instances of this class
- * should only be accessed through the CertPathValidator
class.
- * For details, see the Java Cryptography Architecture.
- *
- * Concurrent Access
- *
- * Instances of this class need not be protected against concurrent
- * access from multiple threads. Threads that need to access a single
- * CertPathValidatorSpi
instance concurrently should synchronize
- * amongst themselves and provide the necessary locking before calling the
- * wrapping CertPathValidator
object.
- *
- * However, implementations of CertPathValidatorSpi
may still
- * encounter concurrency issues, since multiple threads each
- * manipulating a different CertPathValidatorSpi
instance need not
- * synchronize.
- **/
-public abstract class CertPathValidatorSpi extends Object
-{
- /**
- * The default constructor.
- */
- public CertPathValidatorSpi() {}
-
- /**
- * Validates the specified certification path using the specified
- * algorithm parameter set.
- *
- * The CertPath
specified must be of a type that is
- * supported by the validation algorithm, otherwise an
- * InvalidAlgorithmParameterException
will be thrown. For
- * example, a CertPathValidator
that implements the PKIX
- * algorithm validates CertPath
objects of type X.509.
- *
- * @param certPath the CertPath
to be validated
- * @param params the algorithm parameters
- *
- * @return the result of the validation algorithm
- *
- * @exception CertPathValidatorException if the CertPath
- * does not validate
- * @exception InvalidAlgorithmParameterException if the specified
- * parameters or the type of the specified CertPath
are
- * inappropriate for this CertPathValidator
- */
- public abstract CertPathValidatorResult engineValidate(CertPath certPath, CertPathParameters params)
- throws CertPathValidatorException,
- InvalidAlgorithmParameterException;
-}
diff --git a/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/CertSelector.java b/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/CertSelector.java
deleted file mode 100644
index 31bf97448..000000000
--- a/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/CertSelector.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package java.security.cert;
-
-/**
- * A selector that defines a set of criteria for selecting
- * Certificate
s. Classes that implement this interface
- * are often used to specify which Certificate
s should
- * be retrieved from a CertStore
.
- *
- * Concurrent Access
- *
- * Unless otherwise specified, the methods defined in this interface are not
- * thread-safe. Multiple threads that need to access a single
- * object concurrently should synchronize amongst themselves and
- * provide the necessary locking. Multiple threads each manipulating
- * separate objects need not synchronize.
- *
- * @see Certificate
- * @see CertStore
- * @see CertStore#getCertificates
- */
-public interface CertSelector extends Cloneable
-{
- /**
- * Decides whether a Certificate
should be selected.
- *
- * @param cert the Certificate
to be checked
- * @return true
if the Certificate
- * should be selected, false
otherwise
- */
- public boolean match(Certificate cert);
-
- /**
- * Makes a copy of this CertSelector
. Changes to the
- * copy will not affect the original and vice versa.
- *
- * @return a copy of this CertSelector
- */
- public Object clone();
-}
diff --git a/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/CertStore.java b/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/CertStore.java
deleted file mode 100644
index 0e2c6d2f7..000000000
--- a/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/CertStore.java
+++ /dev/null
@@ -1,352 +0,0 @@
-package java.security.cert;
-
-import java.security.InvalidAlgorithmParameterException;
-import java.security.NoSuchAlgorithmException;
-import java.security.NoSuchProviderException;
-import java.security.Provider;
-import java.security.Security;
-import java.util.Collection;
-
-/**
- * A class for retrieving Certificate
s and CRL
s
- * from a repository.
- *
- * This class uses a provider-based architecture, as described in the
- * Java Cryptography Architecture.
- * To create a CertStore
, call one of the static
- * getInstance
methods, passing in the type of
- * CertStore
desired, any applicable initialization parameters
- * and optionally the name of the provider desired.
- *
- * Once the CertStore
has been created, it can be used to
- * retrieve Certificate
s and CRL
s by calling its
- * {@link #getCertificates(CertSelector selector) getCertificates} and
- * {@link #getCRLs(CRLSelector selector) getCRLs} methods.
- *
- * Unlike a {@link java.security.KeyStore KeyStore}, which provides access
- * to a cache of private keys and trusted certificates, a
- * CertStore
is designed to provide access to a potentially
- * vast repository of untrusted certificates and CRLs. For example, an LDAP
- * implementation of CertStore
provides access to certificates
- * and CRLs stored in one or more directories using the LDAP protocol and the
- * schema as defined in the RFC service attribute. See Appendix A in the
- * Java Certification Path API Programmer's Guide for more information about
- * standard CertStore
types.
- *
- * Concurrent Access
- *
- * All public methods of CertStore
objects must be thread-safe.
- * That is, multiple threads may concurrently invoke these methods on a
- * single CertStore
object (or more than one) with no
- * ill effects. This allows a CertPathBuilder
to search for a
- * CRL while simultaneously searching for further certificates, for instance.
- *
- * The static methods of this class are also guaranteed to be thread-safe.
- * Multiple threads may concurrently invoke the static methods defined in
- * this class with no ill effects.
- *
- * Uses {@link CertUtil CertUtil} to actualiy load the SPI classes.
- *
- * @see CertUtil
- **/
-public class CertStore extends Object
-{
- private CertStoreSpi storeSpi;
- private Provider provider;
- private String type;
- private CertStoreParameters params;
-
- /**
- * Creates a CertStore
object of the given type, and
- * encapsulates the given provider implementation (SPI object) in it.
- *
- * @param storeSpi the provider implementation
- * @param provider the provider
- * @param type the type
- * @param params the initialization parameters (may be null
)
- */
- protected CertStore( CertStoreSpi storeSpi,
- Provider provider,
- String type,
- CertStoreParameters params )
- {
- this.storeSpi = storeSpi;
- this.provider = provider;
- this.type = type;
- this.params = params;
- }
-
- /**
- * Returns a Collection
of Certificate
s that
- * match the specified selector. If no Certificate
s
- * match the selector, an empty Collection
will be returned.
- *
- * For some CertStore
types, the resulting
- * Collection
may not contain all of the
- * Certificate
s that match the selector. For instance,
- * an LDAP CertStore
may not search all entries in the
- * directory. Instead, it may just search entries that are likely to
- * contain the Certificate
s it is looking for.
- *
- * Some CertStore
implementations (especially LDAP
- * CertStore
s) may throw a CertStoreException
- * unless a non-null CertSelector
is provided that
- * includes specific criteria that can be used to find the certificates.
- * Issuer and/or subject names are especially useful criteria.
- *
- * @param selector A CertSelector
used to select which
- * Certificate
s should be returned. Specify null
- * to return all Certificate
s (if supported).
- *
- * @return A Collection
of Certificate
s that
- * match the specified selector (never null
)
- * @exception CertStoreException if an exception occurs
- */
- public final Collection getCertificates( CertSelector selector )
- throws CertStoreException
- {
- return storeSpi.engineGetCertificates( selector );
- }
-
- /**
- * Returns a Collection
of CRL
s that
- * match the specified selector. If no CRL
s
- * match the selector, an empty Collection
will be returned.
- *
- * For some CertStore
types, the resulting
- * Collection
may not contain all of the
- * CRL
s that match the selector. For instance,
- * an LDAP CertStore
may not search all entries in the
- * directory. Instead, it may just search entries that are likely to
- * contain the CRL
s it is looking for.
- *
- * Some CertStore
implementations (especially LDAP
- * CertStore
s) may throw a CertStoreException
- * unless a non-null CRLSelector
is provided that
- * includes specific criteria that can be used to find the CRLs.
- * Issuer names and/or the certificate to be checked are especially useful.
- *
- * @param selector A CRLSelector
used to select which
- * CRL
s should be returned. Specify null
- * to return all CRL
s (if supported).
- *
- * @return A Collection
of CRL
s that
- * match the specified selector (never null
)
- *
- * @exception CertStoreException if an exception occurs
- */
- public final Collection getCRLs( CRLSelector selector )
- throws CertStoreException
- {
- return storeSpi.engineGetCRLs( selector );
- }
-
- /**
- * Returns a CertStore
object that implements the specified
- * CertStore
type and is initialized with the specified
- * parameters.
- *
- * If the default provider package provides an implementation
- * of the specified CertStore
type, an instance of
- * CertStore
containing that implementation is returned.
- * If the requested type is not available in the default package, other
- * packages are searched.
- *
- * The CertStore
that is returned is initialized with the
- * specified CertStoreParameters
. The type of parameters
- * needed may vary between different types of CertStore
s.
- * Note that the specified CertStoreParameters
object is
- * cloned.
- *
- * @param type the name of the requested CertStore
type
- * @param params the initialization parameters (may be null
)
- *
- * @return a CertStore
object that implements the specified
- * CertStore
type
- *
- * @exception NoSuchAlgorithmException if the requested type is not
- * available in the default provider package or any of the other provider
- * packages that were searched
- * @exception InvalidAlgorithmParameterException if the specified
- * initialization parameters are inappropriate for this
- * CertStore
- */
- public static CertStore getInstance( String type,
- CertStoreParameters params)
- throws InvalidAlgorithmParameterException,
- NoSuchAlgorithmException
- {
- try {
- CertUtil.Implementation imp =
- CertUtil.getImplementation( "CertStore", type, (String)null,
- new Class[] { CertStoreParameters.class },
- new Object[] { params } );
- if (imp != null)
- {
- return new CertStore((CertStoreSpi)imp.getEngine(), imp.getProvider(), type, params );
- }
- } catch ( NoSuchProviderException ex ) {}
- throw new NoSuchAlgorithmException("can't find type " + type);
- }
-
- /**
- * Returns a CertStore
object that implements the specified
- * CertStore
type, as supplied by the specified provider
- * and initialized with the specified parameters.
- *
- * The CertStore
that is returned is initialized with the
- * specified CertStoreParameters
. The type of parameters
- * needed may vary between different types of CertStore
s.
- * Note that the specified CertStoreParameters
object is
- * cloned.
- *
- * @param type the requested CertStore
type
- * @param params the initialization parameters (may be null
)
- * @param provider the name of the provider
- *
- * @return a CertStore
object that implements the
- * specified type, as supplied by the specified provider
- *
- * @exception NoSuchAlgorithmException if the requested type is not
- * available from the specified provider
- * @exception InvalidAlgorithmParameterException if the specified
- * initialization parameters are inappropriate for this
- * CertStore
- * @exception NoSuchProviderException if the provider has not been configured
- * @exception IllegalArgumentException if the provider
is
- * null
- */
- public static CertStore getInstance( String type,
- CertStoreParameters params,
- String provider)
- throws InvalidAlgorithmParameterException,
- NoSuchAlgorithmException,
- NoSuchProviderException,
- IllegalArgumentException
- {
- if ( provider == null )
- throw new IllegalArgumentException( "provider must be non-null" );
-
- CertUtil.Implementation imp =
- CertUtil.getImplementation( "CertStore", type, provider,
- new Class[] { CertStoreParameters.class },
- new Object[] { params } );
- if (imp != null)
- {
- return new CertStore((CertStoreSpi)imp.getEngine(), imp.getProvider(), type, params );
- }
- throw new NoSuchAlgorithmException("can't find type " + type);
- }
-
- /**
- * Returns a CertStore
object that implements the specified
- * CertStore
type, as supplied by the specified provider and
- * initialized with the specified parameters.
- * Note: the provider
doesn't have to be registered.
- *
- * The CertStore
that is returned is initialized with the
- * specified CertStoreParameters
. The type of parameters
- * needed may vary between different types of CertStore
s.
- * Note that the specified CertStoreParameters
object is
- * cloned.
- *
- * @param type the requested CertStore
type
- * @param params the initialization parameters (may be null
)
- * @param provider the provider
- *
- * @return a CertStore
object that implements the
- * specified type, as supplied by the specified provider
- *
- * @exception NoSuchAlgorithmException if the requested type is not
- * available from the specified provider
- * @exception InvalidAlgorithmParameterException if the specified
- * initialization parameters are inappropriate for this
- * CertStore
- * @exception IllegalArgumentException if the provider
is
- * null
- */
- public static CertStore getInstance( String type,
- CertStoreParameters params,
- Provider provider )
- throws NoSuchAlgorithmException,
- InvalidAlgorithmParameterException,
- IllegalArgumentException
- {
- if ( provider == null )
- throw new IllegalArgumentException( "provider must be non-null" );
- CertUtil.Implementation imp =
- CertUtil.getImplementation( "CertStore", type, provider,
- new Class[] { CertStoreParameters.class },
- new Object[] { params } );
- if (imp != null)
- {
- return new CertStore((CertStoreSpi)imp.getEngine(), provider, type, params );
- }
- throw new NoSuchAlgorithmException("can't find type " + type);
- }
-
- /**
- * Returns the parameters used to initialize this CertStore
.
- * Note that the CertStoreParameters
object is cloned before
- * it is returned.
- *
- * @return the parameters used to initialize this CertStore
- * (may be null
)
- */
- public final CertStoreParameters getCertStoreParameters()
- {
- return params;
- }
-
- /**
- * Returns the type of this CertStore
.
- *
- * @return the type of this CertStore
- */
- public final String getType()
- {
- return type;
- }
-
- /**
- * Returns the provider of this CertStore
.
- *
- * @return the provider of this CertStore
- */
- public final Provider getProvider()
- {
- return provider;
- }
-
- /**
- * Returns the default CertStore
type as specified in the
- * Java security properties file, or the string "LDAP" if no
- * such property exists. The Java security properties file is located in
- * the file named <JAVA_HOME>/lib/security/java.security, where
- * <JAVA_HOME> refers to the directory where the SDK was installed.
- *
- * The default CertStore
type can be used by applications
- * that do not want to use a hard-coded type when calling one of the
- * getInstance
methods, and want to provide a default
- * CertStore
type in case a user does not specify its own.
- *
- * The default CertStore
type can be changed by setting
- * the value of the "certstore.type" security property (in the Java
- * security properties file) to the desired type.
- *
- * @return the default CertStore
type as specified in the
- * Java security properties file, or the string "LDAP"
- * if no such property exists.
- */
- public static final String getDefaultType()
- {
- String defaulttype = null;
- defaulttype = Security.getProperty("certstore.type");
-
- if ( defaulttype == null || defaulttype.length() <= 0 )
- return "LDAP";
- else
- return defaulttype;
- }
-}
-
diff --git a/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/CertStoreException.java b/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/CertStoreException.java
deleted file mode 100644
index a15bc3df6..000000000
--- a/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/CertStoreException.java
+++ /dev/null
@@ -1,172 +0,0 @@
-package java.security.cert;
-
-import java.io.PrintStream;
-import java.io.PrintWriter;
-import java.security.GeneralSecurityException;
-
-/**
- * An exception indicating one of a variety of problems retrieving
- * certificates and CRLs from a CertStore
.
- *
- * A CertStoreException
provides support for wrapping
- * exceptions. The {@link #getCause getCause} method returns the throwable,
- * if any, that caused this exception to be thrown.
- *
- * Concurrent Access
- *
- * Unless otherwise specified, the methods defined in this class are not
- * thread-safe. Multiple threads that need to access a single
- * object concurrently should synchronize amongst themselves and
- * provide the necessary locking. Multiple threads each manipulating
- * separate objects need not synchronize.
- *
- * @see CertStore
- **/
-public class CertStoreException extends GeneralSecurityException
-{
- private Throwable cause;
-
- /**
- * Creates a CertStoreException
with null
as
- * its detail message.
- */
- public CertStoreException()
- {
- super();
- }
-
- /**
- * Creates a CertStoreException
with the given detail
- * message. A detail message is a String
that describes this
- * particular exception.
- *
- * @param messag the detail message
- */
- public CertStoreException(String message)
- {
- super(message);
- }
-
- /**
- * Creates a CertStoreException
with the specified detail
- * message and cause.
- *
- * @param messag the detail message
- * @param cause the cause (which is saved for later retrieval by the
- * {@link #getCause getCause()} method). (A null
value is
- * permitted, and indicates that the cause is nonexistent or unknown.)
- */
- public CertStoreException(String message, Throwable cause)
- {
- super(message);
- this.cause = cause;
- }
-
- /**
- * Creates a CertStoreException
that wraps the specified
- * throwable. This allows any exception to be converted into a
- * CertStoreException
, while retaining information about the
- * cause, which may be useful for debugging. The detail message is
- * set to (cause==null ? null : cause.toString()
) (which
- * typically contains the class and detail message of cause).
- *
- * @param cause the cause (which is saved for later retrieval by the
- * {@link #getCause getCause()} method). (A null
value is
- * permitted, and indicates that the cause is nonexistent or unknown.)
- */
- public CertStoreException(Throwable cause)
- {
- this.cause = cause;
- }
-
- /**
- * Returns the detail message for this CertStoreException
.
- *
- * @return the detail message, or null
if neither the message
- * nor cause were specified
- */
- public String getMessage()
- {
- String message = super.getMessage();
-
- if ( message == null && cause == null )
- return null;
-
- StringBuffer s = new StringBuffer();
- if ( message != null )
- {
- s.append(message).append('\n');
- }
- if ( cause != null )
- {
- s.append("Cause:\n").append(cause.getMessage());
- }
- return s.toString();
- }
-
- /**
- * Returns the cause of this CertStoreException
or
- * null
if the cause is nonexistent or unknown.
- *
- * @return the cause of this throwable or null
if the cause
- * is nonexistent or unknown.
- */
- public Throwable getCause()
- {
- return cause;
- }
-
- /**
- * Returns a string describing this exception, including a description
- * of the internal (wrapped) cause if there is one.
- *
- * @return a string representation of this
- * CertStoreException
- */
- public String toString()
- {
- String message = getMessage();
- if ( message == null )
- return "";
-
- return message;
- }
-
- /**
- * Prints a stack trace to System.err
, including the backtrace
- * of the cause, if any.
- */
- public void printStackTrace() {
- printStackTrace(System.err);
- }
-
- /**
- * Prints a stack trace to a PrintStream
, including the
- * backtrace of the cause, if any.
- *
- * @param ps the PrintStream
to use for output
- */
- public void printStackTrace(PrintStream ps) {
- super.printStackTrace(ps);
- if ( cause != null ) {
- cause.printStackTrace(ps);
- }
- }
-
- /**
- * Prints a stack trace to a PrintWriter
, including the
- * backtrace of the cause, if any.
- *
- * @param pw the PrintWriter
to use for output
- */
- public void printStackTrace(PrintWriter pw) {
- if ( cause != null ) {
- cause.printStackTrace(pw);
- }
- super.printStackTrace(pw);
- if ( cause != null ) {
- cause.printStackTrace(pw);
- }
- }
-}
-
diff --git a/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/CertStoreParameters.java b/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/CertStoreParameters.java
deleted file mode 100644
index 58a70b372..000000000
--- a/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/CertStoreParameters.java
+++ /dev/null
@@ -1,52 +0,0 @@
-package java.security.cert;
-
-/**
- * A specification of CertStore
parameters.
- *
- * The purpose of this interface is to group (and provide type safety for)
- * all CertStore
parameter specifications. All
- * CertStore
parameter specifications must implement this
- * interface.
- *
- * Typically, a CertStoreParameters
object is passed as a parameter
- * to one of the {@link CertStore#getInstance CertStore.getInstance} methods.
- * The getInstance
method returns a CertStore
that
- * is used for retrieving Certificate
s and CRL
s. The
- * CertStore
that is returned is initialized with the specified
- * parameters. The type of parameters needed may vary between different types
- * of CertStore
s.
- *
- * @see CertStore#getInstance
- **/
-public interface CertStoreParameters extends Cloneable
-{
- /**
- * Makes a copy of this CertStoreParameters
.
- *
- * The precise meaning of "copy" may depend on the class of
- * the CertStoreParameters
object. A typical implementation
- * performs a "deep copy" of this object, but this is not an absolute
- * requirement. Some implementations may perform a "shallow copy" of some
- * or all of the fields of this object.
- *
- * Note that the CertStore.getInstance
methods make a copy
- * of the specified CertStoreParameters
. A deep copy
- * implementation of clone
is safer and more robust, as it
- * prevents the caller from corrupting a shared CertStore
by
- * subsequently modifying the contents of its initialization parameters.
- * However, a shallow copy implementation of clone
is more
- * appropriate for applications that need to hold a reference to a
- * parameter contained in the CertStoreParameters
. For example,
- * a shallow copy clone allows an application to release the resources of
- * a particular CertStore
initialization parameter immediately,
- * rather than waiting for the garbage collection mechanism. This should
- * be done with the utmost care, since the CertStore
may still
- * be in use by other threads.
- *
- * Each subclass should state the precise behavior of this method so
- * that users and developers know what to expect.
- *
- * @return a copy of this CertStoreParameters
- */
- public Object clone();
-}
diff --git a/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/CertStoreSpi.java b/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/CertStoreSpi.java
deleted file mode 100644
index b92cf4aa5..000000000
--- a/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/CertStoreSpi.java
+++ /dev/null
@@ -1,104 +0,0 @@
-package java.security.cert;
-
-import java.security.InvalidAlgorithmParameterException;
-import java.util.Collection;
-
-/**
- * The Service Provider Interface (SPI)
- * for the {@link CertStore CertStore} class. All CertStore
- * implementations must include a class (the SPI class) that extends
- * this class (CertStoreSpi
), provides a constructor with
- * a single argument of type CertStoreParameters
, and implements
- * all of its methods. In general, instances of this class should only be
- * accessed through the CertStore
class.
- * For details, see the Java Cryptography Architecture.
- *
- * Concurrent Access
- *
- * The public methods of all CertStoreSpi
objects must be
- * thread-safe. That is, multiple threads may concurrently invoke these
- * methods on a single CertStoreSpi
object (or more than one)
- * with no ill effects. This allows a CertPathBuilder
to search
- * for a CRL while simultaneously searching for further certificates, for
- * instance.
- *
- * Simple CertStoreSpi
implementations will probably ensure
- * thread safety by adding a synchronized
keyword to their
- * engineGetCertificates
and engineGetCRLs
methods.
- * More sophisticated ones may allow truly concurrent access.
- **/
-public abstract class CertStoreSpi
- extends Object
-{
-
- /**
- * The sole constructor.
- *
- * @param params the initialization parameters (may be null
)
- * @exception InvalidAlgorithmParameterException if the initialization
- * parameters are inappropriate for this CertStoreSpi
- */
- public CertStoreSpi( CertStoreParameters params )
- throws InvalidAlgorithmParameterException {}
-
- /**
- * Returns a Collection
of Certificate
s that
- * match the specified selector. If no Certificate
s
- * match the selector, an empty Collection
will be returned.
- *
- * For some CertStore
types, the resulting
- * Collection
may not contain all of the
- * Certificate
s that match the selector. For instance,
- * an LDAP CertStore
may not search all entries in the
- * directory. Instead, it may just search entries that are likely to
- * contain the Certificate
s it is looking for.
- *
- * Some CertStore
implementations (especially LDAP
- * CertStore
s) may throw a CertStoreException
- * unless a non-null CertSelector
is provided that includes
- * specific criteria that can be used to find the certificates. Issuer
- * and/or subject names are especially useful criteria.
- *
- * @param selector A CertSelector
used to select which
- * Certificate
s should be returned. Specify null
- * to return all Certificate
s (if supported).
- *
- * @return A Collection
of Certificate
s that
- * match the specified selector (never null
)
- *
- * @exception CertStoreException if an exception occurs
- */
- public abstract Collection engineGetCertificates( CertSelector selector )
- throws CertStoreException;
-
- /**
- * Returns a Collection
of CRL
s that
- * match the specified selector. If no CRL
s
- * match the selector, an empty Collection
will be returned.
- *
- * For some CertStore
types, the resulting
- * Collection
may not contain all of the
- * CRL
s that match the selector. For instance,
- * an LDAP CertStore
may not search all entries in the
- * directory. Instead, it may just search entries that are likely to
- * contain the CRL
s it is looking for.
- *
- * Some CertStore
implementations (especially LDAP
- * CertStore
s) may throw a CertStoreException
- * unless a non-null CRLSelector
is provided that includes
- * specific criteria that can be used to find the CRLs. Issuer names
- * and/or the certificate to be checked are especially useful.
- *
- * @param selector A CRLSelector
used to select which
- * CRL
s should be returned. Specify null
- * to return all CRL
s (if supported).
- *
- * @return A Collection
of CRL
s that
- * match the specified selector (never null
)
- *
- * @exception CertStoreException if an exception occurs
- */
- public abstract Collection engineGetCRLs( CRLSelector selector )
- throws CertStoreException;
-}
-
diff --git a/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/CertUtil.java b/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/CertUtil.java
deleted file mode 100644
index 216a8d8e4..000000000
--- a/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/CertUtil.java
+++ /dev/null
@@ -1,556 +0,0 @@
-package java.security.cert;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.security.InvalidAlgorithmParameterException;
-import java.security.NoSuchProviderException;
-import java.security.Provider;
-import java.security.Security;
-
-import org.spongycastle.asn1.ASN1Object;
-import org.spongycastle.asn1.ASN1ObjectIdentifier;
-import org.spongycastle.asn1.DERIA5String;
-import org.spongycastle.asn1.DEROutputStream;
-import org.spongycastle.asn1.OIDTokenizer;
-import org.spongycastle.asn1.x509.X509Name;
-import org.spongycastle.util.Strings;
-
-class CertUtil
-{
- static class Implementation
- {
- Object engine;
- Provider provider;
-
- Implementation(
- Object engine,
- Provider provider)
- {
- this.engine = engine;
- this.provider = provider;
- }
-
- Object getEngine()
- {
- return engine;
- }
-
- Provider getProvider()
- {
- return provider;
- }
- }
-
- /**
- * see if we can find an algorithm (or its alias and what it represents) in
- * the property table for the given provider.
- *
- * @return null if no algorithm found, an Implementation if it is.
- */
- static Implementation getImplementation(
- String baseName,
- String algorithm,
- Provider prov)
- {
- if (prov == null)
- {
- Provider[] provider = Security.getProviders();
-
- //
- // search every provider looking for the algorithm we want.
- //
- for (int i = 0; i != provider.length; i++)
- {
- Implementation imp = getImplementation(baseName, algorithm, provider[i]);
- if (imp != null)
- {
- return imp;
- }
- }
-
- return null;
- }
-
- String alias;
-
- while ((alias = prov.getProperty("Alg.Alias." + baseName + "." + algorithm)) != null)
- {
- algorithm = alias;
- }
-
- String className = prov.getProperty(baseName + "." + algorithm);
-
- if (className != null)
- {
- try
- {
- return new Implementation(Class.forName(className).newInstance(), prov);
- }
- catch (ClassNotFoundException e)
- {
- throw new IllegalStateException(
- "algorithm " + algorithm + " in provider " + prov.getName() + " but no class found!");
- }
- catch (Exception e)
- {
- throw new IllegalStateException(
- "algorithm " + algorithm + " in provider " + prov.getName() + " but class inaccessible: " + e.toString());
- }
- }
-
- return null;
- }
-
- /**
- * return an implementation for a given algorithm/provider.
- * If the provider is null, we grab the first avalaible who has the required algorithm.
- *
- * @return null if no algorithm found, an Implementation if it is.
- * @exception NoSuchProviderException if a provider is specified and not found.
- */
- static Implementation getImplementation(
- String baseName,
- String algorithm,
- String provider)
- throws NoSuchProviderException
- {
- if (provider == null)
- {
- Provider[] prov = Security.getProviders();
-
- //
- // search every provider looking for the algorithm we want.
- //
- for (int i = 0; i != prov.length; i++)
- {
- Implementation imp = getImplementation(baseName, algorithm, prov[i]);
- if (imp != null)
- {
- return imp;
- }
- }
- }
- else
- {
- Provider prov = Security.getProvider(provider);
-
- if (prov == null)
- {
- throw new NoSuchProviderException("Provider " + provider + " not found");
- }
-
- return getImplementation(baseName, algorithm, prov);
- }
-
- return null;
- }
-
- /**
- * see if we can find an algorithm (or its alias and what it represents) in
- * the property table for the given provider.
- *
- * @return null if no algorithm found, an Implementation if it is.
- */
- static Implementation getImplementation(String baseName, String algorithm,
- Provider prov, Class[] ctorparamtype, Object[] ctorparam)
- throws InvalidAlgorithmParameterException
- {
- String alias;
-
- while ((alias = prov.getProperty("Alg.Alias." + baseName + "."
- + algorithm)) != null)
- {
- algorithm = alias;
- }
-
- String className = prov.getProperty(baseName + "." + algorithm);
-
- if (className != null)
- {
- try
- {
- return new Implementation(Class.forName(className)
- .getConstructor(ctorparamtype).newInstance(ctorparam),
- prov);
- }
- catch (ClassNotFoundException e)
- {
- throw new IllegalStateException("algorithm " + algorithm
- + " in provider " + prov.getName()
- + " but no class found!");
- }
- catch (Exception e)
- {
- if (e instanceof InvalidAlgorithmParameterException)
- {
- throw (InvalidAlgorithmParameterException)e;
- }
-
- throw new IllegalStateException("algorithm " + algorithm
- + " in provider " + prov.getName()
- + " but class inaccessible!");
- }
- }
-
- return null;
- }
-
- /**
- * return an implementation for a given algorithm/provider. If the provider
- * is null, we grab the first avalaible who has the required algorithm.
- *
- * @return null if no algorithm found, an Implementation if it is.
- *
- * @exception NoSuchProviderException
- * if a provider is specified and not found.
- */
- static Implementation getImplementation(String baseName, String algorithm,
- String provider, Class[] ctorparamtype, Object[] ctorparam)
- throws NoSuchProviderException, InvalidAlgorithmParameterException
- {
- if (provider == null)
- {
- Provider[] prov = Security.getProviders();
-
- //
- // search every provider looking for the algorithm we want.
- //
- for (int i = 0; i != prov.length; i++)
- {
- Implementation imp = getImplementation(baseName, algorithm,
- prov[i], ctorparamtype, ctorparam);
- if (imp != null)
- {
- return imp;
- }
- }
- }
- else
- {
- Provider prov = Security.getProvider(provider);
-
- if (prov == null)
- {
- throw new NoSuchProviderException("Provider " + provider
- + " not found");
- }
-
- return getImplementation(baseName, algorithm, prov, ctorparamtype,
- ctorparam);
- }
-
- return null;
- }
-
- static byte[] parseGeneralName(int type, String data) throws IOException
- {
- byte[] encoded = null;
-
- switch (type)
- {
- case 0:
- throw new IOException(
- "unable to parse OtherName String representation");
- case 1:
- encoded = parseRfc822(data.trim());
- break;
- case 2:
- encoded = parseDNSName(data.trim());
- break;
- case 3:
- throw new IOException(
- "unable to parse ORAddress String representation");
- case 4:
- encoded = parseX509Name(data.trim());
- break;
- case 5:
- throw new IOException(
- "unable to parse EDIPartyName String representation");
- case 6:
- encoded = parseURI(data.trim());
- break;
- case 7:
- encoded = parseIP(data.trim());
- break;
- case 8:
- encoded = parseOID(data.trim());
- break;
- default:
- throw new IOException(
- "unable to parse unkown type String representation");
- }
- return encoded;
- }
-
- /**
- * Check the format of an OID.
- * Throw an IOException if the first component is not 0, 1 or 2 or the
- * second component is greater than 39.
- *
- * User {@link org.spongycastle.asn1.OIDTokenizer OIDTokenizer}
- *
- * @param the
- * OID to be checked.
- *
- * @exception IOException
- * if the first component is not 0, 1 or 2 or the second
- * component is greater than 39.
- */
- static byte[] parseOID(String oid) throws IOException
- {
- OIDTokenizer tokenizer = new OIDTokenizer(oid);
- String token;
- if (!tokenizer.hasMoreTokens())
- {
- throw new IOException("OID contains no tokens");
- }
- token = tokenizer.nextToken();
- if (token == null)
- {
- throw new IOException("OID contains no tokens");
- }
- try
- {
- int test = (Integer.valueOf(token)).intValue();
- if (test < 0 || test > 2)
- {
- throw new IOException("first token is not >= 0 and <=2");
- }
- if (!tokenizer.hasMoreTokens())
- {
- throw new IOException("OID contains only one token");
- }
- token = tokenizer.nextToken();
- if (token == null)
- {
- throw new IOException("OID contains only one token");
- }
- test = (Integer.valueOf(token)).intValue();
- if (test < 0 || test > 39)
- {
- throw new IOException("secon token is not >= 0 and <=39");
- }
- }
- catch (NumberFormatException ex)
- {
- throw new IOException("token: " + token + ": " + ex.toString());
- }
- ASN1Object derData = new ASN1ObjectIdentifier(oid);
- ByteArrayOutputStream outStream = new ByteArrayOutputStream();
- DEROutputStream derOutStream = new DEROutputStream(outStream);
- derOutStream.writeObject(derData);
- derOutStream.close();
- return outStream.toByteArray();
- }
-
- /**
- * Parse the given IPv4 or IPv6 into DER encoded byte array representation.
- *
- * @param the
- * IP in well known String format
- *
- * @return the IP as byte array
- *
- * @exception IOException
- * if the String could not be parsed
- */
- private static byte[] parseIP(String data) throws IOException
- {
- byte[] encoded = parseIPv4(data);
-
- if (encoded == null)
- {
- encoded = parseIPv6(data);
- }
-
- if (encoded == null)
- {
- throw new IOException(
- "unable to parse IP to DER encoded byte array");
- }
-
- return encoded;
- }
-
- /**
- * Parse the given IPv4 into DER encoded byte array representation.
- *
- * @param the
- * IP in well known String format
- *
- * @return the IP as byte array or null
if not parseable
- */
- private static byte[] parseIPv4(String data)
- {
- if (data.length() == 0)
- {
- return null;
- }
-
- int octet;
- int octets = 0;
- byte[] dst = new byte[4];
-
- int pos = 0;
- int start = 0;
- while (start < data.length()
- && (pos = data.indexOf('.', start)) > start && pos - start > 3)
- {
- try
- {
- octet = (Integer.valueOf(data.substring(start, pos - start)))
- .intValue();
- }
- catch (NumberFormatException ex)
- {
- return null;
- }
- if (octet < 0 || octet > 255)
- {
- return null;
- }
- dst[octets++] = (byte)(octet & 0xff);
-
- start = pos + 1;
- }
-
- if (octets < 4)
- {
- return null;
- }
-
- return dst;
- }
-
- /**
- * Parse the given IPv6 into DER encoded byte array representation.
- *
- * TODO: implement this
- *
- * @param the
- * IP in well known String format
- *
- * @return the IP as byte array or null
if not parseable
- */
- private static byte[] parseIPv6(String data)
- {
- return null;
- }
-
- /**
- * Parse the given URI into DER encoded byte array representation.
- *
- * @param the
- * URI in well known String format
- *
- * @return the URI as byte array
- *
- * @exception IOException
- * if the String could not be parsed
- */
- private static byte[] parseURI(String data) throws IOException
- {
- // TODO do parsing test
- ASN1Object derData = new DERIA5String(data);
- ByteArrayOutputStream outStream = new ByteArrayOutputStream();
- DEROutputStream derOutStream = new DEROutputStream(outStream);
- derOutStream.writeObject(derData);
- derOutStream.close();
- return outStream.toByteArray();
- }
-
- /**
- * Parse the given rfc822 addr-spec into DER encoded byte array
- * representation.
- *
- * @param the
- * rfc822 addr-spec in well known String format
- *
- * @return the rfc822 addr-spec as byte array
- *
- * @exception IOException
- * if the String could not be parsed
- */
- private static byte[] parseRfc822(String data) throws IOException
- {
- int tmpInt = data.indexOf('@');
- if (tmpInt < 0 || tmpInt >= data.length() - 1)
- {
- throw new IOException("wrong format of rfc822Name:" + data);
- }
- // TODO more test for illegal charateers
- ASN1Object derData = new DERIA5String(data);
- ByteArrayOutputStream outStream = new ByteArrayOutputStream();
- DEROutputStream derOutStream = new DEROutputStream(outStream);
- derOutStream.writeObject(derData);
- derOutStream.close();
- return outStream.toByteArray();
- }
-
- /**
- * Parse the given DNS name into DER encoded byte array representation. The
- * String must be in den preffered name syntax as defined in RFC 1034.
- *
- * @param the
- * DNS name in well known String format
- *
- * @return the DNS name as byte array
- *
- * @exception IOException
- * if the String could not be parsed
- */
- private static byte[] parseDNSName(String data) throws IOException
- {
- // TODO more test for illegal charateers
- ASN1Object derData = new DERIA5String(data);
- ByteArrayOutputStream outStream = new ByteArrayOutputStream();
- DEROutputStream derOutStream = new DEROutputStream(outStream);
- derOutStream.writeObject(derData);
- derOutStream.close();
- return outStream.toByteArray();
- }
-
- /**
- * Parse the given X.509 name into DER encoded byte array representation.
- *
- * @param the
- * X.509 name in well known String format
- *
- * @return the X.509 name as byte array
- *
- * @exception IOException
- * if the String could not be parsed
- */
- private static byte[] parseX509Name(String data) throws IOException
- {
- // TODO more test for illegal charateers
- ByteArrayOutputStream outStream = new ByteArrayOutputStream();
- DEROutputStream derOutStream = new DEROutputStream(outStream);
- derOutStream.writeObject(new X509Name(trimX509Name(data)));
- derOutStream.close();
- return outStream.toByteArray();
- }
-
- /**
- * Returns the given name converted to upper case and all multi spaces squezed
- * to one space.
- **/
- static String trimX509Name(String name)
- {
- String data = Strings.toUpperCase(name.trim());
- int pos;
- while ((pos = data.indexOf(" ")) >= 0)
- {
- data = data.substring(0, pos) + data.substring(pos + 1);
- }
- while ((pos = data.indexOf(" =")) >= 0)
- {
- data = data.substring(0, pos) + data.substring(pos + 1);
- }
- while ((pos = data.indexOf("= ")) >= 0)
- {
- data = data.substring(0, pos + 1) + data.substring(pos + 2);
- }
- return data;
- }
-}
diff --git a/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/Certificate.java b/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/Certificate.java
deleted file mode 100644
index 201e209a3..000000000
--- a/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/Certificate.java
+++ /dev/null
@@ -1,80 +0,0 @@
-
-package java.security.cert;
-
-import java.security.InvalidKeyException;
-import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
-import java.security.NoSuchProviderException;
-import java.security.PublicKey;
-import java.security.SignatureException;
-
-public abstract class Certificate extends Object
-{
- private String type;
-
- protected Certificate(String type)
- {
- this.type = type;
- }
-
- public boolean equals(Object other)
- {
- if ( !(other instanceof Certificate) )
- return false;
-
- if ( other == this )
- return true;
-
- try
- {
- byte[] enc1 = getEncoded();
- byte[] enc2 = ((Certificate)other).getEncoded();
-
- return MessageDigest.isEqual(enc1, enc2);
- }
- catch (CertificateEncodingException e)
- {
- return false;
- }
- }
-
- public final String getType()
- {
- return type;
- }
-
- // XXX
- public int hashCode()
- {
- try
- {
- byte[] enc1 = getEncoded();
- int hc = 0;
- for (int i = 0; i < enc1.length; i++)
- {
- hc += enc1[i];
- }
-
- return hc;
- }
- catch (CertificateEncodingException e)
- {
- return 0;
- }
- }
-
- public abstract byte[] getEncoded()
- throws CertificateEncodingException;
-
- public abstract PublicKey getPublicKey();
-
- public abstract String toString();
-
- public abstract void verify(PublicKey key)
- throws CertificateException, NoSuchAlgorithmException,
- InvalidKeyException, NoSuchProviderException, SignatureException;
-
- public abstract void verify(PublicKey key, String sigProvider)
- throws CertificateException, NoSuchAlgorithmException,
- InvalidKeyException, NoSuchProviderException, SignatureException;
-}
diff --git a/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/CertificateEncodingException.java b/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/CertificateEncodingException.java
deleted file mode 100644
index 47545a5c0..000000000
--- a/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/CertificateEncodingException.java
+++ /dev/null
@@ -1,14 +0,0 @@
-
-package java.security.cert;
-
-public class CertificateEncodingException extends CertificateException
-{
- public CertificateEncodingException()
- {
- }
-
- public CertificateEncodingException(String msg)
- {
- super(msg);
- }
-}
diff --git a/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/CertificateException.java b/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/CertificateException.java
deleted file mode 100644
index 644c6249f..000000000
--- a/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/CertificateException.java
+++ /dev/null
@@ -1,16 +0,0 @@
-
-package java.security.cert;
-
-import java.security.GeneralSecurityException;
-
-public class CertificateException extends GeneralSecurityException
-{
- public CertificateException()
- {
- }
-
- public CertificateException(String msg)
- {
- super(msg);
- }
-}
diff --git a/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/CertificateExpiredException.java b/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/CertificateExpiredException.java
deleted file mode 100644
index 1a9062aa2..000000000
--- a/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/CertificateExpiredException.java
+++ /dev/null
@@ -1,14 +0,0 @@
-
-package java.security.cert;
-
-public class CertificateExpiredException extends CertificateException
-{
- public CertificateExpiredException()
- {
- }
-
- public CertificateExpiredException(String msg)
- {
- super(msg);
- }
-}
diff --git a/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/CertificateFactory.java b/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/CertificateFactory.java
deleted file mode 100644
index e86cd3a03..000000000
--- a/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/CertificateFactory.java
+++ /dev/null
@@ -1,183 +0,0 @@
-
-package java.security.cert;
-
-import java.io.InputStream;
-import java.security.NoSuchProviderException;
-import java.security.Provider;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.List;
-
-/**
- * Uses {@link CertUtil CertUtil} to actualiy load the SPI classes.
- *
- * @see CertUtil
- **/
-public class CertificateFactory
-{
- private CertificateFactorySpi certFacSpi;
- private Provider provider;
- private String type;
-
- protected CertificateFactory(
- CertificateFactorySpi certFacSpi,
- Provider provider,
- String type)
- {
- this.certFacSpi = certFacSpi;
- this.provider = provider;
- this.type = type;
- }
-
- public final CRL generateCRL(InputStream inStream)
- throws CRLException
- {
- return certFacSpi.engineGenerateCRL(inStream);
- }
-
- public final Collection generateCRLs(InputStream inStream)
- throws CRLException
- {
- return certFacSpi.engineGenerateCRLs(inStream);
- }
-
- public final Certificate generateCertificate(InputStream inStream)
- throws CertificateException
- {
- return certFacSpi.engineGenerateCertificate(inStream);
- }
-
- public final /*Sk13 Vector*/ Collection generateCertificates(InputStream inStream)
- throws CertificateException
- {
- return certFacSpi.engineGenerateCertificates(inStream);
- }
-
- /**
- * Returns an iteration of the CertPath
encodings supported
- * by this certificate factory, with the default encoding first. See
- * Appendix A in the
- * Java Certification Path API Programmer's Guide for information about
- * standard encoding names and their formats.
- *
- * Attempts to modify the returned Iterator
via its
- * remove
method result in an
- * UnsupportedOperationException
.
- *
- * @return an Iterator
over the names of the supported
- * CertPath
encodings (as String
s)
- */
- public final Iterator getCertPathEncodings()
- {
- return certFacSpi.engineGetCertPathEncodings();
- }
-
- /**
- * Generates a CertPath
object and initializes it with
- * the data read from the InputStream
inStream. The data
- * is assumed to be in the default encoding. The name of the default
- * encoding is the first element of the Iterator
returned by
- * the {@link #getCertPathEncodings getCertPathEncodings} method.
- *
- * @param inStream an InputStream
containing the data
- *
- * @return a CertPath
initialized with the data from the
- * InputStream
- *
- * @exception CertificateException if an exception occurs while decoding
- */
- public final CertPath generateCertPath(InputStream inStream)
- throws CertificateException
- {
- return certFacSpi.engineGenerateCertPath(inStream);
- }
-
- /**
- * Generates a CertPath
object and initializes it with
- * the data read from the InputStream
inStream. The data
- * is assumed to be in the specified encoding. See Appendix A in the
- *
- * Java Certification Path API Programmer's Guide
- * for information about standard encoding names and their formats.
- *
- * @param inStream an InputStream
containing the data
- * @param encoding the encoding used for the data
- *
- * @return a CertPath
initialized with the data from the
- * InputStream
- *
- * @exception CertificateException if an exception occurs while decoding or
- * the encoding requested is not supported
- */
- public final CertPath generateCertPath(InputStream inStream, String encoding)
- throws CertificateException
- {
- return certFacSpi.engineGenerateCertPath(inStream, encoding);
- }
-
- /**
- * Generates a CertPath
object and initializes it with
- * a List
of Certificate
s.
- *
- * The certificates supplied must be of a type supported by the
- * CertificateFactory
. They will be copied out of the supplied
- * List
object.
- *
- * @param certificates a List
of Certificate
s
- *
- * @return a CertPath
initialized with the supplied list of
- * certificates
- *
- * @exception CertificateException if an exception occurs
- */
- public final CertPath generateCertPath(List certificates)
- throws CertificateException
- {
- return certFacSpi.engineGenerateCertPath( certificates );
- }
-
- public static final CertificateFactory getInstance(String type)
- throws CertificateException
- {
- try
- {
- CertUtil.Implementation imp = CertUtil.getImplementation("CertificateFactory", type, (String)null);
-
- if (imp != null)
- {
- return new CertificateFactory((CertificateFactorySpi)imp.getEngine(), imp.getProvider(), type);
- }
-
- throw new CertificateException("can't find type " + type);
- }
- catch (NoSuchProviderException e)
- {
- throw new CertificateException(type + " not found");
- }
- }
-
- public static final CertificateFactory getInstance(
- String type,
- String provider)
- throws CertificateException, NoSuchProviderException
- {
- CertUtil.Implementation imp = CertUtil.getImplementation("CertificateFactory", type, provider);
-
- if (imp != null)
- {
- return new CertificateFactory((CertificateFactorySpi)imp.getEngine(), imp.getProvider(), type);
- }
-
- throw new CertificateException("can't find type " + type);
- }
-
- public final Provider getProvider()
- {
- return provider;
- }
-
- public final String getType()
- {
- return type;
- }
-}
diff --git a/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/CertificateFactorySpi.java b/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/CertificateFactorySpi.java
deleted file mode 100644
index 8cc06fc2e..000000000
--- a/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/CertificateFactorySpi.java
+++ /dev/null
@@ -1,111 +0,0 @@
-
-package java.security.cert;
-
-import java.io.InputStream;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.List;
-
-public abstract class CertificateFactorySpi
-{
- public CertificateFactorySpi()
- {
- }
-
- public abstract CRL engineGenerateCRL(InputStream inStream)
- throws CRLException;
-
- public abstract Collection engineGenerateCRLs(InputStream inStream)
- throws CRLException;
-
- public abstract Certificate engineGenerateCertificate(InputStream inStream)
- throws CertificateException;
-
- public abstract /*SK13 Vector*/ Collection engineGenerateCertificates(InputStream inStream)
- throws CertificateException;
-
- /**
- * Returns an iteration of the CertPath
encodings supported
- * by this certificate factory, with the default encoding first. See
- * Appendix A in the
- * Java Certification Path API Programmer's Guide
- * for information about standard encoding names.
- *
- * Attempts to modify the returned Iterator
via its
- * remove
method result in an
- * UnsupportedOperationException
.
- *
- * This method was added to version 1.4 of the Java 2 Platform
- * Standard Edition. In order to maintain backwards compatibility with
- * existing service providers, this method cannot be abstract
- * and by default throws an UnsupportedOperationException
.
- *
- * @return an Iterator
over the names of the supported
- * CertPath
encodings (as String
s)
- *
- * @exception UnsupportedOperationException if the method is not supported
- */
- public abstract Iterator engineGetCertPathEncodings();
-
- /**
- * Generates a CertPath
object and initializes it with
- * the data read from the InputStream
inStream. The data
- * is assumed to be in the default encoding.
- *
- * @param inStream an InputStream
containing the data
- *
- * @return a CertPath
initialized with the data from the
- * InputStream
- *
- * @exception CertificateException if an exception occurs while decoding
- */
- public abstract CertPath engineGenerateCertPath(InputStream inStream)
- throws CertificateException;
-
- /**
- * Generates a CertPath
object and initializes it with
- * the data read from the InputStream
inStream. The data
- * is assumed to be in the specified encoding.
- *
- * This method was added to version 1.4 of the Java 2 Platform
- * Standard Edition. In order to maintain backwards compatibility with
- * existing service providers, this method cannot be abstract
- * and by default throws an UnsupportedOperationException
.
- *
- * @param inStream an InputStream
containing the data
- * @param encoding the encoding used for the data
- *
- * @return a CertPath
initialized with the data from the
- * InputStream
- *
- * @exception CertificateException if an exception occurs while decoding or
- * the encoding requested is not supported
- * @exception UnsupportedOperationException if the method is not supported
- */
- public abstract CertPath engineGenerateCertPath(InputStream inStream, String encoding)
- throws CertificateException;
-
- /**
- * Generates a CertPath
object and initializes it with
- * a List
of Certificate
s.
- *
- * The certificates supplied must be of a type supported by the
- * CertificateFactory
. They will be copied out of the supplied
- * List
object.
- *
- * This method was added to version 1.4 of the Java 2 Platform
- * Standard Edition. In order to maintain backwards compatibility with
- * existing service providers, this method cannot be abstract
- * and by default throws an UnsupportedOperationException
.
- *
- * @param certificates a List
of Certificate
s
- *
- * @return a CertPath
initialized with the supplied list of
- * certificates
- *
- * @exception CertificateException if an exception occurs
- * @exception UnsupportedOperationException if the method is not supported
- */
- public abstract CertPath engineGenerateCertPath(List certificates)
- throws CertificateException;
-}
diff --git a/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/CertificateNotYetValidException.java b/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/CertificateNotYetValidException.java
deleted file mode 100644
index ec8d46a3e..000000000
--- a/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/CertificateNotYetValidException.java
+++ /dev/null
@@ -1,14 +0,0 @@
-
-package java.security.cert;
-
-public class CertificateNotYetValidException extends CertificateException
-{
- public CertificateNotYetValidException()
- {
- }
-
- public CertificateNotYetValidException(String msg)
- {
- super(msg);
- }
-}
diff --git a/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/CertificateParsingException.java b/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/CertificateParsingException.java
deleted file mode 100644
index a9f18aae0..000000000
--- a/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/CertificateParsingException.java
+++ /dev/null
@@ -1,14 +0,0 @@
-
-package java.security.cert;
-
-public class CertificateParsingException extends CertificateException
-{
- public CertificateParsingException()
- {
- }
-
- public CertificateParsingException(String msg)
- {
- super(msg);
- }
-}
diff --git a/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/CollectionCertStoreParameters.java b/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/CollectionCertStoreParameters.java
deleted file mode 100644
index 7c31e7b51..000000000
--- a/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/CollectionCertStoreParameters.java
+++ /dev/null
@@ -1,117 +0,0 @@
-package java.security.cert;
-
-import java.util.ArrayList;
-import java.util.Collection;
-
-/**
- * Parameters used as input for the Collection CertStore
- * algorithm.
- *
- * This class is used to provide necessary configuration parameters
- * to implementations of the Collection CertStore
- * algorithm. The only parameter included in this class is the
- * Collection
from which the CertStore
will
- * retrieve certificates and CRLs.
- *
- * Concurrent Access
- *
- * Unless otherwise specified, the methods defined in this class are not
- * thread-safe. Multiple threads that need to access a single
- * object concurrently should synchronize amongst themselves and
- * provide the necessary locking. Multiple threads each manipulating
- * separate objects need not synchronize.
- *
- * @see java.util.Collection
- * @see CertStore
- **/
-public class CollectionCertStoreParameters implements CertStoreParameters
-{
- private Collection collection;
-
- /**
- * Creates an instance of CollectionCertStoreParameters
- * which will allow certificates and CRLs to be retrieved from the
- * specified Collection
. If the specified
- * Collection
contains an object that is not a
- * Certificate
or CRL
, that object will be
- * ignored by the Collection CertStore
.
- *
- * The Collection
is not copied. Instead, a
- * reference is used. This allows the caller to subsequently add or
- * remove Certificates
or CRL
s from the
- * Collection
, thus changing the set of
- * Certificates
or CRL
s available to the
- * Collection CertStore
. The Collection CertStore
- * will not modify the contents of the Collection
.
- *
- * If the Collection
will be modified by one thread while
- * another thread is calling a method of a Collection CertStore
- * that has been initialized with this Collection
, the
- * Collection
must have fail-fast iterators.
- *
- * @param collection a Collection
of
- * Certificate
s and CRL
s
- *
- * @exception NullPointerException if collection
is
- * null
- */
- public CollectionCertStoreParameters(Collection collection)
- {
- if ( collection == null )
- throw new NullPointerException("collection must be non-null");
- this.collection = collection;
- }
-
- /**
- * Creates an instance of CollectionCertStoreParameters
with
- * the an empty Collection.
- */
- public CollectionCertStoreParameters()
- {
- collection = new ArrayList();
- }
-
- /**
- * Returns the Collection
from which Certificate
s
- * and CRL
s are retrieved. This is not a copy of the
- * Collection
, it is a reference. This allows the caller to
- * subsequently add or remove Certificates
or
- * CRL
s from the Collection
.
- *
- * @return the Collection
(never null)
- */
- public Collection getCollection()
- {
- return collection;
- }
-
- /**
- * Returns a copy of this object. Note that only a reference to the
- * Collection
is copied, and not the contents.
- *
- * @return the copy
- */
- public Object clone()
- {
- try {
- return super.clone();
- } catch (CloneNotSupportedException e) {
- /* Cannot happen */
- throw new InternalError(e.toString());
- }
- }
-
- /**
- * Returns a formatted string describing the parameters.
- *
- * @return a formatted string describing the parameters
- */
- public String toString()
- {
- StringBuffer s = new StringBuffer();
- s.append("CollectionCertStoreParameters: [\n collections:\n");
- s.append( getCollection());
- s.append("\n]" );
- return s.toString();
- }
-}
diff --git a/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/LDAPCertStoreParameters.java b/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/LDAPCertStoreParameters.java
deleted file mode 100644
index 2e4669975..000000000
--- a/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/LDAPCertStoreParameters.java
+++ /dev/null
@@ -1,130 +0,0 @@
-package java.security.cert;
-
-/**
- * Parameters used as input for the LDAP CertStore
algorithm.
- *
- * This class is used to provide necessary configuration parameters (server
- * name and port number) to implementations of the LDAP CertStore
- * algorithm.
- *
- * Concurrent Access
- *
- * Unless otherwise specified, the methods defined in this class are not
- * thread-safe. Multiple threads that need to access a single
- * object concurrently should synchronize amongst themselves and
- * provide the necessary locking. Multiple threads each manipulating
- * separate objects need not synchronize.
- *
- * @see CertStore
- **/
-public class LDAPCertStoreParameters implements CertStoreParameters
-{
- private static final int LDAP_DEFAULT_PORT = 389;
-
- /**
- * the port number of the LDAP server
- */
- private String serverName;
-
- /**
- * the DNS name of the LDAP server
- */
- private int port;
-
- /**
- * Creates an instance of LDAPCertStoreParameters
with the
- * default parameter values (server name "localhost", port 389).
- */
- public LDAPCertStoreParameters()
- {
- this("localhost", LDAP_DEFAULT_PORT);
- }
-
- /**
- * Creates an instance of LDAPCertStoreParameters
with the
- * specified server name and a default port of 389.
- *
- * @param serverName the DNS name of the LDAP server
- *
- * @exception NullPointerException if serverName
is
- * null
- */
- public LDAPCertStoreParameters(String serverName)
- {
- this(serverName, LDAP_DEFAULT_PORT);
- }
-
- /**
- * Creates an instance of LDAPCertStoreParameters
with the
- * specified parameter values.
- *
- * @param serverName the DNS name of the LDAP server
- * @param port the port number of the LDAP server
- *
- * @exception NullPointerException if serverName
is
- * null
- */
- public LDAPCertStoreParameters(String serverName, int port)
- {
- if (serverName == null)
- throw new NullPointerException("serverName must be non-null");
- this.serverName = serverName;
- this.port = port;
- }
-
- /**
- * Returns the DNS name of the LDAP server.
- *
- * @return the name (not null
)
- */
- public String getServerName()
- {
- return serverName;
- }
-
- /**
- * Returns the port number of the LDAP server.
- *
- * @return the port number
- */
- public int getPort()
- {
- return port;
- }
-
- /**
- * Returns a copy of this object. Changes to the copy will not affect
- * the original and vice versa.
- *
- * Note: this method currently performs a shallow copy of the object
- * (simply calls Object.clone()
). This may be changed in a
- * future revision to perform a deep copy if new parameters are added
- * that should not be shared.
- *
- * @return the copy
- */
- public Object clone()
- {
- try {
- return super.clone();
- } catch (CloneNotSupportedException e) {
- /* Cannot happen */
- throw new InternalError(e.toString());
- }
- }
-
- /**
- * Returns a formatted string describing the parameters.
- *
- * @return a formatted string describing the parameters
- */
- public String toString()
- {
- StringBuffer sb = new StringBuffer();
- sb.append("LDAPCertStoreParameters: [\n");
- sb.append(" serverName: ").append(serverName).append('\n');
- sb.append(" port: ").append(port).append('\n');
- sb.append(']');
- return sb.toString();
- }
-}
diff --git a/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/PKIXBuilderParameters.java b/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/PKIXBuilderParameters.java
deleted file mode 100644
index b4f7aceb9..000000000
--- a/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/PKIXBuilderParameters.java
+++ /dev/null
@@ -1,179 +0,0 @@
-package java.security.cert;
-
-import java.security.InvalidAlgorithmParameterException;
-import java.security.InvalidParameterException;
-import java.security.KeyStore;
-import java.security.KeyStoreException;
-import java.util.Set;
-
-/**
- * Parameters used as input for the PKIX CertPathBuilder
- * algorithm.
- *
- * A PKIX CertPathBuilder
uses these parameters to {@link
- * CertPathBuilder#build build} a CertPath
which has been
- * validated according to the PKIX certification path validation algorithm.
- *
- * To instantiate a PKIXBuilderParameters
object, an
- * application must specify one or more most-trusted CAs as defined by
- * the PKIX certification path validation algorithm. The most-trusted CA
- * can be specified using one of two constructors. An application
- * can call {@link #PKIXBuilderParameters(Set, CertSelector)
- * PKIXBuilderParameters(Set, CertSelector)}, specifying a
- * Set
of TrustAnchor
objects, each of which
- * identifies a most-trusted CA. Alternatively, an application can call
- * {@link #PKIXBuilderParameters(KeyStore, CertSelector)
- * PKIXBuilderParameters(KeyStore, CertSelector)}, specifying a
- * KeyStore
instance containing trusted certificate entries, each
- * of which will be considered as a most-trusted CA.
- *
- * In addition, an application must specify constraints on the target
- * certificate that the CertPathBuilder
will attempt
- * to build a path to. The constraints are specified as a
- * CertSelector
object. These constraints should provide the
- * CertPathBuilder
with enough search criteria to find the target
- * certificate. Minimal criteria for an X509Certificate
usually
- * include the subject name and/or one or more subject alternative names.
- * If enough criteria is not specified, the CertPathBuilder
- * may throw a CertPathBuilderException
.
- *
- * Concurrent Access
- *
- * Unless otherwise specified, the methods defined in this class are not
- * thread-safe. Multiple threads that need to access a single
- * object concurrently should synchronize amongst themselves and
- * provide the necessary locking. Multiple threads each manipulating
- * separate objects need not synchronize.
- *
- * @see CertPathBuilder
- **/
-public class PKIXBuilderParameters extends PKIXParameters
-{
- private int maxPathLength = 5;
-
- /**
- * Creates an instance of PKIXBuilderParameters
with
- * the specified Set
of most-trusted CAs.
- * Each element of the set is a {@link TrustAnchor TrustAnchor}.
- *
- * Note that the Set
is copied to protect against
- * subsequent modifications.
- *
- * @param trustAnchors a Set
of TrustAnchor
s
- * @param targetConstraints a CertSelector
specifying the
- * constraints on the target certificate
- *
- * @exception InvalidAlgorithmParameterException if trustAnchors
- * is empty (trustAnchors.isEmpty() == true)
- * @exception NullPointerException if trustAnchors
is
- * null
- * @exception ClassCastException if any of the elements of
- * trustAnchors
are not of type
- * java.security.cert.TrustAnchor
- */
- public PKIXBuilderParameters(
- Set trustAnchors,
- CertSelector targetConstraints)
- throws InvalidAlgorithmParameterException
- {
- super( trustAnchors );
- setTargetCertConstraints( targetConstraints );
- }
-
- /**
- * Creates an instance of PKIXBuilderParameters
that
- * populates the set of most-trusted CAs from the trusted
- * certificate entries contained in the specified KeyStore
.
- * Only keystore entries that contain trusted X509Certificate
s
- * are considered; all other certificate types are ignored.
- *
- * @param keystore a KeyStore
from which the set of
- * most-trusted CAs will be populated
- * @param targetConstraints a CertSelector
specifying the
- * constraints on the target certificate
- *
- * @exception KeyStoreException if keystore
has not been
- * initialized
- * @exception InvalidAlgorithmParameterException if keystore
does
- * not contain at least one trusted certificate entry
- * @exception NullPointerException if keystore
is
- * null
- */
- public PKIXBuilderParameters(KeyStore keystore,
- CertSelector targetConstraints)
- throws KeyStoreException,
- InvalidAlgorithmParameterException
- {
- super( keystore );
- setTargetCertConstraints( targetConstraints );
- }
-
- /**
- * Sets the value of the maximum number of non-self-issued intermediate
- * certificates that may exist in a certification path. A certificate
- * is self-issued if the DNs that appear in the subject and issuer
- * fields are identical and are not empty. Note that the last certificate
- * in a certification path is not an intermediate certificate, and is not
- * included in this limit. Usually the last certificate is an end entity
- * certificate, but it can be a CA certificate. A PKIX
- * CertPathBuilder
instance must not build
- * paths longer than the length specified.
- *
- * A value of 0 implies that the path can only contain
- * a single certificate. A value of -1 implies that the
- * path length is unconstrained (i.e. there is no maximum).
- * The default maximum path length, if not specified, is 5.
- * Setting a value less than -1 will cause an exception to be thrown.
- *
- * If any of the CA certificates contain the
- * BasicConstraintsExtension
, the value of the
- * pathLenConstraint
field of the extension overrides
- * the maximum path length parameter whenever the result is a
- * certification path of smaller length.
- *
- * @param maxPathLength the maximum number of non-self-issued intermediate
- * certificates that may exist in a certification path
- *
- * @exception InvalidParameterException if maxPathLength
is set
- * to a value less than -1
- *
- * @see #getMaxPathLength
- */
- public void setMaxPathLength(int maxPathLength)
- {
- if ( maxPathLength < -1 )
- throw new InvalidParameterException("the maximum path length parameter can not be less than -1");
- this.maxPathLength = maxPathLength;
- }
-
- /**
- * Returns the value of the maximum number of intermediate non-self-issued
- * certificates that may exist in a certification path. See
- * the {@link #setMaxPathLength} method for more details.
- *
- * @return the maximum number of non-self-issued intermediate certificates
- * that may exist in a certification path, or -1 if there is no limit
- *
- * @see #setMaxPathLength
- */
- public int getMaxPathLength()
- {
- return maxPathLength;
- }
-
- /**
- * Returns a formatted string describing the parameters.
- *
- * @return a formatted string describing the parameters
- */
- public String toString()
- {
- StringBuffer s = new StringBuffer();
- s.append( "PKIXBuilderParameters [\n" );
- s.append( super.toString() );
- s.append( " Maximum Path Length: " );
- s.append( getMaxPathLength() );
- s.append( "\n]\n" );
- return s.toString();
- }
-}
diff --git a/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/PKIXCertPathBuilderResult.java b/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/PKIXCertPathBuilderResult.java
deleted file mode 100644
index 2ac791826..000000000
--- a/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/PKIXCertPathBuilderResult.java
+++ /dev/null
@@ -1,93 +0,0 @@
-package java.security.cert;
-
-import java.security.PublicKey;
-
-/**
- * This class represents the successful result of the PKIX certification
- * path builder algorithm. All certification paths that are built and
- * returned using this algorithm are also validated according to the PKIX
- * certification path validation algorithm.
- *
- * Instances of PKIXCertPathBuilderResult
are returned by
- * the build
method of CertPathBuilder
- * objects implementing the PKIX algorithm.
- *
- * All PKIXCertPathBuilderResult
objects contain the
- * certification path constructed by the build algorithm, the
- * valid policy tree and subject public key resulting from the build
- * algorithm, and a TrustAnchor
describing the certification
- * authority (CA) that served as a trust anchor for the certification path.
- *
- * Concurrent Access
- *
- * Unless otherwise specified, the methods defined in this class are not
- * thread-safe. Multiple threads that need to access a single
- * object concurrently should synchronize amongst themselves and
- * provide the necessary locking. Multiple threads each manipulating
- * separate objects need not synchronize.
- *
- * @see CertPathBuilderResult
- *
- **/
-public class PKIXCertPathBuilderResult extends PKIXCertPathValidatorResult
- implements CertPathBuilderResult
-{
- private CertPath certPath;
-
- /**
- * Creates an instance of PKIXCertPathBuilderResult
- * containing the specified parameters.
- *
- * @param certPath the validated CertPath
- * @param trustAnchor a TrustAnchor
describing the CA that
- * served as a trust anchor for the certification path
- * @param policyTree the immutable valid policy tree, or null
- * if there are no valid policies
- * @param subjectPublicKey the public key of the subject
- *
- * @exception NullPointerException if the certPath
,
- * trustAnchor
or subjectPublicKey
parameters
- * are null
- */
- public PKIXCertPathBuilderResult(CertPath certPath, TrustAnchor trustAnchor,
- PolicyNode policyTree, PublicKey subjectPublicKey)
- {
- super(trustAnchor, policyTree, subjectPublicKey);
- if ( certPath == null )
- throw new NullPointerException( "certPath must be non-null" );
- this.certPath = certPath;
- }
-
- /**
- * Returns the built and validated certification path. The
- * CertPath
object does not include the trust anchor.
- * Instead, use the {@link #getTrustAnchor() getTrustAnchor()} method to
- * obtain the TrustAnchor
that served as the trust anchor
- * for the certification path.
- *
- * @return the built and validated CertPath
(never
- * null
)
- */
- public CertPath getCertPath()
- {
- return certPath;
- }
-
- /**
- * Return a printable representation of this
- * PKIXCertPathBuilderResult
.
- *
- * @return a String
describing the contents of this
- * PKIXCertPathBuilderResult
- */
- public String toString()
- {
- StringBuffer s = new StringBuffer();
- s.append( "PKIXCertPathBuilderResult: [\n" );
- s.append( " Certification Path: ").append(getCertPath()).append('\n' );
- s.append( " Trust Anchor: ").append(getTrustAnchor()).append('\n' );
- s.append( " Policy Tree: ").append(getPolicyTree()).append('\n' );
- s.append( " Subject Public Key: ").append(getPublicKey()).append("\n]");
- return s.toString();
- }
-}
diff --git a/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/PKIXCertPathChecker.java b/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/PKIXCertPathChecker.java
deleted file mode 100644
index 14dec8060..000000000
--- a/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/PKIXCertPathChecker.java
+++ /dev/null
@@ -1,155 +0,0 @@
-package java.security.cert;
-
-import java.util.Collection;
-import java.util.Set;
-
-/**
- * An abstract class that performs one or more checks on an
- * X509Certificate
.
- *
- * A concrete implementation of the PKIXCertPathChecker
class
- * can be created to extend the PKIX certification path validation algorithm.
- * For example, an implementation may check for and process a critical private
- * extension of each certificate in a certification path.
- *
- * Instances of PKIXCertPathChecker
are passed as parameters
- * using the {@link PKIXParameters#setCertPathCheckers setCertPathCheckers}
- * or {@link PKIXParameters#addCertPathChecker addCertPathChecker} methods
- * of the PKIXParameters
and PKIXBuilderParameters
- * class. Each of the PKIXCertPathChecker
s {@link #check check}
- * methods will be called, in turn, for each certificate processed by a PKIX
- * CertPathValidator
or CertPathBuilder
- * implementation.
- *
- * A PKIXCertPathChecker
may be called multiple times on
- * successive certificates in a certification path. Concrete subclasses
- * are expected to maintain any internal state that may be necessary to
- * check successive certificates. The {@link #init init} method is used
- * to initialize the internal state of the checker so that the certificates
- * of a new certification path may be checked. A stateful implementation
- * must override the {@link #clone clone} method if necessary in
- * order to allow a PKIX CertPathBuilder
to efficiently
- * backtrack and try other paths. In these situations, the
- * CertPathBuilder
is able to restore prior path validation
- * states by restoring the cloned PKIXCertPathChecker
s.
- *
- * The order in which the certificates are presented to the
- * PKIXCertPathChecker
may be either in the forward direction
- * (from target to most-trusted CA) or in the reverse direction (from
- * most-trusted CA to target). A PKIXCertPathChecker
implementation
- * must support reverse checking (the ability to perform its checks when
- * it is presented with certificates in the reverse direction) and may
- * support forward checking (the ability to perform its checks when it is
- * presented with certificates in the forward direction). The
- * {@link #isForwardCheckingSupported isForwardCheckingSupported} method
- * indicates whether forward checking is supported.
- *
- * Additional input parameters required for executing the check may be
- * specified through constructors of concrete implementations of this class.
- *
- * Concurrent Access
- *
- * Unless otherwise specified, the methods defined in this class are not
- * thread-safe. Multiple threads that need to access a single
- * object concurrently should synchronize amongst themselves and
- * provide the necessary locking. Multiple threads each manipulating
- * separate objects need not synchronize.
- *
- * @see PKIXParameters
- * @see PKIXBuilderParameters
- **/
-public abstract class PKIXCertPathChecker implements Cloneable
-{
-
- /**
- * Default constructor.
- */
- protected PKIXCertPathChecker() {}
-
- /**
- * Initializes the internal state of this PKIXCertPathChecker
.
- * forward
flag specifies the order that
- * certificates will be passed to the {@link #check check} method
- * (forward or reverse). A PKIXCertPathChecker
must
- * support reverse checking and may support forward checking.
- *
- * @param forward the order that certificates are presented to
- * the check
method. If true
, certificates
- * are presented from target to most-trusted CA (forward); if
- * false
, from most-trusted CA to target (reverse).
- * @exception CertPathValidatorException if this
- * PKIXCertPathChecker
is unable to check certificates in
- * the specified order; it should never be thrown if the forward flag
- * is false since reverse checking must be supported
- */
- public abstract void init(boolean forward)
- throws CertPathValidatorException;
-
- /**
- * Indicates if forward checking is supported. Forward checking refers
- * to the ability of the PKIXCertPathChecker
to perform
- * its checks when certificates are presented to the check
- * method in the forward direction (from target to most-trusted CA).
- *
- * @return true
if forward checking is supported,
- * false
otherwise
- */
- public abstract boolean isForwardCheckingSupported();
-
- /**
- * Returns an immutable Set
of X.509 certificate extensions
- * that this PKIXCertPathChecker
supports (i.e. recognizes, is
- * able to process), or null
if no extensions are supported.
- * String
representing the
- * Object Identifier (OID) of the X.509 extension that is supported.
- * The OID is represented by a set of nonnegative integers separated by
- * periods.
- * PKIXCertPathChecker
- * might possibly be able to process should be included in the set.
- *
- * @return an immutable Set
of X.509 extension OIDs (in
- * String
format) supported by this
- * PKIXCertPathChecker
, or null
if no
- * extensions are supported
- */
- public abstract Set getSupportedExtensions();
-
- /**
- * Performs the check(s) on the specified certificate using its internal
- * state and removes any critical extensions that it processes from the
- * specified collection of OID strings that represent the unresolved
- * critical extensions. The certificates are presented in the order
- * specified by the init
method.
- *
- * @param cert the Certificate
to be checked
- * @param unresolvedCritExts a Collection
of OID strings
- * representing the current set of unresolved critical extensions
- * @exception CertPathValidatorException if the specified certificate does
- * not pass the check
- */
- public abstract void check(
- Certificate cert,
- Collection unresolvedCritExts)
- throws CertPathValidatorException;
-
- /**
- * Returns a clone of this object. Calls the Object.clone()
- * method.
- * All subclasses which maintain state must support and
- * override this method, if necessary.
- *
- * @return a copy of this PKIXCertPathChecker
- */
- public Object clone()
- {
- try {
- return super.clone();
- } catch ( CloneNotSupportedException ex ) {
- /* Cannot happen */
- throw new InternalError( ex.toString() );
- }
- }
-}
diff --git a/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/PKIXCertPathValidatorResult.java b/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/PKIXCertPathValidatorResult.java
deleted file mode 100644
index 8ffa25555..000000000
--- a/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/PKIXCertPathValidatorResult.java
+++ /dev/null
@@ -1,136 +0,0 @@
-package java.security.cert;
-
-import java.security.PublicKey;
-
-/**
- * This class represents the successful result of the PKIX certification
- * path validation algorithm.
- *
- * Instances of PKIXCertPathValidatorResult
are returned by the
- * {@link CertPathValidator#validate validate} method of
- * CertPathValidator
objects implementing the PKIX algorithm.
- *
- * All PKIXCertPathValidatorResult
objects contain the
- * valid policy tree and subject public key resulting from the
- * validation algorithm, as well as a TrustAnchor
describing
- * the certification authority (CA) that served as a trust anchor for the
- * certification path.
- *
- * Concurrent Access
- *
- * Unless otherwise specified, the methods defined in this class are not
- * thread-safe. Multiple threads that need to access a single
- * object concurrently should synchronize amongst themselves and
- * provide the necessary locking. Multiple threads each manipulating
- * separate objects need not synchronize.
- *
- * @see CertPathValidatorResult
- **/
-public class PKIXCertPathValidatorResult implements CertPathValidatorResult
-{
- private TrustAnchor trustAnchor;
- private PolicyNode policyTree;
- private PublicKey subjectPublicKey;
-
- /**
- * Creates an instance of PKIXCertPathValidatorResult
- * containing the specified parameters.
- *
- * @param trustAnchor a TrustAnchor
describing the CA that
- * served as a trust anchor for the certification path
- * @param policyTree the immutable valid policy tree, or null
- * if there are no valid policies
- * @param subjectPublicKey the public key of the subject
- *
- * @exception NullPointerException if the subjectPublicKey
or
- * trustAnchor
parameters are null
- */
- public PKIXCertPathValidatorResult(TrustAnchor trustAnchor,
- PolicyNode policyTree,
- PublicKey subjectPublicKey)
- {
- if ( subjectPublicKey == null )
- throw new NullPointerException( "subjectPublicKey must be non-null" );
- if ( trustAnchor == null )
- throw new NullPointerException( "trustAnchor must be non-null" );
-
- this.trustAnchor = trustAnchor;
- this.policyTree = policyTree;
- this.subjectPublicKey = subjectPublicKey;
- }
-
- /**
- * Returns the TrustAnchor
describing the CA that served
- * as a trust anchor for the certification path.
- *
- * @return the TrustAnchor
(never null
)
- */
- public TrustAnchor getTrustAnchor()
- {
- return trustAnchor;
- }
-
- /**
- * Returns the root node of the valid policy tree resulting from the
- * PKIX certification path validation algorithm. The
- * PolicyNode
object that is returned and any objects that
- * it returns through public methods are immutable.
- *
- * Most applications will not need to examine the valid policy tree.
- * They can achieve their policy processing goals by setting the
- * policy-related parameters in PKIXParameters
. However, more
- * sophisticated applications, especially those that process policy
- * qualifiers, may need to traverse the valid policy tree using the
- * {@link PolicyNode#getParent PolicyNode.getParent} and
- * {@link PolicyNode#getChildren PolicyNode.getChildren} methods.
- *
- * @return the root node of the valid policy tree, or null
- * if there are no valid policies
- */
- public PolicyNode getPolicyTree()
- {
- return policyTree;
- }
-
- /**
- * Returns the public key of the subject (target) of the certification
- * path, including any inherited public key parameters if applicable.
- *
- * @return the public key of the subject (never null
)
- */
- public PublicKey getPublicKey()
- {
- return subjectPublicKey;
- }
-
- /**
- * Returns a copy of this object.
- *
- * @return the copy
- */
- public Object clone()
- {
- try {
- return super.clone();
- } catch ( CloneNotSupportedException ex ) {
- throw new InternalError( ex.toString() );
- }
- }
-
- /**
- * Return a printable representation of this
- * PKIXCertPathValidatorResult
.
- *
- * @return a String
describing the contents of this
- * PKIXCertPathValidatorResult
- */
- public String toString()
- {
- StringBuffer s = new StringBuffer();
- s.append( "PKIXCertPathValidatorResult: [ \n" );
- s.append( " Trust Anchor: ").append(getTrustAnchor()).append('\n' );
- s.append( " Policy Tree: ").append(getPolicyTree()).append('\n' );
- s.append( " Subject Public Key: ").append(getPublicKey()).append("\n]" );
- return s.toString();
- }
-}
diff --git a/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/PKIXParameters.java b/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/PKIXParameters.java
deleted file mode 100644
index 3c55d7e49..000000000
--- a/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/PKIXParameters.java
+++ /dev/null
@@ -1,770 +0,0 @@
-package java.security.cert;
-
-import java.security.InvalidAlgorithmParameterException;
-import java.security.KeyStore;
-import java.security.KeyStoreException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Date;
-import java.util.Enumeration;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-
-/**
- * Parameters used as input for the PKIX CertPathValidator algorithm.
- *
- * A PKIX CertPathValidator
uses these parameters to validate a
- * CertPath
according to the PKIX certification path validation
- * algorithm.
- *
- * To instantiate a PKIXParameters
object, an application must specify
- * one or more most-trusted CAs as defined by the PKIX certification
- * path validation algorithm. The most-trusted CAs can be specified
- * using one of two constructors. An application can call
- * {@link #PKIXParameters(Set)}, specifying a Set of TrustAnchor
objects, each
- * of which identify a most-trusted CA. Alternatively, an application
- * can call {@link #PKIXParameters(KeyStore)}, specifying a KeyStore
instance
- * containing trusted certificate entries, each of which will be
- * considered as a most-trusted CA.
- *
- * Once a PKIXParameters
object has been created, other parameters can
- * be specified (by calling {@link #setInitialPolicies} or {@link #setDate}, for
- * instance) and then the PKIXParameters
is passed along with the
- * CertPath
to be validated to {@link CertPathValidator#validate}.
- *
- * Any parameter that is not set (or is set to null) will be set to the
- * default value for that parameter. The default value for the date
- * parameter is null, which indicates the current time when the path is
- * validated. The default for the remaining parameters is the least
- * constrained.
- *
- * Concurrent Access
- *
- * Unless otherwise specified, the methods defined in this class are
- * not thread-safe. Multiple threads that need to access a single
- * object concurrently should synchronize amongst themselves and
- * provide the necessary locking. Multiple threads each manipulating
- * separate objects need not synchronize.
- *
- * @see CertPathValidator
- **/
-public class PKIXParameters implements CertPathParameters {
- private Set trustAnchors;
- private Set initialPolicies = new HashSet();
- private List certStores = new ArrayList();
- private CertSelector certSelector;
- private List certPathCheckers = new ArrayList();
- private boolean revocationEnabled = true;
- private boolean explicitPolicyRequired = false;
- private boolean policyMappingInhibited = false;
- private boolean anyPolicyInhibited = false;
- private boolean policyQualifiersRejected = true;
- private Date date;
- private String sigProvider;
-
- /**
- * Creates an instance of PKIXParameters with the specified
- * Set of most-trusted CAs. Each element of the set is a
- * TrustAnchor.
- *
- * Note that the Set is copied to protect against subsequent
- * modifications.
- *
- * @param trustAnchors a Set of TrustAnchors
- *
- * @exception InvalidAlgorithmParameterException if the
- * specified Set is empty (trustAnchors.isEmpty() == true)
- * @exception NullPointerException if the specified Set is null
- * @exception ClassCastException if any of the elements in the
- * Set are not of type
- * java.security.cert.TrustAnchor
- **/
- public PKIXParameters(Set trustAnchors)
- throws InvalidAlgorithmParameterException
- {
- setTrustAnchors( trustAnchors );
- }
-
- /**
- * Creates an instance of PKIXParameters that populates the
- * set of most-trusted CAs from the trusted certificate
- * entries contained in the specified KeyStore. Only keystore
- * entries that contain trusted X509Certificates are
- * considered; all other certificate types are ignored.
- *
- * @param keystore a KeyStore from which the set of
- * most-trusted CAs will be populated
- *
- * @exception KeyStoreException if the keystore has not been
- * initialized
- * @exception InvalidAlgorithmParameterException if the keystore
- * does not contain at least one trusted certificate entry
- * @exception NullPointerException if the keystore is null
- **/
- public PKIXParameters(KeyStore keystore)
- throws KeyStoreException,
- InvalidAlgorithmParameterException
- {
- if ( keystore == null )
- throw new NullPointerException( "the keystore parameter must be non-null" );
-
- Set trustAnchors = new HashSet();
- String alias;
- Certificate cert;
- Enumeration enum = keystore.aliases();
- while ( enum.hasMoreElements() ) {
- alias = (String)enum.nextElement();
- if ( keystore.isCertificateEntry( alias ) ) {
- cert = keystore.getCertificate( alias );
- if ( cert instanceof X509Certificate )
- trustAnchors.add( new TrustAnchor( (X509Certificate)cert, null ) );
- }
- }
- setTrustAnchors( trustAnchors );
- }
-
- /**
- * Returns an immutable Set of the most-trusted CAs.
- *
- * @return an immutable Set
of
- * TrustAnchors
(never null
)
- *
- * @see #setTrustAnchors
- **/
- public Set getTrustAnchors()
- {
- return Collections.unmodifiableSet(trustAnchors);
- }
-
- /**
- * Sets the Set of most-trusted CAs.
- *
- * Note that the Set is copied to protect against subsequent
- * modifications.
- *
- * @param trustAnchors a Set of TrustAnchors
- *
- * @exception InvalidAlgorithmParameterException if the specified Set is empty (trustAnchors.isEmpty() == true)
- * @exception NullPointerException if the specified Set is null
- * @exception ClassCastException if any of the elements in
- * the set are not of type java.security.cert.TrustAnchor
- *
- * @see #getTrustAnchors
- **/
- public void setTrustAnchors(Set trustAnchors)
- throws InvalidAlgorithmParameterException
- {
- if ( trustAnchors == null )
- throw new NullPointerException("the trustAnchors parameter must be non-null");
- if ( trustAnchors.isEmpty() )
- throw new InvalidAlgorithmParameterException("the trustAnchors parameter must be non-empty");
-
- Iterator iter = trustAnchors.iterator();
- TrustAnchor obj;
- this.trustAnchors = new HashSet();
- while( iter.hasNext() ) {
- obj = (TrustAnchor)iter.next();
- if ( obj != null ) {
- this .trustAnchors.add( obj );
- }
- }
- }
-
- /**
- * Returns an immutable Set of initial policy identifiers (OID
- * strings), indicating that any one of these policies would
- * be acceptable to the certificate user for the purposes of
- * certification path processing. The default return value is
- * an empty Set
, which is interpreted as meaning that any
- * policy would be acceptable.
- *
- * @return an immutable Set
of initial policy
- * OIDs in String format, or an empty Set
(implying any policy
- * is acceptable). Never returns null
.
- *
- * @see #setInitialPolicies(java.util.Set)
- **/
- public Set getInitialPolicies()
- {
- Set returnSet = initialPolicies;
- if ( initialPolicies == null )
- returnSet = new HashSet();
-
- return Collections.unmodifiableSet( returnSet );
- }
-
- /**
- * Sets the Set
of initial policy identifiers (OID strings),
- * indicating that any one of these policies would be
- * acceptable to the certificate user for the purposes of
- * certification path processing. By default, any policy is
- * acceptable (i.e. all policies), so a user that wants to
- * allow any policy as acceptable does not need to call this
- * method, or can call it with an empty Set
(or null
).
- *
- * Note that the Set is copied to protect against subsequent
- * modifications.
- *
- * @param initialPolicies a Set of initial policy OIDs in String format (or null
)
- *
- * @exception ClassCastException if any of the elements in the
- * set are not of type String
- *
- * @see #getInitialPolicies()
- **/
- public void setInitialPolicies(Set initialPolicies)
- {
- if ( initialPolicies == null || initialPolicies.isEmpty() )
- {
- this.initialPolicies = null;
- }
- else
- {
- Iterator iter = initialPolicies.iterator();
- this.initialPolicies = new HashSet();
- String obj;
- while ( iter.hasNext() )
- {
- obj = (String)iter.next();
- if ( obj != null ) {
- this.initialPolicies.add( obj );
- }
- }
- }
- }
-
- /**
- * Sets the list of CertStores to be used in finding
- * certificates and CRLs. May be null, in which case no
- * CertStores will be used. The first CertStores in the list
- * may be preferred to those that appear later.
- *
- * Note that the List is copied to protect against subsequent
- * modifications.
- *
- * @param stores a List of CertStores (or null
)
- *
- * @exception ClassCastException if any of the elements in the
- * list are not of type java.security.cert.CertStore
- *
- * @see #getCertStores()
- **/
- public void setCertStores(List stores)
- {
- certStores = new ArrayList();
- if ( stores != null && ! stores.isEmpty() )
- {
- Iterator iter = stores.iterator();
- CertStore obj;
- while ( iter.hasNext() )
- {
- obj = (CertStore)iter.next();
- if ( obj != null )
- {
- certStores.add( obj );
- }
- }
- }
- }
-
- /**
- * Adds a CertStore to the end of the list of CertStores used
- * in finding certificates and CRLs.
- *
- * @param store the CertStore
to add. If
- * null
null)
- *
- * @see #setCertStores(java.util.List)
- **/
- public List getCertStores()
- {
- return Collections.unmodifiableList(certStores);
- }
-
- /**
- * Sets the RevocationEnabled flag. If this flag is true, the default
- * revocation checking mechanism of the underlying PKIX service provider
- * will be used. If this flag is false, the default revocation checking
- * mechanism will be disabled (not used).
- *
- * When a PKIXParameters
object is created, this flag is set
- * to true. This setting reflects the most common strategy for checking
- * revocation, since each service provider must support revocation
- * checking to be PKIX compliant. Sophisticated applications should set
- * this flag to false when it is not practical to use a PKIX service
- * provider's default revocation checking mechanism or when an alternative
- * revocation checking mechanism is to be substituted (by also calling the
- * {@link #addCertPathChecker addCertPathChecker} or {@link
- * #setCertPathCheckers setCertPathCheckers} methods).
- *
- * @param val the new value of the RevocationEnabled flag
- **/
- public void setRevocationEnabled(boolean val)
- {
- revocationEnabled = val;
- }
-
- /**
- * Checks the RevocationEnabled flag. If this flag is true,
- * the default revocation checking mechanism of the underlying
- * PKIX service provider will be used. If this flag is false,
- * the default revocation checking mechanism will be disabled
- * (not used). See the setRevocationEnabled method for more
- * details on setting the value of this flag.
- *
- * @return the current value of the RevocationEnabled flag
- **/
- public boolean isRevocationEnabled()
- {
- return revocationEnabled;
- }
-
- /**
- * Sets the ExplicitPolicyRequired flag. If this flag is true,
- * an acceptable policy needs to be explicitly identified in
- * every certificate. By default, the ExplicitPolicyRequired
- * flag is false.
- *
- * @param val true if explicit policy is to be required, false
- * otherwise
- **/
- public void setExplicitPolicyRequired(boolean val)
- {
- explicitPolicyRequired = val;
- }
-
- /**
- * Checks if explicit policy is required. If this flag is
- * true, an acceptable policy needs to be explicitly
- * identified in every certificate. By default, the
- * ExplicitPolicyRequired flag is false.
- *
- * @return true if explicit policy is required, false otherwise
- **/
- public boolean isExplicitPolicyRequired()
- {
- return explicitPolicyRequired;
- }
-
- /**
- * Sets the PolicyMappingInhibited flag. If this flag is true,
- * policy mapping is inhibited. By default, policy mapping is
- * not inhibited (the flag is false).
- *
- * @param val true if policy mapping is to be inhibited, false otherwise
- **/
- public void setPolicyMappingInhibited(boolean val)
- {
- policyMappingInhibited = val;
- }
-
- /**
- * Checks if policy mapping is inhibited. If this flag is
- * true, policy mapping is inhibited. By default, policy
- * mapping is not inhibited (the flag is false).
- *
- * @return true if policy mapping is inhibited, false otherwise
- **/
- public boolean isPolicyMappingInhibited()
- {
- return policyMappingInhibited;
- }
-
- /**
- * Sets state to determine if the any policy OID should be
- * processed if it is included in a certificate. By default,
- * the any policy OID is not inhibited ({@link #isAnyPolicyInhibited()}
- * returns false).
- *
- * @return val - true
if the any policy OID is to be inhibited, false
otherwise
- **/
- public void setAnyPolicyInhibited(boolean val)
- {
- anyPolicyInhibited = val;
- }
-
- /**
- * Checks whether the any policy OID should be processed if it
- * is included in a certificate.
- *
- * @return true
if the any policy OID is inhibited, false
otherwise
- **/
- public boolean isAnyPolicyInhibited()
- {
- return anyPolicyInhibited;
- }
-
- /**
- * Sets the PolicyQualifiersRejected flag. If this flag is
- * true, certificates that include policy qualifiers in a
- * certificate policies extension that is marked critical are
- * rejected. If the flag is false, certificates are not
- * rejected on this basis.
- *
- * When a PKIXParameters
object is created, this flag is set
- * to true. This setting reflects the most common (and
- * simplest) strategy for processing policy
- * qualifiers. Applications that want to use a more
- * sophisticated policy must set this flag to false.
- *
- * Note that the PKIX certification path validation algorithm
- * specifies that any policy qualifier in a certificate
- * policies extension that is marked critical must be
- * processed and validated. Otherwise the certification path
- * must be rejected. If the policyQualifiersRejected flag is
- * set to false, it is up to the application to validate all
- * policy qualifiers in this manner in order to be PKIX
- * compliant.
- *
- * @param qualifiersRejected the new value of the PolicyQualifiersRejected flag
- *
- * @see #getPolicyQualifiersRejected()
- * @see PolicyQualifierInfo
- **/
- public void setPolicyQualifiersRejected(boolean qualifiersRejected)
- {
- policyQualifiersRejected = qualifiersRejected;
- }
-
- /**
- * Gets the PolicyQualifiersRejected flag. If this flag is
- * true, certificates that include policy qualifiers in a
- * certificate policies extension that is marked critical are
- * rejected. If the flag is false, certificates are not
- * rejected on this basis.
- *
- * When a PKIXParameters object is created, this flag is set to
- * true. This setting reflects the most common (and simplest)
- * strategy for processing policy qualifiers. Applications that
- * want to use a more sophisticated policy must set this flag
- * to false.
- *
- * @return the current value of the PolicyQualifiersRejected flag
- *
- * @see #setPolicyQualifiersRejected(boolean)
- **/
- public boolean getPolicyQualifiersRejected()
- {
- return policyQualifiersRejected;
- }
-
- /**
- * Returns the time for which the validity of the
- * certification path should be determined. If null, the
- * current time is used.
- *
- * Note that the Date returned is copied to protect against
- * subsequent modifications.
- *
- * @return the Date, or null
if not set
- *
- * @see #setDate(java.util.Date)
- **/
- public Date getDate()
- {
- if ( date == null )
- return null;
-
- return new Date( date.getTime() );
- }
-
- /**
- * Sets the time for which the validity of the certification
- * path should be determined. If null, the current time is
- * used.
- *
- * Note that the Date supplied here is copied to protect
- * against subsequent modifications.
- *
- * @param date the Date, or null
for the current time
- *
- * @see #getDate()
- **/
- public void setDate(Date date)
- {
- if ( date == null )
- this.date = null;
- else
- this.date = new Date( date.getTime() );
- }
-
- /**
- * Sets a List
of additional certification path checkers. If
- * the specified List contains an object that is not a
- * PKIXCertPathChecker, it is ignored.
- *
- * Each PKIXCertPathChecker
specified implements additional
- * checks on a certificate. Typically, these are checks to
- * process and verify private extensions contained in
- * certificates. Each PKIXCertPathChecker
should be
- * instantiated with any initialization parameters needed to
- * execute the check.
- *
- * This method allows sophisticated applications to extend a
- * PKIX CertPathValidator
or CertPathBuilder
. Each of the
- * specified PKIXCertPathCheckers will be called, in turn, by
- * a PKIX CertPathValidator
or CertPathBuilder
for each
- * certificate processed or validated.
- *
- * Regardless of whether these additional PKIXCertPathCheckers
- * are set, a PKIX CertPathValidator
or CertPathBuilder
must
- * perform all of the required PKIX checks on each
- * certificate. The one exception to this rule is if the
- * RevocationEnabled flag is set to false (see the
- * {@link #setRevocationEnabled(boolean) setRevocationEnabled} method).
- *
- * Note that the List supplied here is copied and each
- * PKIXCertPathChecker in the list is cloned to protect against
- * subsequent modifications.
- *
- * @param checkers a List of PKIXCertPathCheckers. May be
- * null, in which case no additional checkers will be used.
- * @exception ClassCastException if any of the elements in the
- * list are not of type
- * java.security.cert.PKIXCertPathChecker
- * @see #getCertPathCheckers()
- **/
- public void setCertPathCheckers(List checkers)
- {
- certPathCheckers = new ArrayList();
- if ( checkers == null )
- return;
- Iterator iter = checkers.iterator();
- while ( iter.hasNext() )
- certPathCheckers.add( (PKIXCertPathChecker)((PKIXCertPathChecker)iter.next()).clone() );
- }
-
- /**
- * Returns the List of certification path checkers. The
- * returned List is immutable, and each PKIXCertPathChecker in
- * the List is cloned to protect against subsequent
- * modifications.
- *
- * @return an immutable List of PKIXCertPathCheckers (may be empty, but not null
)
- *
- * @see #setCertPathCheckers(java.util.List)
- **/
- public List getCertPathCheckers()
- {
- List checkers = new ArrayList();
- Iterator iter = certPathCheckers.iterator();
- while ( iter.hasNext() )
- {
- checkers.add( (PKIXCertPathChecker)((PKIXCertPathChecker)iter.next()).clone() );
- }
- return Collections.unmodifiableList(checkers);
- }
-
- /**
- * Adds a PKIXCertPathChecker to the list of certification
- * path checkers. See the {@link #setCertPathCheckers} method for more
- * details.
- *
- * Note that the PKIXCertPathChecker
is cloned to protect
- * against subsequent modifications.
- *
- * @param checker a PKIXCertPathChecker
to add
- * to the list of checks. If null
, the checker is
- * ignored (not added to list).
- **/
- public void addCertPathChecker( PKIXCertPathChecker checker )
- {
- if ( checker != null )
- {
- certPathCheckers.add( checker.clone() );
- }
- }
-
- /**
- * Returns the signature provider's name, or null
if not set.
- *
- * @return the signature provider's name (or null
)
- *
- * @see #setSigProvider(java.lang.String)
- **/
- public String getSigProvider()
- {
- return sigProvider;
- }
-
- /**
- * Sets the signature provider's name. The specified provider
- * will be preferred when creating Signature objects. If null
- * or not set, the first provider found supporting the
- * algorithm will be used.
- *
- * @param sigProvider the signature provider's name (or null
)
- *
- * @see #getSigProvider()
- **/
- public void setSigProvider(String sigProvider)
- {
- this.sigProvider = sigProvider;
- }
-
- /**
- * Returns the required constraints on the target
- * certificate. The constraints are returned as an instance of
- * CertSelector. If null
, no constraints are defined.
- *
- * Note that the CertSelector returned is cloned to protect
- * against subsequent modifications.
- *
- * @return a CertSelector specifying the constraints on the target certificate (or null
)
- *
- * @see #setTargetCertConstraints(java.security.cert.CertSelector)
- **/
- public CertSelector getTargetCertConstraints()
- {
- if ( certSelector == null )
- return null;
-
- return (CertSelector)certSelector.clone();
- }
-
- /**
- * Sets the required constraints on the target
- * certificate. The constraints are specified as an instance
- * of CertSelector. If null, no constraints are defined.
- *
- * Note that the CertSelector specified is cloned to protect
- * against subsequent modifications.
- *
- * @param selector a CertSelector specifying the constraints
- * on the target certificate (or null
)
- *
- * @see #getTargetCertConstraints()
- **/
- public void setTargetCertConstraints(CertSelector selector)
- {
- if ( selector == null )
- certSelector = null;
- else
- certSelector = (CertSelector)selector.clone();
- }
-
- /**
- * Makes a copy of this PKIXParameters object. Changes to the
- * copy will not affect the original and vice versa.
- *
- * @return a copy of this PKIXParameters
object
- **/
- public Object clone()
- {
- try {
- PKIXParameters obj = (PKIXParameters)super.clone();
- obj.certStores = new ArrayList( certStores );
- Iterator iter = certPathCheckers.iterator();
- obj.certPathCheckers = new ArrayList();
- while ( iter.hasNext() )
- {
- obj.certPathCheckers.add( ((PKIXCertPathChecker)iter.next()).clone() );
- }
- if ( initialPolicies != null )
- {
- obj.initialPolicies = new HashSet( initialPolicies );
- }
- if ( trustAnchors != null )
- {
- obj.trustAnchors = new HashSet( trustAnchors );
- }
- if ( certSelector != null )
- {
- obj.certSelector = (CertSelector)certSelector.clone();
- }
- return obj;
- } catch ( CloneNotSupportedException ex ) {
- throw new InternalError();
- }
- }
-
- /**
- * Returns a formatted string describing the parameters.
- *
- * @return a formatted string describing the parameters.
- **/
- public String toString()
- {
- StringBuffer s = new StringBuffer();
- s.append("[\n");
- if ( trustAnchors != null )
- {
- s.append(" Trust Anchors: ").append(trustAnchors).append('\n');
- }
- if ( initialPolicies != null )
- {
- if ( initialPolicies.isEmpty() )
- {
- s.append(" Initial Policy OIDs: any\n" );
- }
- else
- {
- s.append(" Initial Policy OIDs: [").append(initialPolicies).append("]\n");
- }
- }
- s.append(" Validity Date: ");
- if ( date != null )
- s.append(date);
- else
- s.append("null");
- s.append('\n');
-
- s.append(" Signature Provider: ");
- if ( sigProvider != null )
- s.append(sigProvider);
- else
- s.append("null");
- s.append('\n');
-
- s.append(" Default Revocation Enabled: ");
- s.append(revocationEnabled);
- s.append('\n' );
-
- s.append(" Explicit Policy Required: ");
- s.append(explicitPolicyRequired);
- s.append('\n');
-
- s.append(" Policy Mapping Inhibited: ");
- s.append(policyMappingInhibited);
- s.append('\n');
-
- s.append(" Any Policy Inhibited: ");
- s.append(anyPolicyInhibited);
- s.append('\n');
-
- s.append(" Policy Qualifiers Rejected: ");
- s.append(policyQualifiersRejected);
- s.append('\n');
-
- s.append(" Target Cert Constraints: ");
- s.append(certSelector);
- s.append('\n');
-
- s.append(" Certification Path Checkers: [");
- s.append(certPathCheckers);
- s.append( "}\n");
-
- s.append(" CertStores: [");
- s.append(certStores);
- s.append("}\n");
-
- s.append("]\n");
-
- return s.toString();
- }
-}
diff --git a/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/PolicyNode.java b/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/PolicyNode.java
deleted file mode 100644
index cdae45205..000000000
--- a/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/PolicyNode.java
+++ /dev/null
@@ -1,107 +0,0 @@
-package java.security.cert;
-
-import java.util.Iterator;
-import java.util.Set;
-
-/**
- * An immutable valid policy tree node as defined by the PKIX certification
- * path validation algorithm.
- *
- * One of the outputs of the PKIX certification path validation
- * algorithm is a valid policy tree, which includes the policies that
- * were determined to be valid, how this determination was reached,
- * and any policy qualifiers encountered. This tree is of depth
- * n, where n is the length of the certification
- * path that has been validated.
- *
- * Most applications will not need to examine the valid policy tree.
- * They can achieve their policy processing goals by setting the
- * policy-related parameters in PKIXParameters
. However,
- * the valid policy tree is available for more sophisticated applications,
- * especially those that process policy qualifiers.
- *
- * {@link PKIXCertPathValidatorResult#getPolicyTree()
- * PKIXCertPathValidatorResult.getPolicyTree} returns the root node of the
- * valid policy tree. The tree can be traversed using the
- * {@link #getChildren getChildren} and {@link #getParent getParent} methods.
- * Data about a particular node can be retrieved using other methods of
- * PolicyNode
.
- *
- * Concurrent Access
- *
- * All PolicyNode
objects must be immutable and
- * thread-safe. Multiple threads may concurrently invoke the methods defined
- * in this class on a single PolicyNode
object (or more than one)
- * with no ill effects. This stipulation applies to all public fields and
- * methods of this class and any added or overridden by subclasses.
- **/
-public interface PolicyNode
-{
-
- /**
- * Returns the parent of this node, or null
if this is the
- * root node.
- *
- * @return the parent of this node, or null
if this is the
- * root node
- */
- public PolicyNode getParent();
-
- /**
- * Returns an iterator over the children of this node. Any attempts to
- * modify the children of this node through the
- * Iterator
's remove method must throw an
- * UnsupportedOperationException
.
- *
- * @return an iterator over the children of this node
- */
- public Iterator getChildren();
-
- /**
- * Returns the depth of this node in the valid policy tree.
- *
- * @return the depth of this node (0 for the root node, 1 for its
- * children, and so on)
- */
- public int getDepth();
-
- /**
- * Returns the valid policy represented by this node.
- *
- * @return the String
OID of the valid policy
- * represented by this node, or the special value "any-policy". For
- * the root node, this method always returns the special value "any-policy".
- */
- public String getValidPolicy();
-
- /**
- * Returns the set of policy qualifiers associated with the
- * valid policy represented by this node.
- *
- * @return an immutable Set
of
- * PolicyQualifierInfo
s. For the root node, this
- * is always an empty Set
.
- */
- public Set getPolicyQualifiers();
-
- /**
- * Returns the set of expected policies that would satisfy this
- * node's valid policy in the next certificate to be processed.
- *
- * @return an immutable Set
of expected policy
- * String
OIDs, or an immutable Set
with
- * the single special value "any-policy". For the root node, this method
- * always returns a Set
with the single value "any-policy".
- */
- public Set getExpectedPolicies();
-
- /**
- * Returns the criticality indicator of the certificate policy extension
- * in the most recently processed certificate.
- *
- * @return true
if extension marked critical,
- * false
otherwise. For the root node, false
- * is always returned.
- */
- public boolean isCritical();
-}
diff --git a/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/PolicyQualifierInfo.java b/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/PolicyQualifierInfo.java
deleted file mode 100644
index a17f49bf4..000000000
--- a/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/PolicyQualifierInfo.java
+++ /dev/null
@@ -1,196 +0,0 @@
-package java.security.cert;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-
-import org.spongycastle.asn1.ASN1InputStream;
-import org.spongycastle.asn1.ASN1Object;
-import org.spongycastle.asn1.ASN1ObjectIdentifier;
-import org.spongycastle.asn1.ASN1Sequence;
-import org.spongycastle.asn1.DEROutputStream;
-import org.spongycastle.asn1.util.ASN1Dump;
-
-/**
- * An immutable policy qualifier represented by the ASN.1 PolicyQualifierInfo
- * structure.
- *
- * The ASN.1 definition is as follows:
- *
- *
- *
- * PolicyQualifierInfo ::= SEQUENCE {
- * policyQualifierId PolicyQualifierId,
- * qualifier ANY DEFINED BY policyQualifierId }
- *
- *
- *
- *
- * A certificate policies extension, if present in an X.509 version 3
- * certificate, contains a sequence of one or more policy information terms,
- * each of which consists of an object identifier (OID) and optional qualifiers.
- * In an end-entity certificate, these policy information terms indicate the
- * policy under which the certificate has been issued and the purposes for which
- * the certificate may be used. In a CA certificate, these policy information
- * terms limit the set of policies for certification paths which include this
- * certificate.
- *
- * A Set
of PolicyQualifierInfo
objects are
- * returned by the
- * {@link PolicyNode#getPolicyQualifiers PolicyNode.getPolicyQualifiers} method.
- * This allows applications with specific policy requirements to process and
- * validate each policy qualifier. Applications that need to process policy
- * qualifiers should explicitly set the policyQualifiersRejected
- * flag to false (by calling the
- * {@link PKIXParameters#setPolicyQualifiersRejected
- * PKIXParameters.setPolicyQualifiersRejected} method) before validating a
- * certification path.
- *
- * Note that the PKIX certification path validation algorithm specifies that any
- * policy qualifier in a certificate policies extension that is marked critical
- * must be processed and validated. Otherwise the certification path must be
- * rejected. If the policyQualifiersRejected
flag is set to
- * false, it is up to the application to validate all policy qualifiers in this
- * manner in order to be PKIX compliant.
- *
- * Concurrent Access
- *
- * All PolicyQualifierInfo
objects must be immutable and
- * thread-safe. That is, multiple threads may concurrently invoke the methods
- * defined in this class on a single PolicyQualifierInfo
object
- * (or more than one) with no ill effects. Requiring
- * PolicyQualifierInfo
objects to be immutable and thread-safe
- * allows them to be passed around to various pieces of code without worrying
- * about coordinating access.
- *
- * Uses {@link org.spongycastle.asn1.ASN1InputStream ASN1InputStream},
- * {@link org.spongycastle.asn1.ASN1Sequence ASN1Sequence},
- * {@link org.spongycastle.asn1.ASN1ObjectIdentifier ASN1ObjectIdentifier},
- * {@link org.spongycastle.asn1.DEROutputStream DEROutputStream},
- * {@link org.spongycastle.asn1.ASN1Object ASN1Object}
- */
-public final class PolicyQualifierInfo
-{
- private String id;
-
- private byte[] encoded;
-
- private byte[] qualifier;
-
- /**
- * Creates an instance of PolicyQualifierInfo
from the
- * encoded bytes. The encoded byte array is copied on construction.
- *
- * Uses {@link org.spongycastle.asn1.ASN1InputStream ASN1InputStream},
- * {@link org.spongycastle.asn1.ASN1Sequence ASN1Sequence},
- * {@link org.spongycastle.asn1.ASN1ObjectIdentifier ASN1ObjectIdentifier} and
- * {@link org.spongycastle.asn1.DEROutputStream DEROutputStream}
- *
- * @param encoded
- * a byte array containing the qualifier in DER encoding
- *
- * @exception IOException
- * thrown if the byte array does not represent a valid and
- * parsable policy qualifier
- */
- public PolicyQualifierInfo(byte[] encoded) throws IOException
- {
- this.encoded = (byte[])encoded.clone();
- try
- {
- ByteArrayInputStream inStream = new ByteArrayInputStream(
- this.encoded);
- ASN1InputStream derInStream = new ASN1InputStream(inStream);
- ASN1Sequence obj = (ASN1Sequence)derInStream.readObject();
- id = ((ASN1ObjectIdentifier)obj.getObjectAt(0)).getId();
- ByteArrayOutputStream outStream = new ByteArrayOutputStream();
- DEROutputStream derOutStream = new DEROutputStream(outStream);
-
- derOutStream.writeObject(obj.getObjectAt(1));
- derOutStream.close();
-
- qualifier = outStream.toByteArray();
- }
- catch (Exception ex)
- {
- throw new IOException("parsing exception : " + ex.toString());
- }
- }
-
- /**
- * Returns the policyQualifierId
field of this
- * PolicyQualifierInfo
. The policyQualifierId
- * is an Object Identifier (OID) represented by a set of nonnegative
- * integers separated by periods.
- *
- * @return the OID (never null
)
- */
- public String getPolicyQualifierId()
- {
- return id;
- }
-
- /**
- * Returns the ASN.1 DER encoded form of this
- * PolicyQualifierInfo
.
- *
- * @return the ASN.1 DER encoded bytes (never null
). Note
- * that a copy is returned, so the data is cloned each time this
- * method is called.
- */
- public byte[] getEncoded()
- {
- return (byte[])encoded.clone();
- }
-
- /**
- * Returns the ASN.1 DER encoded form of the qualifier
field
- * of this PolicyQualifierInfo
.
- *
- * @return the ASN.1 DER encoded bytes of the qualifier
- * field. Note that a copy is returned, so the data is cloned each
- * time this method is called.
- */
- public byte[] getPolicyQualifier()
- {
- if (qualifier == null)
- {
- return null;
- }
-
- return (byte[])qualifier.clone();
- }
-
- /**
- * Return a printable representation of this
- * PolicyQualifierInfo
.
- *
- * Uses {@link org.spongycastle.asn1.ASN1InputStream ASN1InputStream},
- * {@link org.spongycastle.asn1.ASN1Object ASN1Object}
- *
- * @return a String
describing the contents of this
- * PolicyQualifierInfo
- */
- public String toString()
- {
- StringBuffer s = new StringBuffer();
- s.append("PolicyQualifierInfo: [\n");
- s.append("qualifierID: ").append(id).append('\n');
- try
- {
- ByteArrayInputStream inStream = new ByteArrayInputStream(qualifier);
- ASN1InputStream derInStream = new ASN1InputStream(inStream);
- ASN1Object derObject = derInStream.readObject();
- s
- .append(" qualifier:\n").append(ASN1Dump.dumpAsString(derObject))
- .append('\n');
- }
- catch (IOException ex)
- {
- s.append(ex.getMessage());
- }
- s.append("qualifier: ").append(id).append('\n');
- s.append(']');
- return s.toString();
- }
-}
diff --git a/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/TrustAnchor.java b/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/TrustAnchor.java
deleted file mode 100644
index f139a742c..000000000
--- a/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/TrustAnchor.java
+++ /dev/null
@@ -1,293 +0,0 @@
-package java.security.cert;
-
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.security.PublicKey;
-import java.security.cert.X509Certificate;
-
-import org.spongycastle.asn1.ASN1InputStream;
-import org.spongycastle.asn1.ASN1Object;
-import org.spongycastle.asn1.ASN1Sequence;
-
-/**
- * A trust anchor or most-trusted Certification Authority (CA).
- *
- * This class represents a "most-trusted CA", which is used as a trust anchor
- * for validating X.509 certification paths. A most-trusted CA includes the
- * public key of the CA, the CA's name, and any constraints upon the set of
- * paths which may be validated using this key. These parameters can be
- * specified in the form of a trusted X509Certificate or as individual
- * parameters.
- *
- * Concurrent Access
- *
- * All TrustAnchor objects must be immutable and thread-safe. That is, multiple
- * threads may concurrently invoke the methods defined in this class on a
- * single TrustAnchor object (or more than one) with no ill effects. Requiring
- * TrustAnchor objects to be immutable and thread-safe allows them to be passed
- * around to various pieces of code without worrying about coordinating access.
- * This stipulation applies to all public fields and methods of this class and
- * any added or overridden by subclasses.
- *
- * TODO: implement better nameConstraints testing.
- **/
-public class TrustAnchor
-{
- private X509Certificate trustCert = null;
-
- private PublicKey trustPublicKey = null;
-
- private String trustName = null;
-
- private byte[] nameConstraints = null;
-
- /**
- * Creates an instance of TrustAnchor with the specified X509Certificate and
- * optional name constraints, which are intended to be used as additional
- * constraints when validating an X.509 certification path.
- *
- * The name constraints are specified as a byte array. This byte array
- * should contain the DER encoded form of the name constraints, as they
- * would appear in the NameConstraints structure defined in RFC 2459 and
- * X.509. The ASN.1 definition of this structure appears below.
- *
- *
- *
- * NameConstraints ::= SEQUENCE {
- * permittedSubtrees [0] GeneralSubtrees OPTIONAL,
- * excludedSubtrees [1] GeneralSubtrees OPTIONAL }
- *
- * GeneralSubtrees ::= SEQUENCE SIZE (1..MAX) OF GeneralSubtree
- *
- * GeneralSubtree ::= SEQUENCE {
- * base GeneralName,
- * minimum [0] BaseDistance DEFAULT 0,
- * maximum [1] BaseDistance OPTIONAL }
- *
- * BaseDistance ::= INTEGER (0..MAX)
- *
- * GeneralName ::= CHOICE {
- * otherName [0] OtherName,
- * rfc822Name [1] IA5String,
- * dNSName [2] IA5String,
- * x400Address [3] ORAddress,
- * directoryName [4] Name,
- * ediPartyName [5] EDIPartyName,
- * uniformResourceIdentifier [6] IA5String,
- * iPAddress [7] OCTET STRING,
- * registeredID [8] OBJECT IDENTIFIER}
- *
- *
- *
- *
- * Note that the name constraints byte array supplied is cloned to protect
- * against subsequent modifications.
- *
- * @param trustedCert
- * a trusted X509Certificate
- * @param nameConstraints
- * a byte array containing the ASN.1 DER encoding of a
- * NameConstraints extension to be used for checking name
- * constraints. Only the value of the extension is included, not
- * the OID or criticality flag. Specify null to omit the
- * parameter.
- *
- * @exception IllegalArgumentException
- * if the name constraints cannot be decoded
- * @exception NullPointerException
- * if the specified X509Certificate is null
- */
- public TrustAnchor(X509Certificate trustedCert, byte[] nameConstraints)
- {
- if (trustedCert == null)
- {
- throw new NullPointerException("trustedCert must be non-null");
- }
-
- this.trustCert = trustedCert;
- if (nameConstraints != null)
- {
- this.nameConstraints = (byte[])nameConstraints.clone();
- checkNameConstraints(this.nameConstraints);
- }
- }
-
- /**
- * Creates an instance of TrustAnchor
where the most-trusted
- * CA is specified as a distinguished name and public key. Name constraints
- * are an optional parameter, and are intended to be used as additional
- * constraints when validating an X.509 certification path.
- *
- * The name constraints are specified as a byte array. This byte array
- * contains the DER encoded form of the name constraints, as they would
- * appear in the NameConstraints structure defined in RFC 2459 and X.509.
- * The ASN.1 notation for this structure is supplied in the documentation
- * for {@link #TrustAnchor(X509Certificate trustedCert, byte[]
- * nameConstraints) TrustAnchor(X509Certificate trustedCert, byte[]
- * nameConstraints) }.
- *
- * Note that the name constraints byte array supplied here is cloned to
- * protect against subsequent modifications.
- *
- * @param caName
- * the X.500 distinguished name of the most-trusted CA in RFC
- * 2253 String format
- * @param pubKey
- * the public key of the most-trusted CA
- * @param nameConstraints
- * a byte array containing the ASN.1 DER encoding of a
- * NameConstraints extension to be used for checking name
- * constraints. Only the value of the extension is included, not
- * the OID or criticality flag. Specify null to omit the
- * parameter.
- *
- * @exception IllegalArgumentException
- * if the specified caName parameter is empty (caName.length() == 0
)
- * or incorrectly formatted or the name constraints cannot be
- * decoded
- * @exception NullPointerException
- * if the specified caName or pubKey parameter is null
- */
- public TrustAnchor(String caName, PublicKey pubKey, byte[] nameConstraints)
- {
- if (caName == null)
- {
- throw new NullPointerException("caName must be non-null");
- }
- if (pubKey == null)
- {
- throw new NullPointerException("pubKey must be non-null");
- }
- if (caName.length() == 0)
- {
- throw new IllegalArgumentException(
- "caName can not be an empty string");
- }
-
- this.trustName = caName;
- this.trustPublicKey = pubKey;
- if (nameConstraints != null)
- {
- this.nameConstraints = (byte[])nameConstraints.clone();
- checkNameConstraints(this.nameConstraints);
- }
- }
-
- /**
- * Returns the most-trusted CA certificate.
- *
- * @return a trusted X509Certificate
or null
- * if the trust anchor was not specified as a trusted certificate
- */
- public final X509Certificate getTrustedCert()
- {
- return trustCert;
- }
-
- /**
- * Returns the name of the most-trusted CA in RFC 2253 String format.
- *
- * @return the X.500 distinguished name of the most-trusted CA, or
- * null
if the trust anchor was not specified as a
- * trusted public key and name pair
- */
- public final String getCAName()
- {
- return trustName;
- }
-
- /**
- * Returns the public key of the most-trusted CA.
- *
- * @return the public key of the most-trusted CA, or null if the trust
- * anchor was not specified as a trusted public key and name pair
- */
- public final PublicKey getCAPublicKey()
- {
- return trustPublicKey;
- }
-
- /**
- * Returns the name constraints parameter. The specified name constraints
- * are associated with this trust anchor and are intended to be used as
- * additional constraints when validating an X.509 certification path.
- *
- * The name constraints are returned as a byte array. This byte array
- * contains the DER encoded form of the name constraints, as they would
- * appear in the NameConstraints structure defined in RFC 2459 and X.509.
- * The ASN.1 notation for this structure is supplied in the documentation
- * for TrustAnchor(X509Certificate trustedCert, byte[]
- * nameConstraints)
.
- *
- * Note that the byte array returned is cloned to protect against subsequent
- * modifications.
- *
- * @return a byte array containing the ASN.1 DER encoding of a
- * NameConstraints extension used for checking name constraints, or
- * null
if not set.
- */
- public final byte[] getNameConstraints()
- {
- return (byte[])nameConstraints.clone();
- }
-
- /**
- * Returns a formatted string describing the TrustAnchor
.
- *
- * @return a formatted string describing the TrustAnchor
- */
- public String toString()
- {
- StringBuffer sb = new StringBuffer();
- sb.append("[\n");
- if (getCAPublicKey() != null)
- {
- sb.append(" Trusted CA Public Key: ").append(getCAPublicKey()).append('\n');
- sb.append(" Trusted CA Issuer Name: ").append(getCAName()).append('\n');
- }
- else
- {
- sb.append(" Trusted CA cert: ").append(getTrustedCert()).append('\n');
- }
- if (nameConstraints != null)
- {
- sb.append(" Name Constraints: ").append(nameConstraints).append('\n');
- }
- return sb.toString();
- }
-
- /**
- * Check given DER encoded nameConstraints for correct decoding. Currently
- * only basic DER decoding test.
- *
- * TODO: implement more testing.
- *
- * @param data
- * the DER encoded nameConstrains to be checked or
- * null
- * @exception IllegalArgumentException
- * if the check failed.
- */
- private void checkNameConstraints(byte[] data)
- {
- if (data != null)
- {
- try
- {
- ByteArrayInputStream inStream = new ByteArrayInputStream(data);
- ASN1InputStream derInStream = new ASN1InputStream(inStream);
- ASN1Object derObject = derInStream.readObject();
- if (!(derObject instanceof ASN1Sequence))
- {
- throw new IllegalArgumentException(
- "nameConstraints parameter decoding error");
- }
- }
- catch (IOException ex)
- {
- throw new IllegalArgumentException(
- "nameConstraints parameter decoding error: " + ex);
- }
- }
- }
-}
diff --git a/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/X509CRL.java b/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/X509CRL.java
deleted file mode 100644
index cf65ed0b6..000000000
--- a/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/X509CRL.java
+++ /dev/null
@@ -1,77 +0,0 @@
-
-package java.security.cert;
-
-import java.math.BigInteger;
-import java.security.InvalidKeyException;
-import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
-import java.security.NoSuchProviderException;
-import java.security.Principal;
-import java.security.PublicKey;
-import java.security.SignatureException;
-import java.util.Date;
-import java.util.Set;
-
-public abstract class X509CRL extends CRL implements X509Extension
-{
- protected X509CRL()
- {
- super("X.509");
- }
-
- public boolean equals(Object other)
- {
- if ( this == other )
- return true;
-
- if ( !(other instanceof X509CRL) )
- return false;
-
- try
- {
- byte[] enc1 = getEncoded();
- byte[] enc2 = ((X509CRL)other).getEncoded();
-
- return MessageDigest.isEqual(enc1, enc2);
- }
- catch (CRLException e)
- {
- return false;
- }
- }
-
- public int hashCode()
- {
- int hashcode = 0;
-
- try
- {
- byte[] encoded = getEncoded();
- for (int i = 1; i < encoded.length; i++)
- {
- hashcode += encoded[i] * i;
- }
- }
- catch (CRLException ce)
- {
- return(hashcode);
- }
-
- return(hashcode);
- }
-
- public abstract byte[] getEncoded() throws CRLException;
- public abstract Principal getIssuerDN();
- public abstract Date getNextUpdate();
- public abstract X509CRLEntry getRevokedCertificate(BigInteger serialNumber);
- public abstract Set getRevokedCertificates();
- public abstract String getSigAlgName();
- public abstract String getSigAlgOID();
- public abstract byte[] getSigAlgParams();
- public abstract byte[] getSignature();
- public abstract byte[] getTBSCertList() throws CRLException;
- public abstract Date getThisUpdate();
- public abstract int getVersion();
- public abstract void verify(PublicKey key) throws CRLException, NoSuchAlgorithmException, InvalidKeyException, NoSuchProviderException, SignatureException;
- public abstract void verify(PublicKey key, String sigProvider) throws CRLException, NoSuchAlgorithmException, InvalidKeyException, NoSuchProviderException, SignatureException;
-}
diff --git a/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/X509CRLEntry.java b/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/X509CRLEntry.java
deleted file mode 100644
index bb0d78074..000000000
--- a/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/X509CRLEntry.java
+++ /dev/null
@@ -1,56 +0,0 @@
-
-package java.security.cert;
-
-import java.math.BigInteger;
-import java.security.MessageDigest;
-import java.util.Date;
-
-public abstract class X509CRLEntry implements X509Extension
-{
- public boolean equals(Object other)
- {
- if ( this == other )
- return true;
-
- if ( !(other instanceof X509CRLEntry) )
- return false;
-
- try
- {
- byte[] enc1 = getEncoded();
- byte[] enc2 = ((X509CRLEntry)other).getEncoded();
-
- return MessageDigest.isEqual(enc1, enc2);
- }
- catch (CRLException e)
- {
- return false;
- }
- }
-
- public int hashCode()
- {
- int hashcode = 0;
-
- try
- {
- byte[] encoded = getEncoded();
- for (int i = 1; i < encoded.length; i++)
- {
- hashcode += encoded[i] * i;
- }
- }
- catch (CRLException ce)
- {
- return(hashcode);
- }
-
- return(hashcode);
- }
-
- public abstract byte[] getEncoded() throws CRLException;
- public abstract Date getRevocationDate();
- public abstract BigInteger getSerialNumber();
- public abstract boolean hasExtensions();
- public abstract String toString();
-}
diff --git a/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/X509CRLSelector.java b/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/X509CRLSelector.java
deleted file mode 100644
index 8d4ed9c44..000000000
--- a/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/X509CRLSelector.java
+++ /dev/null
@@ -1,717 +0,0 @@
-package java.security.cert;
-
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.math.BigInteger;
-import java.security.cert.CRL;
-import java.security.cert.X509CRL;
-import java.security.cert.X509Certificate;
-import java.util.Collection;
-import java.util.Date;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Set;
-
-import org.spongycastle.asn1.ASN1InputStream;
-import org.spongycastle.asn1.ASN1Object;
-import org.spongycastle.asn1.ASN1OctetString;
-import org.spongycastle.asn1.ASN1Sequence;
-import org.spongycastle.asn1.ASN1Integer;
-import org.spongycastle.asn1.x509.X509Extensions;
-import org.spongycastle.asn1.x509.X509Name;
-import org.spongycastle.jce.PrincipalUtil;
-
-/**
- * A CRLSelector
that selects X509CRLs
that match
- * all specified criteria. This class is particularly useful when selecting CRLs
- * from a CertStore
to check revocation status of a particular
- * certificate.
- *
- * When first constructed, an X509CRLSelector
has no criteria
- * enabled and each of the get
methods return a default value (null
).
- * Therefore, the {@link #match match} method would return true
- * for any X509CRL
. Typically, several criteria are enabled (by
- * calling {@link #setIssuerNames setIssuerNames} or
- * {@link #setDateAndTime setDateAndTime}, for instance) and then the
- * X509CRLSelector
is passed to
- * {@link CertStore#getCRLs CertStore.getCRLs} or some similar method.
- *
- * Please refer to RFC 2459 for definitions of the X.509 CRL fields and
- * extensions mentioned below.
- *
- * Concurrent Access
- *
- * Unless otherwise specified, the methods defined in this class are not
- * thread-safe. Multiple threads that need to access a single object
- * concurrently should synchronize amongst themselves and provide the necessary
- * locking. Multiple threads each manipulating separate objects need not
- * synchronize.
- *
- * Uses {@link org.spongycastle.asn1.ASN1InputStream ASN1InputStream},
- * {@link org.spongycastle.asn1.ASN1Sequence ASN1Sequence},
- * {@link org.spongycastle.asn1.ASN1ObjectIdentifier ASN1ObjectIdentifier},
- * {@link org.spongycastle.asn1.DEROutputStream DEROutputStream},
- * {@link org.spongycastle.asn1.ASN1Object ASN1Object},
- * {@link org.spongycastle.asn1.x509.X509Name X509Name}
- *
- * @see CRLSelector
- * @see X509CRL
- */
-public class X509CRLSelector implements CRLSelector
-{
- private Set issuerNames = null;
-
- private Set issuerNamesX509 = null;
-
- private BigInteger minCRL = null;
-
- private BigInteger maxCRL = null;
-
- private Date dateAndTime = null;
-
- private X509Certificate certChecking = null;
-
- /**
- * Creates an X509CRLSelector
. Initially, no criteria are
- * set so any X509CRL
will match.
- */
- public X509CRLSelector()
- {
- }
-
- /**
- * Sets the issuerNames criterion. The issuer distinguished name in the
- * X509CRL
must match at least one of the specified
- * distinguished names. If null
, any issuer distinguished
- * name will do.
- *
- * This method allows the caller to specify, with a single method call, the
- * complete set of issuer names which X509CRLs
may contain.
- * The specified value replaces the previous value for the issuerNames
- * criterion.
- *
- * The names
parameter (if not null
) is a
- * Collection
of names. Each name is a String
- * or a byte array representing a distinguished name (in RFC 2253 or ASN.1
- * DER encoded form, respectively). If null
is supplied as
- * the value for this argument, no issuerNames check will be performed.
- *
- * Note that the names
parameter can contain duplicate
- * distinguished names, but they may be removed from the
- * Collection
of names returned by the
- * {@link #getIssuerNames getIssuerNames} method.
- *
- * If a name is specified as a byte array, it should contain a single DER
- * encoded distinguished name, as defined in X.501. The ASN.1 notation for
- * this structure is as follows.
- *
- *
- *
- *
- * Name ::= CHOICE {
- * RDNSequence }
- *
- * RDNSequence ::= SEQUENCE OF RDN
- *
- * RDN ::=
- * SET SIZE (1 .. MAX) OF AttributeTypeAndValue
- *
- * AttributeTypeAndValue ::= SEQUENCE {
- * type AttributeType,
- * value AttributeValue }
- *
- * AttributeType ::= OBJECT IDENTIFIER
- *
- * AttributeValue ::= ANY DEFINED BY AttributeType
- * ....
- * DirectoryString ::= CHOICE {
- * teletexString TeletexString (SIZE (1..MAX)),
- * printableString PrintableString (SIZE (1..MAX)),
- * universalString UniversalString (SIZE (1..MAX)),
- * utf8String UTF8String (SIZE (1.. MAX)),
- * bmpString BMPString (SIZE (1..MAX)) }
- *
- *
- * Note that a deep copy is performed on the Collection
to
- * protect against subsequent modifications.
- *
- * @param names
- * a Collection
of names (or null
)
- *
- * @exception IOException
- * if a parsing error occurs
- *
- * @see #getIssuerNames
- */
- public void setIssuerNames(Collection names) throws IOException
- {
- if (names == null || names.isEmpty())
- {
- issuerNames = null;
- issuerNamesX509 = null;
- }
- else
- {
- Object item;
- Iterator iter = names.iterator();
- while (iter.hasNext())
- {
- item = iter.next();
- if (item instanceof String)
- {
- addIssuerName((String)item);
- }
- else if (item instanceof byte[])
- {
- addIssuerName((byte[])item);
- }
- else
- {
- throw new IOException("name not byte[]or String: "
- + item.toString());
- }
- }
- }
- }
-
- /**
- * Adds a name to the issuerNames criterion. The issuer distinguished name
- * in the X509CRL
must match at least one of the specified
- * distinguished names.
- *
- * This method allows the caller to add a name to the set of issuer names
- * which X509CRLs
may contain. The specified name is added to
- * any previous value for the issuerNames criterion. If the specified name
- * is a duplicate, it may be ignored.
- *
- * Uses {@link org.spongycastle.asn1.x509.X509Name X509Name} for parsing the
- * name
- *
- * @param name
- * the name in RFC 2253 form
- *
- * @exception IOException
- * if a parsing error occurs
- */
- public void addIssuerName(String name) throws IOException
- {
- if (issuerNames == null)
- {
- issuerNames = new HashSet();
- issuerNamesX509 = new HashSet();
- }
- X509Name nameX509;
- try
- {
- nameX509 = new X509Name(name);
- }
- catch (IllegalArgumentException ex)
- {
- throw new IOException(ex.getMessage());
- }
- issuerNamesX509.add(nameX509);
- issuerNames.add(name);
- }
-
- /**
- * Adds a name to the issuerNames criterion. The issuer distinguished name
- * in the X509CRL
must match at least one of the specified
- * distinguished names.
- *
- * This method allows the caller to add a name to the set of issuer names
- * which X509CRLs
may contain. The specified name is added to
- * any previous value for the issuerNames criterion. If the specified name
- * is a duplicate, it may be ignored. If a name is specified as a byte
- * array, it should contain a single DER encoded distinguished name, as
- * defined in X.501. The ASN.1 notation for this structure is as follows.
- *
- * The name is provided as a byte array. This byte array should contain a
- * single DER encoded distinguished name, as defined in X.501. The ASN.1
- * notation for this structure appears in the documentation for
- * {@link #setIssuerNames setIssuerNames(Collection names)}.
- *
- * Note that the byte array supplied here is cloned to protect against
- * subsequent modifications.
- *
- * Uses {@link org.spongycastle.asn1.x509.X509Name X509Name} for parsing the
- * name, {@link org.spongycastle.asn1.ASN1InputStream ASN1InputStream},
- * {@link org.spongycastle.asn1.ASN1Object ASN1Object} and
- * {@link org.spongycastle.asn1.ASN1Sequence ASN1Sequence}
- *
- * @param name
- * a byte array containing the name in ASN.1 DER encoded form
- *
- * @exception IOException
- * if a parsing error occurs
- */
- public void addIssuerName(byte[] name) throws IOException
- {
- if (issuerNames == null)
- {
- issuerNames = new HashSet();
- issuerNamesX509 = new HashSet();
- }
-
- ByteArrayInputStream inStream = new ByteArrayInputStream(name);
- ASN1InputStream derInStream = new ASN1InputStream(inStream);
- ASN1Object obj = derInStream.readObject();
- if (obj instanceof ASN1Sequence)
- {
- issuerNamesX509.add(new X509Name((ASN1Sequence)obj));
- }
- else
- {
- throw new IOException("parsing error");
- }
- issuerNames.add(name.clone());
- }
-
- /**
- * Sets the minCRLNumber criterion. The X509CRL
must have a
- * CRL number extension whose value is greater than or equal to the
- * specified value. If null
, no minCRLNumber check will be
- * done.
- *
- * @param minCRL
- * the minimum CRL number accepted (or null
)
- */
- public void setMinCRLNumber(BigInteger minCRL)
- {
- this.minCRL = minCRL;
- }
-
- /**
- * Sets the maxCRLNumber criterion. The X509CRL
must have a
- * CRL number extension whose value is less than or equal to the specified
- * value. If null
, no maxCRLNumber check will be done.
- *
- * @param maxCRL
- * the maximum CRL number accepted (or null
)
- */
- public void setMaxCRLNumber(BigInteger maxCRL)
- {
- this.maxCRL = maxCRL;
- }
-
- /**
- * Sets the dateAndTime criterion. The specified date must be equal to or
- * later than the value of the thisUpdate component of the
- * X509CRL
and earlier than the value of the nextUpdate
- * component. There is no match if the X509CRL
does not
- * contain a nextUpdate component. If null
, no dateAndTime
- * check will be done.
- *
- * Note that the Date
supplied here is cloned to protect
- * against subsequent modifications.
- *
- * @param dateAndTime
- * the Date
to match against (or null
)
- *
- * @see #getDateAndTime
- */
- public void setDateAndTime(Date dateAndTime)
- {
- if (dateAndTime == null)
- {
- this.dateAndTime = null;
- }
- else
- {
- this.dateAndTime = new Date(dateAndTime.getTime());
- }
- }
-
- /**
- * Sets the certificate being checked. This is not a criterion. Rather, it
- * is optional information that may help a CertStore
find
- * CRLs that would be relevant when checking revocation for the specified
- * certificate. If null
is specified, then no such optional
- * information is provided.
- *
- * @param cert
- * the X509Certificate
being checked (or
- * null
)
- *
- * @see #getCertificateChecking
- */
- public void setCertificateChecking(X509Certificate cert)
- {
- certChecking = cert;
- }
-
- /**
- * Returns a copy of the issuerNames criterion. The issuer distinguished
- * name in the X509CRL
must match at least one of the
- * specified distinguished names. If the value returned is null
,
- * any issuer distinguished name will do.
- *
- * If the value returned is not null
, it is a
- * Collection
of names. Each name is a String
- * or a byte array representing a distinguished name (in RFC 2253 or ASN.1
- * DER encoded form, respectively). Note that the Collection
- * returned may contain duplicate names.
- *
- * If a name is specified as a byte array, it should contain a single DER
- * encoded distinguished name, as defined in X.501. The ASN.1 notation for
- * this structure is given in the documentation for
- * {@link #setIssuerNames setIssuerNames(Collection names)}.
- *
- * Note that a deep copy is performed on the Collection
to
- * protect against subsequent modifications.
- *
- * @return a Collection
of names (or null
)
- * @see #setIssuerNames
- */
- public Collection getIssuerNames()
- {
- if (issuerNames == null)
- {
- return null;
- }
-
- Collection set = new HashSet();
- Iterator iter = issuerNames.iterator();
- Object item;
- while (iter.hasNext())
- {
- item = iter.next();
- if (item instanceof String)
- {
- set.add(new String((String)item));
- }
- else if (item instanceof byte[])
- {
- set.add(((byte[])item).clone());
- }
- }
- return set;
- }
-
- /**
- * Returns the minCRLNumber criterion. The X509CRL
must have
- * a CRL number extension whose value is greater than or equal to the
- * specified value. If null
, no minCRLNumber check will be
- * done.
- *
- * @return the minimum CRL number accepted (or null
)
- */
- public BigInteger getMinCRL()
- {
- return minCRL;
- }
-
- /**
- * Returns the maxCRLNumber criterion. The X509CRL
must have
- * a CRL number extension whose value is less than or equal to the specified
- * value. If null
, no maxCRLNumber check will be done.
- *
- * @return the maximum CRL number accepted (or null
)
- */
- public BigInteger getMaxCRL()
- {
- return maxCRL;
- }
-
- /**
- * Returns the dateAndTime criterion. The specified date must be equal to or
- * later than the value of the thisUpdate component of the
- * X509CRL
and earlier than the value of the nextUpdate
- * component. There is no match if the X509CRL
does not
- * contain a nextUpdate component. If null
, no dateAndTime
- * check will be done.
- *
- * Note that the Date
returned is cloned to protect against
- * subsequent modifications.
- *
- * @return the Date
to match against (or null
)
- *
- * @see #setDateAndTime
- */
- public Date getDateAndTime()
- {
- if (dateAndTime == null)
- {
- return null;
- }
-
- return new Date(dateAndTime.getTime());
- }
-
- /**
- * Returns the certificate being checked. This is not a criterion. Rather,
- * it is optional information that may help a CertStore
find
- * CRLs that would be relevant when checking revocation for the specified
- * certificate. If the value returned is null
, then no such
- * optional information is provided.
- *
- * @return the certificate being checked (or null
)
- *
- * @see #setCertificateChecking
- */
- public X509Certificate getCertificateChecking()
- {
- return certChecking;
- }
-
- /**
- * Returns a printable representation of the X509CRLSelector
.
- *
- * Uses
- * {@link org.spongycastle.asn1.x509.X509Name#toString X509Name.toString} to
- * format the output
- *
- * @return a String
describing the contents of the
- * X509CRLSelector
.
- */
- public String toString()
- {
- StringBuffer s = new StringBuffer();
- s.append("X509CRLSelector: [\n");
- if (issuerNamesX509 != null)
- {
- s.append(" IssuerNames:\n");
- Iterator iter = issuerNamesX509.iterator();
- while (iter.hasNext())
- {
- s.append(" ").append(iter.next()).append('\n');
- }
- }
- if (minCRL != null)
- {
- s.append(" minCRLNumber: ").append(minCRL).append('\n');
- }
- if (maxCRL != null)
- {
- s.append(" maxCRLNumber: ").append(maxCRL).append('\n');
- }
- if (dateAndTime != null)
- {
- s.append(" dateAndTime: ").append(dateAndTime).append('\n');
- }
- if (certChecking != null)
- {
- s.append(" Certificate being checked: ").append(certChecking).append('\n');
- }
- s.append(']');
- return s.toString();
- }
-
- /**
- * Decides whether a CRL
should be selected.
- *
- * Uses
- * {@link org.spongycastle.asn1.x509.X509Name#toString X509Name.toString} to
- * parse and to compare the crl parameter issuer and
- * {@link org.spongycastle.asn1.x509.X509Extensions#CRLNumber CRLNumber} to
- * access the CRL number extension.
- *
- * @param crl
- * the CRL
to be checked
- *
- * @return true
if the CRL
should be selected,
- * false
otherwise
- */
- public boolean match(CRL crl)
- {
- if (!(crl instanceof X509CRL))
- {
- return false;
- }
-
- X509CRL crlX509 = (X509CRL)crl;
- boolean test;
-
- if (issuerNamesX509 != null)
- {
- Iterator iter = issuerNamesX509.iterator();
- test = false;
- X509Name crlIssuer = null;
- try
- {
- crlIssuer = PrincipalUtil.getIssuerX509Principal(crlX509);
- }
- catch (Exception ex)
- {
-
- return false;
- }
-
- while (iter.hasNext())
- {
- if (crlIssuer.equals(iter.next(), true))
- {
- test = true;
- break;
- }
- }
- if (!test)
- {
- return false;
- }
- }
-
- byte[] data = crlX509.getExtensionValue(X509Extensions.CRLNumber
- .getId());
- if (data != null)
- {
- try
- {
- ByteArrayInputStream inStream = new ByteArrayInputStream(data);
- ASN1InputStream derInputStream = new ASN1InputStream(inStream);
- inStream = new ByteArrayInputStream(
- ((ASN1OctetString)derInputStream.readObject())
- .getOctets());
- derInputStream = new ASN1InputStream(inStream);
- BigInteger crlNumber = ((ASN1Integer)derInputStream.readObject())
- .getPositiveValue();
- if (minCRL != null && minCRL.compareTo(crlNumber) > 0)
- {
- return false;
- }
- if (maxCRL != null && maxCRL.compareTo(crlNumber) < 0)
- {
- return false;
- }
- }
- catch (IOException ex)
- {
- return false;
- }
- }
- else if (minCRL != null || maxCRL != null)
- {
- return false;
- }
-
- if (dateAndTime != null)
- {
- Date check = crlX509.getThisUpdate();
- if (check == null)
- {
- return false;
- }
- else if (dateAndTime.before(check))
- {
- return false;
- }
-
- check = crlX509.getNextUpdate();
- if (check == null)
- {
- return false;
- }
- else if (!dateAndTime.before(check))
- {
- return false;
- }
- }
-
- return true;
- }
-
- /**
- * Returns a copy of this object.
- *
- * @return the copy
- */
- public Object clone()
- {
- try
- {
- X509CRLSelector copy = (X509CRLSelector)super.clone();
- if (issuerNames != null)
- {
- copy.issuerNames = new HashSet();
- Iterator iter = issuerNames.iterator();
- Object obj;
- while (iter.hasNext())
- {
- obj = iter.next();
- if (obj instanceof byte[])
- {
- copy.issuerNames.add(((byte[])obj).clone());
- }
- else
- {
- copy.issuerNames.add(obj);
- }
- }
- copy.issuerNamesX509 = new HashSet(issuerNamesX509);
- }
- return copy;
- }
- catch (CloneNotSupportedException e)
- {
- /* Cannot happen */
- throw new InternalError(e.toString());
- }
- }
-
- /**
- * Decides whether a CRL
should be selected.
- *
- * @param crl
- * the CRL
to be checked
- *
- * @return true
if the CRL
should be selected,
- * false
otherwise
- */
- public boolean equals(Object obj)
- {
- if (!(obj instanceof X509CRLSelector))
- {
- return false;
- }
-
- X509CRLSelector equalsCRL = (X509CRLSelector)obj;
-
- if (!equals(dateAndTime, equalsCRL.dateAndTime))
- {
- return false;
- }
-
- if (!equals(minCRL, equalsCRL.minCRL))
- {
- return false;
- }
-
- if (!equals(maxCRL, equalsCRL.maxCRL))
- {
- return false;
- }
-
- if (!equals(issuerNamesX509, equalsCRL.issuerNamesX509))
- {
- return false;
- }
-
- if (!equals(certChecking, equalsCRL.certChecking))
- {
- return false;
- }
-
- return true;
- }
-
- /**
- * Return true
if two Objects are unequal.
- * This means that one is null
and the other is
- * not or obj1.equals(obj2)
returns
- * false
.
- **/
- private boolean equals(Object obj1, Object obj2)
- {
- if (obj1 == null)
- {
- if (obj2 != null)
- {
- return true;
- }
- }
- else if (!obj1.equals(obj2))
- {
- return true;
- }
- return false;
- }
-}
diff --git a/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/X509CertSelector.java b/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/X509CertSelector.java
deleted file mode 100644
index 9292c2e30..000000000
--- a/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/X509CertSelector.java
+++ /dev/null
@@ -1,2462 +0,0 @@
-package java.security.cert;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.math.BigInteger;
-import java.security.PublicKey;
-import java.security.cert.Certificate;
-import java.security.cert.X509Certificate;
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Date;
-import java.util.Enumeration;
-import java.util.HashSet;
-import java.util.Hashtable;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-
-import org.spongycastle.asn1.ASN1InputStream;
-import org.spongycastle.asn1.ASN1Object;
-import org.spongycastle.asn1.ASN1ObjectIdentifier;
-import org.spongycastle.asn1.ASN1OctetString;
-import org.spongycastle.asn1.ASN1Sequence;
-import org.spongycastle.asn1.ASN1TaggedObject;
-import org.spongycastle.asn1.ASN1GeneralizedTime;
-import org.spongycastle.asn1.DERGeneralizedTime;
-import org.spongycastle.asn1.DEROutputStream;
-import org.spongycastle.asn1.util.ASN1Dump;
-import org.spongycastle.asn1.x509.AlgorithmIdentifier;
-import org.spongycastle.asn1.x509.ExtendedKeyUsage;
-import org.spongycastle.asn1.x509.KeyPurposeId;
-import org.spongycastle.asn1.x509.SubjectPublicKeyInfo;
-import org.spongycastle.asn1.x509.X509Extensions;
-import org.spongycastle.asn1.x509.X509Name;
-import org.spongycastle.jce.PrincipalUtil;
-import org.spongycastle.util.Integers;
-
-/**
- * A CertSelector
that selects
- * X509Certificates that match all
- * specified criteria. This class is particularly useful when
- * selecting certificates from a CertStore to build a PKIX-compliant
- * certification path.
- *
- * When first constructed, an X509CertSelector
has no criteria enabled
- * and each of the get methods return a default value (null
, or -1 for
- * the {@link #getBasicConstraints} method). Therefore, the {@link #match} method would
- * return true for any X509Certificate
. Typically, several criteria
- * are enabled (by calling {@link #setIssuer} or {@link #setKeyUsage}, for instance) and
- * then the X509CertSelector
is passed to {@link CertStore#getCertificates} or
- * some similar method.
- *
- * Several criteria can be enabled (by calling {@link #setIssuer} and
- * {@link #setSerialNumber}, for example) such that the match method usually
- * uniquely matches a single X509Certificate
. We say usually, since it
- * is possible for two issuing CAs to have the same distinguished name
- * and each issue a certificate with the same serial number. Other
- * unique combinations include the issuer, subject,
- * subjectKeyIdentifier and/or the subjectPublicKey criteria.
- *
- * Please refer to RFC 2459 for definitions of the X.509 certificate
- * extensions mentioned below.
- *
- * Concurrent Access
- *
- * Unless otherwise specified, the methods defined in this class are
- * not thread-safe. Multiple threads that need to access a single
- * object concurrently should synchronize amongst themselves and
- * provide the necessary locking. Multiple threads each manipulating
- * separate objects need not synchronize.
- *
- * TODO: implement name constraints
- * TODO: implement match check for path to names
- *
- * Uses {@link org.spongycastle.asn1.ASN1InputStream ASN1InputStream},
- * {@link org.spongycastle.asn1.ASN1Sequence ASN1Sequence},
- * {@link org.spongycastle.asn1.ASN1ObjectIdentifier ASN1ObjectIdentifier},
- * {@link org.spongycastle.asn1.DEROutputStream DEROutputStream},
- * {@link org.spongycastle.asn1.ASN1Object ASN1Object},
- * {@link org.spongycastle.asn1.OIDTokenizer OIDTokenizer},
- * {@link org.spongycastle.asn1.x509.X509Name X509Name},
- * {@link org.spongycastle.asn1.x509.X509Extensions X509Extensions},
- * {@link org.spongycastle.asn1.x509.ExtendedKeyUsage ExtendedKeyUsage},
- * {@link org.spongycastle.asn1.x509.KeyPurposeId KeyPurposeId},
- * {@link org.spongycastle.asn1.x509.SubjectPublicKeyInfo SubjectPublicKeyInfo},
- * {@link org.spongycastle.asn1.x509.AlgorithmIdentifier AlgorithmIdentifier}
- */
-public class X509CertSelector implements CertSelector
-{
- private static final Hashtable keyPurposeIdMap = new Hashtable();
- static
- {
- keyPurposeIdMap.put(KeyPurposeId.id_kp_serverAuth.getId(),
- KeyPurposeId.id_kp_serverAuth);
- keyPurposeIdMap.put(KeyPurposeId.id_kp_clientAuth.getId(),
- KeyPurposeId.id_kp_clientAuth);
- keyPurposeIdMap.put(KeyPurposeId.id_kp_codeSigning.getId(),
- KeyPurposeId.id_kp_codeSigning);
- keyPurposeIdMap.put(KeyPurposeId.id_kp_emailProtection.getId(),
- KeyPurposeId.id_kp_emailProtection);
- keyPurposeIdMap.put(KeyPurposeId.id_kp_ipsecEndSystem.getId(),
- KeyPurposeId.id_kp_ipsecEndSystem);
- keyPurposeIdMap.put(KeyPurposeId.id_kp_ipsecTunnel.getId(),
- KeyPurposeId.id_kp_ipsecTunnel);
- keyPurposeIdMap.put(KeyPurposeId.id_kp_ipsecUser.getId(),
- KeyPurposeId.id_kp_ipsecUser);
- keyPurposeIdMap.put(KeyPurposeId.id_kp_timeStamping.getId(),
- KeyPurposeId.id_kp_timeStamping);
- }
-
- private X509Certificate x509Cert = null;
-
- private BigInteger serialNumber = null;
-
- private Object issuerDN = null;
-
- private X509Name issuerDNX509 = null;
-
- private Object subjectDN = null;
-
- private X509Name subjectDNX509 = null;
-
- private byte[] subjectKeyID = null;
-
- private byte[] authorityKeyID = null;
-
- private Date certValid = null;
-
- private Date privateKeyValid = null;
-
- private ASN1ObjectIdentifier subjectKeyAlgID = null;
-
- private PublicKey subjectPublicKey = null;
-
- private byte[] subjectPublicKeyByte = null;
-
- private boolean[] keyUsage = null;
-
- private Set keyPurposeSet = null;
-
- private boolean matchAllSubjectAltNames = true;
-
- private Set subjectAltNames = null;
-
- private Set subjectAltNamesByte = null;
-
- private int minMaxPathLen = -1;
-
- private Set policy = null;
-
- private Set policyOID = null;
-
- private Set pathToNames = null;
-
- private Set pathToNamesByte = null;
-
- /**
- * Creates an X509CertSelector
. Initially, no criteria are
- * set so any X509Certificate
will match.
- */
- public X509CertSelector()
- {
- }
-
- /**
- * Sets the certificateEquals criterion. The specified
- * X509Certificate
must be equal to the
- * X509Certificate
passed to the match method. If
- * null
, then this check is not applied.
- *
- * This method is particularly useful when it is necessary to match a single
- * certificate. Although other criteria can be specified in conjunction with
- * the certificateEquals criterion, it is usually not practical or
- * necessary.
- *
- * @param cert
- * the X509Certificate to match (or null
)
- *
- * @see #getCertificate()
- */
- public void setCertificate(X509Certificate cert)
- {
- x509Cert = cert;
- }
-
- /**
- * Sets the serialNumber criterion. The specified serial number must match
- * the certificate serial number in the X509Certificate
. If
- * null
, any certificate serial number will do.
- *
- * @param serial
- * the certificate serial number to match (or null
)
- *
- * @see #getSerialNumber()
- */
- public void setSerialNumber(BigInteger serial)
- {
- serialNumber = serial;
- }
-
- /**
- * Sets the issuer criterion. The specified distinguished name must match
- * the issuer distinguished name in the X509Certificate
. If
- * null
, any issuer distinguished name will do.
- *
- * If issuerDN
is not null
, it should contain
- * a distinguished name, in RFC 2253 format.
- *
- * Uses {@link org.spongycastle.asn1.x509.X509Name X509Name} for parsing the
- * issuerDN.
- *
- * @param issuerDN
- * a distinguished name in RFC 2253 format (or null
)
- *
- * @exception IOException
- * if a parsing error occurs (incorrect form for DN)
- */
- public void setIssuer(String issuerDN) throws IOException
- {
- if (issuerDN == null)
- {
- this.issuerDN = null;
- this.issuerDNX509 = null;
- }
- else
- {
- X509Name nameX509;
- try
- {
- nameX509 = new X509Name(issuerDN);
- }
- catch (IllegalArgumentException ex)
- {
- throw new IOException(ex.getMessage());
- }
- this.issuerDNX509 = nameX509;
- this.issuerDN = issuerDN;
- }
- }
-
- /**
- * Sets the issuer criterion. The specified distinguished name must match
- * the issuer distinguished name in the X509Certificate
. If
- * null is specified, the issuer criterion is disabled and any issuer
- * distinguished name will do.
- *
- * If issuerDN
is not null
, it should contain
- * a single DER encoded distinguished name, as defined in X.501. The ASN.1
- * notation for this structure is as follows.
- *
- *
- *
- * Name ::= CHOICE {
- * RDNSequence }
- *
- * RDNSequence ::= SEQUENCE OF RDN
- *
- * RDN ::=
- * SET SIZE (1 .. MAX) OF AttributeTypeAndValue
- *
- * AttributeTypeAndValue ::= SEQUENCE {
- * type AttributeType,
- * value AttributeValue }
- *
- * AttributeType ::= OBJECT IDENTIFIER
- *
- * AttributeValue ::= ANY DEFINED BY AttributeType
- * ....
- * DirectoryString ::= CHOICE {
- * teletexString TeletexString (SIZE (1..MAX)),
- * printableString PrintableString (SIZE (1..MAX)),
- * universalString UniversalString (SIZE (1..MAX)),
- * utf8String UTF8String (SIZE (1.. MAX)),
- * bmpString BMPString (SIZE (1..MAX)) }
- *
- *
- *
- *
- * Note that the byte array specified here is cloned to protect against
- * subsequent modifications.
- *
- * Uses {@link org.spongycastle.asn1.ASN1InputStream ASN1InputStream},
- * {@link org.spongycastle.asn1.ASN1Object ASN1Object},
- * {@link org.spongycastle.asn1.ASN1Sequence ASN1Sequence},
- * {@link org.spongycastle.asn1.x509.X509Name X509Name}
- *
- * @param issuerDN -
- * a byte array containing the distinguished name in ASN.1 DER
- * encoded form (or null
)
- *
- * @exception IOException
- * if an encoding error occurs (incorrect form for DN)
- */
- public void setIssuer(byte[] issuerDN) throws IOException
- {
- if (issuerDN == null)
- {
- this.issuerDN = null;
- this.issuerDNX509 = null;
- }
- else
- {
- ByteArrayInputStream inStream = new ByteArrayInputStream(issuerDN);
- ASN1InputStream derInStream = new ASN1InputStream(inStream);
- ASN1Object obj = derInStream.readObject();
- if (obj instanceof ASN1Sequence)
- {
- this.issuerDNX509 = new X509Name((ASN1Sequence)obj);
- }
- else
- {
- throw new IOException("parsing error");
- }
- this.issuerDN = (byte[])issuerDN.clone();
- }
- }
-
- /**
- * Sets the subject criterion. The specified distinguished name must match
- * the subject distinguished name in the X509Certificate
. If
- * null, any subject distinguished name will do.
- *
- * If subjectDN
is not null
, it should
- * contain a distinguished name, in RFC 2253 format.
- *
- * Uses {@link org.spongycastle.asn1.x509.X509Name X509Name} for parsing the
- * subjectDN.
- *
- * @param subjectDN
- * a distinguished name in RFC 2253 format (or null
)
- *
- * @exception IOException
- * if a parsing error occurs (incorrect form for DN)
- */
- public void setSubject(String subjectDN) throws IOException
- {
- if (subjectDN == null)
- {
- this.subjectDN = null;
- this.subjectDNX509 = null;
- }
- else
- {
- X509Name nameX509;
- try
- {
- nameX509 = new X509Name(subjectDN);
- }
- catch (IllegalArgumentException ex)
- {
- throw new IOException(ex.getMessage());
- }
-
- this.subjectDNX509 = nameX509;
- this.subjectDN = subjectDN;
- }
- }
-
- /**
- * Sets the subject criterion. The specified distinguished name must match
- * the subject distinguished name in the X509Certificate
. If
- * null, any subject distinguished name will do.
- *
- * If subjectDN
is not null
, it should
- * contain a single DER encoded distinguished name, as defined in X.501. For
- * the ASN.1 notation for this structure, see
- * {@link #setIssuer(byte []) setIssuer(byte [] issuerDN)}.
- *
- * Uses {@link org.spongycastle.asn1.ASN1InputStream ASN1InputStream},
- * {@link org.spongycastle.asn1.ASN1Object ASN1Object},
- * {@link org.spongycastle.asn1.ASN1Sequence ASN1Sequence},
- * {@link org.spongycastle.asn1.x509.X509Name X509Name}
- *
- * @param subjectDN
- * a byte array containing the distinguished name in ASN.1 DER
- * format (or null
)
- *
- * @exception IOException
- * if an encoding error occurs (incorrect form for DN)
- */
- public void setSubject(byte[] subjectDN) throws IOException
- {
- if (subjectDN == null)
- {
- this.subjectDN = null;
- this.subjectDNX509 = null;
- }
- else
- {
- ByteArrayInputStream inStream = new ByteArrayInputStream(subjectDN);
- ASN1InputStream derInStream = new ASN1InputStream(inStream);
- ASN1Object obj = derInStream.readObject();
-
- if (obj instanceof ASN1Sequence)
- {
- this.subjectDNX509 = new X509Name((ASN1Sequence)obj);
- }
- else
- {
- throw new IOException("parsing error");
- }
- this.subjectDN = (byte[])subjectDN.clone();
- }
- }
-
- /**
- * Sets the subjectKeyIdentifier criterion. The X509Certificate
- * must contain a SubjectKeyIdentifier extension for which the contents of
- * the extension matches the specified criterion value. If the criterion
- * value is null, no subjectKeyIdentifier check will be done.
- *
- * If subjectKeyID
is not null
, it should
- * contain a single DER encoded value corresponding to the contents of the
- * extension value (not including the object identifier, criticality
- * setting, and encapsulating OCTET STRING) for a SubjectKeyIdentifier
- * extension. The ASN.1 notation for this structure follows.
- *
- *
- *
- * SubjectKeyIdentifier ::= KeyIdentifier
- *
- * KeyIdentifier ::= OCTET STRING
- *
- *
- *
- *
- * Since the format of subject key identifiers is not mandated by any
- * standard, subject key identifiers are not parsed by the
- * X509CertSelector
. Instead, the values are compared using
- * a byte-by-byte comparison.
- *
- * Note that the byte array supplied here is cloned to protect against
- * subsequent modifications.
- *
- * @param subjectKeyID -
- * the subject key identifier (or null
)
- *
- * @see #getSubjectKeyIdentifier()
- */
- public void setSubjectKeyIdentifier(byte[] subjectKeyID)
- {
- if (subjectKeyID == null)
- {
- this.subjectKeyID = null;
- }
- else
- {
- this.subjectKeyID = (byte[])subjectKeyID.clone();
- }
- }
-
- /**
- * Sets the authorityKeyIdentifier criterion. The
- * X509Certificate
must contain an AuthorityKeyIdentifier
- * extension for which the contents of the extension value matches the
- * specified criterion value. If the criterion value is null
,
- * no authorityKeyIdentifier check will be done.
- *
- * If authorityKeyID
is not null
, it should
- * contain a single DER encoded value corresponding to the contents of the
- * extension value (not including the object identifier, criticality
- * setting, and encapsulating OCTET STRING) for an AuthorityKeyIdentifier
- * extension. The ASN.1 notation for this structure follows.
- *
- *
- *
- * AuthorityKeyIdentifier ::= SEQUENCE {
- * keyIdentifier [0] KeyIdentifier OPTIONAL,
- * authorityCertIssuer [1] GeneralNames OPTIONAL,
- * authorityCertSerialNumber [2] CertificateSerialNumber OPTIONAL }
- *
- * KeyIdentifier ::= OCTET STRING
- *
- *
- *
- *
- * Authority key identifiers are not parsed by the
- * X509CertSelector
. Instead, the values are compared using
- * a byte-by-byte comparison.
- *
- * When the keyIdentifier
field of
- * AuthorityKeyIdentifier
is populated, the value is usually
- * taken from the SubjectKeyIdentifier extension in the issuer's
- * certificate. Note, however, that the result of
- * X509Certificate.getExtensionValue(
- *
- * Note also that the byte array supplied here is cloned to protect against
- * subsequent modifications.
- *
- * @param authorityKeyID
- * the authority key identifier (or null
)
- *
- * @see #getAuthorityKeyIdentifier()
- */
- public void setAuthorityKeyIdentifier(byte[] authorityKeyID)
- {
- if (authorityKeyID == null)
- {
- this.authorityKeyID = null;
- }
- else
- {
- this.authorityKeyID = (byte[])authorityKeyID.clone();
- }
- }
-
- /**
- * Sets the certificateValid criterion. The specified date must fall within
- * the certificate validity period for the X509Certificate. If
- * null
, no certificateValid check will be done.
- *
- * Note that the Date supplied here is cloned to protect against subsequent
- * modifications.
- *
- * @param certValid
- * the Date to check (or null
)
- *
- * @see #getCertificateValid()
- */
- public void setCertificateValid(Date certValid)
- {
- if (certValid == null)
- {
- this.certValid = null;
- }
- else
- {
- this.certValid = new Date(certValid.getTime());
- }
- }
-
- /**
- * Sets the privateKeyValid criterion. The specified date must fall within
- * the private key validity period for the X509Certificate. If
- * null
, no privateKeyValid check will be done.
- *
- * Note that the Date supplied here is cloned to protect against subsequent
- * modifications.
- *
- * @param privateKeyValid
- * the Date to check (or null
)
- *
- * @see #getPrivateKeyValid()
- */
- public void setPrivateKeyValid(Date privateKeyValid)
- {
- if (privateKeyValid == null)
- {
- this.privateKeyValid = null;
- }
- else
- {
- this.privateKeyValid = new Date(privateKeyValid.getTime());
- }
- }
-
- /**
- * Sets the subjectPublicKeyAlgID criterion. The X509Certificate must
- * contain a subject public key with the specified algorithm. If
- * null
, no subjectPublicKeyAlgID check will be done.
- *
- * @param oid
- * The object identifier (OID) of the algorithm to check for (or
- * null
). An OID is represented by a set of
- * nonnegative integers separated by periods.
- *
- * @exception IOException
- * if the OID is invalid, such as the first component being
- * not 0, 1 or 2 or the second component being greater than
- * 39.
- *
- * @see #getSubjectPublicKeyAlgID()
- */
- public void setSubjectPublicKeyAlgID(String oid) throws IOException
- {
- CertUtil.parseOID(oid);
- subjectKeyAlgID = new ASN1ObjectIdentifier(oid);
- }
-
- /**
- * Sets the subjectPublicKey criterion. The X509Certificate must contain the
- * specified subject public key. If null, no subjectPublicKey check will be
- * done.
- *
- * @param key
- * the subject public key to check for (or null)
- *
- * @see #getSubjectPublicKey()
- */
- public void setSubjectPublicKey(PublicKey key)
- {
- if (key == null)
- {
- subjectPublicKey = null;
- subjectPublicKeyByte = null;
- }
- else
- {
- subjectPublicKey = key;
- subjectPublicKeyByte = key.getEncoded();
- }
- }
-
- /**
- * Sets the subjectPublicKey criterion. The X509Certificate
- * must contain the specified subject public key. If null
,
- * no subjectPublicKey check will be done.
- *
- * Because this method allows the public key to be specified as a byte
- * array, it may be used for unknown key types.
- *
- * If key is not null
, it should contain a single DER
- * encoded SubjectPublicKeyInfo structure, as defined in X.509. The ASN.1
- * notation for this structure is as follows.
- *
- *
- *
- * SubjectPublicKeyInfo ::= SEQUENCE {
- * algorithm AlgorithmIdentifier,
- * subjectPublicKey BIT STRING }
- *
- * AlgorithmIdentifier ::= SEQUENCE {
- * algorithm OBJECT IDENTIFIER,
- * parameters ANY DEFINED BY algorithm OPTIONAL }
- * -- contains a value of the type
- * -- registered for use with the
- * -- algorithm object identifier value
- *
- *
- *
- *
- * Note that the byte array supplied here is cloned to protect against
- * subsequent modifications.
- *
- * @param key
- * a byte array containing the subject public key in ASN.1 DER
- * form (or null
)
- *
- * @exception IOException
- * if an encoding error occurs (incorrect form for subject
- * public key)
- *
- * @see #getSubjectPublicKey()
- */
- public void setSubjectPublicKey(byte[] key) throws IOException
- {
- if (key == null)
- {
- subjectPublicKey = null;
- subjectPublicKeyByte = null;
- }
- else
- {
- subjectPublicKey = null;
- subjectPublicKeyByte = (byte[])key.clone();
- // TODO
- // try to generyte PublicKey Object from subjectPublicKeyByte
- }
- }
-
- /**
- * Sets the keyUsage criterion. The X509Certificate must allow the specified
- * keyUsage values. If null, no keyUsage check will be done. Note that an
- * X509Certificate that has no keyUsage extension implicitly allows all
- * keyUsage values.
- *
- * Note that the boolean array supplied here is cloned to protect against
- * subsequent modifications.
- *
- * @param keyUsage
- * a boolean array in the same format as the boolean array
- * returned by X509Certificate.getKeyUsage(). Or
- * null
.
- *
- * @see #getKeyUsage()
- */
- public void setKeyUsage(boolean[] keyUsage)
- {
- if (keyUsage == null)
- {
- this.keyUsage = null;
- }
- else
- {
- this.keyUsage = (boolean[])keyUsage.clone();
- }
- }
-
- /**
- * Sets the extendedKeyUsage criterion. The X509Certificate
- * must allow the specified key purposes in its extended key usage
- * extension. If keyPurposeSet
is empty or null
,
- * no extendedKeyUsage check will be done. Note that an
- * X509Certificate
that has no extendedKeyUsage extension
- * implicitly allows all key purposes.
- *
- * Note that the Set is cloned to protect against subsequent modifications.
- *
- * Uses {@link org.spongycastle.asn1.x509.KeyPurposeId KeyPurposeId}
- *
- * @param keyPurposeSet
- * a Set
of key purpose OIDs in string format (or
- * null
). Each OID is represented by a set of
- * nonnegative integers separated by periods.
- *
- * @exception IOException
- * if the OID is invalid, such as the first component being
- * not 0, 1 or 2 or the second component being greater than
- * 39.
- *
- * @see #getExtendedKeyUsage()
- */
- public void setExtendedKeyUsage(Set keyPurposeSet) throws IOException
- {
- if (keyPurposeSet == null || keyPurposeSet.isEmpty())
- {
- this.keyPurposeSet = keyPurposeSet;
- }
- else
- {
- this.keyPurposeSet = new HashSet();
- Iterator iter = keyPurposeSet.iterator();
- Object obj;
- KeyPurposeId purposeID;
- while (iter.hasNext())
- {
- obj = iter.next();
- if (obj instanceof String)
- {
- purposeID = (KeyPurposeId)keyPurposeIdMap.get((String)obj);
- if (purposeID == null)
- {
- throw new IOException("unknown purposeID "
- + (String)obj);
- }
- this.keyPurposeSet.add(purposeID);
- }
- }
- }
- }
-
- /**
- * Enables/disables matching all of the subjectAlternativeNames specified in
- * the {@link #setSubjectAlternativeNames setSubjectAlternativeNames} or
- * {@link #addSubjectAlternativeName addSubjectAlternativeName} methods. If
- * enabled, the X509Certificate
must contain all of the
- * specified subject alternative names. If disabled, the X509Certificate
- * must contain at least one of the specified subject alternative names.
- *
- * The matchAllNames flag is true
by default.
- *
- * @param matchAllNames
- * if true
, the flag is enabled; if
- * false
, the flag is disabled.
- *
- * @see #getMatchAllSubjectAltNames()
- */
- public void setMatchAllSubjectAltNames(boolean matchAllNames)
- {
- matchAllSubjectAltNames = matchAllNames;
- }
-
- /**
- * Sets the subjectAlternativeNames criterion. The
- * X509Certificate
must contain all or at least one of the
- * specified subjectAlternativeNames, depending on the value of the
- * matchAllNames flag (see {@link #setMatchAllSubjectAltNames}).
- *
- * This method allows the caller to specify, with a single method call, the
- * complete set of subject alternative names for the subjectAlternativeNames
- * criterion. The specified value replaces the previous value for the
- * subjectAlternativeNames criterion.
- *
- * The names
parameter (if not null
) is a
- * Collection
with one entry for each name to be included in
- * the subject alternative name criterion. Each entry is a List
- * whose first entry is an Integer
(the name type, 0-8) and
- * whose second entry is a String
or a byte array (the name,
- * in string or ASN.1 DER encoded form, respectively). There can be multiple
- * names of the same type. If null
is supplied as the value
- * for this argument, no subjectAlternativeNames check will be performed.
- *
- * Each subject alternative name in the Collection
may be
- * specified either as a String
or as an ASN.1 encoded byte
- * array. For more details about the formats used, see
- * {@link #addSubjectAlternativeName(int, String) addSubjectAlternativeName(int type, String name)}
- * and
- * {@link #addSubjectAlternativeName(int, byte[]) addSubjectAlternativeName(int type, byte [] name}).
- *
- * Note that the names
parameter can contain duplicate names
- * (same name and name type), but they may be removed from the
- * Collection
of names returned by the
- * {@link #getSubjectAlternativeNames} method.
- *
- * Note that a deep copy is performed on the Collection to protect against
- * subsequent modifications.
- *
- * @param names -
- * a Collection of names (or null)
- *
- * @exception IOException
- * if a parsing error occurs
- *
- * @see #getSubjectAlternativeNames()
- */
- public void setSubjectAlternativeNames(Collection names) throws IOException
- {
- try
- {
- if (names == null || names.isEmpty())
- {
- subjectAltNames = null;
- subjectAltNamesByte = null;
- }
- else
- {
- subjectAltNames = new HashSet();
- subjectAltNamesByte = new HashSet();
- Iterator iter = names.iterator();
- List item;
- int type;
- Object data;
- while (iter.hasNext())
- {
- item = (List)iter.next();
- type = ((Integer)item.get(0)).intValue();
- data = item.get(1);
- if (data instanceof String)
- {
- addSubjectAlternativeName(type, (String)data);
- }
- else if (data instanceof byte[])
- {
- addSubjectAlternativeName(type, (byte[])data);
- }
- else
- {
- throw new IOException(
- "parsing error: unknown data type");
- }
- }
- }
- }
- catch (Exception ex)
- {
- throw new IOException("parsing exception:\n" + ex.toString());
- }
- }
-
- /**
- * Adds a name to the subjectAlternativeNames criterion. The
- * X509Certificate
must contain all or at least one of the
- * specified subjectAlternativeNames, depending on the value of the
- * matchAllNames flag (see {@link #setMatchAllSubjectAltNames}).
- *
- * This method allows the caller to add a name to the set of subject
- * alternative names. The specified name is added to any previous value for
- * the subjectAlternativeNames criterion. If the specified name is a
- * duplicate, it may be ignored.
- *
- * The name is provided in string format. RFC 822, DNS, and URI names use
- * the well-established string formats for those types (subject to the
- * restrictions included in RFC 2459). IPv4 address names are supplied using
- * dotted quad notation. OID address names are represented as a series of
- * nonnegative integers separated by periods. And directory names
- * (distinguished names) are supplied in RFC 2253 format. No standard string
- * format is defined for otherNames, X.400 names, EDI party names, IPv6
- * address names, or any other type of names. They should be specified using
- * the
- * {@link #addSubjectAlternativeName(int, byte[]) addSubjectAlternativeName(int type, byte [] name)}
- * method.
- *
- * @param type
- * the name type (0-8, as specified in RFC 2459, section 4.2.1.7)
- * @param name -
- * the name in string form (not null)
- *
- * @exception IOException
- * if a parsing error occurs
- */
- public void addSubjectAlternativeName(int type, String name)
- throws IOException
- {
- // TODO full implementation of CertUtil.parseGeneralName
- byte[] encoded = CertUtil.parseGeneralName(type, name);
- List tmpList = new ArrayList();
- tmpList.add(Integers.valueOf(type));
- tmpList.add(name);
- subjectAltNames.add(tmpList);
- tmpList.set(1, encoded);
- subjectAltNamesByte.add(tmpList);
- }
-
- /**
- * Adds a name to the subjectAlternativeNames criterion. The
- * X509Certificate
must contain all or at least one of the
- * specified subjectAlternativeNames, depending on the value of the
- * matchAllNames flag (see {@link #setMatchAllSubjectAltNames}).
- *
- * This method allows the caller to add a name to the set of subject
- * alternative names. The specified name is added to any previous value for
- * the subjectAlternativeNames criterion. If the specified name is a
- * duplicate, it may be ignored.
- *
- * The name is provided as a byte array. This byte array should contain the
- * DER encoded name, as it would appear in the GeneralName structure defined
- * in RFC 2459 and X.509. The encoded byte array should only contain the
- * encoded value of the name, and should not include the tag associated with
- * the name in the GeneralName structure. The ASN.1 definition of this
- * structure appears below.
- *
- *
- *
- * GeneralName ::= CHOICE {
- * otherName [0] OtherName,
- * rfc822Name [1] IA5String,
- * dNSName [2] IA5String,
- * x400Address [3] ORAddress,
- * directoryName [4] Name,
- * ediPartyName [5] EDIPartyName,
- * uniformResourceIdentifier [6] IA5String,
- * iPAddress [7] OCTET STRING,
- * registeredID [8] OBJECT IDENTIFIER}
- *
- *
- *
- *
- * Note that the byte array supplied here is cloned to protect against
- * subsequent modifications.
- *
- * TODO: check encoded format
- *
- * @param type
- * the name type (0-8, as listed above)
- * @param name
- * a byte array containing the name in ASN.1 DER encoded form
- *
- * @exception IOException
- * if a parsing error occurs
- */
- public void addSubjectAlternativeName(int type, byte[] name)
- throws IOException
- {
- // TODO check encoded format
- List tmpList = new ArrayList();
- tmpList.add(Integers.valueOf(type));
- tmpList.add(name.clone());
- subjectAltNames.add(tmpList);
- subjectAltNamesByte.add(tmpList);
- }
-
- /**
- * Sets the name constraints criterion. The X509Certificate
- * must have subject and subject alternative names that meet the specified
- * name constraints.
- *
- * The name constraints are specified as a byte array. This byte array
- * should contain the DER encoded form of the name constraints, as they
- * would appear in the NameConstraints structure defined in RFC 2459 and
- * X.509. The ASN.1 definition of this structure appears below.
- *
- *
- *
- * NameConstraints ::= SEQUENCE {
- * permittedSubtrees [0] GeneralSubtrees OPTIONAL,
- * excludedSubtrees [1] GeneralSubtrees OPTIONAL }
- *
- * GeneralSubtrees ::= SEQUENCE SIZE (1..MAX) OF GeneralSubtree
- *
- * GeneralSubtree ::= SEQUENCE {
- * base GeneralName,
- * minimum [0] BaseDistance DEFAULT 0,
- * maximum [1] BaseDistance OPTIONAL }
- *
- * BaseDistance ::= INTEGER (0..MAX)
- *
- * GeneralName ::= CHOICE {
- * otherName [0] OtherName,
- * rfc822Name [1] IA5String,
- * dNSName [2] IA5String,
- * x400Address [3] ORAddress,
- * directoryName [4] Name,
- * ediPartyName [5] EDIPartyName,
- * uniformResourceIdentifier [6] IA5String,
- * iPAddress [7] OCTET STRING,
- * registeredID [8] OBJECT IDENTIFIER}
- *
- *
- *
- *
- * Note that the byte array supplied here is cloned to protect against
- * subsequent modifications.
- *
- * TODO: implement this
- *
- * @param bytes
- * a byte array containing the ASN.1 DER encoding of a
- * NameConstraints extension to be used for checking name
- * constraints. Only the value of the extension is included, not
- * the OID or criticality flag. Can be null
, in
- * which case no name constraints check will be performed
- *
- * @exception IOException
- * if a parsing error occurs
- * @exception UnsupportedOperationException
- * because this method is not supported
- * @see #getNameConstraints()
- */
- public void setNameConstraints(byte[] bytes) throws IOException
- {
- throw new UnsupportedOperationException();
- }
-
- /**
- * Sets the basic constraints constraint. If the value is greater than or
- * equal to zero, X509Certificates
must include a
- * basicConstraints extension with a pathLen of at least this value. If the
- * value is -2, only end-entity certificates are accepted. If the value is
- * -1, no check is done.
- *
- * This constraint is useful when building a certification path forward
- * (from the target toward the trust anchor. If a partial path has been
- * built, any candidate certificate must have a maxPathLen value greater
- * than or equal to the number of certificates in the partial path.
- *
- * @param minMaxPathLen
- * the value for the basic constraints constraint
- *
- * @exception IllegalArgumentException
- * if the value is less than -2
- *
- * @see #getBasicConstraints()
- */
- public void setBasicConstraints(int minMaxPathLen)
- {
- if (minMaxPathLen < -2)
- {
- throw new IllegalArgumentException("minMaxPathLen must be >= -2");
- }
-
- this.minMaxPathLen = minMaxPathLen;
- }
-
- /**
- * Sets the policy constraint. The X509Certificate must include at least one
- * of the specified policies in its certificate policies extension. If
- * certPolicySet is empty, then the X509Certificate must include at least
- * some specified policy in its certificate policies extension. If
- * certPolicySet is null, no policy check will be performed.
- *
- * Note that the Set is cloned to protect against subsequent modifications.
- *
- * TODO: implement match check for this
- *
- * @param certPolicySet
- * a Set of certificate policy OIDs in string format (or null).
- * Each OID is represented by a set of nonnegative integers
- * separated by periods.
- *
- * @exception IOException
- * if a parsing error occurs on the OID such as the first
- * component is not 0, 1 or 2 or the second component is
- * greater than 39.
- *
- * @see #getPolicy()
- */
- public void setPolicy(Set certPolicySet) throws IOException
- {
- if (certPolicySet == null)
- {
- policy = null;
- policyOID = null;
- }
- else
- {
- policyOID = new HashSet();
- Iterator iter = certPolicySet.iterator();
- Object item;
- while (iter.hasNext())
- {
- item = iter.next();
- if (item instanceof String)
- {
- CertUtil.parseOID((String)item);
- policyOID.add(new ASN1ObjectIdentifier((String)item));
- }
- else
- {
- throw new IOException(
- "certPolicySet contains null values or non String objects");
- }
- }
- policy = new HashSet(certPolicySet);
- }
- }
-
- /**
- * Sets the pathToNames criterion. The X509Certificate
must
- * not include name constraints that would prohibit building a path to the
- * specified names.
- *
- * This method allows the caller to specify, with a single method call, the
- * complete set of names which the X509Certificates
's name
- * constraints must permit. The specified value replaces the previous value
- * for the pathToNames criterion.
- *
- * This constraint is useful when building a certification path forward
- * (from the target toward the trust anchor. If a partial path has been
- * built, any candidate certificate must not include name constraints that
- * would prohibit building a path to any of the names in the partial path.
- *
- * The names parameter (if not null
) is a
- * Collection
with one entry for each name to be included in
- * the pathToNames criterion. Each entry is a List
whose
- * first entry is an Integer (the name type, 0-8) and whose second entry is
- * a String
or a byte array (the name, in string or ASN.1 DER
- * encoded form, respectively). There can be multiple names of the same
- * type. If null
is supplied as the value for this argument,
- * no pathToNames check will be performed.
- *
- * Each name in the Collection may be specified either as a String or as an
- * ASN.1 encoded byte array. For more details about the formats used, see
- * {@link #addPathToName(int, String) addPathToName(int type, String name)}
- * and
- * {@link #addPathToName(int, byte[]) addPathToName(int type, byte [] name)}.
- *
- * Note that the names parameter can contain duplicate names (same name and
- * name type), but they may be removed from the Collection of names returned
- * by the {@link #getPathToNames} method.
- *
- * Note that a deep copy is performed on the Collection to protect against
- * subsequent modifications.
- *
- * TODO: implement this match check for this
- *
- * @param names
- * a Collection with one entry per name (or null
)
- *
- * @exception IOException
- * if a parsing error occurs
- * @exception UnsupportedOperationException
- * because this method is not supported
- *
- * @see #getPathToNames()
- */
- public void setPathToNames(Collection names) throws IOException
- {
- try
- {
- if (names == null || names.isEmpty())
- {
- pathToNames = null;
- pathToNamesByte = null;
- }
- else
- {
- pathToNames = new HashSet();
- pathToNamesByte = new HashSet();
- Iterator iter = names.iterator();
- List item;
- int type;
- Object data;
-
- while (iter.hasNext())
- {
- item = (List)iter.next();
- type = ((Integer)item.get(0)).intValue();
- data = item.get(1);
- if (data instanceof String)
- {
- addPathToName(type, (String)data);
- }
- else if (data instanceof byte[])
- {
- addPathToName(type, (byte[])data);
- }
- else
- {
- throw new IOException(
- "parsing error: unknown data type");
- }
- }
- }
- }
- catch (Exception ex)
- {
- throw new IOException("parsing exception:\n" + ex.toString());
- }
- }
-
- /**
- * Adds a name to the pathToNames criterion. The
- * X509Certificate
must not include name constraints that
- * would prohibit building a path to the specified name.
- *
- * This method allows the caller to add a name to the set of names which the
- * X509Certificates
's name constraints must permit. The
- * specified name is added to any previous value for the pathToNames
- * criterion. If the name is a duplicate, it may be ignored.
- *
- * The name is provided in string format. RFC 822, DNS, and URI names use
- * the well-established string formats for those types (subject to the
- * restrictions included in RFC 2459). IPv4 address names are supplied using
- * dotted quad notation. OID address names are represented as a series of
- * nonnegative integers separated by periods. And directory names
- * (distinguished names) are supplied in RFC 2253 format. No standard string
- * format is defined for otherNames, X.400 names, EDI party names, IPv6
- * address names, or any other type of names. They should be specified using
- * the
- * {@link #addPathToName(int, byte[]) addPathToName(int type, byte [] name)}
- * method.
- *
- * TODO: implement this match check for this
- *
- * @param type
- * the name type (0-8, as specified in RFC 2459, section 4.2.1.7)
- * @param name
- * the name in string form
- *
- * @exceptrion IOException if a parsing error occurs
- */
- public void addPathToName(int type, String name) throws IOException
- {
- // TODO full implementation of CertUtil.parseGeneralName
- byte[] encoded = CertUtil.parseGeneralName(type, name);
- List tmpList = new ArrayList();
- tmpList.add(Integers.valueOf(type));
- tmpList.add(name);
- pathToNames.add(tmpList);
- tmpList.set(1, encoded);
- pathToNamesByte.add(tmpList);
- throw new UnsupportedOperationException();
- }
-
- /**
- * Adds a name to the pathToNames criterion. The
- * X509Certificate
must not include name constraints that
- * would prohibit building a path to the specified name.
- *
- * This method allows the caller to add a name to the set of names which the
- * X509Certificates
's name constraints must permit. The
- * specified name is added to any previous value for the pathToNames
- * criterion. If the name is a duplicate, it may be ignored.
- *
- * The name is provided as a byte array. This byte array should contain the
- * DER encoded name, as it would appear in the GeneralName structure defined
- * in RFC 2459 and X.509. The ASN.1 definition of this structure appears in
- * the documentation for
- * {@link #addSubjectAlternativeName(int,byte[]) addSubjectAlternativeName(int type, byte[] name)}.
- *
- * Note that the byte array supplied here is cloned to protect against
- * subsequent modifications.
- *
- * TODO: implement this match check for this
- *
- * @param type
- * the name type (0-8, as specified in RFC 2459, section 4.2.1.7)
- * @param name
- * a byte array containing the name in ASN.1 DER encoded form
- *
- * @exception IOException
- * if a parsing error occurs
- */
- public void addPathToName(int type, byte[] name) throws IOException
- {
- // TODO check encoded format
- List tmpList = new ArrayList();
- tmpList.add(Integers.valueOf(type));
- tmpList.add(name.clone());
- pathToNames.add(tmpList);
- pathToNamesByte.add(tmpList);
- }
-
- /**
- * Returns the certificateEquals criterion. The specified
- * X509Certificate
must be equal to the
- * X509Certificate
passed to the match method. If
- * null
, this check is not applied.
- *
- * @retrun the X509Certificate
to match (or null
)
- *
- * @see #setCertificate(java.security.cert.X509Certificate)
- */
- public X509Certificate getCertificate()
- {
- return x509Cert;
- }
-
- /**
- * Returns the serialNumber criterion. The specified serial number must
- * match the certificate serial number in the X509Certificate
.
- * If null
, any certificate serial number will do.
- *
- * @return the certificate serial number to match (or null
)
- *
- * @see #setSerialNumber(java.math.BigInteger)
- */
- public BigInteger getSerialNumber()
- {
- return serialNumber;
- }
-
- /**
- * Returns the issuer criterion as a String. This distinguished name must
- * match the issuer distinguished name in the X509Certificate
.
- * If null
, the issuer criterion is disabled and any issuer
- * distinguished name will do.
- *
- * If the value returned is not null
, it is a distinguished
- * name, in RFC 2253 format.
- *
- * Uses {@link org.spongycastle.asn1.x509.X509Name X509Name} for formatiing
- * byte[] issuerDN to String.
- *
- * @return the required issuer distinguished name in RFC 2253 format (or
- * null
)
- */
- public String getIssuerAsString()
- {
- if (issuerDN instanceof String)
- {
- return new String((String)issuerDN);
- }
- else if (issuerDNX509 != null)
- {
- return issuerDNX509.toString();
- }
-
- return null;
- }
-
- /**
- * Returns the issuer criterion as a byte array. This distinguished name
- * must match the issuer distinguished name in the
- * X509Certificate
. If null
, the issuer
- * criterion is disabled and any issuer distinguished name will do.
- *
- * If the value returned is not null
, it is a byte array
- * containing a single DER encoded distinguished name, as defined in X.501.
- * The ASN.1 notation for this structure is supplied in the documentation
- * for {@link #setIssuer(byte[]) setIssuer(byte [] issuerDN)}.
- *
- * Note that the byte array returned is cloned to protect against subsequent
- * modifications.
- *
- * Uses {@link org.spongycastle.asn1.DEROutputStream DEROutputStream},
- * {@link org.spongycastle.asn1.x509.X509Name X509Name} to gnerate byte[]
- * output for String issuerDN.
- *
- * @return a byte array containing the required issuer distinguished name in
- * ASN.1 DER format (or null
)
- *
- * @exception IOException
- * if an encoding error occurs
- */
- public byte[] getIssuerAsBytes() throws IOException
- {
- if (issuerDN instanceof byte[])
- {
- return (byte[])((byte[])issuerDN).clone();
- }
- else if (issuerDNX509 != null)
- {
- ByteArrayOutputStream outStream = new ByteArrayOutputStream();
- DEROutputStream derOutStream = new DEROutputStream(outStream);
-
- derOutStream.writeObject(issuerDNX509.toASN1Primitive());
- derOutStream.close();
-
- return outStream.toByteArray();
- }
-
- return null;
- }
-
- /**
- * Returns the subject criterion as a String. This distinguished name must
- * match the subject distinguished name in the X509Certificate
.
- * If null
, the subject criterion is disabled and any
- * subject distinguished name will do.
- *
- * If the value returned is not null
, it is a distinguished
- * name, in RFC 2253 format.
- *
- * Uses {@link org.spongycastle.asn1.x509.X509Name X509Name} for formatiing
- * byte[] subjectDN to String.
- *
- * @return the required subject distinguished name in RFC 2253 format (or
- * null
)
- */
- public String getSubjectAsString()
- {
- if (subjectDN instanceof String)
- {
- return new String((String)subjectDN);
- }
- else if (subjectDNX509 != null)
- {
- return subjectDNX509.toString();
- }
-
- return null;
- }
-
- /**
- * Returns the subject criterion as a byte array. This distinguished name
- * must match the subject distinguished name in the
- * X509Certificate
. If null
, the subject
- * criterion is disabled and any subject distinguished name will do.
- *
- * If the value returned is not null
, it is a byte array
- * containing a single DER encoded distinguished name, as defined in X.501.
- * The ASN.1 notation for this structure is supplied in the documentation
- * for {@link #setSubject(byte [] subjectDN) setSubject(byte [] subjectDN)}.
- *
- * Note that the byte array returned is cloned to protect against subsequent
- * modifications.
- *
- * Uses {@link org.spongycastle.asn1.DEROutputStream DEROutputStream},
- * {@link org.spongycastle.asn1.x509.X509Name X509Name} to gnerate byte[]
- * output for String subjectDN.
- *
- * @return a byte array containing the required subject distinguished name
- * in ASN.1 DER format (or null
)
- *
- * @exception IOException
- * if an encoding error occurs
- */
- public byte[] getSubjectAsBytes() throws IOException
- {
- if (subjectDN instanceof byte[])
- {
- return (byte[])((byte[])subjectDN).clone();
- }
- else if (subjectDNX509 != null)
- {
- ByteArrayOutputStream outStream = new ByteArrayOutputStream();
- DEROutputStream derOutStream = new DEROutputStream(outStream);
-
- derOutStream.writeObject(subjectDNX509.toASN1Primitive());
- derOutStream.close();
-
- return outStream.toByteArray();
- }
-
- return null;
- }
-
- /**
- * Returns the subjectKeyIdentifier criterion. The
- * X509Certificate
must contain a SubjectKeyIdentifier
- * extension with the specified value. If null
, no
- * subjectKeyIdentifier check will be done.
- *
- * Note that the byte array returned is cloned to protect against subsequent
- * modifications.
- *
- * @return the key identifier (or null
)
- *
- * @see #setSubjectKeyIdentifier
- */
- public byte[] getSubjectKeyIdentifier()
- {
- if (subjectKeyID != null)
- {
- return (byte[])subjectKeyID.clone();
- }
-
- return null;
- }
-
- /**
- * Returns the authorityKeyIdentifier criterion. The
- * X509Certificate
must contain a AuthorityKeyIdentifier
- * extension with the specified value. If null
, no
- * authorityKeyIdentifier check will be done.
- *
- * Note that the byte array returned is cloned to protect against subsequent
- * modifications.
- *
- * @return the key identifier (or null
)
- *
- * @see #setAuthorityKeyIdentifier
- */
- public byte[] getAuthorityKeyIdentifier()
- {
- if (authorityKeyID != null)
- {
- return (byte[])authorityKeyID.clone();
- }
-
- return null;
- }
-
- /**
- * Returns the certificateValid criterion. The specified date must fall
- * within the certificate validity period for the
- * X509Certificate
. If null
, no
- * certificateValid check will be done.
- *
- * Note that the Date
returned is cloned to protect against
- * subsequent modifications.
- *
- * @return the Date
to check (or null
)
- *
- * @see #setCertificateValid
- */
- public Date getCertificateValid()
- {
- if (certValid != null)
- {
- return new Date(certValid.getTime());
- }
-
- return null;
- }
-
- /**
- * Returns the privateKeyValid criterion. The specified date must fall
- * within the private key validity period for the
- * X509Certificate
. If null
, no
- * privateKeyValid check will be done.
- *
- * Note that the Date
returned is cloned to protect against
- * subsequent modifications.
- *
- * @return the Date
to check (or null
)
- *
- * @see #setPrivateKeyValid
- */
- public Date getPrivateKeyValid()
- {
- if (privateKeyValid != null)
- {
- return new Date(privateKeyValid.getTime());
- }
-
- return null;
- }
-
- /**
- * Returns the subjectPublicKeyAlgID criterion. The
- * X509Certificate
must contain a subject public key with the
- * specified algorithm. If null
, no subjectPublicKeyAlgID
- * check will be done.
- *
- * @return the object identifier (OID) of the signature algorithm to check
- * for (or null
). An OID is represented by a set of
- * nonnegative integers separated by periods.
- *
- * @see #setSubjectPublicKeyAlgID
- */
- public String getSubjectPublicKeyAlgID()
- {
- if (subjectKeyAlgID != null)
- {
- return subjectKeyAlgID.toString();
- }
-
- return null;
- }
-
- /**
- * Returns the subjectPublicKey criterion. The X509Certificate
- * must contain the specified subject public key. If null
,
- * no subjectPublicKey check will be done.
- *
- * @return the subject public key to check for (or null
)
- *
- * @see #setSubjectPublicKey
- */
- public PublicKey getSubjectPublicKey()
- {
- return subjectPublicKey;
- }
-
- /**
- * Returns the keyUsage criterion. The X509Certificate
must
- * allow the specified keyUsage values. If null, no keyUsage check will be
- * done.
- *
- * Note that the boolean array returned is cloned to protect against
- * subsequent modifications.
- *
- * @return a boolean array in the same format as the boolean array returned
- * by
- * {@link X509Certificate#getKeyUsage() X509Certificate.getKeyUsage()}.
- * Or null
.
- *
- * @see #setKeyUsage
- */
- public boolean[] getKeyUsage()
- {
- if (keyUsage != null)
- {
- return (boolean[])keyUsage.clone();
- }
-
- return null;
- }
-
- /**
- * Returns the extendedKeyUsage criterion. The X509Certificate
- * must allow the specified key purposes in its extended key usage
- * extension. If the keyPurposeSet
returned is empty or
- * null
, no extendedKeyUsage check will be done. Note that
- * an X509Certificate
that has no extendedKeyUsage extension
- * implicitly allows all key purposes.
- *
- * @return an immutable Set
of key purpose OIDs in string
- * format (or null
)
- * @see #setExtendedKeyUsage
- */
- public Set getExtendedKeyUsage()
- {
- if (keyPurposeSet == null || keyPurposeSet.isEmpty())
- {
- return keyPurposeSet;
- }
-
- Set returnSet = new HashSet();
- Iterator iter = keyPurposeSet.iterator();
- while (iter.hasNext())
- {
- returnSet.add(iter.next().toString());
- }
-
- return Collections.unmodifiableSet(returnSet);
- }
-
- /**
- * Indicates if the X509Certificate
must contain all or at
- * least one of the subjectAlternativeNames specified in the
- * {@link #setSubjectAlternativeNames setSubjectAlternativeNames} or
- * {@link #addSubjectAlternativeName addSubjectAlternativeName} methods. If
- * true
, the X509Certificate
must contain all
- * of the specified subject alternative names. If false
, the
- * X509Certificate
must contain at least one of the specified
- * subject alternative names.
- *
- * @return true
if the flag is enabled; false
- * if the flag is disabled. The flag is true
by
- * default.
- *
- * @see #setMatchAllSubjectAltNames
- */
- public boolean getMatchAllSubjectAltNames()
- {
- return matchAllSubjectAltNames;
- }
-
- /**
- * Returns a copy of the subjectAlternativeNames criterion. The
- * X509Certificate
must contain all or at least one of the
- * specified subjectAlternativeNames, depending on the value of the
- * matchAllNames flag (see {@link #getMatchAllSubjectAltNames
- * getMatchAllSubjectAltNames}). If the value returned is null
,
- * no subjectAlternativeNames check will be performed.
- *
- * If the value returned is not null
, it is a
- * Collection
with one entry for each name to be included in
- * the subject alternative name criterion. Each entry is a List
- * whose first entry is an Integer
(the name type, 0-8) and
- * whose second entry is a String
or a byte array (the name,
- * in string or ASN.1 DER encoded form, respectively). There can be multiple
- * names of the same type. Note that the Collection
returned
- * may contain duplicate names (same name and name type).
- *
- * Each subject alternative name in the Collection
may be
- * specified either as a String
or as an ASN.1 encoded byte
- * array. For more details about the formats used, see
- * {@link #addSubjectAlternativeName(int type, String name)
- * addSubjectAlternativeName(int type, String name)} and
- * {@link #addSubjectAlternativeName(int type, byte [] name)
- * addSubjectAlternativeName(int type, byte [] name)}.
- *
- * Note that a deep copy is performed on the Collection
to
- * protect against subsequent modifications.
- *
- * @return a Collection
of names (or null
)
- *
- * @see #setSubjectAlternativeNames
- */
- public Collection getSubjectAlternativeNames()
- {
- if (subjectAltNames != null)
- {
- return null;
- }
-
- Set returnAltNames = new HashSet();
- List returnList;
- Iterator iter = subjectAltNames.iterator();
- List obj;
- while (iter.hasNext())
- {
- obj = (List)iter.next();
- returnList = new ArrayList();
- returnList.add(obj.get(0));
- if (obj.get(1) instanceof byte[])
- {
- returnList.add(((byte[])obj.get(1)).clone());
- }
- else
- {
- returnList.add(obj.get(1));
- }
- returnAltNames.add(returnList);
- }
-
- return returnAltNames;
- }
-
- /**
- * Returns the name constraints criterion. The X509Certificate
- * must have subject and subject alternative names that meet the specified
- * name constraints.
- *
- * The name constraints are returned as a byte array. This byte array
- * contains the DER encoded form of the name constraints, as they would
- * appear in the NameConstraints structure defined in RFC 2459 and X.509.
- * The ASN.1 notation for this structure is supplied in the documentation
- * for
- * {@link #setNameConstraints(byte [] bytes) setNameConstraints(byte [] bytes)}.
- *
- * Note that the byte array returned is cloned to protect against subsequent
- * modifications.
- *
- * TODO: implement this
- *
- * @return a byte array containing the ASN.1 DER encoding of a
- * NameConstraints extension used for checking name constraints.
- * null
if no name constraints check will be
- * performed.
- *
- * @exception UnsupportedOperationException
- * because this method is not supported
- *
- * @see #setNameConstraints
- */
- public byte[] getNameConstraints()
- {
- throw new UnsupportedOperationException();
- }
-
- /**
- * Returns the basic constraints constraint. If the value is greater than or
- * equal to zero, the X509Certificates
must include a
- * basicConstraints extension with a pathLen of at least this value. If the
- * value is -2, only end-entity certificates are accepted. If the value is
- * -1, no basicConstraints check is done.
- *
- * @return the value for the basic constraints constraint
- *
- * @see #setBasicConstraints
- */
- public int getBasicConstraints()
- {
- return minMaxPathLen;
- }
-
- /**
- * Returns the policy criterion. The X509Certificate
must
- * include at least one of the specified policies in its certificate
- * policies extension. If the Set
returned is empty, then the
- * X509Certificate
must include at least some specified
- * policy in its certificate policies extension. If the Set
- * returned is null
, no policy check will be performed.
- *
- * @return an immutable Set
of certificate policy OIDs in
- * string format (or null
)
- *
- * @see #setPolicy
- */
- public Set getPolicy()
- {
- if (policy == null)
- {
- return null;
- }
-
- return Collections.unmodifiableSet(policy);
- }
-
- /**
- * Returns a copy of the pathToNames criterion. The
- * X509Certificate
must not include name constraints that
- * would prohibit building a path to the specified names. If the value
- * returned is null
, no pathToNames check will be performed.
- *
- * If the value returned is not null
, it is a
- * Collection
with one entry for each name to be included in
- * the pathToNames criterion. Each entry is a List
whose
- * first entry is an Integer
(the name type, 0-8) and whose
- * second entry is a String
or a byte array (the name, in
- * string or ASN.1 DER encoded form, respectively). There can be multiple
- * names of the same type. Note that the Collection
returned
- * may contain duplicate names (same name and name type).
- *
- * Each name in the Collection
may be specified either as a
- * String
or as an ASN.1 encoded byte array. For more details
- * about the formats used, see {@link #addPathToName(int type, String name)
- * addPathToName(int type, String name)} and
- * {@link #addPathToName(int type, byte [] name) addPathToName(int type,
- * byte [] name)}.
- *
- * Note that a deep copy is performed on the Collection
to
- * protect against subsequent modifications.
- *
- * @return a Collection
of names (or null
)
- *
- * @see #setPathToNames
- */
- public Collection getPathToNames()
- {
- if (pathToNames == null)
- {
- return null;
- }
-
- Set returnPathToNames = new HashSet();
- List returnList;
- Iterator iter = pathToNames.iterator();
- List obj;
-
- while (iter.hasNext())
- {
- obj = (List)iter.next();
- returnList = new ArrayList();
- returnList.add(obj.get(0));
- if (obj.get(1) instanceof byte[])
- {
- returnList.add(((byte[])obj.get(1)).clone());
- }
- else
- {
- returnList.add(obj.get(1));
- }
- returnPathToNames.add(returnList);
- }
-
- return returnPathToNames;
- }
-
- /**
- * Return a printable representation of the CertSelector
.
- *
- * TODO: implement output for currently unsupported options(name
- * constraints)
- *
- * Uses {@link org.spongycastle.asn1.ASN1InputStream ASN1InputStream},
- * {@link org.spongycastle.asn1.ASN1Object ASN1Object},
- * {@link org.spongycastle.asn1.x509.KeyPurposeId KeyPurposeId}
- *
- * @return a String
describing the contents of the
- * CertSelector
- */
- public String toString()
- {
- StringBuffer sb = new StringBuffer();
- sb.append("X509CertSelector: [\n");
- if (x509Cert != null)
- {
- sb.append(" Certificate: ").append(x509Cert).append('\n');
- }
- if (serialNumber != null)
- {
- sb.append(" Serial Number: ").append(serialNumber).append('\n');
- }
- if (issuerDN != null)
- {
- sb.append(" Issuer: ").append(getIssuerAsString()).append('\n');
- }
- if (subjectDN != null)
- {
- sb.append(" Subject: ").append(getSubjectAsString()).append('\n');
- }
- try
- {
- if (subjectKeyID != null)
- {
- ByteArrayInputStream inStream = new ByteArrayInputStream(
- subjectKeyID);
- ASN1InputStream derInStream = new ASN1InputStream(inStream);
- ASN1Object derObject = derInStream.readObject();
- sb.append(" Subject Key Identifier: ")
- .append(ASN1Dump.dumpAsString(derObject)).append('\n');
- }
- if (authorityKeyID != null)
- {
- ByteArrayInputStream inStream = new ByteArrayInputStream(
- authorityKeyID);
- ASN1InputStream derInStream = new ASN1InputStream(inStream);
- ASN1Object derObject = derInStream.readObject();
- sb.append(" Authority Key Identifier: ")
- .append(ASN1Dump.dumpAsString(derObject)).append('\n');
- }
- }
- catch (IOException ex)
- {
- sb.append(ex.getMessage()).append('\n');
- }
- if (certValid != null)
- {
- sb.append(" Certificate Valid: ").append(certValid).append('\n');
- }
- if (privateKeyValid != null)
- {
- sb.append(" Private Key Valid: ").append(privateKeyValid)
- .append('\n');
- }
- if (subjectKeyAlgID != null)
- {
- sb.append(" Subject Public Key AlgID: ")
- .append(subjectKeyAlgID).append('\n');
- }
- if (subjectPublicKey != null)
- {
- sb.append(" Subject Public Key: ").append(subjectPublicKey)
- .append('\n');
- }
- if (keyUsage != null)
- {
- sb.append(" Key Usage: ").append(keyUsage).append('\n');
- }
- if (keyPurposeSet != null)
- {
- sb.append(" Extended Key Usage: ").append(keyPurposeSet)
- .append('\n');
- }
- if (policy != null)
- {
- sb.append(" Policy: ").append(policy).append('\n');
- }
- sb.append(" matchAllSubjectAltNames flag: ")
- .append(matchAllSubjectAltNames).append('\n');
- if (subjectAltNamesByte != null)
- {
- sb.append(" SubjectAlternativNames: \n[");
- Iterator iter = subjectAltNamesByte.iterator();
- List obj;
- try
- {
- while (iter.hasNext())
- {
- obj = (List)iter.next();
- ByteArrayInputStream inStream = new ByteArrayInputStream(
- (byte[])obj.get(1));
- ASN1InputStream derInStream = new ASN1InputStream(inStream);
- ASN1Object derObject = derInStream.readObject();
- sb.append(" Type: ").append(obj.get(0)).append(" Data: ")
- .append(ASN1Dump.dumpAsString(derObject)).append('\n');
- }
- }
- catch (IOException ex)
- {
- sb.append(ex.getMessage()).append('\n');
- }
- sb.append("]\n");
- }
- if (pathToNamesByte != null)
- {
- sb.append(" PathToNamesNames: \n[");
- Iterator iter = pathToNamesByte.iterator();
- List obj;
- try
- {
- while (iter.hasNext())
- {
- obj = (List)iter.next();
- ByteArrayInputStream inStream = new ByteArrayInputStream(
- (byte[])obj.get(1));
- ASN1InputStream derInStream = new ASN1InputStream(inStream);
- ASN1Object derObject = derInStream.readObject();
- sb.append(" Type: ").append(obj.get(0)).append(" Data: ")
- .append(ASN1Dump.dumpAsString(derObject)).append('\n');
- }
- }
- catch (IOException ex)
- {
- sb.append(ex.getMessage()).append('\n');
- }
- sb.append("]\n");
- }
- sb.append(']');
- return sb.toString();
- }
-
- /**
- * Decides whether a Certificate
should be selected.
- *
- * TODO: implement missing tests (name constraints and path to names)
- *
- * Uses {@link org.spongycastle.asn1.ASN1InputStream ASN1InputStream},
- * {@link org.spongycastle.asn1.ASN1Sequence ASN1Sequence},
- * {@link org.spongycastle.asn1.ASN1ObjectIdentifier ASN1ObjectIdentifier},
- * {@link org.spongycastle.asn1.ASN1Object ASN1Object},
- * {@link org.spongycastle.asn1.DERGeneralizedTime DERGeneralizedTime},
- * {@link org.spongycastle.asn1.x509.X509Name X509Name},
- * {@link org.spongycastle.asn1.x509.X509Extensions X509Extensions},
- * {@link org.spongycastle.asn1.x509.ExtendedKeyUsage ExtendedKeyUsage},
- * {@link org.spongycastle.asn1.x509.KeyPurposeId KeyPurposeId},
- * {@link org.spongycastle.asn1.x509.SubjectPublicKeyInfo SubjectPublicKeyInfo},
- * {@link org.spongycastle.asn1.x509.AlgorithmIdentifier AlgorithmIdentifier}
- * to access X509 extensions
- *
- * @param cert
- * the Certificate
to be checked
- *
- * @return true
if the Certificate
should be
- * selected, false
otherwise
- */
- public boolean match(Certificate cert)
- {
- boolean[] booleanArray;
- List tempList;
- Iterator tempIter;
-
- if (!(cert instanceof X509Certificate))
- {
- return false;
- }
- X509Certificate certX509 = (X509Certificate)cert;
-
- if (x509Cert != null && !x509Cert.equals(certX509))
- {
- return false;
- }
- if (serialNumber != null
- && !serialNumber.equals(certX509.getSerialNumber()))
- {
- return false;
- }
- try
- {
- if (issuerDNX509 != null)
- {
- if (!issuerDNX509.equals(PrincipalUtil
- .getIssuerX509Principal(certX509), true))
- {
- return false;
- }
- }
- if (subjectDNX509 != null)
- {
- if (!subjectDNX509.equals(PrincipalUtil
- .getSubjectX509Principal(certX509), true))
- {
- return false;
- }
- }
- }
- catch (Exception ex)
- {
- return false;
- }
- if (subjectKeyID != null)
- {
- byte[] data = certX509
- .getExtensionValue(X509Extensions.SubjectKeyIdentifier
- .getId());
- if (data == null)
- {
- return false;
- }
- try
- {
- ByteArrayInputStream inStream = new ByteArrayInputStream(data);
- ASN1InputStream derInputStream = new ASN1InputStream(inStream);
- byte[] testData = ((ASN1OctetString)derInputStream.readObject())
- .getOctets();
- if (!Arrays.equals(subjectKeyID, testData))
- {
- return false;
- }
- }
- catch (IOException ex)
- {
- return false;
- }
- }
- if (authorityKeyID != null)
- {
- byte[] data = certX509
- .getExtensionValue(X509Extensions.AuthorityKeyIdentifier
- .getId());
- if (data == null)
- {
- return false;
- }
- try
- {
- ByteArrayInputStream inStream = new ByteArrayInputStream(data);
- ASN1InputStream derInputStream = new ASN1InputStream(inStream);
- byte[] testData = ((ASN1OctetString)derInputStream.readObject())
- .getOctets();
- if (!Arrays.equals(authorityKeyID, testData))
- {
- return false;
- }
- }
- catch (IOException ex)
- {
- return false;
- }
- }
- if (certValid != null)
- {
- if (certX509.getNotAfter() != null
- && certValid.after(certX509.getNotAfter()))
- {
- return false;
- }
- if (certX509.getNotBefore() != null
- && certValid.before(certX509.getNotBefore()))
- {
- return false;
- }
- }
- if (privateKeyValid != null)
- {
- try
- {
- byte[] data = certX509
- .getExtensionValue(X509Extensions.PrivateKeyUsagePeriod
- .getId());
- if (data != null)
- {
- ByteArrayInputStream inStream = new ByteArrayInputStream(
- data);
- ASN1InputStream derInputStream = new ASN1InputStream(inStream);
- inStream = new ByteArrayInputStream(
- ((ASN1OctetString)derInputStream.readObject())
- .getOctets());
- derInputStream = new ASN1InputStream(inStream);
- // TODO fix this, Sequence contains tagged objects
- ASN1Sequence derObject = (ASN1Sequence)derInputStream
- .readObject();
- ASN1GeneralizedTime derDate = DERGeneralizedTime
- .getInstance(derObject.getObjectAt(0));
- SimpleDateFormat dateF = new SimpleDateFormat(
- "yyyyMMddHHmmssZ");
- if (privateKeyValid.before(dateF.parse(derDate.getTime())))
- {
- return false;
- }
- derDate = DERGeneralizedTime.getInstance(derObject
- .getObjectAt(1));
- if (privateKeyValid.after(dateF.parse(derDate.getTime())))
- {
- return false;
- }
- }
- }
- catch (Exception ex)
- {
- return false;
- }
- }
- if (subjectKeyAlgID != null)
- {
- try
- {
- ByteArrayInputStream inStream = new ByteArrayInputStream(
- certX509.getPublicKey().getEncoded());
- ASN1InputStream derInputStream = new ASN1InputStream(inStream);
- SubjectPublicKeyInfo publicKeyInfo = new SubjectPublicKeyInfo(
- (ASN1Sequence)derInputStream.readObject());
- AlgorithmIdentifier algInfo = publicKeyInfo.getAlgorithmId();
- if (!algInfo.getObjectId().equals(subjectKeyAlgID))
- {
- return false;
- }
- }
- catch (Exception ex)
- {
- return false;
- }
- }
- if (subjectPublicKeyByte != null)
- {
- if (!Arrays.equals(subjectPublicKeyByte, certX509.getPublicKey()
- .getEncoded()))
- {
- return false;
- }
- }
- if (subjectPublicKey != null)
- {
- if (!subjectPublicKey.equals(certX509.getPublicKey()))
- {
- return false;
- }
- }
- if (keyUsage != null)
- {
- booleanArray = certX509.getKeyUsage();
- if (booleanArray != null)
- {
- for (int i = 0; i < keyUsage.length; i++)
- {
- if (keyUsage[i]
- && (booleanArray.length <= i || !booleanArray[i]))
- {
- return false;
- }
- }
- }
- }
- if (keyPurposeSet != null && !keyPurposeSet.isEmpty())
- {
- try
- {
- byte[] data = certX509
- .getExtensionValue(X509Extensions.ExtendedKeyUsage
- .getId());
- if (data != null)
- {
- ByteArrayInputStream inStream = new ByteArrayInputStream(
- data);
- ASN1InputStream derInputStream = new ASN1InputStream(inStream);
- ExtendedKeyUsage extendedKeyUsage = ExtendedKeyUsage.getInstance(
- (ASN1Sequence)derInputStream.readObject());
- tempIter = keyPurposeSet.iterator();
- while (tempIter.hasNext())
- {
- if (!extendedKeyUsage
- .hasKeyPurposeId((KeyPurposeId)tempIter.next()))
- {
- return false;
- }
- }
- }
- }
- catch (Exception ex)
- {
- return false;
- }
- }
- if (minMaxPathLen != -1)
- {
- if (minMaxPathLen == -2 && certX509.getBasicConstraints() != -1)
- {
- return false;
- }
- if (minMaxPathLen >= 0
- && certX509.getBasicConstraints() < minMaxPathLen)
- {
- return false;
- }
- }
- if (policyOID != null)
- {
- try
- {
- byte[] data = certX509
- .getExtensionValue(X509Extensions.CertificatePolicies
- .getId());
- if (data == null)
- {
- return false;
- }
- if (!policyOID.isEmpty())
- {
- ByteArrayInputStream inStream = new ByteArrayInputStream(
- data);
- ASN1InputStream derInputStream = new ASN1InputStream(inStream);
- inStream = new ByteArrayInputStream(
- ((ASN1OctetString)derInputStream.readObject())
- .getOctets());
- derInputStream = new ASN1InputStream(inStream);
- Enumeration policySequence = ((ASN1Sequence)derInputStream
- .readObject()).getObjects();
- ASN1Sequence policyObject;
- boolean test = false;
- while (policySequence.hasMoreElements() && !test)
- {
- policyObject = (ASN1Sequence)policySequence
- .nextElement();
- if (policyOID.contains(policyObject.getObjectAt(0)))
- {
- test = true;
- }
- }
- if (!test)
- {
- return false;
- }
- }
- }
- catch (Exception ex)
- {
- ex.printStackTrace();
- return false;
- }
- }
- if (subjectAltNamesByte != null)
- {
- try
- {
- byte[] data = certX509
- .getExtensionValue(X509Extensions.SubjectAlternativeName
- .getId());
- if (data == null)
- {
- return false;
- }
- ByteArrayInputStream inStream = new ByteArrayInputStream(data);
- ASN1InputStream derInputStream = new ASN1InputStream(inStream);
- inStream = new ByteArrayInputStream(
- ((ASN1OctetString)derInputStream.readObject())
- .getOctets());
- derInputStream = new ASN1InputStream(inStream);
- Enumeration altNamesSequence = ((ASN1Sequence)derInputStream
- .readObject()).getObjects();
- ASN1TaggedObject altNameObject;
- boolean test = false;
- Set testSet = new HashSet(subjectAltNamesByte);
- List testList;
- ASN1Object derData;
- ByteArrayOutputStream outStream;
- DEROutputStream derOutStream;
- while (altNamesSequence.hasMoreElements() && !test)
- {
- altNameObject = (ASN1TaggedObject)altNamesSequence
- .nextElement();
- testList = new ArrayList(2);
- testList.add(Integers.valueOf(altNameObject.getTagNo()));
- derData = altNameObject.getObject();
- outStream = new ByteArrayOutputStream();
- derOutStream = new DEROutputStream(outStream);
- derOutStream.writeObject(derData);
- derOutStream.close();
- testList.add(outStream.toByteArray());
-
- if (testSet.remove(testList))
- {
- test = true;
- }
-
- if (matchAllSubjectAltNames && !testSet.isEmpty())
- {
- test = false;
- }
- }
- if (!test)
- {
- return false;
- }
- }
- catch (Exception ex)
- {
- ex.printStackTrace();
- return false;
- }
- }
-
- return true;
- }
-
- /**
- * Returns a copy of this object.
- *
- * @return the copy
- */
- public Object clone()
- {
- try
- {
- X509CertSelector copy = (X509CertSelector)super.clone();
- if (issuerDN instanceof byte[])
- {
- copy.issuerDN = ((byte[])issuerDN).clone();
- }
- if (subjectDN instanceof byte[])
- {
- copy.subjectDN = ((byte[])subjectDN).clone();
- }
- if (subjectKeyID != null)
- {
- copy.subjectKeyID = (byte[])subjectKeyID.clone();
- }
- if (authorityKeyID != null)
- {
- copy.authorityKeyID = (byte[])authorityKeyID.clone();
- }
- if (subjectPublicKeyByte != null)
- {
- copy.subjectPublicKeyByte = (byte[])subjectPublicKeyByte
- .clone();
- }
- if (keyUsage != null)
- {
- copy.keyUsage = (boolean[])keyUsage.clone();
- }
- if (keyPurposeSet != null)
- {
- copy.keyPurposeSet = new HashSet(keyPurposeSet);
- }
- if (policy != null)
- {
- copy.policy = new HashSet(policy);
- copy.policyOID = new HashSet();
- Iterator iter = policyOID.iterator();
- while (iter.hasNext())
- {
- copy.policyOID.add(new ASN1ObjectIdentifier(
- ((ASN1ObjectIdentifier)iter.next()).getId()));
- }
- }
- if (subjectAltNames != null)
- {
- copy.subjectAltNames = new HashSet(getSubjectAlternativeNames());
- Iterator iter = subjectAltNamesByte.iterator();
- List obj;
- List cloneObj;
- while (iter.hasNext())
- {
- obj = (List)iter.next();
- cloneObj = new ArrayList();
- cloneObj.add(obj.get(0));
- cloneObj.add(((byte[])obj.get(1)).clone());
- copy.subjectAltNamesByte.add(cloneObj);
- }
- }
- if (pathToNames != null)
- {
- copy.pathToNames = new HashSet(getPathToNames());
- Iterator iter = pathToNamesByte.iterator();
- List obj;
- List cloneObj;
- while (iter.hasNext())
- {
- obj = (List)iter.next();
- cloneObj = new ArrayList();
- cloneObj.add(obj.get(0));
- cloneObj.add(((byte[])obj.get(1)).clone());
- copy.pathToNamesByte.add(cloneObj);
- }
- }
- return copy;
- }
- catch (CloneNotSupportedException e)
- {
- /* Cannot happen */
- throw new InternalError(e.toString());
- }
- }
-}
diff --git a/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/X509Certificate.java b/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/X509Certificate.java
deleted file mode 100644
index d56f1c6f3..000000000
--- a/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/X509Certificate.java
+++ /dev/null
@@ -1,33 +0,0 @@
-
-package java.security.cert;
-
-import java.math.BigInteger;
-import java.security.Principal;
-import java.util.Date;
-
-public abstract class X509Certificate extends Certificate
-implements X509Extension
-{
- protected X509Certificate()
- {
- super("X.509");
- }
-
- public abstract void checkValidity() throws CertificateExpiredException, CertificateNotYetValidException;
- public abstract void checkValidity(Date date) throws CertificateExpiredException, CertificateNotYetValidException;
- public abstract int getBasicConstraints();
- public abstract Principal getIssuerDN();
- public abstract boolean[] getIssuerUniqueID();
- public abstract boolean[] getKeyUsage();
- public abstract Date getNotAfter();
- public abstract Date getNotBefore();
- public abstract BigInteger getSerialNumber();
- public abstract String getSigAlgName();
- public abstract String getSigAlgOID();
- public abstract byte[] getSigAlgParams();
- public abstract byte[] getSignature();
- public abstract Principal getSubjectDN();
- public abstract boolean[] getSubjectUniqueID();
- public abstract byte[] getTBSCertificate() throws CertificateEncodingException;
- public abstract int getVersion();
-}
diff --git a/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/X509Extension.java b/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/X509Extension.java
deleted file mode 100644
index 20855be1e..000000000
--- a/extern/spongycastle/core/src/main/jdk1.1/java/security/cert/X509Extension.java
+++ /dev/null
@@ -1,12 +0,0 @@
-
-package java.security.cert;
-
-import java.util.Set;
-
-public interface X509Extension
-{
- public abstract Set getCriticalExtensionOIDs();
- public abstract byte[] getExtensionValue(String oid);
- public abstract Set getNonCriticalExtensionOIDs();
- public abstract boolean hasUnsupportedCriticalExtension();
-}
diff --git a/extern/spongycastle/core/src/main/jdk1.1/java/security/interfaces/RSAMultiPrimePrivateCrtKey.java b/extern/spongycastle/core/src/main/jdk1.1/java/security/interfaces/RSAMultiPrimePrivateCrtKey.java
deleted file mode 100644
index 0fbb0fb17..000000000
--- a/extern/spongycastle/core/src/main/jdk1.1/java/security/interfaces/RSAMultiPrimePrivateCrtKey.java
+++ /dev/null
@@ -1,67 +0,0 @@
-
-package java.security.interfaces;
-
-import java.math.BigInteger;
-import java.security.spec.RSAOtherPrimeInfo;
-
-/**
- * The interface to an RSA multi-prime private key, as defined in the
- * PKCS#1 v2.1, using the Chinese Remainder Theorem (CRT) information values.
- *
- * @since 1.4
- * @see RSAPrivateKeySpec, RSAMultiPrimePrivateCrtKeySpec, RSAPrivateKey,
- * RSAPrivateCrtKey
- */
-public interface RSAMultiPrimePrivateCrtKey
-extends RSAPrivateKey
-{
- /**
- * Returns the public exponent.
- *
- * @returns the public exponent.
- */
- public BigInteger getPublicExponent();
-
- /**
- * Returns the primeP.
- *
- * @returns the primeP.
- */
- public BigInteger getPrimeP();
-
- /**
- * Returns the primeQ.
- *
- * @returns the primeQ.
- */
- public BigInteger getPrimeQ();
-
- /**
- * Returns the primeExponentP.
- *
- * @returns the primeExponentP.
- */
- public BigInteger getPrimeExponentP();
-
- /**
- * Returns the primeExponentQ.
- *
- * @returns the primeExponentQ.
- */
- public BigInteger getPrimeExponentQ();
-
- /**
- * Returns the crtCoefficient.
- *
- * @returns the crtCoefficient.
- */
- public BigInteger getCrtCoefficient();
-
- /**
- * Returns the otherPrimeInfo or null if there are only two prime
- * factors (p and q).
- *
- * @returns the otherPrimeInfo.
- */
- public RSAOtherPrimeInfo[] getOtherPrimeInfo();
-}
diff --git a/extern/spongycastle/core/src/main/jdk1.1/java/security/interfaces/RSAPrivateCrtKey.java b/extern/spongycastle/core/src/main/jdk1.1/java/security/interfaces/RSAPrivateCrtKey.java
deleted file mode 100644
index 81855907c..000000000
--- a/extern/spongycastle/core/src/main/jdk1.1/java/security/interfaces/RSAPrivateCrtKey.java
+++ /dev/null
@@ -1,16 +0,0 @@
-
-package java.security.interfaces;
-
-import java.math.BigInteger;
-
-public interface RSAPrivateCrtKey extends RSAPrivateKey
-{
- public static final long serialVersionUID = 6034044314589513430L;
-
- public abstract BigInteger getCrtCoefficient();
- public abstract BigInteger getPrimeExponentP();
- public abstract BigInteger getPrimeExponentQ();
- public abstract BigInteger getPrimeP();
- public abstract BigInteger getPrimeQ();
- public abstract BigInteger getPublicExponent();
-}
diff --git a/extern/spongycastle/core/src/main/jdk1.1/java/security/interfaces/RSAPrivateKey.java b/extern/spongycastle/core/src/main/jdk1.1/java/security/interfaces/RSAPrivateKey.java
deleted file mode 100644
index 9b37eef93..000000000
--- a/extern/spongycastle/core/src/main/jdk1.1/java/security/interfaces/RSAPrivateKey.java
+++ /dev/null
@@ -1,13 +0,0 @@
-
-package java.security.interfaces;
-
-import java.math.BigInteger;
-import java.security.PrivateKey;
-
-public interface RSAPrivateKey extends PrivateKey
-{
- public static final long serialVersionUID = 6034044314589513430L;
-
- public abstract BigInteger getModulus();
- public abstract BigInteger getPrivateExponent();
-}
diff --git a/extern/spongycastle/core/src/main/jdk1.1/java/security/interfaces/RSAPublicKey.java b/extern/spongycastle/core/src/main/jdk1.1/java/security/interfaces/RSAPublicKey.java
deleted file mode 100644
index 6ae00ec2c..000000000
--- a/extern/spongycastle/core/src/main/jdk1.1/java/security/interfaces/RSAPublicKey.java
+++ /dev/null
@@ -1,13 +0,0 @@
-
-package java.security.interfaces;
-
-import java.math.BigInteger;
-import java.security.PublicKey;
-
-public interface RSAPublicKey extends PublicKey
-{
- public static final long serialVersionUID = 7187392471159151072L;
-
- public abstract BigInteger getModulus();
- public abstract BigInteger getPublicExponent();
-}
diff --git a/extern/spongycastle/core/src/main/jdk1.1/java/security/spec/AlgorithmParameterSpec.java b/extern/spongycastle/core/src/main/jdk1.1/java/security/spec/AlgorithmParameterSpec.java
deleted file mode 100644
index 37a03e9b2..000000000
--- a/extern/spongycastle/core/src/main/jdk1.1/java/security/spec/AlgorithmParameterSpec.java
+++ /dev/null
@@ -1,6 +0,0 @@
-
-package java.security.spec;
-
-public interface AlgorithmParameterSpec
-{
-}
diff --git a/extern/spongycastle/core/src/main/jdk1.1/java/security/spec/DSAParameterSpec.java b/extern/spongycastle/core/src/main/jdk1.1/java/security/spec/DSAParameterSpec.java
deleted file mode 100644
index a3897f8a6..000000000
--- a/extern/spongycastle/core/src/main/jdk1.1/java/security/spec/DSAParameterSpec.java
+++ /dev/null
@@ -1,34 +0,0 @@
-
-package java.security.spec;
-
-import java.math.BigInteger;
-import java.security.interfaces.DSAParams;
-
-public class DSAParameterSpec implements AlgorithmParameterSpec, DSAParams
-{
- private BigInteger p;
- private BigInteger q;
- private BigInteger g;
-
- public DSAParameterSpec(BigInteger p, BigInteger q, BigInteger g)
- {
- this.p = p;
- this.q = q;
- this.g = g;
- }
-
- public BigInteger getG()
- {
- return g;
- }
-
- public BigInteger getP()
- {
- return p;
- }
-
- public BigInteger getQ()
- {
- return q;
- }
-}
diff --git a/extern/spongycastle/core/src/main/jdk1.1/java/security/spec/DSAPrivateKeySpec.java b/extern/spongycastle/core/src/main/jdk1.1/java/security/spec/DSAPrivateKeySpec.java
deleted file mode 100644
index ff5febef6..000000000
--- a/extern/spongycastle/core/src/main/jdk1.1/java/security/spec/DSAPrivateKeySpec.java
+++ /dev/null
@@ -1,40 +0,0 @@
-
-package java.security.spec;
-
-import java.math.BigInteger;
-
-public class DSAPrivateKeySpec implements KeySpec
-{
- private BigInteger x;
- private BigInteger p;
- private BigInteger q;
- private BigInteger g;
-
- public DSAPrivateKeySpec(BigInteger x, BigInteger p, BigInteger q, BigInteger g)
- {
- this.x = x;
- this.p = p;
- this.q = q;
- this.g = g;
- }
-
- public BigInteger getG()
- {
- return g;
- }
-
- public BigInteger getP()
- {
- return p;
- }
-
- public BigInteger getQ()
- {
- return q;
- }
-
- public BigInteger getX()
- {
- return x;
- }
-}
diff --git a/extern/spongycastle/core/src/main/jdk1.1/java/security/spec/DSAPublicKeySpec.java b/extern/spongycastle/core/src/main/jdk1.1/java/security/spec/DSAPublicKeySpec.java
deleted file mode 100644
index f8ca36792..000000000
--- a/extern/spongycastle/core/src/main/jdk1.1/java/security/spec/DSAPublicKeySpec.java
+++ /dev/null
@@ -1,40 +0,0 @@
-
-package java.security.spec;
-
-import java.math.BigInteger;
-
-public class DSAPublicKeySpec implements KeySpec
-{
- private BigInteger y;
- private BigInteger p;
- private BigInteger q;
- private BigInteger g;
-
- public DSAPublicKeySpec(BigInteger y, BigInteger p, BigInteger q, BigInteger g)
- {
- this.y = y;
- this.p = p;
- this.q = q;
- this.g = g;
- }
-
- public BigInteger getG()
- {
- return g;
- }
-
- public BigInteger getP()
- {
- return p;
- }
-
- public BigInteger getQ()
- {
- return q;
- }
-
- public BigInteger getY()
- {
- return y;
- }
-}
diff --git a/extern/spongycastle/core/src/main/jdk1.1/java/security/spec/EncodedKeySpec.java b/extern/spongycastle/core/src/main/jdk1.1/java/security/spec/EncodedKeySpec.java
deleted file mode 100644
index 7295460f0..000000000
--- a/extern/spongycastle/core/src/main/jdk1.1/java/security/spec/EncodedKeySpec.java
+++ /dev/null
@@ -1,19 +0,0 @@
-
-package java.security.spec;
-
-public abstract class EncodedKeySpec implements KeySpec
-{
- private byte[] encodedKey;
-
- public EncodedKeySpec(byte[] encodedKey)
- {
- this.encodedKey = (byte[])encodedKey.clone();
- }
-
- public byte[] getEncoded()
- {
- return (byte[])encodedKey.clone();
- }
-
- public abstract String getFormat();
-}
diff --git a/extern/spongycastle/core/src/main/jdk1.1/java/security/spec/InvalidKeySpecException.java b/extern/spongycastle/core/src/main/jdk1.1/java/security/spec/InvalidKeySpecException.java
deleted file mode 100644
index cb29aee38..000000000
--- a/extern/spongycastle/core/src/main/jdk1.1/java/security/spec/InvalidKeySpecException.java
+++ /dev/null
@@ -1,16 +0,0 @@
-
-package java.security.spec;
-
-import java.security.GeneralSecurityException;
-
-public class InvalidKeySpecException extends GeneralSecurityException
-{
- public InvalidKeySpecException()
- {
- }
-
- public InvalidKeySpecException(String msg)
- {
- super(msg);
- }
-}
diff --git a/extern/spongycastle/core/src/main/jdk1.1/java/security/spec/InvalidParameterSpecException.java b/extern/spongycastle/core/src/main/jdk1.1/java/security/spec/InvalidParameterSpecException.java
deleted file mode 100644
index c8303edda..000000000
--- a/extern/spongycastle/core/src/main/jdk1.1/java/security/spec/InvalidParameterSpecException.java
+++ /dev/null
@@ -1,16 +0,0 @@
-
-package java.security.spec;
-
-import java.security.GeneralSecurityException;
-
-public class InvalidParameterSpecException extends GeneralSecurityException
-{
- public InvalidParameterSpecException()
- {
- }
-
- public InvalidParameterSpecException(String msg)
- {
- super(msg);
- }
-}
diff --git a/extern/spongycastle/core/src/main/jdk1.1/java/security/spec/KeySpec.java b/extern/spongycastle/core/src/main/jdk1.1/java/security/spec/KeySpec.java
deleted file mode 100644
index cfa7cb92f..000000000
--- a/extern/spongycastle/core/src/main/jdk1.1/java/security/spec/KeySpec.java
+++ /dev/null
@@ -1,6 +0,0 @@
-
-package java.security.spec;
-
-public interface KeySpec
-{
-}
diff --git a/extern/spongycastle/core/src/main/jdk1.1/java/security/spec/PKCS8EncodedKeySpec.java b/extern/spongycastle/core/src/main/jdk1.1/java/security/spec/PKCS8EncodedKeySpec.java
deleted file mode 100644
index 10c5f66c2..000000000
--- a/extern/spongycastle/core/src/main/jdk1.1/java/security/spec/PKCS8EncodedKeySpec.java
+++ /dev/null
@@ -1,20 +0,0 @@
-
-package java.security.spec;
-
-public class PKCS8EncodedKeySpec extends EncodedKeySpec
-{
- public PKCS8EncodedKeySpec(byte[] encodedKey)
- {
- super(encodedKey);
- }
-
- public byte[] getEncoded()
- {
- return super.getEncoded();
- }
-
- public final String getFormat()
- {
- return "PKCS#8";
- }
-}
diff --git a/extern/spongycastle/core/src/main/jdk1.1/java/security/spec/PSSParameterSpec.java b/extern/spongycastle/core/src/main/jdk1.1/java/security/spec/PSSParameterSpec.java
deleted file mode 100644
index c4b4989cd..000000000
--- a/extern/spongycastle/core/src/main/jdk1.1/java/security/spec/PSSParameterSpec.java
+++ /dev/null
@@ -1,45 +0,0 @@
-
-package java.security.spec;
-
-/**
- * This class specifies a parameter spec for RSA PSS encoding scheme,
- * as defined in the PKCS#1 v2.1.
- *
- * @since 1.4
- * @see AlgorithmParameterSpec, Signature
- */
-public class PSSParameterSpec
- extends Object
- implements AlgorithmParameterSpec
-{
- private int saltLen;
-
- /**
- * Creates a new PSSParameterSpec given the salt length as defined
- * in PKCS#1.
- *
- * @param saltLen - the length of salt in bits to be used in PKCS#1
- * PSS encoding.
- * @throws IllegalArgumentException - if saltLen is less than 0.
- */
- public PSSParameterSpec(int saltLen)
- {
- if ( saltLen < 0 )
- {
- throw new IllegalArgumentException("Salt length must be >= 0");
- }
-
- this.saltLen = saltLen;
- }
-
- /**
- * Returns the salt length in bits.
- *
- * @returns the salt length.
- */
- public int getSaltLength()
- {
- return saltLen;
- }
-}
-
diff --git a/extern/spongycastle/core/src/main/jdk1.1/java/security/spec/RSAKeyGenParameterSpec.java b/extern/spongycastle/core/src/main/jdk1.1/java/security/spec/RSAKeyGenParameterSpec.java
deleted file mode 100644
index 756c6c0fd..000000000
--- a/extern/spongycastle/core/src/main/jdk1.1/java/security/spec/RSAKeyGenParameterSpec.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package java.security.spec;
-
-import java.math.BigInteger;
-
-/**
- * specifies parameters to be used for the generation of
- * a RSA key pair.
- */
-public class RSAKeyGenParameterSpec
- implements AlgorithmParameterSpec
-{
- static BigInteger F0 = BigInteger.valueOf(3);
- static BigInteger F4 = BigInteger.valueOf(65537);
-
- private int keysize;
- private BigInteger publicExponent;
-
- public RSAKeyGenParameterSpec(
- int keysize,
- BigInteger publicExponent)
- {
- this.keysize = keysize;
- this.publicExponent = publicExponent;
- }
-
- public int getKeysize()
- {
- return keysize;
- }
-
- public BigInteger getPublicExponent()
- {
- return publicExponent;
- }
-}
diff --git a/extern/spongycastle/core/src/main/jdk1.1/java/security/spec/RSAMultiPrimePrivateCrtKeySpec.java b/extern/spongycastle/core/src/main/jdk1.1/java/security/spec/RSAMultiPrimePrivateCrtKeySpec.java
deleted file mode 100644
index 53c3a8a51..000000000
--- a/extern/spongycastle/core/src/main/jdk1.1/java/security/spec/RSAMultiPrimePrivateCrtKeySpec.java
+++ /dev/null
@@ -1,159 +0,0 @@
-
-package java.security.spec;
-
-import java.math.BigInteger;
-
-/**
- * This class specifies an RSA multi-prime private key, as defined in
- * the PKCS#1 v2.1, using the Chinese Remainder Theorem (CRT) information
- * values for efficiency.
- *
- * @since 1.4
- * @see Key, KeyFactory, KeySpec, PKCS8EncodedKeySpec, RSAPrivateKeySpec,
- * RSAPublicKeySpec, RSAOtherPrimeInfo
- */
-public class RSAMultiPrimePrivateCrtKeySpec
- extends RSAPrivateKeySpec
-{
- private BigInteger publicExponent;
- private BigInteger privateExponent;
- private BigInteger primeP;
- private BigInteger primeQ;
- private BigInteger primeExponentP;
- private BigInteger primeExponentQ;
- private BigInteger crtCoefficient;
- private RSAOtherPrimeInfo[] otherPrimeInfo;
-
- /**
- * Creates a new RSAMultiPrimePrivateCrtKeySpec given the modulus,
- * publicExponent, privateExponent, primeP, primeQ, primeExponentP,
- * primeExponentQ, crtCoefficient, and otherPrimeInfo as defined in
- * PKCS#1 v2.1.
- *
- * Note that otherPrimeInfo is cloned when constructing this object.
- *
- * @param modulus - the modulus n.
- * @param publicExponent - the public exponent e.
- * @param privateExponent - the private exponent d.
- * @param primeP - the prime factor p of n.
- * @param primeQ - the prime factor q of n.
- * @param primeExponentP - this is d mod (p-1).
- * @param primeExponentQ - this is d mod (q-1).
- * @param crtCoefficient - the Chinese Remainder Theorem coefficient q-1
- * mod p.
- * @param otherPrimeInfo - triplets of the rest of primes, null can be
- * specified if there are only two prime factors (p and q).
- * @throws NullPointerException - if any of the parameters, i.e. modulus,
- * publicExponent, privateExponent, primeP, primeQ, primeExponentP,
- * primeExponentQ, crtCoefficient, is null.
- * @throws IllegalArgumentException - if an empty, i.e. 0-length,
- * otherPrimeInfo is specified.
- */
- public RSAMultiPrimePrivateCrtKeySpec(
- BigInteger modulus,
- BigInteger publicExponent,
- BigInteger privateExponent,
- BigInteger primeP,
- BigInteger primeQ,
- BigInteger primeExponentP,
- BigInteger primeExponentQ,
- BigInteger crtCoefficient,
- RSAOtherPrimeInfo[] otherPrimeInfo)
- {
- super(modulus, privateExponent);
-
- if ( publicExponent == null || primeP == null || primeQ == null
- || primeExponentP == null || primeExponentQ == null
- || crtCoefficient == null )
- {
- throw new NullPointerException("Invalid null argument");
- }
-
- if ( otherPrimeInfo != null )
- {
- if ( otherPrimeInfo.length == 0 )
- {
- throw new IllegalArgumentException("Invalid length for otherPrimeInfo");
- }
-
- this.otherPrimeInfo = (RSAOtherPrimeInfo[])otherPrimeInfo.clone();
- }
- }
-
- /**
- * Returns the public exponent.
- *
- * @returns the public exponent.
- */
- public BigInteger getPublicExponent()
- {
- return publicExponent;
- }
-
- /**
- * Returns the primeP.
- *
- * @returns the primeP.
- */
- public BigInteger getPrimeP()
- {
- return primeP;
- }
-
- /**
- * Returns the primeQ.
- *
- * @returns the primeQ.
- */
- public BigInteger getPrimeQ()
- {
- return primeQ;
- }
-
- /**
- * Returns the primeExponentP.
- *
- * @returns the primeExponentP.
- */
- public BigInteger getPrimeExponentP()
- {
- return primeExponentP;
- }
-
- /**
- * Returns the primeExponentQ.
- *
- * @returns the primeExponentQ.
- */
- public BigInteger getPrimeExponentQ()
- {
- return primeExponentQ;
- }
-
- /**
- * Returns the crtCofficient.
- *
- * @returns the crtCofficient.
- */
- public BigInteger getCrtCoefficient()
- {
- return crtCoefficient;
- }
-
- /**
- * Returns a copy of the otherPrimeInfo or null if there are only
- * two prime factors (p and q).
- *
- * @returns the otherPrimeInfo.
- */
- public RSAOtherPrimeInfo[] getOtherPrimeInfo()
- {
- if ( otherPrimeInfo != null )
- {
- return (RSAOtherPrimeInfo[])otherPrimeInfo.clone();
- }
-
- return null;
- }
-}
-
diff --git a/extern/spongycastle/core/src/main/jdk1.1/java/security/spec/RSAOtherPrimeInfo.java b/extern/spongycastle/core/src/main/jdk1.1/java/security/spec/RSAOtherPrimeInfo.java
deleted file mode 100644
index 4d0e1468e..000000000
--- a/extern/spongycastle/core/src/main/jdk1.1/java/security/spec/RSAOtherPrimeInfo.java
+++ /dev/null
@@ -1,80 +0,0 @@
-
-package java.security.spec;
-
-import java.math.BigInteger;
-
-/**
- * This class represents the triplet (prime, exponent, and coefficient)
- * inside RSA's OtherPrimeInfo structure, as defined in the PKCS#1 v2.1.
- * The ASN.1 syntax of RSA's OtherPrimeInfo is as follows:
- *
- *
- * OtherPrimeInfo ::= SEQUENCE {
- * prime INTEGER,
- * exponent INTEGER,
- * coefficient INTEGER
- * }
- *
- */
-public class RSAOtherPrimeInfo
-extends Object
-{
- private BigInteger prime;
- private BigInteger primeExponent;
- private BigInteger crtCoefficient;
-
- /**
- * Creates a new RSAOtherPrimeInfo given the prime, primeExponent,
- * and crtCoefficient as defined in PKCS#1.
- *
- * @param prime - the prime factor of n.
- * @param primeExponent - the exponent.
- * @param crtCoefficient - the Chinese Remainder Theorem coefficient.
- * @throws NullPointerException - if any of the parameters, i.e. prime,
- * primeExponent, crtCoefficient, is null.
- */
- public RSAOtherPrimeInfo(
- BigInteger prime,
- BigInteger primeExponent,
- BigInteger crtCoefficient)
- {
- if ( prime == null || primeExponent == null || crtCoefficient == null )
- {
- throw new NullPointerException("Null parameter");
- }
-
- this.prime = prime;
- this.primeExponent = primeExponent;
- this.crtCoefficient = crtCoefficient;
- }
-
- /**
- * Returns the prime.
- *
- * @returns the prime.
- */
- public final BigInteger getPrime()
- {
- return prime;
- }
-
- /**
- * Returns the prime's exponent.
- *
- * @returns the primeExponent.
- */
- public final BigInteger getExponent()
- {
- return primeExponent;
- }
-
- /**
- * Returns the prime's crtCoefficient.
- *
- * @returns the crtCoefficient.
- */
- public final BigInteger getCrtCoefficient()
- {
- return crtCoefficient;
- }
-}
diff --git a/extern/spongycastle/core/src/main/jdk1.1/java/security/spec/RSAPrivateCrtKeySpec.java b/extern/spongycastle/core/src/main/jdk1.1/java/security/spec/RSAPrivateCrtKeySpec.java
deleted file mode 100644
index b9d450ad7..000000000
--- a/extern/spongycastle/core/src/main/jdk1.1/java/security/spec/RSAPrivateCrtKeySpec.java
+++ /dev/null
@@ -1,64 +0,0 @@
-
-package java.security.spec;
-
-import java.math.BigInteger;
-
-public class RSAPrivateCrtKeySpec extends RSAPrivateKeySpec
-{
- private BigInteger publicExponent;
- private BigInteger primeP;
- private BigInteger primeQ;
- private BigInteger primeExponentP;
- private BigInteger primeExponentQ;
- private BigInteger crtCoefficient;
-
- public RSAPrivateCrtKeySpec(
- BigInteger modulus,
- BigInteger publicExponent,
- BigInteger privateExponent,
- BigInteger primeP,
- BigInteger primeQ,
- BigInteger primeExponentP,
- BigInteger primeExponentQ,
- BigInteger crtCoefficient)
- {
- super(modulus, privateExponent);
-
- this.publicExponent = publicExponent;
- this.primeP = primeP;
- this.primeQ = primeQ;
- this.primeExponentP = primeExponentP;
- this.primeExponentQ = primeExponentQ;
- this.crtCoefficient = crtCoefficient;
- }
-
- public BigInteger getCrtCoefficient()
- {
- return crtCoefficient;
- }
-
- public BigInteger getPrimeExponentP()
- {
- return primeExponentP;
- }
-
- public BigInteger getPrimeExponentQ()
- {
- return primeExponentQ;
- }
-
- public BigInteger getPrimeP()
- {
- return primeP;
- }
-
- public BigInteger getPrimeQ()
- {
- return primeQ;
- }
-
- public BigInteger getPublicExponent()
- {
- return publicExponent;
- }
-}
diff --git a/extern/spongycastle/core/src/main/jdk1.1/java/security/spec/RSAPrivateKeySpec.java b/extern/spongycastle/core/src/main/jdk1.1/java/security/spec/RSAPrivateKeySpec.java
deleted file mode 100644
index 88dc4c159..000000000
--- a/extern/spongycastle/core/src/main/jdk1.1/java/security/spec/RSAPrivateKeySpec.java
+++ /dev/null
@@ -1,28 +0,0 @@
-
-package java.security.spec;
-
-import java.math.BigInteger;
-
-public class RSAPrivateKeySpec extends Object implements KeySpec
-{
- private BigInteger modulus;
- private BigInteger privateExponent;
-
- public RSAPrivateKeySpec(
- BigInteger modulus,
- BigInteger privateExponent)
- {
- this.modulus = modulus;
- this.privateExponent = privateExponent;
- }
-
- public BigInteger getModulus()
- {
- return modulus;
- }
-
- public BigInteger getPrivateExponent()
- {
- return privateExponent;
- }
-}
diff --git a/extern/spongycastle/core/src/main/jdk1.1/java/security/spec/RSAPublicKeySpec.java b/extern/spongycastle/core/src/main/jdk1.1/java/security/spec/RSAPublicKeySpec.java
deleted file mode 100644
index b3a367e7e..000000000
--- a/extern/spongycastle/core/src/main/jdk1.1/java/security/spec/RSAPublicKeySpec.java
+++ /dev/null
@@ -1,28 +0,0 @@
-
-package java.security.spec;
-
-import java.math.BigInteger;
-
-public class RSAPublicKeySpec extends Object implements KeySpec
-{
- private BigInteger modulus;
- private BigInteger publicExponent;
-
- public RSAPublicKeySpec(
- BigInteger modulus,
- BigInteger publicExponent)
- {
- this.modulus = modulus;
- this.publicExponent = publicExponent;
- }
-
- public BigInteger getModulus()
- {
- return modulus;
- }
-
- public BigInteger getPublicExponent()
- {
- return publicExponent;
- }
-}
diff --git a/extern/spongycastle/core/src/main/jdk1.1/java/security/spec/X509EncodedKeySpec.java b/extern/spongycastle/core/src/main/jdk1.1/java/security/spec/X509EncodedKeySpec.java
deleted file mode 100644
index 1d095b11d..000000000
--- a/extern/spongycastle/core/src/main/jdk1.1/java/security/spec/X509EncodedKeySpec.java
+++ /dev/null
@@ -1,20 +0,0 @@
-
-package java.security.spec;
-
-public class X509EncodedKeySpec extends EncodedKeySpec
-{
- public X509EncodedKeySpec(byte[] encodedKey)
- {
- super(encodedKey);
- }
-
- public byte[] getEncoded()
- {
- return super.getEncoded();
- }
-
- public final String getFormat()
- {
- return "X.509";
- }
-}
diff --git a/extern/spongycastle/core/src/main/jdk1.1/java/util/AbstractCollection.java b/extern/spongycastle/core/src/main/jdk1.1/java/util/AbstractCollection.java
deleted file mode 100644
index 0ea61b772..000000000
--- a/extern/spongycastle/core/src/main/jdk1.1/java/util/AbstractCollection.java
+++ /dev/null
@@ -1,242 +0,0 @@
-package java.util;
-
-import java.lang.reflect.Array;
-/**
- * Title:
- * Description:
- * Copyright: Copyright (c) 2001
- * Company:
- * @version 1.0
- */
-
-
-public abstract class AbstractCollection implements Collection
- {
- protected AbstractCollection()
- {
- }
-
- public abstract Iterator iterator();
-
- public abstract int size();
-
- public boolean isEmpty()
- {
- return size()==0;
- }
-
- public boolean contains(Object o)
- {
- Iterator it=iterator();
- while(it.hasNext())
- {
- Object e=it.next();
- if(o==null)
- {
- if(e==null)
- return true;
- }
- else
- {
- if(o.equals(e))
- return true;
- }
- }
- return false;
- }
-
- public Object[] toArray()
- {
- Object[] arObjects=new Object[size()];
- Iterator it=iterator();
- int i=0;
- while(it.hasNext())
- {
- arObjects[i++]=it.next();
- }
- return arObjects;
- }
-
- public Object[] toArray(Object[] a) throws NullPointerException,ArrayStoreException
- //TODO: Check if this is realy compatible to SUN!!!
- {
- if(a==null)
- throw new NullPointerException();
-
- if (isEmpty()) return a;
- Object[] arObjects=null;
- int size=size();
- if(a.length
- *
- *
- *
- * Each side should derive a session key from the keying material returned by {@link #calculateKeyingMaterial()}.
- * The caller is responsible for deriving the session key using a secure key derivation function (KDF).
- *
- *
- * Round 3 is an optional key confirmation process.
- * If you do not execute round 3, then there is no assurance that both participants are using the same key.
- * (i.e. if the participants used different passwords, then their session keys will differ.)
- *
- *
- * If the round 3 validation succeeds, then the keys are guaranteed to be the same on both sides.
- *
- *
- * The symmetric design can easily support the asymmetric cases when one party initiates the communication.
- * e.g. Sometimes the round1 payload and round2 payload may be sent in one pass.
- * Also, in some cases, the key confirmation payload can be sent together with the round2 payload.
- * These are the trivial techniques to optimize the communication.
- *
- *
- * The key confirmation process is implemented as specified in
- * NIST SP 800-56A Revision 1,
- * Section 8.2 Unilateral Key Confirmation for Key Agreement Schemes.
- *
- *
- * This class is stateful and NOT threadsafe.
- * Each instance should only be used for ONE complete J-PAKE exchange
- * (i.e. a new {@link JPAKEParticipant} should be constructed for each new J-PAKE exchange).
- *
- *
- * See {@link JPAKEExample} for example usage.
- */
-public class JPAKEParticipant
-{
- /*
- * Possible internal states. Used for state checking.
- */
-
- public static final int STATE_INITIALIZED = 0;
- public static final int STATE_ROUND_1_CREATED = 10;
- public static final int STATE_ROUND_1_VALIDATED = 20;
- public static final int STATE_ROUND_2_CREATED = 30;
- public static final int STATE_ROUND_2_VALIDATED = 40;
- public static final int STATE_KEY_CALCULATED = 50;
- public static final int STATE_ROUND_3_CREATED = 60;
- public static final int STATE_ROUND_3_VALIDATED = 70;
-
- /**
- * Unique identifier of this participant.
- * The two participants in the exchange must NOT share the same id.
- */
- private String participantId;
-
- /**
- * Shared secret. This only contains the secret between construction
- * and the call to {@link #calculateKeyingMaterial()}.
- *
- * i.e. When {@link #calculateKeyingMaterial()} is called, this buffer overwritten with 0's,
- * and the field is set to null.
- */
- private char[] password;
-
- /**
- * Digest to use during calculations.
- */
- private Digest digest;
-
- /**
- * Source of secure random data.
- */
- private SecureRandom random;
-
- private BigInteger p;
- private BigInteger q;
- private BigInteger g;
-
- /**
- * The participantId of the other participant in this exchange.
- */
- private String partnerParticipantId;
-
- /**
- * Alice's x1 or Bob's x3.
- */
- private BigInteger x1;
- /**
- * Alice's x2 or Bob's x4.
- */
- private BigInteger x2;
- /**
- * Alice's g^x1 or Bob's g^x3.
- */
- private BigInteger gx1;
- /**
- * Alice's g^x2 or Bob's g^x4.
- */
- private BigInteger gx2;
- /**
- * Alice's g^x3 or Bob's g^x1.
- */
- private BigInteger gx3;
- /**
- * Alice's g^x4 or Bob's g^x2.
- */
- private BigInteger gx4;
- /**
- * Alice's B or Bob's A.
- */
- private BigInteger b;
-
- /**
- * The current state.
- * See the STATE_* constants for possible values.
- */
- private int state;
-
- /**
- * Convenience constructor for a new {@link JPAKEParticipant} that uses
- * the {@link JPAKEPrimeOrderGroups#NIST_3072} prime order group,
- * a SHA-256 digest, and a default {@link SecureRandom} implementation.
- *
- * After construction, the {@link #getState() state} will be {@link #STATE_INITIALIZED}.
- *
- * @param participantId unique identifier of this participant.
- * The two participants in the exchange must NOT share the same id.
- * @param password shared secret.
- * A defensive copy of this array is made (and cleared once {@link #calculateKeyingMaterial()} is called).
- * Caller should clear the input password as soon as possible.
- * @throws NullPointerException if any argument is null
- * @throws IllegalArgumentException if password is empty
- */
- public JPAKEParticipant(
- String participantId,
- char[] password)
- {
- this(
- participantId,
- password,
- JPAKEPrimeOrderGroups.NIST_3072);
- }
-
-
- /**
- * Convenience constructor for a new {@link JPAKEParticipant} that uses
- * a SHA-256 digest and a default {@link SecureRandom} implementation.
- *
- * After construction, the {@link #getState() state} will be {@link #STATE_INITIALIZED}.
- *
- * @param participantId unique identifier of this participant.
- * The two participants in the exchange must NOT share the same id.
- * @param password shared secret.
- * A defensive copy of this array is made (and cleared once {@link #calculateKeyingMaterial()} is called).
- * Caller should clear the input password as soon as possible.
- * @param group prime order group.
- * See {@link JPAKEPrimeOrderGroups} for standard groups
- * @throws NullPointerException if any argument is null
- * @throws IllegalArgumentException if password is empty
- */
- public JPAKEParticipant(
- String participantId,
- char[] password,
- JPAKEPrimeOrderGroup group)
- {
- this(
- participantId,
- password,
- group,
- new SHA256Digest(),
- new SecureRandom());
- }
-
-
- /**
- * Construct a new {@link JPAKEParticipant}.
- *
- * After construction, the {@link #getState() state} will be {@link #STATE_INITIALIZED}.
- *
- * @param participantId unique identifier of this participant.
- * The two participants in the exchange must NOT share the same id.
- * @param password shared secret.
- * A defensive copy of this array is made (and cleared once {@link #calculateKeyingMaterial()} is called).
- * Caller should clear the input password as soon as possible.
- * @param group prime order group.
- * See {@link JPAKEPrimeOrderGroups} for standard groups
- * @param digest digest to use during zero knowledge proofs and key confirmation (SHA-256 or stronger preferred)
- * @param random source of secure random data for x1 and x2, and for the zero knowledge proofs
- * @throws NullPointerException if any argument is null
- * @throws IllegalArgumentException if password is empty
- */
- public JPAKEParticipant(
- String participantId,
- char[] password,
- JPAKEPrimeOrderGroup group,
- Digest digest,
- SecureRandom random)
- {
- JPAKEUtil.validateNotNull(participantId, "participantId");
- JPAKEUtil.validateNotNull(password, "password");
- JPAKEUtil.validateNotNull(group, "p");
- JPAKEUtil.validateNotNull(digest, "digest");
- JPAKEUtil.validateNotNull(random, "random");
- if (password.length == 0)
- {
- throw new IllegalArgumentException("Password must not be empty.");
- }
-
- this.participantId = participantId;
-
- /*
- * Create a defensive copy so as to fully encapsulate the password.
- *
- * This array will contain the password for the lifetime of this
- * participant BEFORE {@link #calculateKeyingMaterial()} is called.
- *
- * i.e. When {@link #calculateKeyingMaterial()} is called, the array will be cleared
- * in order to remove the password from memory.
- *
- * The caller is responsible for clearing the original password array
- * given as input to this constructor.
- */
- this.password = Arrays.copyOf(password, password.length);
-
- this.p = group.getP();
- this.q = group.getQ();
- this.g = group.getG();
-
- this.digest = digest;
- this.random = random;
-
- this.state = STATE_INITIALIZED;
- }
-
- /**
- * Gets the current state of this participant.
- * See the STATE_* constants for possible values.
- */
- public int getState()
- {
- return this.state;
- }
-
- /**
- * Creates and returns the payload to send to the other participant during round 1.
- *
- *
- * After execution, the {@link #getState() state} will be {@link #STATE_ROUND_1_CREATED}.
- */
- public JPAKERound1Payload createRound1PayloadToSend()
- {
- if (this.state >= STATE_ROUND_1_CREATED)
- {
- throw new IllegalStateException("Round1 payload already created for " + participantId);
- }
-
- this.x1 = JPAKEUtil.generateX1(q, random);
- this.x2 = JPAKEUtil.generateX2(q, random);
-
- this.gx1 = JPAKEUtil.calculateGx(p, g, x1);
- this.gx2 = JPAKEUtil.calculateGx(p, g, x2);
- BigInteger[] knowledgeProofForX1 = JPAKEUtil.calculateZeroKnowledgeProof(p, q, g, gx1, x1, participantId, digest, random);
- BigInteger[] knowledgeProofForX2 = JPAKEUtil.calculateZeroKnowledgeProof(p, q, g, gx2, x2, participantId, digest, random);
-
- this.state = STATE_ROUND_1_CREATED;
-
- return new JPAKERound1Payload(participantId, gx1, gx2, knowledgeProofForX1, knowledgeProofForX2);
- }
-
- /**
- * Validates the payload received from the other participant during round 1.
- *
- *
- * Must be called prior to {@link #createRound2PayloadToSend()}.
- *
- *
- * After execution, the {@link #getState() state} will be {@link #STATE_ROUND_1_VALIDATED}.
- *
- * @throws CryptoException if validation fails.
- * @throws IllegalStateException if called multiple times.
- */
- public void validateRound1PayloadReceived(JPAKERound1Payload round1PayloadReceived)
- throws CryptoException
- {
- if (this.state >= STATE_ROUND_1_VALIDATED)
- {
- throw new IllegalStateException("Validation already attempted for round1 payload for" + participantId);
- }
- this.partnerParticipantId = round1PayloadReceived.getParticipantId();
- this.gx3 = round1PayloadReceived.getGx1();
- this.gx4 = round1PayloadReceived.getGx2();
-
- BigInteger[] knowledgeProofForX3 = round1PayloadReceived.getKnowledgeProofForX1();
- BigInteger[] knowledgeProofForX4 = round1PayloadReceived.getKnowledgeProofForX2();
-
- JPAKEUtil.validateParticipantIdsDiffer(participantId, round1PayloadReceived.getParticipantId());
- JPAKEUtil.validateGx4(gx4);
- JPAKEUtil.validateZeroKnowledgeProof(p, q, g, gx3, knowledgeProofForX3, round1PayloadReceived.getParticipantId(), digest);
- JPAKEUtil.validateZeroKnowledgeProof(p, q, g, gx4, knowledgeProofForX4, round1PayloadReceived.getParticipantId(), digest);
-
- this.state = STATE_ROUND_1_VALIDATED;
- }
-
- /**
- * Creates and returns the payload to send to the other participant during round 2.
- *
- *
- * {@link #validateRound1PayloadReceived(JPAKERound1Payload)} must be called prior to this method.
- *
- *
- * After execution, the {@link #getState() state} will be {@link #STATE_ROUND_2_CREATED}.
- *
- * @throws IllegalStateException if called prior to {@link #validateRound1PayloadReceived(JPAKERound1Payload)}, or multiple times
- */
- public JPAKERound2Payload createRound2PayloadToSend()
- {
- if (this.state >= STATE_ROUND_2_CREATED)
- {
- throw new IllegalStateException("Round2 payload already created for " + this.participantId);
- }
- if (this.state < STATE_ROUND_1_VALIDATED)
- {
- throw new IllegalStateException("Round1 payload must be validated prior to creating Round2 payload for " + this.participantId);
- }
- BigInteger gA = JPAKEUtil.calculateGA(p, gx1, gx3, gx4);
- BigInteger s = JPAKEUtil.calculateS(password);
- BigInteger x2s = JPAKEUtil.calculateX2s(q, x2, s);
- BigInteger A = JPAKEUtil.calculateA(p, q, gA, x2s);
- BigInteger[] knowledgeProofForX2s = JPAKEUtil.calculateZeroKnowledgeProof(p, q, gA, A, x2s, participantId, digest, random);
-
- this.state = STATE_ROUND_2_CREATED;
-
- return new JPAKERound2Payload(participantId, A, knowledgeProofForX2s);
- }
-
- /**
- * Validates the payload received from the other participant during round 2.
- *
- *
- * Note that this DOES NOT detect a non-common password.
- * The only indication of a non-common password is through derivation
- * of different keys (which can be detected explicitly by executing round 3 and round 4)
- *
- *
- * Must be called prior to {@link #calculateKeyingMaterial()}.
- *
- *
- * After execution, the {@link #getState() state} will be {@link #STATE_ROUND_2_VALIDATED}.
- *
- * @throws CryptoException if validation fails.
- * @throws IllegalStateException if called prior to {@link #validateRound1PayloadReceived(JPAKERound1Payload)}, or multiple times
- */
- public void validateRound2PayloadReceived(JPAKERound2Payload round2PayloadReceived)
- throws CryptoException
- {
- if (this.state >= STATE_ROUND_2_VALIDATED)
- {
- throw new IllegalStateException("Validation already attempted for round2 payload for" + participantId);
- }
- if (this.state < STATE_ROUND_1_VALIDATED)
- {
- throw new IllegalStateException("Round1 payload must be validated prior to validating Round2 payload for " + this.participantId);
- }
- BigInteger gB = JPAKEUtil.calculateGA(p, gx3, gx1, gx2);
- this.b = round2PayloadReceived.getA();
- BigInteger[] knowledgeProofForX4s = round2PayloadReceived.getKnowledgeProofForX2s();
-
- JPAKEUtil.validateParticipantIdsDiffer(participantId, round2PayloadReceived.getParticipantId());
- JPAKEUtil.validateParticipantIdsEqual(this.partnerParticipantId, round2PayloadReceived.getParticipantId());
- JPAKEUtil.validateGa(gB);
- JPAKEUtil.validateZeroKnowledgeProof(p, q, gB, b, knowledgeProofForX4s, round2PayloadReceived.getParticipantId(), digest);
-
- this.state = STATE_ROUND_2_VALIDATED;
- }
-
- /**
- * Calculates and returns the key material.
- * A session key must be derived from this key material using a secure key derivation function (KDF).
- * The KDF used to derive the key is handled externally (i.e. not by {@link JPAKEParticipant}).
- *
- *
- * The keying material will be identical for each participant if and only if
- * each participant's password is the same. i.e. If the participants do not
- * share the same password, then each participant will derive a different key.
- * Therefore, if you immediately start using a key derived from
- * the keying material, then you must handle detection of incorrect keys.
- * If you want to handle this detection explicitly, you can optionally perform
- * rounds 3 and 4. See {@link JPAKEParticipant} for details on how to execute
- * rounds 3 and 4.
- *
- *
- * The keying material will be in the range [0, p-1].
- *
- *
- * {@link #validateRound2PayloadReceived(JPAKERound2Payload)} must be called prior to this method.
- *
- *
- * As a side effect, the internal {@link #password} array is cleared, since it is no longer needed.
- *
- *
- * After execution, the {@link #getState() state} will be {@link #STATE_KEY_CALCULATED}.
- *
- * @throws IllegalStateException if called prior to {@link #validateRound2PayloadReceived(JPAKERound2Payload)},
- * or if called multiple times.
- */
- public BigInteger calculateKeyingMaterial()
- {
- if (this.state >= STATE_KEY_CALCULATED)
- {
- throw new IllegalStateException("Key already calculated for " + participantId);
- }
- if (this.state < STATE_ROUND_2_VALIDATED)
- {
- throw new IllegalStateException("Round2 payload must be validated prior to creating key for " + participantId);
- }
- BigInteger s = JPAKEUtil.calculateS(password);
-
- /*
- * Clear the password array from memory, since we don't need it anymore.
- *
- * Also set the field to null as a flag to indicate that the key has already been calculated.
- */
- Arrays.fill(password, (char)0);
- this.password = null;
-
- BigInteger keyingMaterial = JPAKEUtil.calculateKeyingMaterial(p, q, gx4, x2, s, b);
-
- /*
- * Clear the ephemeral private key fields as well.
- * Note that we're relying on the garbage collector to do its job to clean these up.
- * The old objects will hang around in memory until the garbage collector destroys them.
- *
- * If the ephemeral private keys x1 and x2 are leaked,
- * the attacker might be able to brute-force the password.
- */
- this.x1 = null;
- this.x2 = null;
- this.b = null;
-
- /*
- * Do not clear gx* yet, since those are needed by round 3.
- */
-
- this.state = STATE_KEY_CALCULATED;
-
- return keyingMaterial;
- }
-
-
- /**
- * Creates and returns the payload to send to the other participant during round 3.
- *
- *
- * See {@link JPAKEParticipant} for more details on round 3.
- *
- *
- * After execution, the {@link #getState() state} will be {@link #STATE_ROUND_3_CREATED}.
- *
- * @param keyingMaterial The keying material as returned from {@link #calculateKeyingMaterial()}.
- * @throws IllegalStateException if called prior to {@link #calculateKeyingMaterial()}, or multiple times
- */
- public JPAKERound3Payload createRound3PayloadToSend(BigInteger keyingMaterial)
- {
- if (this.state >= STATE_ROUND_3_CREATED)
- {
- throw new IllegalStateException("Round3 payload already created for " + this.participantId);
- }
- if (this.state < STATE_KEY_CALCULATED)
- {
- throw new IllegalStateException("Keying material must be calculated prior to creating Round3 payload for " + this.participantId);
- }
-
- BigInteger macTag = JPAKEUtil.calculateMacTag(
- this.participantId,
- this.partnerParticipantId,
- this.gx1,
- this.gx2,
- this.gx3,
- this.gx4,
- keyingMaterial,
- this.digest);
-
- this.state = STATE_ROUND_3_CREATED;
-
- return new JPAKERound3Payload(participantId, macTag);
- }
-
- /**
- * Validates the payload received from the other participant during round 3.
- *
- *
- * See {@link JPAKEParticipant} for more details on round 3.
- *
- *
- * After execution, the {@link #getState() state} will be {@link #STATE_ROUND_3_VALIDATED}.
- *
- * @param keyingMaterial The keying material as returned from {@link #calculateKeyingMaterial()}.
- * @throws CryptoException if validation fails.
- * @throws IllegalStateException if called prior to {@link #calculateKeyingMaterial()}, or multiple times
- */
- public void validateRound3PayloadReceived(JPAKERound3Payload round3PayloadReceived, BigInteger keyingMaterial)
- throws CryptoException
- {
- if (this.state >= STATE_ROUND_3_VALIDATED)
- {
- throw new IllegalStateException("Validation already attempted for round3 payload for" + participantId);
- }
- if (this.state < STATE_KEY_CALCULATED)
- {
- throw new IllegalStateException("Keying material must be calculated validated prior to validating Round3 payload for " + this.participantId);
- }
- JPAKEUtil.validateParticipantIdsDiffer(participantId, round3PayloadReceived.getParticipantId());
- JPAKEUtil.validateParticipantIdsEqual(this.partnerParticipantId, round3PayloadReceived.getParticipantId());
-
- JPAKEUtil.validateMacTag(
- this.participantId,
- this.partnerParticipantId,
- this.gx1,
- this.gx2,
- this.gx3,
- this.gx4,
- keyingMaterial,
- this.digest,
- round3PayloadReceived.getMacTag());
-
-
- /*
- * Clear the rest of the fields.
- */
- this.gx1 = null;
- this.gx2 = null;
- this.gx3 = null;
- this.gx4 = null;
-
- this.state = STATE_ROUND_3_VALIDATED;
- }
-
-}
diff --git a/extern/spongycastle/core/src/main/jdk1.1/org/spongycastle/crypto/agreement/jpake/JPAKEPrimeOrderGroup.java b/extern/spongycastle/core/src/main/jdk1.1/org/spongycastle/crypto/agreement/jpake/JPAKEPrimeOrderGroup.java
deleted file mode 100644
index 59e93385c..000000000
--- a/extern/spongycastle/core/src/main/jdk1.1/org/spongycastle/crypto/agreement/jpake/JPAKEPrimeOrderGroup.java
+++ /dev/null
@@ -1,122 +0,0 @@
-package org.spongycastle.crypto.agreement.jpake;
-
-import java.math.BigInteger;
-
-/**
- * A pre-computed prime order group for use during a J-PAKE exchange.
- *
- *
- * Typically a Schnorr group is used. In general, J-PAKE can use any prime order group
- * that is suitable for public key cryptography, including elliptic curve cryptography.
- *
- *
- * See {@link JPAKEPrimeOrderGroups} for convenient standard groups.
- *
- *
- * NIST publishes
- * many groups that can be used for the desired level of security.
- */
-public class JPAKEPrimeOrderGroup
-{
- private BigInteger p;
- private BigInteger q;
- private BigInteger g;
-
- /**
- * Constructs a new {@link JPAKEPrimeOrderGroup}.
- *
- *
- * In general, you should use one of the pre-approved groups from
- * {@link JPAKEPrimeOrderGroups}, rather than manually constructing one.
- *
- *
- * The following basic checks are performed:
- *
- *
- *
- *
- * The prime checks are performed using {@link BigInteger#isProbablePrime(int)},
- * and are therefore subject to the same probability guarantees.
- *
- *
- * These checks prevent trivial mistakes.
- * However, due to the small uncertainties if p and q are not prime,
- * advanced attacks are not prevented.
- * Use it at your own risk.
- *
- * @throws NullPointerException if any argument is null
- * @throws IllegalArgumentException if any of the above validations fail
- */
- public JPAKEPrimeOrderGroup(BigInteger p, BigInteger q, BigInteger g)
- {
- /*
- * Don't skip the checks on user-specified groups.
- */
- this(p, q, g, false);
- }
-
- /**
- * Internal package-private constructor used by the pre-approved
- * groups in {@link JPAKEPrimeOrderGroups}.
- * These pre-approved groups can avoid the expensive checks.
- */
- JPAKEPrimeOrderGroup(BigInteger p, BigInteger q, BigInteger g, boolean skipChecks)
- {
- JPAKEUtil.validateNotNull(p, "p");
- JPAKEUtil.validateNotNull(q, "q");
- JPAKEUtil.validateNotNull(g, "g");
-
- if (!skipChecks)
- {
- if (!p.subtract(JPAKEUtil.ONE).mod(q).equals(JPAKEUtil.ZERO))
- {
- throw new IllegalArgumentException("p-1 must be evenly divisible by q");
- }
- if (g.compareTo(BigInteger.valueOf(2)) == -1 || g.compareTo(p.subtract(JPAKEUtil.ONE)) == 1)
- {
- throw new IllegalArgumentException("g must be in [2, p-1]");
- }
- if (!g.modPow(q, p).equals(JPAKEUtil.ONE))
- {
- throw new IllegalArgumentException("g^q mod p must equal 1");
- }
- /*
- * Note that these checks do not guarantee that p and q are prime.
- * We just have reasonable certainty that they are prime.
- */
- if (!p.isProbablePrime(20))
- {
- throw new IllegalArgumentException("p must be prime");
- }
- if (!q.isProbablePrime(20))
- {
- throw new IllegalArgumentException("q must be prime");
- }
- }
-
- this.p = p;
- this.q = q;
- this.g = g;
- }
-
- public BigInteger getP()
- {
- return p;
- }
-
- public BigInteger getQ()
- {
- return q;
- }
-
- public BigInteger getG()
- {
- return g;
- }
-
-}
diff --git a/extern/spongycastle/core/src/main/jdk1.1/org/spongycastle/crypto/digests/SkeinEngine.java b/extern/spongycastle/core/src/main/jdk1.1/org/spongycastle/crypto/digests/SkeinEngine.java
deleted file mode 100644
index a278ff4e4..000000000
--- a/extern/spongycastle/core/src/main/jdk1.1/org/spongycastle/crypto/digests/SkeinEngine.java
+++ /dev/null
@@ -1,817 +0,0 @@
-package org.spongycastle.crypto.digests;
-
-import java.util.Enumeration;
-import java.util.Hashtable;
-import java.util.Vector;
-
-import org.spongycastle.crypto.DataLengthException;
-import org.spongycastle.crypto.engines.ThreefishEngine;
-import org.spongycastle.crypto.macs.SkeinMac;
-import org.spongycastle.crypto.params.SkeinParameters;
-import org.spongycastle.util.Arrays;
-import org.spongycastle.util.Memoable;
-
-/**
- * Implementation of the Skein family of parameterised hash functions in 256, 512 and 1024 bit block
- * sizes, based on the {@link ThreefishEngine Threefish} tweakable block cipher.
- *
- * This is the 1.3 version of Skein defined in the Skein hash function submission to the NIST SHA-3
- * competition in October 2010.
- *
- * Skein was designed by Niels Ferguson - Stefan Lucks - Bruce Schneier - Doug Whiting - Mihir
- * Bellare - Tadayoshi Kohno - Jon Callas - Jesse Walker.
- *
- * This implementation is the basis for {@link SkeinDigest} and {@link SkeinMac}, implementing the
- * parameter based configuration system that allows Skein to be adapted to multiple applications.
- * Initialising the engine with {@link SkeinParameters} allows standard and arbitrary parameters to
- * be applied during the Skein hash function.
- *
- * Implemented:
- *
- *
- *
- * Not implemented:
- *
- *
- *
- * @see SkeinParameters
- */
-public class SkeinEngine
- implements Memoable
-{
- /**
- * 256 bit block size - Skein 256
- */
- public static final int SKEIN_256 = ThreefishEngine.BLOCKSIZE_256;
- /**
- * 512 bit block size - Skein 512
- */
- public static final int SKEIN_512 = ThreefishEngine.BLOCKSIZE_512;
- /**
- * 1024 bit block size - Skein 1024
- */
- public static final int SKEIN_1024 = ThreefishEngine.BLOCKSIZE_1024;
-
- // Minimal at present, but more complex when tree hashing is implemented
- private static class Configuration
- {
- private byte[] bytes = new byte[32];
-
- public Configuration(long outputSizeBits)
- {
- // 0..3 = ASCII SHA3
- bytes[0] = (byte)'S';
- bytes[1] = (byte)'H';
- bytes[2] = (byte)'A';
- bytes[3] = (byte)'3';
-
- // 4..5 = version number in LSB order
- bytes[4] = 1;
- bytes[5] = 0;
-
- // 8..15 = output length
- ThreefishEngine.wordToBytes(outputSizeBits, bytes, 8);
- }
-
- public byte[] getBytes()
- {
- return bytes;
- }
-
- }
-
- public static class Parameter
- {
- private int type;
- private byte[] value;
-
- public Parameter(int type, byte[] value)
- {
- this.type = type;
- this.value = value;
- }
-
- public int getType()
- {
- return type;
- }
-
- public byte[] getValue()
- {
- return value;
- }
-
- }
-
- /**
- * The parameter type for the Skein key.
- */
- private static final int PARAM_TYPE_KEY = 0;
-
- /**
- * The parameter type for the Skein configuration block.
- */
- private static final int PARAM_TYPE_CONFIG = 4;
-
- /**
- * The parameter type for the message.
- */
- private static final int PARAM_TYPE_MESSAGE = 48;
-
- /**
- * The parameter type for the output transformation.
- */
- private static final int PARAM_TYPE_OUTPUT = 63;
-
- /**
- * Precalculated UBI(CFG) states for common state/output combinations without key or other
- * pre-message params.
- */
- private static final Hashtable INITIAL_STATES = new Hashtable();
-
- static
- {
- // From Appendix C of the Skein 1.3 NIST submission
- initialState(SKEIN_256, 128, new long[]{
- 0xe1111906964d7260L,
- 0x883daaa77c8d811cL,
- 0x10080df491960f7aL,
- 0xccf7dde5b45bc1c2L});
-
- initialState(SKEIN_256, 160, new long[]{
- 0x1420231472825e98L,
- 0x2ac4e9a25a77e590L,
- 0xd47a58568838d63eL,
- 0x2dd2e4968586ab7dL});
-
- initialState(SKEIN_256, 224, new long[]{
- 0xc6098a8c9ae5ea0bL,
- 0x876d568608c5191cL,
- 0x99cb88d7d7f53884L,
- 0x384bddb1aeddb5deL});
-
- initialState(SKEIN_256, 256, new long[]{
- 0xfc9da860d048b449L,
- 0x2fca66479fa7d833L,
- 0xb33bc3896656840fL,
- 0x6a54e920fde8da69L});
-
- initialState(SKEIN_512, 128, new long[]{
- 0xa8bc7bf36fbf9f52L,
- 0x1e9872cebd1af0aaL,
- 0x309b1790b32190d3L,
- 0xbcfbb8543f94805cL,
- 0x0da61bcd6e31b11bL,
- 0x1a18ebead46a32e3L,
- 0xa2cc5b18ce84aa82L,
- 0x6982ab289d46982dL});
-
- initialState(SKEIN_512, 160, new long[]{
- 0x28b81a2ae013bd91L,
- 0xc2f11668b5bdf78fL,
- 0x1760d8f3f6a56f12L,
- 0x4fb747588239904fL,
- 0x21ede07f7eaf5056L,
- 0xd908922e63ed70b8L,
- 0xb8ec76ffeccb52faL,
- 0x01a47bb8a3f27a6eL});
-
- initialState(SKEIN_512, 224, new long[]{
- 0xccd0616248677224L,
- 0xcba65cf3a92339efL,
- 0x8ccd69d652ff4b64L,
- 0x398aed7b3ab890b4L,
- 0x0f59d1b1457d2bd0L,
- 0x6776fe6575d4eb3dL,
- 0x99fbc70e997413e9L,
- 0x9e2cfccfe1c41ef7L});
-
- initialState(SKEIN_512, 384, new long[]{
- 0xa3f6c6bf3a75ef5fL,
- 0xb0fef9ccfd84faa4L,
- 0x9d77dd663d770cfeL,
- 0xd798cbf3b468fddaL,
- 0x1bc4a6668a0e4465L,
- 0x7ed7d434e5807407L,
- 0x548fc1acd4ec44d6L,
- 0x266e17546aa18ff8L});
-
- initialState(SKEIN_512, 512, new long[]{
- 0x4903adff749c51ceL,
- 0x0d95de399746df03L,
- 0x8fd1934127c79bceL,
- 0x9a255629ff352cb1L,
- 0x5db62599df6ca7b0L,
- 0xeabe394ca9d5c3f4L,
- 0x991112c71a75b523L,
- 0xae18a40b660fcc33L});
- }
-
- private static void initialState(int blockSize, int outputSize, long[] state)
- {
- INITIAL_STATES.put(variantIdentifier(blockSize / 8, outputSize / 8), state);
- }
-
- private static Integer variantIdentifier(int blockSizeBytes, int outputSizeBytes)
- {
- return new Integer((outputSizeBytes << 16) | blockSizeBytes);
- }
-
- private static class UbiTweak
- {
- /**
- * Point at which position might overflow long, so switch to add with carry logic
- */
- private static final long LOW_RANGE = Long.MAX_VALUE - Integer.MAX_VALUE;
-
- /**
- * Bit 127 = final
- */
- private static final long T1_FINAL = 1L << 63;
-
- /**
- * Bit 126 = first
- */
- private static final long T1_FIRST = 1L << 62;
-
- /**
- * UBI uses a 128 bit tweak
- */
- private long tweak[] = new long[2];
-
- /**
- * Whether 64 bit position exceeded
- */
- private boolean extendedPosition;
-
- public UbiTweak()
- {
- reset();
- }
-
- public void reset(UbiTweak tweak)
- {
- this.tweak = Arrays.clone(tweak.tweak, this.tweak);
- this.extendedPosition = tweak.extendedPosition;
- }
-
- public void reset()
- {
- tweak[0] = 0;
- tweak[1] = 0;
- extendedPosition = false;
- setFirst(true);
- }
-
- public void setType(int type)
- {
- // Bits 120..125 = type
- tweak[1] = (tweak[1] & 0xFFFFFFC000000000L) | ((type & 0x3FL) << 56);
- }
-
- public int getType()
- {
- return (int)((tweak[1] >>> 56) & 0x3FL);
- }
-
- public void setFirst(boolean first)
- {
- if (first)
- {
- tweak[1] |= T1_FIRST;
- }
- else
- {
- tweak[1] &= ~T1_FIRST;
- }
- }
-
- public boolean isFirst()
- {
- return ((tweak[1] & T1_FIRST) != 0);
- }
-
- public void setFinal(boolean last)
- {
- if (last)
- {
- tweak[1] |= T1_FINAL;
- }
- else
- {
- tweak[1] &= ~T1_FINAL;
- }
- }
-
- public boolean isFinal()
- {
- return ((tweak[1] & T1_FINAL) != 0);
- }
-
- /**
- * Advances the position in the tweak by the specified value.
- */
- public void advancePosition(int advance)
- {
- // Bits 0..95 = position
- if (extendedPosition)
- {
- long[] parts = new long[3];
- parts[0] = tweak[0] & 0xFFFFFFFFL;
- parts[1] = (tweak[0] >>> 32) & 0xFFFFFFFFL;
- parts[2] = tweak[1] & 0xFFFFFFFFL;
-
- long carry = advance;
- for (int i = 0; i < parts.length; i++)
- {
- carry += parts[i];
- parts[i] = carry;
- carry >>>= 32;
- }
- tweak[0] = ((parts[1] & 0xFFFFFFFFL) << 32) | (parts[0] & 0xFFFFFFFFL);
- tweak[1] = (tweak[1] & 0xFFFFFFFF00000000L) | (parts[2] & 0xFFFFFFFFL);
- }
- else
- {
- long position = tweak[0];
- position += advance;
- tweak[0] = position;
- if (position > LOW_RANGE)
- {
- extendedPosition = true;
- }
- }
- }
-
- public long[] getWords()
- {
- return tweak;
- }
-
- public String toString()
- {
- return getType() + " first: " + isFirst() + ", final: " + isFinal();
- }
-
- }
-
- /**
- * The Unique Block Iteration chaining mode.
- */
- // TODO: This might be better as methods...
- private class UBI
- {
- private final UbiTweak tweak = new UbiTweak();
-
- /**
- * Buffer for the current block of message data
- */
- private byte[] currentBlock;
-
- /**
- * Offset into the current message block
- */
- private int currentOffset;
-
- /**
- * Buffer for message words for feedback into encrypted block
- */
- private long[] message;
-
- public UBI(int blockSize)
- {
- currentBlock = new byte[blockSize];
- message = new long[currentBlock.length / 8];
- }
-
- public void reset(UBI ubi)
- {
- currentBlock = Arrays.clone(ubi.currentBlock, currentBlock);
- currentOffset = ubi.currentOffset;
- message = Arrays.clone(ubi.message, this.message);
- tweak.reset(ubi.tweak);
- }
-
- public void reset(int type)
- {
- tweak.reset();
- tweak.setType(type);
- currentOffset = 0;
- }
-
- public void update(byte[] value, int offset, int len, long[] output)
- {
- /*
- * Buffer complete blocks for the underlying Threefish cipher, only flushing when there
- * are subsequent bytes (last block must be processed in doFinal() with final=true set).
- */
- int copied = 0;
- while (len > copied)
- {
- if (currentOffset == currentBlock.length)
- {
- processBlock(output);
- tweak.setFirst(false);
- currentOffset = 0;
- }
-
- int toCopy = Math.min((len - copied), currentBlock.length - currentOffset);
- System.arraycopy(value, offset + copied, currentBlock, currentOffset, toCopy);
- copied += toCopy;
- currentOffset += toCopy;
- tweak.advancePosition(toCopy);
- }
- }
-
- private void processBlock(long[] output)
- {
- threefish.init(true, chain, tweak.getWords());
- for (int i = 0; i < message.length; i++)
- {
- message[i] = ThreefishEngine.bytesToWord(currentBlock, i * 8);
- }
-
- threefish.processBlock(message, output);
-
- for (int i = 0; i < output.length; i++)
- {
- output[i] ^= message[i];
- }
- }
-
- public void doFinal(long[] output)
- {
- // Pad remainder of current block with zeroes
- for (int i = currentOffset; i < currentBlock.length; i++)
- {
- currentBlock[i] = 0;
- }
-
- tweak.setFinal(true);
- processBlock(output);
- }
-
- }
-
- /**
- * Underlying Threefish tweakable block cipher
- */
- private ThreefishEngine threefish;
-
- /**
- * Size of the digest output, in bytes
- */
- private int outputSizeBytes;
-
- /**
- * The current chaining/state value
- */
- long[] chain;
-
- /**
- * The initial state value
- */
- private long[] initialState;
-
- /**
- * The (optional) key parameter
- */
- private byte[] key;
-
- /**
- * Parameters to apply prior to the message
- */
- private Parameter[] preMessageParameters;
-
- /**
- * Parameters to apply after the message, but prior to output
- */
- private Parameter[] postMessageParameters;
-
- /**
- * The current UBI operation
- */
- private UBI ubi;
-
- /**
- * Buffer for single byte update method
- */
- private final byte[] singleByte = new byte[1];
-
- /**
- * Constructs a Skein engine.
- *
- * @param blockSizeBits the internal state size in bits - one of {@link #SKEIN_256}, {@link #SKEIN_512} or
- * {@link #SKEIN_1024}.
- * @param outputSizeBits the output/digest size to produce in bits, which must be an integral number of
- * bytes.
- */
- public SkeinEngine(int blockSizeBits, int outputSizeBits)
- {
- if (outputSizeBits % 8 != 0)
- {
- throw new IllegalArgumentException("Output size must be a multiple of 8 bits. :" + outputSizeBits);
- }
- // TODO: Prevent digest sizes > block size?
- this.outputSizeBytes = outputSizeBits / 8;
-
- this.threefish = new ThreefishEngine(blockSizeBits);
- this.ubi = new UBI(threefish.getBlockSize());
- }
-
- /**
- * Creates a SkeinEngine as an exact copy of an existing instance.
- */
- public SkeinEngine(SkeinEngine engine)
- {
- this(engine.getBlockSize() * 8, engine.getOutputSize() * 8);
- copyIn(engine);
- }
-
- private void copyIn(SkeinEngine engine)
- {
- this.ubi.reset(engine.ubi);
- this.chain = Arrays.clone(engine.chain, this.chain);
- this.initialState = Arrays.clone(engine.initialState, this.initialState);
- this.key = Arrays.clone(engine.key, this.key);
- this.preMessageParameters = clone(engine.preMessageParameters, this.preMessageParameters);
- this.postMessageParameters = clone(engine.postMessageParameters, this.postMessageParameters);
- }
-
- private static Parameter[] clone(Parameter[] data, Parameter[] existing)
- {
- if (data == null)
- {
- return null;
- }
- if ((existing == null) || (existing.length != data.length))
- {
- existing = new Parameter[data.length];
- }
- System.arraycopy(data, 0, existing, 0, existing.length);
- return existing;
- }
-
- public Memoable copy()
- {
- return new SkeinEngine(this);
- }
-
- public void reset(Memoable other)
- {
- SkeinEngine s = (SkeinEngine)other;
- if ((getBlockSize() != s.getBlockSize()) || (outputSizeBytes != s.outputSizeBytes))
- {
- throw new IllegalArgumentException("Incompatible parameters in provided SkeinEngine.");
- }
- copyIn(s);
- }
-
- public int getOutputSize()
- {
- return outputSizeBytes;
- }
-
- public int getBlockSize()
- {
- return threefish.getBlockSize();
- }
-
- /**
- * Initialises the Skein engine with the provided parameters. See {@link SkeinParameters} for
- * details on the parameterisation of the Skein hash function.
- *
- * @param params the parameters to apply to this engine, or null
to use no parameters.
- */
- public void init(SkeinParameters params)
- {
- this.chain = null;
- this.key = null;
- this.preMessageParameters = null;
- this.postMessageParameters = null;
-
- if (params != null)
- {
- byte[] key = params.getKey();
- if (key.length < 16)
- {
- throw new IllegalArgumentException("Skein key must be at least 128 bits.");
- }
- initParams(params.getParameters());
- }
- createInitialState();
-
- // Initialise message block
- ubiInit(PARAM_TYPE_MESSAGE);
- }
-
- private void initParams(Hashtable parameters)
- {
- Enumeration keys = parameters.keys();
- final Vector pre = new Vector();
- final Vector post = new Vector();
-
- while (keys.hasMoreElements())
- {
- Integer type = (Integer)keys.nextElement();
- byte[] value = (byte[])parameters.get(type);
-
- if (type.intValue() == PARAM_TYPE_KEY)
- {
- this.key = value;
- }
- else if (type.intValue() < PARAM_TYPE_MESSAGE)
- {
- pre.addElement(new Parameter(type.intValue(), value));
- }
- else
- {
- post.addElement(new Parameter(type.intValue(), value));
- }
- }
- preMessageParameters = new Parameter[pre.size()];
- pre.copyInto(preMessageParameters);
- sort(preMessageParameters);
-
- postMessageParameters = new Parameter[post.size()];
- post.copyInto(postMessageParameters);
- sort(postMessageParameters);
- }
-
- private static void sort(Parameter[] params)
- {
- if (params == null)
- {
- return;
- }
- // Insertion sort, for Java 1.1 compatibility
- for (int i = 1; i < params.length; i++)
- {
- Parameter param = params[i];
- int hole = i;
- while (hole > 0 && param.getType() < params[hole - 1].getType())
- {
- params[hole] = params[hole - 1];
- hole = hole - 1;
- }
- params[hole] = param;
- }
- }
-
- /**
- * Calculate the initial (pre message block) chaining state.
- */
- private void createInitialState()
- {
- long[] precalc = (long[])INITIAL_STATES.get(variantIdentifier(getBlockSize(), getOutputSize()));
- if ((key == null) && (precalc != null))
- {
- // Precalculated UBI(CFG)
- chain = Arrays.clone(precalc);
- }
- else
- {
- // Blank initial state
- chain = new long[getBlockSize() / 8];
-
- // Process key block
- if (key != null)
- {
- ubiComplete(SkeinParameters.PARAM_TYPE_KEY, key);
- }
-
- // Process configuration block
- ubiComplete(PARAM_TYPE_CONFIG, new Configuration(outputSizeBytes * 8).getBytes());
- }
-
- // Process additional pre-message parameters
- if (preMessageParameters != null)
- {
- for (int i = 0; i < preMessageParameters.length; i++)
- {
- Parameter param = preMessageParameters[i];
- ubiComplete(param.getType(), param.getValue());
- }
- }
- initialState = Arrays.clone(chain);
- }
-
- /**
- * Reset the engine to the initial state (with the key and any pre-message parameters , ready to
- * accept message input.
- */
- public void reset()
- {
- System.arraycopy(initialState, 0, chain, 0, chain.length);
-
- ubiInit(PARAM_TYPE_MESSAGE);
- }
-
- private void ubiComplete(int type, byte[] value)
- {
- ubiInit(type);
- this.ubi.update(value, 0, value.length, chain);
- ubiFinal();
- }
-
- private void ubiInit(int type)
- {
- this.ubi.reset(type);
- }
-
- private void ubiFinal()
- {
- ubi.doFinal(chain);
- }
-
- private void checkInitialised()
- {
- if (this.ubi == null)
- {
- throw new IllegalArgumentException("Skein engine is not initialised.");
- }
- }
-
- public void update(byte in)
- {
- singleByte[0] = in;
- update(singleByte, 0, 1);
- }
-
- public void update(byte[] in, int inOff, int len)
- {
- checkInitialised();
- ubi.update(in, inOff, len, chain);
- }
-
- public int doFinal(byte[] out, int outOff)
- {
- checkInitialised();
- if (out.length < (outOff + outputSizeBytes))
- {
- throw new DataLengthException("Output buffer is too short to hold output of " + outputSizeBytes + " bytes");
- }
-
- // Finalise message block
- ubiFinal();
-
- // Process additional post-message parameters
- if (postMessageParameters != null)
- {
- for (int i = 0; i < postMessageParameters.length; i++)
- {
- Parameter param = postMessageParameters[i];
- ubiComplete(param.getType(), param.getValue());
- }
- }
-
- // Perform the output transform
- final int blockSize = getBlockSize();
- final int blocksRequired = ((outputSizeBytes + blockSize - 1) / blockSize);
- for (int i = 0; i < blocksRequired; i++)
- {
- final int toWrite = Math.min(blockSize, outputSizeBytes - (i * blockSize));
- output(i, out, outOff + (i * blockSize), toWrite);
- }
-
- reset();
-
- return outputSizeBytes;
- }
-
- private void output(long outputSequence, byte[] out, int outOff, int outputBytes)
- {
- byte[] currentBytes = new byte[8];
- ThreefishEngine.wordToBytes(outputSequence, currentBytes, 0);
-
- // Output is a sequence of UBI invocations all of which use and preserve the pre-output
- // state
- long[] outputWords = new long[chain.length];
- ubiInit(PARAM_TYPE_OUTPUT);
- this.ubi.update(currentBytes, 0, currentBytes.length, outputWords);
- ubi.doFinal(outputWords);
-
- final int wordsRequired = ((outputBytes + 8 - 1) / 8);
- for (int i = 0; i < wordsRequired; i++)
- {
- int toWrite = Math.min(8, outputBytes - (i * 8));
- if (toWrite == 8)
- {
- ThreefishEngine.wordToBytes(outputWords[i], out, outOff + (i * 8));
- }
- else
- {
- ThreefishEngine.wordToBytes(outputWords[i], currentBytes, 0);
- System.arraycopy(currentBytes, 0, out, outOff + (i * 8), toWrite);
- }
- }
- }
-
-}
diff --git a/extern/spongycastle/core/src/main/jdk1.1/org/spongycastle/crypto/encodings/PKCS1Encoding.java b/extern/spongycastle/core/src/main/jdk1.1/org/spongycastle/crypto/encodings/PKCS1Encoding.java
deleted file mode 100644
index 7af31f36e..000000000
--- a/extern/spongycastle/core/src/main/jdk1.1/org/spongycastle/crypto/encodings/PKCS1Encoding.java
+++ /dev/null
@@ -1,410 +0,0 @@
-package org.spongycastle.crypto.encodings;
-
-import java.security.SecureRandom;
-
-import org.spongycastle.crypto.AsymmetricBlockCipher;
-import org.spongycastle.crypto.CipherParameters;
-import org.spongycastle.crypto.InvalidCipherTextException;
-import org.spongycastle.crypto.params.AsymmetricKeyParameter;
-import org.spongycastle.crypto.params.ParametersWithRandom;
-
-/**
- * this does your basic PKCS 1 v1.5 padding - whether or not you should be using this
- * depends on your application - see PKCS1 Version 2 for details.
- */
-public class PKCS1Encoding
- implements AsymmetricBlockCipher
-{
- /**
- * some providers fail to include the leading zero in PKCS1 encoded blocks. If you need to
- * work with one of these set the system property org.spongycastle.pkcs1.strict to false.
- * resource
as the base name for the
- * RessourceBundle and id
as the message bundle id the resource file.
- * @param resource base name of the resource file
- * @param id the id of the corresponding bundle in the resource file
- * @throws NullPointerException if resource
or id
is null
- */
- public LocalizedMessage(String resource,String id) throws NullPointerException
- {
- if (resource == null || id == null)
- {
- throw new NullPointerException();
- }
- this.id = id;
- this.resource = resource;
- arguments = new FilteredArguments();
- }
-
- /**
- * Constructs a new LocalizedMessage using resource
as the base name for the
- * RessourceBundle and id
as the message bundle id the resource file.
- * @param resource base name of the resource file
- * @param id the id of the corresponding bundle in the resource file
- * @param encoding the encoding of the resource file
- * @throws NullPointerException if resource
or id
is null
- * @throws UnsupportedEncodingException if the encoding is not supported
- */
- public LocalizedMessage(String resource,String id, String encoding) throws NullPointerException, UnsupportedEncodingException
- {
- if (resource == null || id == null)
- {
- throw new NullPointerException();
- }
- this.id = id;
- this.resource = resource;
- arguments = new FilteredArguments();
- this.encoding = encoding;
- }
-
- /**
- * Constructs a new LocalizedMessage using resource
as the base name for the
- * RessourceBundle and id
as the message bundle id the resource file.
- * @param resource base name of the resource file
- * @param id the id of the corresponding bundle in the resource file
- * @param arguments an array containing the arguments for the message
- * @throws NullPointerException if resource
or id
is null
- */
- public LocalizedMessage(String resource, String id, Object[] arguments) throws NullPointerException
- {
- if (resource == null || id == null || arguments == null)
- {
- throw new NullPointerException();
- }
- this.id = id;
- this.resource = resource;
- this.arguments = new FilteredArguments(arguments);
- }
-
- /**
- * Constructs a new LocalizedMessage using resource
as the base name for the
- * RessourceBundle and id
as the message bundle id the resource file.
- * @param resource base name of the resource file
- * @param id the id of the corresponding bundle in the resource file
- * @param encoding the encoding of the resource file
- * @param arguments an array containing the arguments for the message
- * @throws NullPointerException if resource
or id
is null
- * @throws UnsupportedEncodingException if the encoding is not supported
- */
- public LocalizedMessage(String resource, String id, String encoding, Object[] arguments) throws NullPointerException, UnsupportedEncodingException
- {
- if (resource == null || id == null || arguments == null)
- {
- throw new NullPointerException();
- }
- this.id = id;
- this.resource = resource;
- this.arguments = new FilteredArguments(arguments);
- this.encoding = encoding;
- }
-
- /**
- * Reads the entry id + "." + key
from the resource file and returns a
- * formated message for the given Locale and TimeZone.
- * @param key second part of the entry id
- * @param loc the used {@link Locale}
- * @param timezone the used {@link TimeZone}
- * @return a Strng containing the localized message
- * @throws MissingEntryException if the resource file is not available or the entry does not exist.
- */
- public String getEntry(String key,Locale loc, TimeZone timezone) throws MissingEntryException
- {
- String entry = id;
- if (key != null)
- {
- entry += "." + key;
- }
-
- try
- {
- ResourceBundle bundle;
- if (loader == null)
- {
- bundle = ResourceBundle.getBundle(resource,loc);
- }
- else
- {
- bundle = ResourceBundle.getBundle(resource, loc);
- }
- String result = bundle.getString(entry);
- if (!encoding.equals(DEFAULT_ENCODING))
- {
- result = new String(result.getBytes(DEFAULT_ENCODING), encoding);
- }
- if (!arguments.isEmpty())
- {
- result = formatWithTimeZone(result,arguments.getFilteredArgs(loc),loc,timezone);
- }
- result = addExtraArgs(result, loc);
- return result;
- }
- catch (MissingResourceException mre)
- {
- throw new MissingEntryException("Can't find entry " + entry + " in resource file " + resource + ".",
- resource,
- entry,
- loc,
- loader != null ? loader : this.getClassLoader());
- }
- catch (UnsupportedEncodingException use)
- {
- // should never occur - cause we already test this in the constructor
- throw new RuntimeException(use.toString());
- }
- }
-
- protected String formatWithTimeZone(
- String template,
- Object[] arguments,
- Locale locale,
- TimeZone timezone)
- {
- MessageFormat mf = new MessageFormat(" ");
- mf.setLocale(locale);
- mf.applyPattern(template);
- if (!timezone.equals(TimeZone.getDefault()))
- {
- Format[] formats = mf.getFormats();
- for (int i = 0; i < formats.length; i++)
- {
- if (formats[i] instanceof DateFormat)
- {
- DateFormat temp = (DateFormat) formats[i];
- temp.setTimeZone(timezone);
- mf.setFormat(i,temp);
- }
- }
- }
- return mf.format(arguments);
- }
-
- protected String addExtraArgs(String msg, Locale locale)
- {
- if (extraArgs != null)
- {
- StringBuffer sb = new StringBuffer(msg);
- Object[] filteredArgs = extraArgs.getFilteredArgs(locale);
- for (int i = 0; i < filteredArgs.length; i++)
- {
- sb.append(filteredArgs[i]);
- }
- msg = sb.toString();
- }
- return msg;
- }
-
- /**
- * Sets the {@link Filter} that is used to filter the arguments of this message
- * @param filter the {@link Filter} to use. null
to disable filtering.
- */
- public void setFilter(Filter filter)
- {
- arguments.setFilter(filter);
- if (extraArgs != null)
- {
- extraArgs.setFilter(filter);
- }
- this.filter = filter;
- }
-
- /**
- * Returns the current filter.
- * @return the current filter
- */
- public Filter getFilter()
- {
- return filter;
- }
-
- /**
- * Set the {@link ClassLoader} which loads the resource files. If it is set to null
- * then the default {@link ClassLoader} is used.
- * @param loader the {@link ClassLoader} which loads the resource files
- */
- public void setClassLoader(ClassLoader loader)
- {
- this.loader = loader;
- }
-
- /**
- * Returns the {@link ClassLoader} which loads the resource files or null
- * if the default ClassLoader is used.
- * @return the {@link ClassLoader} which loads the resource files
- */
- public ClassLoader getClassLoader()
- {
- return loader;
- }
-
- /**
- * Returns the id of the message in the resource bundle.
- * @return the id of the message
- */
- public String getId()
- {
- return id;
- }
-
- /**
- * Returns the name of the resource bundle for this message
- * @return name of the resource file
- */
- public String getResource()
- {
- return resource;
- }
-
- /**
- * Returns an Object[]
containing the message arguments.
- * @return the message arguments
- */
- public Object[] getArguments()
- {
- return arguments.getArguments();
- }
-
- /**
- *
- * @param extraArg
- */
- public void setExtraArgument(Object extraArg)
- {
- setExtraArguments(new Object[] {extraArg});
- }
-
- /**
- *
- * @param extraArgs
- */
- public void setExtraArguments(Object[] extraArgs)
- {
- if (extraArgs != null)
- {
- this.extraArgs = new FilteredArguments(extraArgs);
- this.extraArgs.setFilter(filter);
- }
- else
- {
- this.extraArgs = null;
- }
- }
-
- /**
- *
- * @return
- */
- public Object[] getExtraArgs()
- {
- return (extraArgs == null) ? null : extraArgs.getArguments();
- }
-
- protected class FilteredArguments
- {
-
- protected Filter filter = null;
-
- protected boolean[] isLocaleSpecific;
- protected int[] argFilterType;
- protected Object[] arguments;
- protected Object[] unpackedArgs;
- protected Object[] filteredArgs;
-
- FilteredArguments()
- {
- this(new Object[0]);
- }
-
- FilteredArguments(Object[] args)
- {
- this.arguments = args;
- this.unpackedArgs = new Object[args.length];
- this.filteredArgs = new Object[args.length];
- this.isLocaleSpecific = new boolean[args.length];
- this.argFilterType = new int[args.length];
- for (int i = 0; i < args.length; i++)
- {
- if (args[i] instanceof TrustedInput)
- {
- this.unpackedArgs[i] = ((TrustedInput) args[i]).getInput();
- argFilterType[i] = NO_FILTER;
- }
- else if (args[i] instanceof UntrustedInput)
- {
- this.unpackedArgs[i] = ((UntrustedInput) args[i]).getInput();
- if (args[i] instanceof UntrustedUrlInput)
- {
- argFilterType[i] = FILTER_URL;
- }
- else
- {
- argFilterType[i] = FILTER;
- }
- }
- else
- {
- this.unpackedArgs[i] = args[i];
- argFilterType[i] = FILTER;
- }
-
- // locale specific
- this.isLocaleSpecific[i] = (this.unpackedArgs[i] instanceof LocaleString);
- }
- }
-
- public boolean isEmpty()
- {
- return unpackedArgs.length == 0;
- }
-
- public Object[] getArguments()
- {
- return arguments;
- }
-
- public Object[] getFilteredArgs(Locale locale)
- {
- Object[] result = new Object[unpackedArgs.length];
- for (int i = 0; i < unpackedArgs.length; i++)
- {
- Object arg;
- if (filteredArgs[i] != null)
- {
- arg = filteredArgs[i];
- }
- else
- {
- arg = unpackedArgs[i];
- if (isLocaleSpecific[i])
- {
- // get locale
- arg = ((LocaleString) arg).getLocaleString(locale);
- arg = filter(argFilterType[i], arg);
- }
- else
- {
- arg = filter(argFilterType[i], arg);
- filteredArgs[i] = arg;
- }
- }
- result[i] = arg;
- }
- return result;
- }
-
- private Object filter(int type, Object obj)
- {
- if (filter != null)
- {
- Object o = (null == obj) ? "null" : obj;
- switch (type)
- {
- case NO_FILTER:
- return o;
- case FILTER:
- return filter.doFilter(o.toString());
- case FILTER_URL:
- return filter.doFilterUrl(o.toString());
- default:
- return null;
- }
- }
- else
- {
- return obj;
- }
- }
-
- public Filter getFilter()
- {
- return filter;
- }
-
- public void setFilter(Filter filter)
- {
- if (filter != this.filter)
- {
- for (int i = 0; i < unpackedArgs.length; i++)
- {
- filteredArgs[i] = null;
- }
- }
- this.filter = filter;
- }
-
- }
-
- public String toString()
- {
- StringBuffer sb = new StringBuffer();
- sb.append("Resource: \"").append(resource);
- sb.append("\" Id: \"").append(id).append("\"");
- sb.append(" Arguments: ").append(arguments.getArguments().length).append(" normal, ")
- .append(extraArgs.getArguments().length).append(" extra");
- sb.append(" Encoding: ").append(encoding);
- sb.append(" ClassLoader: ").append(loader);
- return sb.toString();
- }
-
-}
diff --git a/extern/spongycastle/core/src/main/jdk1.1/org/spongycastle/i18n/MissingEntryException.java b/extern/spongycastle/core/src/main/jdk1.1/org/spongycastle/i18n/MissingEntryException.java
deleted file mode 100644
index d876a91af..000000000
--- a/extern/spongycastle/core/src/main/jdk1.1/org/spongycastle/i18n/MissingEntryException.java
+++ /dev/null
@@ -1,63 +0,0 @@
-package org.spongycastle.i18n;
-
-import java.net.URL;
-import java.util.Locale;
-
-public class MissingEntryException extends RuntimeException
-{
-
- protected final String resource;
- protected final String key;
- protected final ClassLoader loader;
- protected final Locale locale;
-
- private String debugMsg;
-
- public MissingEntryException(String message, String resource, String key, Locale locale, ClassLoader loader)
- {
- super(message);
- this.resource = resource;
- this.key = key;
- this.locale = locale;
- this.loader = loader;
- }
-
- public MissingEntryException(String message, Throwable cause, String resource, String key, Locale locale, ClassLoader loader)
- {
- super(message + ": " + cause);
- this.resource = resource;
- this.key = key;
- this.locale = locale;
- this.loader = loader;
- }
-
- public String getKey()
- {
- return key;
- }
-
- public String getResource()
- {
- return resource;
- }
-
- public ClassLoader getClassLoader()
- {
- return loader;
- }
-
- public Locale getLocale()
- {
- return locale;
- }
-
- public String getDebugMsg()
- {
- if (debugMsg == null)
- {
- debugMsg = "Can not find entry " + key + " in resource file " + resource + " for the locale " + locale + ".";
- }
- return debugMsg;
- }
-
-}
diff --git a/extern/spongycastle/core/src/main/jdk1.2/java/security/interfaces/RSAMultiPrimePrivateCrtKey.java b/extern/spongycastle/core/src/main/jdk1.2/java/security/interfaces/RSAMultiPrimePrivateCrtKey.java
deleted file mode 100644
index 042eb3eb2..000000000
--- a/extern/spongycastle/core/src/main/jdk1.2/java/security/interfaces/RSAMultiPrimePrivateCrtKey.java
+++ /dev/null
@@ -1,67 +0,0 @@
-
-package java.security.interfaces;
-
-import java.math.BigInteger;
-import java.security.spec.RSAOtherPrimeInfo;
-
-/**
- * The interface to an RSA multi-prime private key, as defined in the
- * PKCS#1 v2.1, using the Chinese Remainder Theorem (CRT) information values.
- *
- * @since 1.4
- * @see RSAPrivateKeySpec, RSAMultiPrimePrivateCrtKeySpec, RSAPrivateKey,
- * RSAPrivateCrtKey
- */
-public interface RSAMultiPrimePrivateCrtKey
-extends RSAPrivateKey
-{
- /**
- * Returns the public exponent.
- *
- * @returns the public exponent.
- */
- public BigInteger getPublicExponent();
-
- /**
- * Returns the primeP.
- *
- * @returns the primeP.
- */
- public BigInteger getPrimeP();
-
- /**
- * Returns the primeQ.
- *
- * @returns the primeQ.
- */
- public BigInteger getPrimeQ();
-
- /**
- * Returns the primeExponentP.
- *
- * @returns the primeExponentP.
- */
- public BigInteger getPrimeExponentP();
-
- /**
- * Returns the primeExponentQ.
- *
- * @returns the primeExponentQ.
- */
- public BigInteger getPrimeExponentQ();
-
- /**
- * Returns the crtCoefficient.
- *
- * @returns the crtCoefficient.
- */
- public BigInteger getCrtCoefficient();
-
- /**
- * Returns the otherPrimeInfo or null if there are only two prime
- * factors (p and q).
- *
- * @returns the otherPrimeInfo.
- */
- public RSAOtherPrimeInfo[] getOtherPrimeInfo();
-}
diff --git a/extern/spongycastle/core/src/main/jdk1.2/java/security/spec/PSSParameterSpec.java b/extern/spongycastle/core/src/main/jdk1.2/java/security/spec/PSSParameterSpec.java
deleted file mode 100644
index f58d83b78..000000000
--- a/extern/spongycastle/core/src/main/jdk1.2/java/security/spec/PSSParameterSpec.java
+++ /dev/null
@@ -1,45 +0,0 @@
-
-package java.security.spec;
-
-/**
- * This class specifies a parameter spec for RSA PSS encoding scheme,
- * as defined in the PKCS#1 v2.1.
- *
- * @since 1.4
- * @see AlgorithmParameterSpec, Signature
- */
-public class PSSParameterSpec
- extends Object
- implements AlgorithmParameterSpec
-{
- private int saltLen;
-
- /**
- * Creates a new PSSParameterSpec given the salt length as defined
- * in PKCS#1.
- *
- * @param saltLen - the length of salt in bits to be used in PKCS#1
- * PSS encoding.
- * @throws IllegalArgumentException - if saltLen is less than 0.
- */
- public PSSParameterSpec(int saltLen)
- {
- if ( saltLen < 0 )
- {
- throw new IllegalArgumentException("Salt length must be >= 0");
- }
-
- this.saltLen = saltLen;
- }
-
- /**
- * Returns the salt length in bits.
- *
- * @returns the salt length.
- */
- public int getSaltLength()
- {
- return saltLen;
- }
-}
-
diff --git a/extern/spongycastle/core/src/main/jdk1.2/java/security/spec/RSAKeyGenParameterSpec.java b/extern/spongycastle/core/src/main/jdk1.2/java/security/spec/RSAKeyGenParameterSpec.java
deleted file mode 100644
index 756c6c0fd..000000000
--- a/extern/spongycastle/core/src/main/jdk1.2/java/security/spec/RSAKeyGenParameterSpec.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package java.security.spec;
-
-import java.math.BigInteger;
-
-/**
- * specifies parameters to be used for the generation of
- * a RSA key pair.
- */
-public class RSAKeyGenParameterSpec
- implements AlgorithmParameterSpec
-{
- static BigInteger F0 = BigInteger.valueOf(3);
- static BigInteger F4 = BigInteger.valueOf(65537);
-
- private int keysize;
- private BigInteger publicExponent;
-
- public RSAKeyGenParameterSpec(
- int keysize,
- BigInteger publicExponent)
- {
- this.keysize = keysize;
- this.publicExponent = publicExponent;
- }
-
- public int getKeysize()
- {
- return keysize;
- }
-
- public BigInteger getPublicExponent()
- {
- return publicExponent;
- }
-}
diff --git a/extern/spongycastle/core/src/main/jdk1.2/java/security/spec/RSAMultiPrimePrivateCrtKeySpec.java b/extern/spongycastle/core/src/main/jdk1.2/java/security/spec/RSAMultiPrimePrivateCrtKeySpec.java
deleted file mode 100644
index 1339b4f6d..000000000
--- a/extern/spongycastle/core/src/main/jdk1.2/java/security/spec/RSAMultiPrimePrivateCrtKeySpec.java
+++ /dev/null
@@ -1,159 +0,0 @@
-
-package java.security.spec;
-
-import java.math.BigInteger;
-
-/**
- * This class specifies an RSA multi-prime private key, as defined in
- * the PKCS#1 v2.1, using the Chinese Remainder Theorem (CRT) information
- * values for efficiency.
- *
- * @since 1.4
- * @see Key, KeyFactory, KeySpec, PKCS8EncodedKeySpec, RSAPrivateKeySpec,
- * RSAPublicKeySpec, RSAOtherPrimeInfo
- */
-public class RSAMultiPrimePrivateCrtKeySpec
- extends RSAPrivateKeySpec
-{
- private BigInteger publicExponent;
- private BigInteger privateExponent;
- private BigInteger primeP;
- private BigInteger primeQ;
- private BigInteger primeExponentP;
- private BigInteger primeExponentQ;
- private BigInteger crtCoefficient;
- private RSAOtherPrimeInfo[] otherPrimeInfo;
-
- /**
- * Creates a new RSAMultiPrimePrivateCrtKeySpec given the modulus,
- * publicExponent, privateExponent, primeP, primeQ, primeExponentP,
- * primeExponentQ, crtCoefficient, and otherPrimeInfo as defined in
- * PKCS#1 v2.1.
- *
- * Note that otherPrimeInfo is cloned when constructing this object.
- *
- * @param modulus - the modulus n.
- * @param publicExponent - the public exponent e.
- * @param privateExponent - the private exponent d.
- * @param primeP - the prime factor p of n.
- * @param primeQ - the prime factor q of n.
- * @param primeExponentP - this is d mod (p-1).
- * @param primeExponentQ - this is d mod (q-1).
- * @param crtCoefficient - the Chinese Remainder Theorem coefficient q-1
- * mod p.
- * @param otherPrimeInfo - triplets of the rest of primes, null can be
- * specified if there are only two prime factors (p and q).
- * @throws NullPointerException - if any of the parameters, i.e. modulus,
- * publicExponent, privateExponent, primeP, primeQ, primeExponentP,
- * primeExponentQ, crtCoefficient, is null.
- * @throws IllegalArgumentException - if an empty, i.e. 0-length,
- * otherPrimeInfo is specified.
- */
- public RSAMultiPrimePrivateCrtKeySpec(
- BigInteger modulus,
- BigInteger publicExponent,
- BigInteger privateExponent,
- BigInteger primeP,
- BigInteger primeQ,
- BigInteger primeExponentP,
- BigInteger primeExponentQ,
- BigInteger crtCoefficient,
- RSAOtherPrimeInfo[] otherPrimeInfo)
- {
- super(modulus, privateExponent);
-
- if ( publicExponent == null || primeP == null || primeQ == null
- || primeExponentP == null || primeExponentQ == null
- || crtCoefficient == null )
- {
- throw new NullPointerException("Invalid null argument");
- }
-
- if ( otherPrimeInfo != null )
- {
- if ( otherPrimeInfo.length == 0 )
- {
- throw new IllegalArgumentException("Invalid length for otherPrimeInfo");
- }
-
- this.otherPrimeInfo = (RSAOtherPrimeInfo[])otherPrimeInfo.clone();
- }
- }
-
- /**
- * Returns the public exponent.
- *
- * @returns the public exponent.
- */
- public BigInteger getPublicExponent()
- {
- return publicExponent;
- }
-
- /**
- * Returns the primeP.
- *
- * @returns the primeP.
- */
- public BigInteger getPrimeP()
- {
- return primeP;
- }
-
- /**
- * Returns the primeQ.
- *
- * @returns the primeQ.
- */
- public BigInteger getPrimeQ()
- {
- return primeQ;
- }
-
- /**
- * Returns the primeExponentP.
- *
- * @returns the primeExponentP.
- */
- public BigInteger getPrimeExponentP()
- {
- return primeExponentP;
- }
-
- /**
- * Returns the primeExponentQ.
- *
- * @returns the primeExponentQ.
- */
- public BigInteger getPrimeExponentQ()
- {
- return primeExponentQ;
- }
-
- /**
- * Returns the crtCofficient.
- *
- * @returns the crtCofficient.
- */
- public BigInteger getCrtCoefficient()
- {
- return crtCoefficient;
- }
-
- /**
- * Returns a copy of the otherPrimeInfo or null if there are only
- * two prime factors (p and q).
- *
- * @returns the otherPrimeInfo.
- */
- public RSAOtherPrimeInfo[] getOtherPrimeInfo()
- {
- if ( otherPrimeInfo != null )
- {
- return (RSAOtherPrimeInfo[])otherPrimeInfo.clone();
- }
-
- return null;
- }
-}
-
diff --git a/extern/spongycastle/core/src/main/jdk1.2/java/security/spec/RSAOtherPrimeInfo.java b/extern/spongycastle/core/src/main/jdk1.2/java/security/spec/RSAOtherPrimeInfo.java
deleted file mode 100644
index 42a4fce6d..000000000
--- a/extern/spongycastle/core/src/main/jdk1.2/java/security/spec/RSAOtherPrimeInfo.java
+++ /dev/null
@@ -1,80 +0,0 @@
-
-package java.security.spec;
-
-import java.math.BigInteger;
-
-/**
- * This class represents the triplet (prime, exponent, and coefficient)
- * inside RSA's OtherPrimeInfo structure, as defined in the PKCS#1 v2.1.
- * The ASN.1 syntax of RSA's OtherPrimeInfo is as follows:
- *
- *
- * OtherPrimeInfo ::= SEQUENCE {
- * prime INTEGER,
- * exponent INTEGER,
- * coefficient INTEGER
- * }
- *
- */
-public class RSAOtherPrimeInfo
-extends Object
-{
- private BigInteger prime;
- private BigInteger primeExponent;
- private BigInteger crtCoefficient;
-
- /**
- * Creates a new RSAOtherPrimeInfo given the prime, primeExponent,
- * and crtCoefficient as defined in PKCS#1.
- *
- * @param prime - the prime factor of n.
- * @param primeExponent - the exponent.
- * @param crtCoefficient - the Chinese Remainder Theorem coefficient.
- * @throws NullPointerException - if any of the parameters, i.e. prime,
- * primeExponent, crtCoefficient, is null.
- */
- public RSAOtherPrimeInfo(
- BigInteger prime,
- BigInteger primeExponent,
- BigInteger crtCoefficient)
- {
- if ( prime == null || primeExponent == null || crtCoefficient == null )
- {
- throw new NullPointerException("Null parameter");
- }
-
- this.prime = prime;
- this.primeExponent = primeExponent;
- this.crtCoefficient = crtCoefficient;
- }
-
- /**
- * Returns the prime.
- *
- * @returns the prime.
- */
- public final BigInteger getPrime()
- {
- return prime;
- }
-
- /**
- * Returns the prime's exponent.
- *
- * @returns the primeExponent.
- */
- public final BigInteger getExponent()
- {
- return primeExponent;
- }
-
- /**
- * Returns the prime's crtCoefficient.
- *
- * @returns the crtCoefficient.
- */
- public final BigInteger getCrtCoefficient()
- {
- return crtCoefficient;
- }
-}
diff --git a/extern/spongycastle/core/src/main/jdk1.2/org/spongycastle/i18n/LocalizedMessage.java b/extern/spongycastle/core/src/main/jdk1.2/org/spongycastle/i18n/LocalizedMessage.java
deleted file mode 100644
index 1eab110cb..000000000
--- a/extern/spongycastle/core/src/main/jdk1.2/org/spongycastle/i18n/LocalizedMessage.java
+++ /dev/null
@@ -1,464 +0,0 @@
-package org.spongycastle.i18n;
-
-import org.spongycastle.i18n.filter.Filter;
-import org.spongycastle.i18n.filter.TrustedInput;
-import org.spongycastle.i18n.filter.UntrustedInput;
-import org.spongycastle.i18n.filter.UntrustedUrlInput;
-
-import java.io.UnsupportedEncodingException;
-import java.text.DateFormat;
-import java.text.Format;
-import java.text.MessageFormat;
-import java.util.Locale;
-import java.util.MissingResourceException;
-import java.util.ResourceBundle;
-import java.util.TimeZone;
-
-public class LocalizedMessage
-{
- protected static final int NO_FILTER = 0;
- protected static final int FILTER = 1;
- protected static final int FILTER_URL = 2;
-
- protected String id;
- protected String resource;
-
- // ISO-8859-1 is the default encoding
- public static final String DEFAULT_ENCODING = "ISO-8859-1";
- protected String encoding = DEFAULT_ENCODING;
-
- protected FilteredArguments arguments;
- protected FilteredArguments extraArgs = null;
-
- protected Filter filter = null;
-
- protected ClassLoader loader = null;
-
- /**
- * Constructs a new LocalizedMessage using resource
as the base name for the
- * RessourceBundle and id
as the message bundle id the resource file.
- * @param resource base name of the resource file
- * @param id the id of the corresponding bundle in the resource file
- * @throws NullPointerException if resource
or id
is null
- */
- public LocalizedMessage(String resource,String id) throws NullPointerException
- {
- if (resource == null || id == null)
- {
- throw new NullPointerException();
- }
- this.id = id;
- this.resource = resource;
- arguments = new FilteredArguments();
- }
-
- /**
- * Constructs a new LocalizedMessage using resource
as the base name for the
- * RessourceBundle and id
as the message bundle id the resource file.
- * @param resource base name of the resource file
- * @param id the id of the corresponding bundle in the resource file
- * @param encoding the encoding of the resource file
- * @throws NullPointerException if resource
or id
is null
- * @throws UnsupportedEncodingException if the encoding is not supported
- */
- public LocalizedMessage(String resource,String id, String encoding) throws NullPointerException, UnsupportedEncodingException
- {
- if (resource == null || id == null)
- {
- throw new NullPointerException();
- }
- this.id = id;
- this.resource = resource;
- arguments = new FilteredArguments();
- this.encoding = encoding;
- }
-
- /**
- * Constructs a new LocalizedMessage using resource
as the base name for the
- * RessourceBundle and id
as the message bundle id the resource file.
- * @param resource base name of the resource file
- * @param id the id of the corresponding bundle in the resource file
- * @param arguments an array containing the arguments for the message
- * @throws NullPointerException if resource
or id
is null
- */
- public LocalizedMessage(String resource, String id, Object[] arguments) throws NullPointerException
- {
- if (resource == null || id == null || arguments == null)
- {
- throw new NullPointerException();
- }
- this.id = id;
- this.resource = resource;
- this.arguments = new FilteredArguments(arguments);
- }
-
- /**
- * Constructs a new LocalizedMessage using resource
as the base name for the
- * RessourceBundle and id
as the message bundle id the resource file.
- * @param resource base name of the resource file
- * @param id the id of the corresponding bundle in the resource file
- * @param encoding the encoding of the resource file
- * @param arguments an array containing the arguments for the message
- * @throws NullPointerException if resource
or id
is null
- * @throws UnsupportedEncodingException if the encoding is not supported
- */
- public LocalizedMessage(String resource, String id, String encoding, Object[] arguments) throws NullPointerException, UnsupportedEncodingException
- {
- if (resource == null || id == null || arguments == null)
- {
- throw new NullPointerException();
- }
- this.id = id;
- this.resource = resource;
- this.arguments = new FilteredArguments(arguments);
- this.encoding = encoding;
- }
-
- /**
- * Reads the entry id + "." + key
from the resource file and returns a
- * formated message for the given Locale and TimeZone.
- * @param key second part of the entry id
- * @param loc the used {@link Locale}
- * @param timezone the used {@link TimeZone}
- * @return a Strng containing the localized message
- * @throws MissingEntryException if the resource file is not available or the entry does not exist.
- */
- public String getEntry(String key,Locale loc, TimeZone timezone) throws MissingEntryException
- {
- String entry = id;
- if (key != null)
- {
- entry += "." + key;
- }
-
- try
- {
- ResourceBundle bundle;
- if (loader == null)
- {
- bundle = ResourceBundle.getBundle(resource,loc);
- }
- else
- {
- bundle = ResourceBundle.getBundle(resource, loc);
- }
- String result = bundle.getString(entry);
- if (!encoding.equals(DEFAULT_ENCODING))
- {
- result = new String(result.getBytes(DEFAULT_ENCODING), encoding);
- }
- if (!arguments.isEmpty())
- {
- result = formatWithTimeZone(result,arguments.getFilteredArgs(loc),loc,timezone);
- }
- result = addExtraArgs(result, loc);
- return result;
- }
- catch (MissingResourceException mre)
- {
- throw new MissingEntryException("Can't find entry " + entry + " in resource file " + resource + ".",
- resource,
- entry,
- loc,
- loader != null ? loader : this.getClassLoader());
- }
- catch (UnsupportedEncodingException use)
- {
- // should never occur - cause we already test this in the constructor
- throw new RuntimeException(use.toString());
- }
- }
-
- protected String formatWithTimeZone(
- String template,
- Object[] arguments,
- Locale locale,
- TimeZone timezone)
- {
- MessageFormat mf = new MessageFormat(" ");
- mf.setLocale(locale);
- mf.applyPattern(template);
- if (!timezone.equals(TimeZone.getDefault()))
- {
- Format[] formats = mf.getFormats();
- for (int i = 0; i < formats.length; i++)
- {
- if (formats[i] instanceof DateFormat)
- {
- DateFormat temp = (DateFormat) formats[i];
- temp.setTimeZone(timezone);
- mf.setFormat(i,temp);
- }
- }
- }
- return mf.format(arguments);
- }
-
- protected String addExtraArgs(String msg, Locale locale)
- {
- if (extraArgs != null)
- {
- StringBuffer sb = new StringBuffer(msg);
- Object[] filteredArgs = extraArgs.getFilteredArgs(locale);
- for (int i = 0; i < filteredArgs.length; i++)
- {
- sb.append(filteredArgs[i]);
- }
- msg = sb.toString();
- }
- return msg;
- }
-
- /**
- * Sets the {@link Filter} that is used to filter the arguments of this message
- * @param filter the {@link Filter} to use. null
to disable filtering.
- */
- public void setFilter(Filter filter)
- {
- arguments.setFilter(filter);
- if (extraArgs != null)
- {
- extraArgs.setFilter(filter);
- }
- this.filter = filter;
- }
-
- /**
- * Returns the current filter.
- * @return the current filter
- */
- public Filter getFilter()
- {
- return filter;
- }
-
- /**
- * Set the {@link ClassLoader} which loads the resource files. If it is set to null
- * then the default {@link ClassLoader} is used.
- * @param loader the {@link ClassLoader} which loads the resource files
- */
- public void setClassLoader(ClassLoader loader)
- {
- this.loader = loader;
- }
-
- /**
- * Returns the {@link ClassLoader} which loads the resource files or null
- * if the default ClassLoader is used.
- * @return the {@link ClassLoader} which loads the resource files
- */
- public ClassLoader getClassLoader()
- {
- return loader;
- }
-
- /**
- * Returns the id of the message in the resource bundle.
- * @return the id of the message
- */
- public String getId()
- {
- return id;
- }
-
- /**
- * Returns the name of the resource bundle for this message
- * @return name of the resource file
- */
- public String getResource()
- {
- return resource;
- }
-
- /**
- * Returns an Object[]
containing the message arguments.
- * @return the message arguments
- */
- public Object[] getArguments()
- {
- return arguments.getArguments();
- }
-
- /**
- *
- * @param extraArg
- */
- public void setExtraArgument(Object extraArg)
- {
- setExtraArguments(new Object[] {extraArg});
- }
-
- /**
- *
- * @param extraArgs
- */
- public void setExtraArguments(Object[] extraArgs)
- {
- if (extraArgs != null)
- {
- this.extraArgs = new FilteredArguments(extraArgs);
- this.extraArgs.setFilter(filter);
- }
- else
- {
- this.extraArgs = null;
- }
- }
-
- /**
- *
- * @return
- */
- public Object[] getExtraArgs()
- {
- return (extraArgs == null) ? null : extraArgs.getArguments();
- }
-
- protected class FilteredArguments
- {
-
- protected Filter filter = null;
-
- protected boolean[] isLocaleSpecific;
- protected int[] argFilterType;
- protected Object[] arguments;
- protected Object[] unpackedArgs;
- protected Object[] filteredArgs;
-
- FilteredArguments()
- {
- this(new Object[0]);
- }
-
- FilteredArguments(Object[] args)
- {
- this.arguments = args;
- this.unpackedArgs = new Object[args.length];
- this.filteredArgs = new Object[args.length];
- this.isLocaleSpecific = new boolean[args.length];
- this.argFilterType = new int[args.length];
- for (int i = 0; i < args.length; i++)
- {
- if (args[i] instanceof TrustedInput)
- {
- this.unpackedArgs[i] = ((TrustedInput) args[i]).getInput();
- argFilterType[i] = NO_FILTER;
- }
- else if (args[i] instanceof UntrustedInput)
- {
- this.unpackedArgs[i] = ((UntrustedInput) args[i]).getInput();
- if (args[i] instanceof UntrustedUrlInput)
- {
- argFilterType[i] = FILTER_URL;
- }
- else
- {
- argFilterType[i] = FILTER;
- }
- }
- else
- {
- this.unpackedArgs[i] = args[i];
- argFilterType[i] = FILTER;
- }
-
- // locale specific
- this.isLocaleSpecific[i] = (this.unpackedArgs[i] instanceof LocaleString);
- }
- }
-
- public boolean isEmpty()
- {
- return unpackedArgs.length == 0;
- }
-
- public Object[] getArguments()
- {
- return arguments;
- }
-
- public Object[] getFilteredArgs(Locale locale)
- {
- Object[] result = new Object[unpackedArgs.length];
- for (int i = 0; i < unpackedArgs.length; i++)
- {
- Object arg;
- if (filteredArgs[i] != null)
- {
- arg = filteredArgs[i];
- }
- else
- {
- arg = unpackedArgs[i];
- if (isLocaleSpecific[i])
- {
- // get locale
- arg = ((LocaleString) arg).getLocaleString(locale);
- arg = filter(argFilterType[i], arg);
- }
- else
- {
- arg = filter(argFilterType[i], arg);
- filteredArgs[i] = arg;
- }
- }
- result[i] = arg;
- }
- return result;
- }
-
- private Object filter(int type, Object obj)
- {
- if (filter != null)
- {
- Object o = (null == obj) ? "null" : obj;
- switch (type)
- {
- case NO_FILTER:
- return o;
- case FILTER:
- return filter.doFilter(o.toString());
- case FILTER_URL:
- return filter.doFilterUrl(o.toString());
- default:
- return null;
- }
- }
- else
- {
- return obj;
- }
- }
-
- public Filter getFilter()
- {
- return filter;
- }
-
- public void setFilter(Filter filter)
- {
- if (filter != this.filter)
- {
- for (int i = 0; i < unpackedArgs.length; i++)
- {
- filteredArgs[i] = null;
- }
- }
- this.filter = filter;
- }
-
- }
-
- public String toString()
- {
- StringBuffer sb = new StringBuffer();
- sb.append("Resource: \"").append(resource);
- sb.append("\" Id: \"").append(id).append("\"");
- sb.append(" Arguments: ").append(arguments.getArguments().length).append(" normal, ")
- .append(extraArgs.getArguments().length).append(" extra");
- sb.append(" Encoding: ").append(encoding);
- sb.append(" ClassLoader: ").append(loader);
- return sb.toString();
- }
-
-}
diff --git a/extern/spongycastle/core/src/main/jdk1.2/org/spongycastle/i18n/MissingEntryException.java b/extern/spongycastle/core/src/main/jdk1.2/org/spongycastle/i18n/MissingEntryException.java
deleted file mode 100644
index d876a91af..000000000
--- a/extern/spongycastle/core/src/main/jdk1.2/org/spongycastle/i18n/MissingEntryException.java
+++ /dev/null
@@ -1,63 +0,0 @@
-package org.spongycastle.i18n;
-
-import java.net.URL;
-import java.util.Locale;
-
-public class MissingEntryException extends RuntimeException
-{
-
- protected final String resource;
- protected final String key;
- protected final ClassLoader loader;
- protected final Locale locale;
-
- private String debugMsg;
-
- public MissingEntryException(String message, String resource, String key, Locale locale, ClassLoader loader)
- {
- super(message);
- this.resource = resource;
- this.key = key;
- this.locale = locale;
- this.loader = loader;
- }
-
- public MissingEntryException(String message, Throwable cause, String resource, String key, Locale locale, ClassLoader loader)
- {
- super(message + ": " + cause);
- this.resource = resource;
- this.key = key;
- this.locale = locale;
- this.loader = loader;
- }
-
- public String getKey()
- {
- return key;
- }
-
- public String getResource()
- {
- return resource;
- }
-
- public ClassLoader getClassLoader()
- {
- return loader;
- }
-
- public Locale getLocale()
- {
- return locale;
- }
-
- public String getDebugMsg()
- {
- if (debugMsg == null)
- {
- debugMsg = "Can not find entry " + key + " in resource file " + resource + " for the locale " + locale + ".";
- }
- return debugMsg;
- }
-
-}
diff --git a/extern/spongycastle/core/src/main/jdk1.3/org/spongycastle/asn1/StreamUtil.java b/extern/spongycastle/core/src/main/jdk1.3/org/spongycastle/asn1/StreamUtil.java
deleted file mode 100644
index 0b0b183e6..000000000
--- a/extern/spongycastle/core/src/main/jdk1.3/org/spongycastle/asn1/StreamUtil.java
+++ /dev/null
@@ -1,89 +0,0 @@
-package org.spongycastle.asn1;
-
-import java.io.ByteArrayInputStream;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-
-class StreamUtil
-{
- /**
- * Find out possible longest length...
- *
- * @param in input stream of interest
- * @return length calculation or MAX_VALUE.
- */
- static int findLimit(InputStream in)
- {
- if (in instanceof LimitedInputStream)
- {
- return ((LimitedInputStream)in).getRemaining();
- }
- else if (in instanceof ASN1InputStream)
- {
- return ((ASN1InputStream)in).getLimit();
- }
- else if (in instanceof ByteArrayInputStream)
- {
- return ((ByteArrayInputStream)in).available();
- }
-
- return Integer.MAX_VALUE;
- }
-
- static int calculateBodyLength(
- int length)
- {
- int count = 1;
-
- if (length > 127)
- {
- int size = 1;
- int val = length;
-
- while ((val >>>= 8) != 0)
- {
- size++;
- }
-
- for (int i = (size - 1) * 8; i >= 0; i -= 8)
- {
- count++;
- }
- }
-
- return count;
- }
-
- static int calculateTagLength(int tagNo)
- throws IOException
- {
- int length = 1;
-
- if (tagNo >= 31)
- {
- if (tagNo < 128)
- {
- length++;
- }
- else
- {
- byte[] stack = new byte[5];
- int pos = stack.length;
-
- stack[--pos] = (byte)(tagNo & 0x7F);
-
- do
- {
- tagNo >>= 7;
- stack[--pos] = (byte)(tagNo & 0x7F | 0x80);
- }
- while (tagNo > 127);
-
- length += stack.length - pos;
- }
- }
-
- return length;
- }
-}
diff --git a/extern/spongycastle/core/src/main/jdk1.3/org/spongycastle/crypto/tls/UDPTransport.java b/extern/spongycastle/core/src/main/jdk1.3/org/spongycastle/crypto/tls/UDPTransport.java
deleted file mode 100644
index 9391e1d26..000000000
--- a/extern/spongycastle/core/src/main/jdk1.3/org/spongycastle/crypto/tls/UDPTransport.java
+++ /dev/null
@@ -1,78 +0,0 @@
-package org.spongycastle.crypto.tls;
-
-import java.io.IOException;
-import java.net.DatagramPacket;
-import java.net.DatagramSocket;
-
-public class UDPTransport
- implements DatagramTransport
-{
- protected final static int MIN_IP_OVERHEAD = 20;
- protected final static int MAX_IP_OVERHEAD = MIN_IP_OVERHEAD + 64;
- protected final static int UDP_OVERHEAD = 8;
-
- protected final DatagramSocket socket;
- protected final int receiveLimit, sendLimit;
-
- public UDPTransport(DatagramSocket socket, int mtu)
- throws IOException
- {
- //
- // In 1.3 and earlier sockets were bound and connected during creation
- //
- //if (!socket.isBound() || !socket.isConnected())
- //{
- // throw new IllegalArgumentException("'socket' must be bound and connected");
- //}
-
- this.socket = socket;
-
- // NOTE: As of JDK 1.6, can use NetworkInterface.getMTU
-
- this.receiveLimit = mtu - MIN_IP_OVERHEAD - UDP_OVERHEAD;
- this.sendLimit = mtu - MAX_IP_OVERHEAD - UDP_OVERHEAD;
- }
-
- public int getReceiveLimit()
- {
- return receiveLimit;
- }
-
- public int getSendLimit()
- {
- // TODO[DTLS] Implement Path-MTU discovery?
- return sendLimit;
- }
-
- public int receive(byte[] buf, int off, int len, int waitMillis)
- throws IOException
- {
- socket.setSoTimeout(waitMillis);
- DatagramPacket packet = new DatagramPacket(buf, off, len);
- socket.receive(packet);
- return packet.getLength();
- }
-
- public void send(byte[] buf, int off, int len)
- throws IOException
- {
- if (len > getSendLimit())
- {
- /*
- * RFC 4347 4.1.1. "If the application attempts to send a record larger than the MTU,
- * the DTLS implementation SHOULD generate an error, thus avoiding sending a packet
- * which will be fragmented."
- */
- throw new TlsFatalAlert(AlertDescription.internal_error);
- }
-
- DatagramPacket packet = new DatagramPacket(buf, off, len);
- socket.send(packet);
- }
-
- public void close()
- throws IOException
- {
- socket.close();
- }
-}
diff --git a/extern/spongycastle/core/src/main/jdk1.3/org/spongycastle/i18n/LocalizedMessage.java b/extern/spongycastle/core/src/main/jdk1.3/org/spongycastle/i18n/LocalizedMessage.java
deleted file mode 100644
index e0a4d84ce..000000000
--- a/extern/spongycastle/core/src/main/jdk1.3/org/spongycastle/i18n/LocalizedMessage.java
+++ /dev/null
@@ -1,464 +0,0 @@
-package org.spongycastle.i18n;
-
-import org.spongycastle.i18n.filter.Filter;
-import org.spongycastle.i18n.filter.TrustedInput;
-import org.spongycastle.i18n.filter.UntrustedInput;
-import org.spongycastle.i18n.filter.UntrustedUrlInput;
-
-import java.io.UnsupportedEncodingException;
-import java.text.DateFormat;
-import java.text.Format;
-import java.text.MessageFormat;
-import java.util.Locale;
-import java.util.MissingResourceException;
-import java.util.ResourceBundle;
-import java.util.TimeZone;
-
-public class LocalizedMessage
-{
-
- protected final String id;
- protected final String resource;
-
- // ISO-8859-1 is the default encoding
- public static final String DEFAULT_ENCODING = "ISO-8859-1";
- protected String encoding = DEFAULT_ENCODING;
-
- protected FilteredArguments arguments;
- protected FilteredArguments extraArgs = null;
-
- protected Filter filter = null;
-
- protected ClassLoader loader = null;
-
- /**
- * Constructs a new LocalizedMessage using resource
as the base name for the
- * RessourceBundle and id
as the message bundle id the resource file.
- * @param resource base name of the resource file
- * @param id the id of the corresponding bundle in the resource file
- * @throws NullPointerException if resource
or id
is null
- */
- public LocalizedMessage(String resource,String id) throws NullPointerException
- {
- if (resource == null || id == null)
- {
- throw new NullPointerException();
- }
- this.id = id;
- this.resource = resource;
- arguments = new FilteredArguments();
- }
-
- /**
- * Constructs a new LocalizedMessage using resource
as the base name for the
- * RessourceBundle and id
as the message bundle id the resource file.
- * @param resource base name of the resource file
- * @param id the id of the corresponding bundle in the resource file
- * @param encoding the encoding of the resource file
- * @throws NullPointerException if resource
or id
is null
- * @throws UnsupportedEncodingException if the encoding is not supported
- */
- public LocalizedMessage(String resource,String id, String encoding) throws NullPointerException, UnsupportedEncodingException
- {
- if (resource == null || id == null)
- {
- throw new NullPointerException();
- }
- this.id = id;
- this.resource = resource;
- arguments = new FilteredArguments();
- this.encoding = encoding;
- }
-
- /**
- * Constructs a new LocalizedMessage using resource
as the base name for the
- * RessourceBundle and id
as the message bundle id the resource file.
- * @param resource base name of the resource file
- * @param id the id of the corresponding bundle in the resource file
- * @param arguments an array containing the arguments for the message
- * @throws NullPointerException if resource
or id
is null
- */
- public LocalizedMessage(String resource, String id, Object[] arguments) throws NullPointerException
- {
- if (resource == null || id == null || arguments == null)
- {
- throw new NullPointerException();
- }
- this.id = id;
- this.resource = resource;
- this.arguments = new FilteredArguments(arguments);
- }
-
- /**
- * Constructs a new LocalizedMessage using resource
as the base name for the
- * RessourceBundle and id
as the message bundle id the resource file.
- * @param resource base name of the resource file
- * @param id the id of the corresponding bundle in the resource file
- * @param encoding the encoding of the resource file
- * @param arguments an array containing the arguments for the message
- * @throws NullPointerException if resource
or id
is null
- * @throws UnsupportedEncodingException if the encoding is not supported
- */
- public LocalizedMessage(String resource, String id, String encoding, Object[] arguments) throws NullPointerException, UnsupportedEncodingException
- {
- if (resource == null || id == null || arguments == null)
- {
- throw new NullPointerException();
- }
- this.id = id;
- this.resource = resource;
- this.arguments = new FilteredArguments(arguments);
- this.encoding = encoding;
- }
-
- /**
- * Reads the entry id + "." + key
from the resource file and returns a
- * formated message for the given Locale and TimeZone.
- * @param key second part of the entry id
- * @param loc the used {@link Locale}
- * @param timezone the used {@link TimeZone}
- * @return a Strng containing the localized message
- * @throws MissingEntryException if the resource file is not available or the entry does not exist.
- */
- public String getEntry(String key,Locale loc, TimeZone timezone) throws MissingEntryException
- {
- String entry = id;
- if (key != null)
- {
- entry += "." + key;
- }
-
- try
- {
- ResourceBundle bundle;
- if (loader == null)
- {
- bundle = ResourceBundle.getBundle(resource,loc);
- }
- else
- {
- bundle = ResourceBundle.getBundle(resource, loc, loader);
- }
- String result = bundle.getString(entry);
- if (!encoding.equals(DEFAULT_ENCODING))
- {
- result = new String(result.getBytes(DEFAULT_ENCODING), encoding);
- }
- if (!arguments.isEmpty())
- {
- result = formatWithTimeZone(result,arguments.getFilteredArgs(loc),loc,timezone);
- }
- result = addExtraArgs(result, loc);
- return result;
- }
- catch (MissingResourceException mre)
- {
- throw new MissingEntryException("Can't find entry " + entry + " in resource file " + resource + ".",
- resource,
- entry,
- loc,
- loader != null ? loader : this.getClassLoader());
- }
- catch (UnsupportedEncodingException use)
- {
- // should never occur - cause we already test this in the constructor
- throw new RuntimeException(use.toString());
- }
- }
-
- protected String formatWithTimeZone(
- String template,
- Object[] arguments,
- Locale locale,
- TimeZone timezone)
- {
- MessageFormat mf = new MessageFormat(" ");
- mf.setLocale(locale);
- mf.applyPattern(template);
- if (!timezone.equals(TimeZone.getDefault()))
- {
- Format[] formats = mf.getFormats();
- for (int i = 0; i < formats.length; i++)
- {
- if (formats[i] instanceof DateFormat)
- {
- DateFormat temp = (DateFormat) formats[i];
- temp.setTimeZone(timezone);
- mf.setFormat(i,temp);
- }
- }
- }
- return mf.format(arguments);
- }
-
- protected String addExtraArgs(String msg, Locale locale)
- {
- if (extraArgs != null)
- {
- StringBuffer sb = new StringBuffer(msg);
- Object[] filteredArgs = extraArgs.getFilteredArgs(locale);
- for (int i = 0; i < filteredArgs.length; i++)
- {
- sb.append(filteredArgs[i]);
- }
- msg = sb.toString();
- }
- return msg;
- }
-
- /**
- * Sets the {@link Filter} that is used to filter the arguments of this message
- * @param filter the {@link Filter} to use. null
to disable filtering.
- */
- public void setFilter(Filter filter)
- {
- arguments.setFilter(filter);
- if (extraArgs != null)
- {
- extraArgs.setFilter(filter);
- }
- this.filter = filter;
- }
-
- /**
- * Returns the current filter.
- * @return the current filter
- */
- public Filter getFilter()
- {
- return filter;
- }
-
- /**
- * Set the {@link ClassLoader} which loads the resource files. If it is set to null
- * then the default {@link ClassLoader} is used.
- * @param loader the {@link ClassLoader} which loads the resource files
- */
- public void setClassLoader(ClassLoader loader)
- {
- this.loader = loader;
- }
-
- /**
- * Returns the {@link ClassLoader} which loads the resource files or null
- * if the default ClassLoader is used.
- * @return the {@link ClassLoader} which loads the resource files
- */
- public ClassLoader getClassLoader()
- {
- return loader;
- }
-
- /**
- * Returns the id of the message in the resource bundle.
- * @return the id of the message
- */
- public String getId()
- {
- return id;
- }
-
- /**
- * Returns the name of the resource bundle for this message
- * @return name of the resource file
- */
- public String getResource()
- {
- return resource;
- }
-
- /**
- * Returns an Object[]
containing the message arguments.
- * @return the message arguments
- */
- public Object[] getArguments()
- {
- return arguments.getArguments();
- }
-
- /**
- *
- * @param extraArg
- */
- public void setExtraArgument(Object extraArg)
- {
- setExtraArguments(new Object[] {extraArg});
- }
-
- /**
- *
- * @param extraArgs
- */
- public void setExtraArguments(Object[] extraArgs)
- {
- if (extraArgs != null)
- {
- this.extraArgs = new FilteredArguments(extraArgs);
- this.extraArgs.setFilter(filter);
- }
- else
- {
- this.extraArgs = null;
- }
- }
-
- /**
- *
- * @return
- */
- public Object[] getExtraArgs()
- {
- return (extraArgs == null) ? null : extraArgs.getArguments();
- }
-
- protected class FilteredArguments
- {
- protected static final int NO_FILTER = 0;
- protected static final int FILTER = 1;
- protected static final int FILTER_URL = 2;
-
- protected Filter filter = null;
-
- protected boolean[] isLocaleSpecific;
- protected int[] argFilterType;
- protected Object[] arguments;
- protected Object[] unpackedArgs;
- protected Object[] filteredArgs;
-
- FilteredArguments()
- {
- this(new Object[0]);
- }
-
- FilteredArguments(Object[] args)
- {
- this.arguments = args;
- this.unpackedArgs = new Object[args.length];
- this.filteredArgs = new Object[args.length];
- this.isLocaleSpecific = new boolean[args.length];
- this.argFilterType = new int[args.length];
- for (int i = 0; i < args.length; i++)
- {
- if (args[i] instanceof TrustedInput)
- {
- this.unpackedArgs[i] = ((TrustedInput) args[i]).getInput();
- argFilterType[i] = NO_FILTER;
- }
- else if (args[i] instanceof UntrustedInput)
- {
- this.unpackedArgs[i] = ((UntrustedInput) args[i]).getInput();
- if (args[i] instanceof UntrustedUrlInput)
- {
- argFilterType[i] = FILTER_URL;
- }
- else
- {
- argFilterType[i] = FILTER;
- }
- }
- else
- {
- this.unpackedArgs[i] = args[i];
- argFilterType[i] = FILTER;
- }
-
- // locale specific
- this.isLocaleSpecific[i] = (this.unpackedArgs[i] instanceof LocaleString);
- }
- }
-
- public boolean isEmpty()
- {
- return unpackedArgs.length == 0;
- }
-
- public Object[] getArguments()
- {
- return arguments;
- }
-
- public Object[] getFilteredArgs(Locale locale)
- {
- Object[] result = new Object[unpackedArgs.length];
- for (int i = 0; i < unpackedArgs.length; i++)
- {
- Object arg;
- if (filteredArgs[i] != null)
- {
- arg = filteredArgs[i];
- }
- else
- {
- arg = unpackedArgs[i];
- if (isLocaleSpecific[i])
- {
- // get locale
- arg = ((LocaleString) arg).getLocaleString(locale);
- arg = filter(argFilterType[i], arg);
- }
- else
- {
- arg = filter(argFilterType[i], arg);
- filteredArgs[i] = arg;
- }
- }
- result[i] = arg;
- }
- return result;
- }
-
- private Object filter(int type, Object obj)
- {
- if (filter != null)
- {
- Object o = (null == obj) ? "null" : obj;
- switch (type)
- {
- case NO_FILTER:
- return o;
- case FILTER:
- return filter.doFilter(o.toString());
- case FILTER_URL:
- return filter.doFilterUrl(o.toString());
- default:
- return null;
- }
- }
- else
- {
- return obj;
- }
- }
-
- public Filter getFilter()
- {
- return filter;
- }
-
- public void setFilter(Filter filter)
- {
- if (filter != this.filter)
- {
- for (int i = 0; i < unpackedArgs.length; i++)
- {
- filteredArgs[i] = null;
- }
- }
- this.filter = filter;
- }
-
- }
-
- public String toString()
- {
- StringBuffer sb = new StringBuffer();
- sb.append("Resource: \"").append(resource);
- sb.append("\" Id: \"").append(id).append("\"");
- sb.append(" Arguments: ").append(arguments.getArguments().length).append(" normal, ")
- .append(extraArgs.getArguments().length).append(" extra");
- sb.append(" Encoding: ").append(encoding);
- sb.append(" ClassLoader: ").append(loader);
- return sb.toString();
- }
-
-}
diff --git a/extern/spongycastle/core/src/main/jdk1.3/org/spongycastle/i18n/MissingEntryException.java b/extern/spongycastle/core/src/main/jdk1.3/org/spongycastle/i18n/MissingEntryException.java
deleted file mode 100644
index 582b9ab9b..000000000
--- a/extern/spongycastle/core/src/main/jdk1.3/org/spongycastle/i18n/MissingEntryException.java
+++ /dev/null
@@ -1,81 +0,0 @@
-package org.spongycastle.i18n;
-
-import java.net.URL;
-import java.net.URLClassLoader;
-import java.util.Locale;
-
-public class MissingEntryException
- extends RuntimeException
-{
-
- protected final String resource;
- protected final String key;
- protected final ClassLoader loader;
- protected final Locale locale;
-
- private Throwable cause;
- private String debugMsg;
-
- public MissingEntryException(String message, String resource, String key, Locale locale, ClassLoader loader)
- {
- super(message);
- this.resource = resource;
- this.key = key;
- this.locale = locale;
- this.loader = loader;
- }
-
- public MissingEntryException(String message, Throwable cause, String resource, String key, Locale locale, ClassLoader loader)
- {
- super(message);
- this.cause = cause;
- this.resource = resource;
- this.key = key;
- this.locale = locale;
- this.loader = loader;
- }
-
- public Throwable getCause()
- {
- return cause;
- }
-
- public String getKey()
- {
- return key;
- }
-
- public String getResource()
- {
- return resource;
- }
-
- public ClassLoader getClassLoader()
- {
- return loader;
- }
-
- public Locale getLocale()
- {
- return locale;
- }
-
- public String getDebugMsg()
- {
- if (debugMsg == null)
- {
- debugMsg = "Can not find entry " + key + " in resource file " + resource + " for the locale " + locale + ".";
- if (loader instanceof URLClassLoader)
- {
- URL[] urls = ((URLClassLoader) loader).getURLs();
- debugMsg += " The following entries in the classpath were searched: ";
- for (int i = 0; i != urls.length; i++)
- {
- debugMsg += urls[i] + " ";
- }
- }
- }
- return debugMsg;
- }
-
-}
diff --git a/extern/spongycastle/core/src/main/jdk1.4/org/spongycastle/util/Integers.java b/extern/spongycastle/core/src/main/jdk1.4/org/spongycastle/util/Integers.java
deleted file mode 100644
index bf6b5e345..000000000
--- a/extern/spongycastle/core/src/main/jdk1.4/org/spongycastle/util/Integers.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package org.spongycastle.util;
-
-public class Integers
-{
- public static int rotateLeft(int i, int distance)
- {
- return (i << distance) ^ (i >>> -distance);
- }
-
- public static int rotateRight(int i, int distance)
- {
- return (i >>> distance) ^ (i << -distance);
- }
-
- public static Integer valueOf(int value)
- {
- return new Integer(value);
- }
-}
diff --git a/extern/spongycastle/core/src/main/jdk1.4/org/spongycastle/util/Shorts.java b/extern/spongycastle/core/src/main/jdk1.4/org/spongycastle/util/Shorts.java
deleted file mode 100644
index 66a992f77..000000000
--- a/extern/spongycastle/core/src/main/jdk1.4/org/spongycastle/util/Shorts.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package org.spongycastle.util;
-
-public class Shorts
-{
- public static Short valueOf(short value)
- {
- return new Short(value);
- }
-}
diff --git a/extern/spongycastle/core/src/main/jdk1.4/org/spongycastle/util/Times.java b/extern/spongycastle/core/src/main/jdk1.4/org/spongycastle/util/Times.java
deleted file mode 100644
index f88b5395c..000000000
--- a/extern/spongycastle/core/src/main/jdk1.4/org/spongycastle/util/Times.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package org.spongycastle.util;
-
-public final class Times
-{
- private static long NANOS_PER_MILLI = 1000000L;
-
- public static long nanoTime()
- {
- return NANOS_PER_MILLI * System.currentTimeMillis();
- }
-}
diff --git a/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/cert/cmp/GeneralPKIMessage.java b/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/cert/cmp/GeneralPKIMessage.java
deleted file mode 100644
index 2f74fe551..000000000
--- a/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/cert/cmp/GeneralPKIMessage.java
+++ /dev/null
@@ -1,82 +0,0 @@
-package org.spongycastle.cert.cmp;
-
-import java.io.IOException;
-
-import org.spongycastle.asn1.ASN1Primitive;
-import org.spongycastle.asn1.cmp.PKIBody;
-import org.spongycastle.asn1.cmp.PKIHeader;
-import org.spongycastle.asn1.cmp.PKIMessage;
-import org.spongycastle.cert.CertIOException;
-
-/**
- * General wrapper for a generic PKIMessage
- */
-public class GeneralPKIMessage
-{
- private PKIMessage pkiMessage;
-
- private static PKIMessage parseBytes(byte[] encoding)
- throws IOException
- {
- try
- {
- return PKIMessage.getInstance(ASN1Primitive.fromByteArray(encoding));
- }
- catch (ClassCastException e)
- {
- throw new CertIOException("malformed data: " + e.getMessage(), e);
- }
- catch (IllegalArgumentException e)
- {
- throw new CertIOException("malformed data: " + e.getMessage(), e);
- }
- }
-
- /**
- * Create a PKIMessage from the passed in bytes.
- *
- * @param encoding BER/DER encoding of the PKIMessage
- * @throws IOException in the event of corrupted data, or an incorrect structure.
- */
- public GeneralPKIMessage(byte[] encoding)
- throws IOException
- {
- this(parseBytes(encoding));
- }
-
- /**
- * Wrap a PKIMessage ASN.1 structure.
- *
- * @param pkiMessage base PKI message.
- */
- public GeneralPKIMessage(PKIMessage pkiMessage)
- {
- this.pkiMessage = pkiMessage;
- }
-
- public PKIHeader getHeader()
- {
- return pkiMessage.getHeader();
- }
-
- public PKIBody getBody()
- {
- return pkiMessage.getBody();
- }
-
- /**
- * Return true if this message has protection bits on it. A return value of true
- * indicates the message can be used to construct a ProtectedPKIMessage.
- *
- * @return true if message has protection, false otherwise.
- */
- public boolean hasProtection()
- {
- return pkiMessage.getHeader().getProtectionAlg() != null;
- }
-
- public PKIMessage toASN1Structure()
- {
- return pkiMessage;
- }
-}
diff --git a/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/cert/crmf/CertificateRequestMessage.java b/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/cert/crmf/CertificateRequestMessage.java
deleted file mode 100644
index 6f582812b..000000000
--- a/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/cert/crmf/CertificateRequestMessage.java
+++ /dev/null
@@ -1,309 +0,0 @@
-package org.spongycastle.cert.crmf;
-
-import java.io.IOException;
-
-import org.spongycastle.asn1.ASN1ObjectIdentifier;
-import org.spongycastle.asn1.ASN1Primitive;
-import org.spongycastle.asn1.DERUTF8String;
-import org.spongycastle.asn1.crmf.AttributeTypeAndValue;
-import org.spongycastle.asn1.crmf.CRMFObjectIdentifiers;
-import org.spongycastle.asn1.crmf.CertReqMsg;
-import org.spongycastle.asn1.crmf.CertTemplate;
-import org.spongycastle.asn1.crmf.Controls;
-import org.spongycastle.asn1.crmf.PKIArchiveOptions;
-import org.spongycastle.asn1.crmf.PKMACValue;
-import org.spongycastle.asn1.crmf.POPOSigningKey;
-import org.spongycastle.asn1.crmf.ProofOfPossession;
-import org.spongycastle.cert.CertIOException;
-import org.spongycastle.operator.ContentVerifier;
-import org.spongycastle.operator.ContentVerifierProvider;
-import org.spongycastle.operator.OperatorCreationException;
-
-/**
- * Carrier for a CRMF CertReqMsg.
- */
-public class CertificateRequestMessage
-{
- public static final int popRaVerified = ProofOfPossession.TYPE_RA_VERIFIED;
- public static final int popSigningKey = ProofOfPossession.TYPE_SIGNING_KEY;
- public static final int popKeyEncipherment = ProofOfPossession.TYPE_KEY_ENCIPHERMENT;
- public static final int popKeyAgreement = ProofOfPossession.TYPE_KEY_AGREEMENT;
-
- private CertReqMsg certReqMsg;
- private Controls controls;
-
- private static CertReqMsg parseBytes(byte[] encoding)
- throws IOException
- {
- try
- {
- return CertReqMsg.getInstance(ASN1Primitive.fromByteArray(encoding));
- }
- catch (ClassCastException e)
- {
- throw new CertIOException("malformed data: " + e.getMessage(), e);
- }
- catch (IllegalArgumentException e)
- {
- throw new CertIOException("malformed data: " + e.getMessage(), e);
- }
- }
-
- /**
- * Create a CertificateRequestMessage from the passed in bytes.
- *
- * @param certReqMsg BER/DER encoding of the CertReqMsg structure.
- * @throws IOException in the event of corrupted data, or an incorrect structure.
- */
- public CertificateRequestMessage(byte[] certReqMsg)
- throws IOException
- {
- this(parseBytes(certReqMsg));
- }
-
- public CertificateRequestMessage(CertReqMsg certReqMsg)
- {
- this.certReqMsg = certReqMsg;
- this.controls = certReqMsg.getCertReq().getControls();
- }
-
- /**
- * Return the underlying ASN.1 object defining this CertificateRequestMessage object.
- *
- * @return a CertReqMsg.
- */
- public CertReqMsg toASN1Structure()
- {
- return certReqMsg;
- }
-
- /**
- * Return the certificate template contained in this message.
- *
- * @return a CertTemplate structure.
- */
- public CertTemplate getCertTemplate()
- {
- return this.certReqMsg.getCertReq().getCertTemplate();
- }
-
- /**
- * Return whether or not this request has control values associated with it.
- *
- * @return true if there are control values present, false otherwise.
- */
- public boolean hasControls()
- {
- return controls != null;
- }
-
- /**
- * Return whether or not this request has a specific type of control value.
- *
- * @param type the type OID for the control value we are checking for.
- * @return true if a control value of type is present, false otherwise.
- */
- public boolean hasControl(ASN1ObjectIdentifier type)
- {
- return findControl(type) != null;
- }
-
- /**
- * Return a control value of the specified type.
- *
- * @param type the type OID for the control value we are checking for.
- * @return the control value if present, null otherwise.
- */
- public Control getControl(ASN1ObjectIdentifier type)
- {
- AttributeTypeAndValue found = findControl(type);
-
- if (found != null)
- {
- if (found.getType().equals(CRMFObjectIdentifiers.id_regCtrl_pkiArchiveOptions))
- {
- return new PKIArchiveControl(PKIArchiveOptions.getInstance(found.getValue()));
- }
- if (found.getType().equals(CRMFObjectIdentifiers.id_regCtrl_regToken))
- {
- return new RegTokenControl(DERUTF8String.getInstance(found.getValue()));
- }
- if (found.getType().equals(CRMFObjectIdentifiers.id_regCtrl_authenticator))
- {
- return new AuthenticatorControl(DERUTF8String.getInstance(found.getValue()));
- }
- }
-
- return null;
- }
-
- private AttributeTypeAndValue findControl(ASN1ObjectIdentifier type)
- {
- if (controls == null)
- {
- return null;
- }
-
- AttributeTypeAndValue[] tAndVs = controls.toAttributeTypeAndValueArray();
- AttributeTypeAndValue found = null;
-
- for (int i = 0; i != tAndVs.length; i++)
- {
- if (tAndVs[i].getType().equals(type))
- {
- found = tAndVs[i];
- break;
- }
- }
-
- return found;
- }
-
- /**
- * Return whether or not this request message has a proof-of-possession field in it.
- *
- * @return true if proof-of-possession is present, false otherwise.
- */
- public boolean hasProofOfPossession()
- {
- return this.certReqMsg.getPopo() != null;
- }
-
- /**
- * Return the type of the proof-of-possession this request message provides.
- *
- * @return one of: popRaVerified, popSigningKey, popKeyEncipherment, popKeyAgreement
- */
- public int getProofOfPossessionType()
- {
- return this.certReqMsg.getPopo().getType();
- }
-
- /**
- * Return whether or not the proof-of-possession (POP) is of the type popSigningKey and
- * it has a public key MAC associated with it.
- *
- * @return true if POP is popSigningKey and a PKMAC is present, false otherwise.
- */
- public boolean hasSigningKeyProofOfPossessionWithPKMAC()
- {
- ProofOfPossession pop = certReqMsg.getPopo();
-
- if (pop.getType() == popSigningKey)
- {
- POPOSigningKey popoSign = POPOSigningKey.getInstance(pop.getObject());
-
- return popoSign.getPoposkInput().getPublicKeyMAC() != null;
- }
-
- return false;
- }
-
- /**
- * Return whether or not a signing key proof-of-possession (POP) is valid.
- *
- * @param verifierProvider a provider that can produce content verifiers for the signature contained in this POP.
- * @return true if the POP is valid, false otherwise.
- * @throws CRMFException if there is a problem in verification or content verifier creation.
- * @throws IllegalStateException if POP not appropriate.
- */
- public boolean isValidSigningKeyPOP(ContentVerifierProvider verifierProvider)
- throws CRMFException, IllegalStateException
- {
- ProofOfPossession pop = certReqMsg.getPopo();
-
- if (pop.getType() == popSigningKey)
- {
- POPOSigningKey popoSign = POPOSigningKey.getInstance(pop.getObject());
-
- if (popoSign.getPoposkInput() != null && popoSign.getPoposkInput().getPublicKeyMAC() != null)
- {
- throw new IllegalStateException("verification requires password check");
- }
-
- return verifySignature(verifierProvider, popoSign);
- }
- else
- {
- throw new IllegalStateException("not Signing Key type of proof of possession");
- }
- }
-
- /**
- * Return whether or not a signing key proof-of-possession (POP), with an associated PKMAC, is valid.
- *
- * @param verifierProvider a provider that can produce content verifiers for the signature contained in this POP.
- * @param macBuilder a suitable PKMACBuilder to create the MAC verifier.
- * @param password the password used to key the MAC calculation.
- * @return true if the POP is valid, false otherwise.
- * @throws CRMFException if there is a problem in verification or content verifier creation.
- * @throws IllegalStateException if POP not appropriate.
- */
- public boolean isValidSigningKeyPOP(ContentVerifierProvider verifierProvider, PKMACBuilder macBuilder, char[] password)
- throws CRMFException, IllegalStateException
- {
- ProofOfPossession pop = certReqMsg.getPopo();
-
- if (pop.getType() == popSigningKey)
- {
- POPOSigningKey popoSign = POPOSigningKey.getInstance(pop.getObject());
-
- if (popoSign.getPoposkInput() == null || popoSign.getPoposkInput().getSender() != null)
- {
- throw new IllegalStateException("no PKMAC present in proof of possession");
- }
-
- PKMACValue pkMAC = popoSign.getPoposkInput().getPublicKeyMAC();
- PKMACValueVerifier macVerifier = new PKMACValueVerifier(macBuilder);
-
- if (macVerifier.isValid(pkMAC, password, this.getCertTemplate().getPublicKey()))
- {
- return verifySignature(verifierProvider, popoSign);
- }
-
- return false;
- }
- else
- {
- throw new IllegalStateException("not Signing Key type of proof of possession");
- }
- }
-
- private boolean verifySignature(ContentVerifierProvider verifierProvider, POPOSigningKey popoSign)
- throws CRMFException
- {
- ContentVerifier verifier;
-
- try
- {
- verifier = verifierProvider.get(popoSign.getAlgorithmIdentifier());
- }
- catch (OperatorCreationException e)
- {
- throw new CRMFException("unable to create verifier: " + e.getMessage(), e);
- }
-
- if (popoSign.getPoposkInput() != null)
- {
- CRMFUtil.derEncodeToStream(popoSign.getPoposkInput(), verifier.getOutputStream());
- }
- else
- {
- CRMFUtil.derEncodeToStream(certReqMsg.getCertReq(), verifier.getOutputStream());
- }
-
- return verifier.verify(popoSign.getSignature().getBytes());
- }
-
- /**
- * Return the ASN.1 encoding of the certReqMsg we wrap.
- *
- * @return a byte array containing the binary encoding of the certReqMsg.
- * @throws IOException if there is an exception creating the encoding.
- */
- public byte[] getEncoded()
- throws IOException
- {
- return certReqMsg.getEncoded();
- }
-}
diff --git a/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/cert/crmf/FixedLengthMGF1Padder.java b/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/cert/crmf/FixedLengthMGF1Padder.java
deleted file mode 100644
index cfb33d62e..000000000
--- a/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/cert/crmf/FixedLengthMGF1Padder.java
+++ /dev/null
@@ -1,120 +0,0 @@
-package org.spongycastle.cert.crmf;
-
-import java.security.SecureRandom;
-
-import org.spongycastle.crypto.Digest;
-import org.spongycastle.crypto.digests.SHA1Digest;
-import org.spongycastle.crypto.generators.MGF1BytesGenerator;
-import org.spongycastle.crypto.params.MGFParameters;
-
-/**
- * An encrypted value padder that uses MGF1 as the basis of the padding.
- */
-public class FixedLengthMGF1Padder
- implements EncryptedValuePadder
-{
- private int length;
- private SecureRandom random;
- private Digest dig = new SHA1Digest();
-
- /**
- * Create a padder to so that padded output will always be at least
- * length bytes long.
- *
- * @param length fixed length for padded output.
- */
- public FixedLengthMGF1Padder(int length)
- {
- this(length, null);
- }
-
- /**
- * Create a padder to so that padded output will always be at least
- * length bytes long, using the passed in source of randomness to
- * provide the random material for the padder.
- *
- * @param length fixed length for padded output.
- * @param random a source of randomness.
- */
- public FixedLengthMGF1Padder(int length, SecureRandom random)
- {
- this.length = length;
- this.random = random;
- }
-
- public byte[] getPaddedData(byte[] data)
- {
- byte[] bytes = new byte[length];
- byte[] seed = new byte[dig.getDigestSize()];
- byte[] mask = new byte[length - dig.getDigestSize()];
-
- if (random == null)
- {
- random = new SecureRandom();
- }
-
- random.nextBytes(seed);
-
- MGF1BytesGenerator maskGen = new MGF1BytesGenerator(dig);
-
- maskGen.init(new MGFParameters(seed));
-
- maskGen.generateBytes(mask, 0, mask.length);
-
- System.arraycopy(seed, 0, bytes, 0, seed.length);
- System.arraycopy(data, 0, bytes, seed.length, data.length);
-
- for (int i = seed.length + data.length + 1; i != bytes.length; i++)
- {
- bytes[i] = (byte)(1 + Math.abs(random.nextInt()) % 254);
- }
-
- for (int i = 0; i != mask.length; i++)
- {
- bytes[i + seed.length] ^= mask[i];
- }
-
- return bytes;
- }
-
- public byte[] getUnpaddedData(byte[] paddedData)
- {
- byte[] seed = new byte[dig.getDigestSize()];
- byte[] mask = new byte[length - dig.getDigestSize()];
-
- System.arraycopy(paddedData, 0, seed, 0, seed.length);
-
- MGF1BytesGenerator maskGen = new MGF1BytesGenerator(dig);
-
- maskGen.init(new MGFParameters(seed));
-
- maskGen.generateBytes(mask, 0, mask.length);
-
- for (int i = 0; i != mask.length; i++)
- {
- paddedData[i + seed.length] ^= mask[i];
- }
-
- int end = 0;
-
- for (int i = paddedData.length - 1; i != seed.length; i--)
- {
- if (paddedData[i] == 0)
- {
- end = i;
- break;
- }
- }
-
- if (end == 0)
- {
- throw new IllegalStateException("bad padding in encoding");
- }
-
- byte[] data = new byte[end - seed.length];
-
- System.arraycopy(paddedData, seed.length, data, 0, data.length);
-
- return data;
- }
-}
diff --git a/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/cert/crmf/bc/BcFixedLengthMGF1Padder.java b/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/cert/crmf/bc/BcFixedLengthMGF1Padder.java
deleted file mode 100644
index eec071e14..000000000
--- a/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/cert/crmf/bc/BcFixedLengthMGF1Padder.java
+++ /dev/null
@@ -1,134 +0,0 @@
-package org.spongycastle.cert.crmf.bc;
-
-import java.security.SecureRandom;
-
-import org.spongycastle.cert.crmf.EncryptedValuePadder;
-import org.spongycastle.crypto.Digest;
-import org.spongycastle.crypto.digests.SHA1Digest;
-import org.spongycastle.crypto.generators.MGF1BytesGenerator;
-import org.spongycastle.crypto.params.MGFParameters;
-
-/**
- * An encrypted value padder that uses MGF1 as the basis of the padding.
- */
-public class BcFixedLengthMGF1Padder
- implements EncryptedValuePadder
-{
- private int length;
- private SecureRandom random;
- private Digest dig = new SHA1Digest();
-
- /**
- * Create a padder to so that padded output will always be at least
- * length bytes long.
- *
- * @param length fixed length for padded output.
- */
- public BcFixedLengthMGF1Padder(int length)
- {
- this(length, null);
- }
-
- /**
- * Create a padder to so that padded output will always be at least
- * length bytes long, using the passed in source of randomness to
- * provide the random material for the padder.
- *
- * @param length fixed length for padded output.
- * @param random a source of randomness.
- */
- public BcFixedLengthMGF1Padder(int length, SecureRandom random)
- {
- this.length = length;
- this.random = random;
- }
-
- public byte[] getPaddedData(byte[] data)
- {
- byte[] bytes = new byte[length];
- byte[] seed = new byte[dig.getDigestSize()];
- byte[] mask = new byte[length - dig.getDigestSize()];
-
- if (random == null)
- {
- random = new SecureRandom();
- }
-
- random.nextBytes(seed);
-
- MGF1BytesGenerator maskGen = new MGF1BytesGenerator(dig);
-
- maskGen.init(new MGFParameters(seed));
-
- maskGen.generateBytes(mask, 0, mask.length);
-
- System.arraycopy(seed, 0, bytes, 0, seed.length);
- System.arraycopy(data, 0, bytes, seed.length, data.length);
-
- for (int i = seed.length + data.length + 1; i != bytes.length; i++)
- {
- bytes[i] = (byte)(1 + nextByte(random));
- }
-
- for (int i = 0; i != mask.length; i++)
- {
- bytes[i + seed.length] ^= mask[i];
- }
-
- return bytes;
- }
-
- public byte[] getUnpaddedData(byte[] paddedData)
- {
- byte[] seed = new byte[dig.getDigestSize()];
- byte[] mask = new byte[length - dig.getDigestSize()];
-
- System.arraycopy(paddedData, 0, seed, 0, seed.length);
-
- MGF1BytesGenerator maskGen = new MGF1BytesGenerator(dig);
-
- maskGen.init(new MGFParameters(seed));
-
- maskGen.generateBytes(mask, 0, mask.length);
-
- for (int i = 0; i != mask.length; i++)
- {
- paddedData[i + seed.length] ^= mask[i];
- }
-
- int end = 0;
-
- for (int i = paddedData.length - 1; i != seed.length; i--)
- {
- if (paddedData[i] == 0)
- {
- end = i;
- break;
- }
- }
-
- if (end == 0)
- {
- throw new IllegalStateException("bad padding in encoding");
- }
-
- byte[] data = new byte[end - seed.length];
-
- System.arraycopy(paddedData, seed.length, data, 0, data.length);
-
- return data;
- }
-
- private int nextByte(SecureRandom random)
- {
- int bits, val;
- do
- {
- bits = random.nextInt() & 0x7fffffff;
- val = bits % 255;
- }
- while (bits - val + 254 < 0);
-
- return val;
- }
-}
diff --git a/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/cert/crmf/jcajce/CRMFHelper.java b/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/cert/crmf/jcajce/CRMFHelper.java
deleted file mode 100644
index afed75903..000000000
--- a/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/cert/crmf/jcajce/CRMFHelper.java
+++ /dev/null
@@ -1,485 +0,0 @@
-package org.spongycastle.cert.crmf.jcajce;
-
-import java.io.IOException;
-import java.security.AlgorithmParameterGenerator;
-import java.security.AlgorithmParameters;
-import java.security.GeneralSecurityException;
-import java.security.InvalidAlgorithmParameterException;
-import java.security.InvalidKeyException;
-import java.security.Key;
-import java.security.KeyFactory;
-import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
-import java.security.NoSuchProviderException;
-import java.security.PublicKey;
-import java.security.SecureRandom;
-import java.security.spec.InvalidKeySpecException;
-import java.security.spec.InvalidParameterSpecException;
-import java.security.spec.X509EncodedKeySpec;
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.crypto.Cipher;
-import javax.crypto.KeyGenerator;
-import javax.crypto.Mac;
-import javax.crypto.NoSuchPaddingException;
-import javax.crypto.SecretKey;
-import javax.crypto.spec.IvParameterSpec;
-import javax.crypto.spec.RC2ParameterSpec;
-
-import org.spongycastle.asn1.ASN1Encodable;
-import org.spongycastle.asn1.ASN1Null;
-import org.spongycastle.asn1.ASN1ObjectIdentifier;
-import org.spongycastle.asn1.ASN1OctetString;
-import org.spongycastle.asn1.ASN1Primitive;
-import org.spongycastle.asn1.DERBitString;
-import org.spongycastle.asn1.DERNull;
-import org.spongycastle.asn1.iana.IANAObjectIdentifiers;
-import org.spongycastle.asn1.nist.NISTObjectIdentifiers;
-import org.spongycastle.asn1.oiw.OIWObjectIdentifiers;
-import org.spongycastle.asn1.pkcs.PKCSObjectIdentifiers;
-import org.spongycastle.asn1.x509.AlgorithmIdentifier;
-import org.spongycastle.asn1.x509.SubjectPublicKeyInfo;
-import org.spongycastle.asn1.x9.X9ObjectIdentifiers;
-import org.spongycastle.cert.crmf.CRMFException;
-import org.spongycastle.cms.CMSAlgorithm;
-import org.spongycastle.cms.CMSEnvelopedDataGenerator;
-import org.spongycastle.jcajce.util.JcaJceHelper;
-
-class CRMFHelper
-{
- protected static final Map BASE_CIPHER_NAMES = new HashMap();
- protected static final Map CIPHER_ALG_NAMES = new HashMap();
- protected static final Map DIGEST_ALG_NAMES = new HashMap();
- protected static final Map KEY_ALG_NAMES = new HashMap();
- protected static final Map MAC_ALG_NAMES = new HashMap();
-
- static
- {
- BASE_CIPHER_NAMES.put(PKCSObjectIdentifiers.des_EDE3_CBC, "DESEDE");
- BASE_CIPHER_NAMES.put(NISTObjectIdentifiers.id_aes128_CBC, "AES");
- BASE_CIPHER_NAMES.put(NISTObjectIdentifiers.id_aes192_CBC, "AES");
- BASE_CIPHER_NAMES.put(NISTObjectIdentifiers.id_aes256_CBC, "AES");
-
- CIPHER_ALG_NAMES.put(CMSAlgorithm.DES_EDE3_CBC, "DESEDE/CBC/PKCS5Padding");
- CIPHER_ALG_NAMES.put(CMSAlgorithm.AES128_CBC, "AES/CBC/PKCS5Padding");
- CIPHER_ALG_NAMES.put(CMSAlgorithm.AES192_CBC, "AES/CBC/PKCS5Padding");
- CIPHER_ALG_NAMES.put(CMSAlgorithm.AES256_CBC, "AES/CBC/PKCS5Padding");
- CIPHER_ALG_NAMES.put(new ASN1ObjectIdentifier(PKCSObjectIdentifiers.rsaEncryption.getId()), "RSA/ECB/PKCS1Padding");
-
- DIGEST_ALG_NAMES.put(OIWObjectIdentifiers.idSHA1, "SHA1");
- DIGEST_ALG_NAMES.put(NISTObjectIdentifiers.id_sha224, "SHA224");
- DIGEST_ALG_NAMES.put(NISTObjectIdentifiers.id_sha256, "SHA256");
- DIGEST_ALG_NAMES.put(NISTObjectIdentifiers.id_sha384, "SHA384");
- DIGEST_ALG_NAMES.put(NISTObjectIdentifiers.id_sha512, "SHA512");
-
- MAC_ALG_NAMES.put(IANAObjectIdentifiers.hmacSHA1, "HMACSHA1");
- MAC_ALG_NAMES.put(PKCSObjectIdentifiers.id_hmacWithSHA1, "HMACSHA1");
- MAC_ALG_NAMES.put(PKCSObjectIdentifiers.id_hmacWithSHA224, "HMACSHA224");
- MAC_ALG_NAMES.put(PKCSObjectIdentifiers.id_hmacWithSHA256, "HMACSHA256");
- MAC_ALG_NAMES.put(PKCSObjectIdentifiers.id_hmacWithSHA384, "HMACSHA384");
- MAC_ALG_NAMES.put(PKCSObjectIdentifiers.id_hmacWithSHA512, "HMACSHA512");
-
- KEY_ALG_NAMES.put(PKCSObjectIdentifiers.rsaEncryption, "RSA");
- KEY_ALG_NAMES.put(X9ObjectIdentifiers.id_dsa, "DSA");
- }
-
- private JcaJceHelper helper;
-
- CRMFHelper(JcaJceHelper helper)
- {
- this.helper = helper;
- }
-
- PublicKey toPublicKey(SubjectPublicKeyInfo subjectPublicKeyInfo)
- throws CRMFException
- {
-
- try
- {
- X509EncodedKeySpec xspec = new X509EncodedKeySpec(new DERBitString(subjectPublicKeyInfo).getBytes());
- AlgorithmIdentifier keyAlg = subjectPublicKeyInfo.getAlgorithmId();
- return createKeyFactory(keyAlg.getAlgorithm()).generatePublic(xspec);
- }
- catch (IOException e)
- {
- throw new CRMFException("invalid key: " + e.getMessage(), e);
- }
- catch (InvalidKeySpecException e)
- {
- throw new CRMFException("invalid key: " + e.getMessage(), e);
- }
- }
-
- Cipher createCipher(ASN1ObjectIdentifier algorithm)
- throws CRMFException
- {
- try
- {
- String cipherName = (String)CIPHER_ALG_NAMES.get(algorithm);
-
- if (cipherName != null)
- {
- try
- {
- // this is reversed as the Sun policy files now allow unlimited strength RSA
- return helper.createCipher(cipherName);
- }
- catch (NoSuchAlgorithmException e)
- {
- // Ignore
- }
- }
- return helper.createCipher(algorithm.getId());
- }
- catch (NoSuchPaddingException e)
- {
- throw new CRMFException("cannot create cipher: " + e.getMessage(), e);
- }
- catch (NoSuchAlgorithmException e)
- {
- throw new CRMFException("cannot create cipher: " + e.getMessage(), e);
- }
- catch (NoSuchProviderException e)
- {
- throw new CRMFException("cannot create cipher: " + e.getMessage(), e);
- }
- }
-
- public KeyGenerator createKeyGenerator(ASN1ObjectIdentifier algorithm)
- throws CRMFException
- {
- try
- {
- String cipherName = (String)BASE_CIPHER_NAMES.get(algorithm);
-
- if (cipherName != null)
- {
- try
- {
- // this is reversed as the Sun policy files now allow unlimited strength RSA
- return helper.createKeyGenerator(cipherName);
- }
- catch (NoSuchAlgorithmException e)
- {
- // Ignore
- }
- }
- return helper.createKeyGenerator(algorithm.getId());
- }
- catch (NoSuchAlgorithmException e)
- {
- throw new CRMFException("cannot create key generator: " + e.getMessage(), e);
- }
- catch (NoSuchProviderException e)
- {
- throw new CRMFException("cannot create key generator: " + e.getMessage(), e);
- }
- }
-
- Cipher createContentCipher(final Key sKey, final AlgorithmIdentifier encryptionAlgID)
- throws CRMFException
- {
- return (Cipher)execute(new JCECallback()
- {
- public Object doInJCE()
- throws CRMFException, InvalidAlgorithmParameterException,
- InvalidKeyException, InvalidParameterSpecException, NoSuchAlgorithmException,
- NoSuchPaddingException, NoSuchProviderException
- {
- Cipher cipher = createCipher(encryptionAlgID.getAlgorithm());
- ASN1Primitive sParams = (ASN1Primitive)encryptionAlgID.getParameters();
- String encAlg = encryptionAlgID.getAlgorithm().getId();
-
- if (sParams != null && !(sParams instanceof ASN1Null))
- {
- try
- {
- AlgorithmParameters params = createAlgorithmParameters(encryptionAlgID.getAlgorithm());
-
- try
- {
- params.init(sParams.getEncoded(), "ASN.1");
- }
- catch (IOException e)
- {
- throw new CRMFException("error decoding algorithm parameters.", e);
- }
-
- cipher.init(Cipher.DECRYPT_MODE, sKey, params);
- }
- catch (NoSuchAlgorithmException e)
- {
- if (encAlg.equals(CMSEnvelopedDataGenerator.DES_EDE3_CBC)
- || encAlg.equals(CMSEnvelopedDataGenerator.IDEA_CBC)
- || encAlg.equals(CMSEnvelopedDataGenerator.AES128_CBC)
- || encAlg.equals(CMSEnvelopedDataGenerator.AES192_CBC)
- || encAlg.equals(CMSEnvelopedDataGenerator.AES256_CBC))
- {
- cipher.init(Cipher.DECRYPT_MODE, sKey, new IvParameterSpec(
- ASN1OctetString.getInstance(sParams).getOctets()));
- }
- else
- {
- throw e;
- }
- }
- }
- else
- {
- if (encAlg.equals(CMSEnvelopedDataGenerator.DES_EDE3_CBC)
- || encAlg.equals(CMSEnvelopedDataGenerator.IDEA_CBC)
- || encAlg.equals(CMSEnvelopedDataGenerator.CAST5_CBC))
- {
- cipher.init(Cipher.DECRYPT_MODE, sKey, new IvParameterSpec(new byte[8]));
- }
- else
- {
- cipher.init(Cipher.DECRYPT_MODE, sKey);
- }
- }
-
- return cipher;
- }
- });
- }
-
- AlgorithmParameters createAlgorithmParameters(ASN1ObjectIdentifier algorithm)
- throws NoSuchAlgorithmException, NoSuchProviderException
- {
- String algorithmName = (String)BASE_CIPHER_NAMES.get(algorithm);
-
- if (algorithmName != null)
- {
- try
- {
- // this is reversed as the Sun policy files now allow unlimited strength RSA
- return helper.createAlgorithmParameters(algorithmName);
- }
- catch (NoSuchAlgorithmException e)
- {
- // Ignore
- }
- }
- return helper.createAlgorithmParameters(algorithm.getId());
- }
-
- KeyFactory createKeyFactory(ASN1ObjectIdentifier algorithm)
- throws CRMFException
- {
- try
- {
- String algName = (String)KEY_ALG_NAMES.get(algorithm);
-
- if (algName != null)
- {
- try
- {
- // this is reversed as the Sun policy files now allow unlimited strength RSA
- return helper.createKeyFactory(algName);
- }
- catch (NoSuchAlgorithmException e)
- {
- // Ignore
- }
- }
- return helper.createKeyFactory(algorithm.getId());
- }
- catch (NoSuchProviderException e)
- {
- throw new CRMFException("cannot create cipher: " + e.getMessage(), e);
- }
- catch (NoSuchAlgorithmException e)
- {
- throw new CRMFException("cannot create cipher: " + e.getMessage(), e);
- }
- }
-
- MessageDigest createDigest(ASN1ObjectIdentifier algorithm)
- throws CRMFException
- {
- try
- {
- String digestName = (String)DIGEST_ALG_NAMES.get(algorithm);
-
- if (digestName != null)
- {
- try
- {
- // this is reversed as the Sun policy files now allow unlimited strength RSA
- return helper.createDigest(digestName);
- }
- catch (NoSuchAlgorithmException e)
- {
- // Ignore
- }
- }
- return helper.createDigest(algorithm.getId());
- }
- catch (NoSuchAlgorithmException e)
- {
- throw new CRMFException("cannot create cipher: " + e.getMessage(), e);
- }
- catch (NoSuchProviderException e)
- {
- throw new CRMFException("cannot create cipher: " + e.getMessage(), e);
- }
- }
-
- Mac createMac(ASN1ObjectIdentifier algorithm)
- throws CRMFException
- {
- try
- {
- String macName = (String)MAC_ALG_NAMES.get(algorithm);
-
- if (macName != null)
- {
- try
- {
- // this is reversed as the Sun policy files now allow unlimited strength RSA
- return helper.createMac(macName);
- }
- catch (NoSuchAlgorithmException e)
- {
- // Ignore
- }
- }
- return helper.createMac(algorithm.getId());
- }
- catch (NoSuchProviderException e)
- {
- throw new CRMFException("cannot create mac: " + e.getMessage(), e);
- }
- catch (NoSuchAlgorithmException e)
- {
- throw new CRMFException("cannot create mac: " + e.getMessage(), e);
- }
- }
-
- AlgorithmParameterGenerator createAlgorithmParameterGenerator(ASN1ObjectIdentifier algorithm)
- throws GeneralSecurityException
- {
- String algorithmName = (String)BASE_CIPHER_NAMES.get(algorithm);
-
- try
- {
- if (algorithmName != null)
- {
- try
- {
- // this is reversed as the Sun policy files now allow unlimited strength RSA
- return helper.createAlgorithmParameterGenerator(algorithmName);
- }
- catch (NoSuchAlgorithmException e)
- {
- // Ignore
- }
- }
- return helper.createAlgorithmParameterGenerator(algorithm.getId());
- }
- catch (NoSuchAlgorithmException e)
- {
- throw new GeneralSecurityException(e.toString());
- }
- catch (NoSuchProviderException e)
- {
- throw new GeneralSecurityException(e.toString());
- }
- }
-
- AlgorithmParameters generateParameters(ASN1ObjectIdentifier encryptionOID, SecretKey encKey, SecureRandom rand)
- throws CRMFException
- {
- try
- {
- AlgorithmParameterGenerator pGen = createAlgorithmParameterGenerator(encryptionOID);
-
- if (encryptionOID.equals(CMSEnvelopedDataGenerator.RC2_CBC))
- {
- byte[] iv = new byte[8];
-
- rand.nextBytes(iv);
-
- try
- {
- pGen.init(new RC2ParameterSpec(encKey.getEncoded().length * 8, iv), rand);
- }
- catch (InvalidAlgorithmParameterException e)
- {
- throw new CRMFException("parameters generation error: " + e, e);
- }
- }
-
- return pGen.generateParameters();
- }
- catch (GeneralSecurityException e)
- {
- throw new CRMFException("exception creating algorithm parameter generator: " + e, e);
- }
- }
-
- AlgorithmIdentifier getAlgorithmIdentifier(ASN1ObjectIdentifier encryptionOID, AlgorithmParameters params)
- throws CRMFException
- {
- ASN1Encodable asn1Params;
- if (params != null)
- {
- try
- {
- asn1Params = ASN1Primitive.fromByteArray(params.getEncoded("ASN.1"));
- }
- catch (IOException e)
- {
- throw new CRMFException("cannot encode parameters: " + e.getMessage(), e);
- }
- }
- else
- {
- asn1Params = DERNull.INSTANCE;
- }
-
- return new AlgorithmIdentifier(
- encryptionOID,
- asn1Params);
- }
-
- static Object execute(JCECallback callback) throws CRMFException
- {
- try
- {
- return callback.doInJCE();
- }
- catch (NoSuchAlgorithmException e)
- {
- throw new CRMFException("can't find algorithm.", e);
- }
- catch (InvalidKeyException e)
- {
- throw new CRMFException("key invalid in message.", e);
- }
- catch (NoSuchProviderException e)
- {
- throw new CRMFException("can't find provider.", e);
- }
- catch (NoSuchPaddingException e)
- {
- throw new CRMFException("required padding not supported.", e);
- }
- catch (InvalidAlgorithmParameterException e)
- {
- throw new CRMFException("algorithm parameters invalid.", e);
- }
- catch (InvalidParameterSpecException e)
- {
- throw new CRMFException("MAC algorithm parameter spec invalid.", e);
- }
- }
-
- static interface JCECallback
- {
- Object doInJCE()
- throws CRMFException, InvalidAlgorithmParameterException, InvalidKeyException, InvalidParameterSpecException,
- NoSuchAlgorithmException, NoSuchPaddingException, NoSuchProviderException;
- }
-}
diff --git a/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/cert/crmf/jcajce/JceAsymmetricValueDecryptorGenerator.java b/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/cert/crmf/jcajce/JceAsymmetricValueDecryptorGenerator.java
deleted file mode 100644
index 0cf875090..000000000
--- a/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/cert/crmf/jcajce/JceAsymmetricValueDecryptorGenerator.java
+++ /dev/null
@@ -1,120 +0,0 @@
-package org.spongycastle.cert.crmf.jcajce;
-
-import java.io.InputStream;
-import java.security.InvalidKeyException;
-import java.security.Key;
-import java.security.PrivateKey;
-import java.security.Provider;
-import java.security.ProviderException;
-import java.security.NoSuchAlgorithmException;
-
-import javax.crypto.BadPaddingException;
-import javax.crypto.Cipher;
-import javax.crypto.CipherInputStream;
-import javax.crypto.IllegalBlockSizeException;
-import javax.crypto.spec.SecretKeySpec;
-
-import org.spongycastle.asn1.x509.AlgorithmIdentifier;
-import org.spongycastle.cert.crmf.CRMFException;
-import org.spongycastle.cert.crmf.ValueDecryptorGenerator;
-import org.spongycastle.jcajce.util.DefaultJcaJceHelper;
-import org.spongycastle.jcajce.util.NamedJcaJceHelper;
-import org.spongycastle.jcajce.util.ProviderJcaJceHelper;
-import org.spongycastle.operator.InputDecryptor;
-
-public class JceAsymmetricValueDecryptorGenerator
- implements ValueDecryptorGenerator
-{
- private PrivateKey recipientKey;
- private CRMFHelper helper = new CRMFHelper(new DefaultJcaJceHelper());
-
- public JceAsymmetricValueDecryptorGenerator(PrivateKey recipientKey)
- {
- this.recipientKey = recipientKey;
- }
-
- public JceAsymmetricValueDecryptorGenerator setProvider(Provider provider)
- {
- this.helper = new CRMFHelper(new ProviderJcaJceHelper(provider));
-
- return this;
- }
-
- public JceAsymmetricValueDecryptorGenerator setProvider(String providerName)
- {
- this.helper = new CRMFHelper(new NamedJcaJceHelper(providerName));
-
- return this;
- }
-
- private Key extractSecretKey(AlgorithmIdentifier keyEncryptionAlgorithm, AlgorithmIdentifier contentEncryptionAlgorithm, byte[] encryptedContentEncryptionKey)
- throws CRMFException
- {
- try
- {
- Key sKey = null;
-
- Cipher keyCipher = helper.createCipher(keyEncryptionAlgorithm.getAlgorithm());
-
- try
- {
- keyCipher.init(Cipher.UNWRAP_MODE, recipientKey);
- sKey = keyCipher.unwrap(encryptedContentEncryptionKey, contentEncryptionAlgorithm.getAlgorithm().getId(), Cipher.SECRET_KEY);
- }
- catch (NoSuchAlgorithmException e)
- {
- }
- catch (IllegalStateException e)
- {
- }
- catch (UnsupportedOperationException e)
- {
- }
- catch (ProviderException e)
- {
- }
-
- // some providers do not support UNWRAP (this appears to be only for asymmetric algorithms)
- if (sKey == null)
- {
- keyCipher.init(Cipher.DECRYPT_MODE, recipientKey);
- sKey = new SecretKeySpec(keyCipher.doFinal(encryptedContentEncryptionKey), contentEncryptionAlgorithm.getAlgorithm().getId());
- }
-
- return sKey;
- }
- catch (InvalidKeyException e)
- {
- throw new CRMFException("key invalid in message.", e);
- }
- catch (IllegalBlockSizeException e)
- {
- throw new CRMFException("illegal blocksize in message.", e);
- }
- catch (BadPaddingException e)
- {
- throw new CRMFException("bad padding in message.", e);
- }
- }
-
- public InputDecryptor getValueDecryptor(AlgorithmIdentifier keyEncryptionAlgorithm, final AlgorithmIdentifier contentEncryptionAlgorithm, byte[] encryptedContentEncryptionKey)
- throws CRMFException
- {
- Key secretKey = extractSecretKey(keyEncryptionAlgorithm, contentEncryptionAlgorithm, encryptedContentEncryptionKey);
-
- final Cipher dataCipher = helper.createContentCipher(secretKey, contentEncryptionAlgorithm);
-
- return new InputDecryptor()
- {
- public AlgorithmIdentifier getAlgorithmIdentifier()
- {
- return contentEncryptionAlgorithm;
- }
-
- public InputStream getInputStream(InputStream dataIn)
- {
- return new CipherInputStream(dataIn, dataCipher);
- }
- };
- }
-}
diff --git a/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/cert/crmf/jcajce/JceCRMFEncryptorBuilder.java b/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/cert/crmf/jcajce/JceCRMFEncryptorBuilder.java
deleted file mode 100644
index 5be72f2a8..000000000
--- a/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/cert/crmf/jcajce/JceCRMFEncryptorBuilder.java
+++ /dev/null
@@ -1,140 +0,0 @@
-package org.spongycastle.cert.crmf.jcajce;
-
-import java.io.OutputStream;
-import java.security.AlgorithmParameters;
-import java.security.GeneralSecurityException;
-import java.security.Provider;
-import java.security.SecureRandom;
-import java.security.InvalidKeyException;
-
-import javax.crypto.Cipher;
-import javax.crypto.CipherOutputStream;
-import javax.crypto.KeyGenerator;
-import javax.crypto.SecretKey;
-
-import org.spongycastle.asn1.ASN1ObjectIdentifier;
-import org.spongycastle.asn1.x509.AlgorithmIdentifier;
-import org.spongycastle.cert.crmf.CRMFException;
-import org.spongycastle.jcajce.util.DefaultJcaJceHelper;
-import org.spongycastle.jcajce.util.NamedJcaJceHelper;
-import org.spongycastle.jcajce.util.ProviderJcaJceHelper;
-import org.spongycastle.operator.GenericKey;
-import org.spongycastle.operator.OutputEncryptor;
-
-public class JceCRMFEncryptorBuilder
-{
- private ASN1ObjectIdentifier encryptionOID;
- private int keySize;
-
- private CRMFHelper helper = new CRMFHelper(new DefaultJcaJceHelper());
- private SecureRandom random;
-
- public JceCRMFEncryptorBuilder(ASN1ObjectIdentifier encryptionOID)
- {
- this(encryptionOID, -1);
- }
-
- public JceCRMFEncryptorBuilder(ASN1ObjectIdentifier encryptionOID, int keySize)
- {
- this.encryptionOID = encryptionOID;
- this.keySize = keySize;
- }
-
- public JceCRMFEncryptorBuilder setProvider(Provider provider)
- {
- this.helper = new CRMFHelper(new ProviderJcaJceHelper(provider));
-
- return this;
- }
-
- public JceCRMFEncryptorBuilder setProvider(String providerName)
- {
- this.helper = new CRMFHelper(new NamedJcaJceHelper(providerName));
-
- return this;
- }
-
- public JceCRMFEncryptorBuilder setSecureRandom(SecureRandom random)
- {
- this.random = random;
-
- return this;
- }
-
- public OutputEncryptor build()
- throws CRMFException
- {
- return new CRMFOutputEncryptor(encryptionOID, keySize, random);
- }
-
- private class CRMFOutputEncryptor
- implements OutputEncryptor
- {
- private SecretKey encKey;
- private AlgorithmIdentifier algorithmIdentifier;
- private Cipher cipher;
-
- CRMFOutputEncryptor(ASN1ObjectIdentifier encryptionOID, int keySize, SecureRandom random)
- throws CRMFException
- {
- KeyGenerator keyGen = helper.createKeyGenerator(encryptionOID);
-
- if (random == null)
- {
- random = new SecureRandom();
- }
-
- if (keySize < 0)
- {
- keyGen.init(random);
- }
- else
- {
- keyGen.init(keySize, random);
- }
-
- cipher = helper.createCipher(encryptionOID);
- encKey = keyGen.generateKey();
- AlgorithmParameters params = helper.generateParameters(encryptionOID, encKey, random);
-
- try
- {
- cipher.init(Cipher.ENCRYPT_MODE, encKey, params, random);
- }
- catch (InvalidKeyException e)
- {
- throw new CRMFException("unable to initialize cipher: " + e.getMessage(), e);
- }
- catch (GeneralSecurityException e)
- {
- throw new CRMFException("unable to initialize cipher: " + e.getMessage(), e);
- }
-
- //
- // If params are null we try and second guess on them as some providers don't provide
- // algorithm parameter generation explicity but instead generate them under the hood.
- //
- if (params == null)
- {
- params = cipher.getParameters();
- }
-
- algorithmIdentifier = helper.getAlgorithmIdentifier(encryptionOID, params);
- }
-
- public AlgorithmIdentifier getAlgorithmIdentifier()
- {
- return algorithmIdentifier;
- }
-
- public OutputStream getOutputStream(OutputStream dOut)
- {
- return new CipherOutputStream(dOut, cipher);
- }
-
- public GenericKey getKey()
- {
- return new GenericKey(encKey);
- }
- }
-}
diff --git a/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/cert/crmf/jcajce/JcePKMACValuesCalculator.java b/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/cert/crmf/jcajce/JcePKMACValuesCalculator.java
deleted file mode 100644
index 6c5937096..000000000
--- a/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/cert/crmf/jcajce/JcePKMACValuesCalculator.java
+++ /dev/null
@@ -1,69 +0,0 @@
-package org.spongycastle.cert.crmf.jcajce;
-
-import java.security.MessageDigest;
-import java.security.Provider;
-import java.security.InvalidKeyException;
-
-import javax.crypto.Mac;
-import javax.crypto.spec.SecretKeySpec;
-
-import org.spongycastle.asn1.x509.AlgorithmIdentifier;
-import org.spongycastle.cert.crmf.CRMFException;
-import org.spongycastle.cert.crmf.PKMACValuesCalculator;
-import org.spongycastle.jcajce.util.DefaultJcaJceHelper;
-import org.spongycastle.jcajce.util.NamedJcaJceHelper;
-import org.spongycastle.jcajce.util.ProviderJcaJceHelper;
-
-public class JcePKMACValuesCalculator
- implements PKMACValuesCalculator
-{
- private MessageDigest digest;
- private Mac mac;
- private CRMFHelper helper;
-
- public JcePKMACValuesCalculator()
- {
- this.helper = new CRMFHelper(new DefaultJcaJceHelper());
- }
-
- public JcePKMACValuesCalculator setProvider(Provider provider)
- {
- this.helper = new CRMFHelper(new ProviderJcaJceHelper(provider));
-
- return this;
- }
-
- public JcePKMACValuesCalculator setProvider(String providerName)
- {
- this.helper = new CRMFHelper(new NamedJcaJceHelper(providerName));
-
- return this;
- }
-
- public void setup(AlgorithmIdentifier digAlg, AlgorithmIdentifier macAlg)
- throws CRMFException
- {
- digest = helper.createDigest(digAlg.getAlgorithm());
- mac = helper.createMac(macAlg.getAlgorithm());
- }
-
- public byte[] calculateDigest(byte[] data)
- {
- return digest.digest(data);
- }
-
- public byte[] calculateMac(byte[] pwd, byte[] data)
- throws CRMFException
- {
- try
- {
- mac.init(new SecretKeySpec(pwd, mac.getAlgorithm()));
-
- return mac.doFinal(data);
- }
- catch (InvalidKeyException e)
- {
- throw new CRMFException("failure in setup: " + e.getMessage(), e);
- }
- }
-}
diff --git a/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/cert/jcajce/JcaCertStoreBuilder.java b/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/cert/jcajce/JcaCertStoreBuilder.java
deleted file mode 100644
index 63b14ff7b..000000000
--- a/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/cert/jcajce/JcaCertStoreBuilder.java
+++ /dev/null
@@ -1,149 +0,0 @@
-package org.spongycastle.cert.jcajce;
-
-import java.security.GeneralSecurityException;
-import java.security.Provider;
-import java.security.NoSuchProviderException;
-import java.security.NoSuchAlgorithmException;
-import java.security.cert.CRLException;
-import java.security.cert.CertStore;
-import java.security.cert.CertificateException;
-import java.security.cert.CollectionCertStoreParameters;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.spongycastle.cert.X509CRLHolder;
-import org.spongycastle.cert.X509CertificateHolder;
-import org.spongycastle.util.Store;
-
-/**
- * Builder to create a CertStore from certificate and CRL stores.
- */
-public class JcaCertStoreBuilder
-{
- private List certs = new ArrayList();
- private List crls = new ArrayList();
- private Object provider;
- private JcaX509CertificateConverter certificateConverter = new JcaX509CertificateConverter();
- private JcaX509CRLConverter crlConverter = new JcaX509CRLConverter();
-
- /**
- * Add a store full of X509CertificateHolder objects.
- *
- * @param certStore a store of X509CertificateHolder objects.
- */
- public JcaCertStoreBuilder addCertificates(Store certStore)
- {
- certs.addAll(certStore.getMatches(null));
-
- return this;
- }
-
- /**
- * Add a single certificate.
- *
- * @param cert the X509 certificate holder containing the certificate.
- */
- public JcaCertStoreBuilder addCertificate(X509CertificateHolder cert)
- {
- certs.add(cert);
-
- return this;
- }
-
- /**
- * Add a store full of X509CRLHolder objects.
- * @param crlStore a store of X509CRLHolder objects.
- */
- public JcaCertStoreBuilder addCRLs(Store crlStore)
- {
- crls.addAll(crlStore.getMatches(null));
-
- return this;
- }
-
- /**
- * Add a single CRL.
- *
- * @param crl the X509 CRL holder containing the CRL.
- */
- public JcaCertStoreBuilder addCRL(X509CRLHolder crl)
- {
- crls.add(crl);
-
- return this;
- }
-
- public JcaCertStoreBuilder setProvider(String providerName)
- throws GeneralSecurityException
- {
- certificateConverter.setProvider(providerName);
- crlConverter.setProvider(providerName);
- this.provider = providerName;
-
- return this;
- }
-
- public JcaCertStoreBuilder setProvider(Provider provider)
- throws GeneralSecurityException
- {
- certificateConverter.setProvider(provider);
- crlConverter.setProvider(provider);
- this.provider = provider;
-
- return this;
- }
-
- /**
- * Build the CertStore from the current inputs.
- *
- * @return a CertStore.
- * @throws GeneralSecurityException
- */
- public CertStore build()
- throws GeneralSecurityException
- {
- CollectionCertStoreParameters params = convertHolders(certificateConverter, crlConverter);
-
- try
-{
- if (provider instanceof String)
- {
- return CertStore.getInstance("Collection", params, (String)provider);
- }
-
- if (provider instanceof Provider)
- {
- return CertStore.getInstance("Collection", params, (Provider)provider);
- }
-
- return CertStore.getInstance("Collection", params);
-}
-catch (NoSuchAlgorithmException e)
-{
- throw new GeneralSecurityException(e.toString());
-}
-catch (NoSuchProviderException e)
-{
- throw new GeneralSecurityException(e.toString());
-}
- }
-
- private CollectionCertStoreParameters convertHolders(JcaX509CertificateConverter certificateConverter, JcaX509CRLConverter crlConverter)
- throws CertificateException, CRLException
- {
- List jcaObjs = new ArrayList(certs.size() + crls.size());
-
- for (Iterator it = certs.iterator(); it.hasNext();)
- {
- jcaObjs.add(certificateConverter.getCertificate((X509CertificateHolder)it.next()));
- }
-
- for (Iterator it = crls.iterator(); it.hasNext();)
- {
- jcaObjs.add(crlConverter.getCRL((X509CRLHolder)it.next()));
- }
-
- return new CollectionCertStoreParameters(jcaObjs);
- }
-}
diff --git a/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/cert/path/CertPathValidationException.java b/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/cert/path/CertPathValidationException.java
deleted file mode 100644
index d0cbf6079..000000000
--- a/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/cert/path/CertPathValidationException.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package org.spongycastle.cert.path;
-
-public class CertPathValidationException
- extends Exception
-{
- private Exception cause;
-
- public CertPathValidationException(String msg)
- {
- this(msg, null);
- }
-
- public CertPathValidationException(String msg, Exception cause)
- {
- super(msg);
-
- this.cause = cause;
- }
-
- public Throwable getCause()
- {
- return cause;
- }
-}
diff --git a/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/cert/selector/jcajce/JcaSelectorConverter.java b/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/cert/selector/jcajce/JcaSelectorConverter.java
deleted file mode 100644
index 8bda2e465..000000000
--- a/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/cert/selector/jcajce/JcaSelectorConverter.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package org.spongycastle.cert.selector.jcajce;
-
-import java.security.cert.X509CertSelector;
-
-import org.spongycastle.asn1.ASN1OctetString;
-import org.spongycastle.asn1.x500.X500Name;
-import org.spongycastle.cert.selector.X509CertificateHolderSelector;
-
-public class JcaSelectorConverter
-{
- public JcaSelectorConverter()
- {
-
- }
-
- public X509CertificateHolderSelector getCertificateHolderSelector(X509CertSelector certSelector)
- {
-try
-{
- if (certSelector.getSubjectKeyIdentifier() != null)
- {
- return new X509CertificateHolderSelector(X500Name.getInstance(certSelector.getIssuerAsBytes()), certSelector.getSerialNumber(), ASN1OctetString.getInstance(certSelector.getSubjectKeyIdentifier()).getOctets());
- }
- else
- {
- return new X509CertificateHolderSelector(X500Name.getInstance(certSelector.getIssuerAsBytes()), certSelector.getSerialNumber());
- }
-}
-catch (Exception e)
-{
-throw new IllegalArgumentException("conversion failed: " + e.toString());
-}
- }
-}
diff --git a/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/cert/selector/jcajce/JcaX509CertSelectorConverter.java b/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/cert/selector/jcajce/JcaX509CertSelectorConverter.java
deleted file mode 100644
index 6dbcef43f..000000000
--- a/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/cert/selector/jcajce/JcaX509CertSelectorConverter.java
+++ /dev/null
@@ -1,57 +0,0 @@
-package org.spongycastle.cert.selector.jcajce;
-
-import java.io.IOException;
-import java.math.BigInteger;
-import java.security.cert.X509CertSelector;
-
-import org.spongycastle.asn1.DEROctetString;
-import org.spongycastle.asn1.x500.X500Name;
-import org.spongycastle.cert.selector.X509CertificateHolderSelector;
-
-public class JcaX509CertSelectorConverter
-{
- public JcaX509CertSelectorConverter()
- {
- }
-
- protected X509CertSelector doConversion(X500Name issuer, BigInteger serialNumber, byte[] subjectKeyIdentifier)
- {
- X509CertSelector selector = new X509CertSelector();
-
- if (issuer != null)
- {
- try
- {
- selector.setIssuer(issuer.getEncoded());
- }
- catch (IOException e)
- {
- throw new IllegalArgumentException("unable to convert issuer: " + e.getMessage());
- }
- }
-
- if (serialNumber != null)
- {
- selector.setSerialNumber(serialNumber);
- }
-
- if (subjectKeyIdentifier != null)
- {
- try
- {
- selector.setSubjectKeyIdentifier(new DEROctetString(subjectKeyIdentifier).getEncoded());
- }
- catch (IOException e)
- {
- throw new IllegalArgumentException("unable to convert issuer: " + e.getMessage());
- }
- }
-
- return selector;
- }
-
- public X509CertSelector getCertSelector(X509CertificateHolderSelector holderSelector)
- {
- return doConversion(holderSelector.getIssuer(), holderSelector.getSerialNumber(), holderSelector.getSubjectKeyIdentifier());
- }
-}
diff --git a/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/cms/CMSAbsentContent.java b/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/cms/CMSAbsentContent.java
deleted file mode 100644
index e1d7e5867..000000000
--- a/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/cms/CMSAbsentContent.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package org.spongycastle.cms;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-
-import org.spongycastle.asn1.ASN1ObjectIdentifier;
-import org.spongycastle.asn1.cms.CMSObjectIdentifiers;
-
-/**
- * a class representing null or absent content.
- */
-public class CMSAbsentContent
- implements CMSTypedData, CMSReadable
-{
- private ASN1ObjectIdentifier type;
-
- public CMSAbsentContent()
- {
- this(new ASN1ObjectIdentifier(CMSObjectIdentifiers.data.getId()));
- }
-
- public CMSAbsentContent(
- ASN1ObjectIdentifier type)
- {
- this.type = type;
- }
-
- public InputStream getInputStream()
- {
- return null;
- }
-
- public void write(OutputStream zOut)
- throws IOException, CMSException
- {
- // do nothing
- }
-
- public Object getContent()
- {
- return null;
- }
-
- public ASN1ObjectIdentifier getContentType()
- {
- return type;
- }
-}
diff --git a/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/cms/CMSProcessableByteArray.java b/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/cms/CMSProcessableByteArray.java
deleted file mode 100644
index 6ac965c78..000000000
--- a/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/cms/CMSProcessableByteArray.java
+++ /dev/null
@@ -1,55 +0,0 @@
-package org.spongycastle.cms;
-
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-
-import org.spongycastle.asn1.ASN1ObjectIdentifier;
-import org.spongycastle.asn1.cms.CMSObjectIdentifiers;
-import org.spongycastle.util.Arrays;
-
-/**
- * a holding class for a byte array of data to be processed.
- */
-public class CMSProcessableByteArray
- implements CMSTypedData, CMSReadable
-{
- private ASN1ObjectIdentifier type;
- private byte[] bytes;
-
- public CMSProcessableByteArray(
- byte[] bytes)
- {
- this(new ASN1ObjectIdentifier(CMSObjectIdentifiers.data.getId()), bytes);
- }
-
- public CMSProcessableByteArray(
- ASN1ObjectIdentifier type,
- byte[] bytes)
- {
- this.type = type;
- this.bytes = bytes;
- }
-
- public InputStream getInputStream()
- {
- return new ByteArrayInputStream(bytes);
- }
-
- public void write(OutputStream zOut)
- throws IOException, CMSException
- {
- zOut.write(bytes);
- }
-
- public Object getContent()
- {
- return Arrays.clone(bytes);
- }
-
- public ASN1ObjectIdentifier getContentType()
- {
- return type;
- }
-}
diff --git a/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/cms/CMSProcessableFile.java b/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/cms/CMSProcessableFile.java
deleted file mode 100644
index 87b7c4e94..000000000
--- a/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/cms/CMSProcessableFile.java
+++ /dev/null
@@ -1,80 +0,0 @@
-package org.spongycastle.cms;
-
-import java.io.BufferedInputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-
-import org.spongycastle.asn1.ASN1ObjectIdentifier;
-import org.spongycastle.asn1.cms.CMSObjectIdentifiers;
-
-/**
- * a holding class for a file of data to be processed.
- */
-public class CMSProcessableFile
- implements CMSTypedData, CMSReadable
-{
- private static final int DEFAULT_BUF_SIZE = 32 * 1024;
-
- private ASN1ObjectIdentifier type;
- private File file;
- private byte[] buf;
-
- public CMSProcessableFile(
- File file)
- {
- this(file, DEFAULT_BUF_SIZE);
- }
-
- public CMSProcessableFile(
- File file,
- int bufSize)
- {
- this(new ASN1ObjectIdentifier(CMSObjectIdentifiers.data.getId()), file, bufSize);
- }
-
- public CMSProcessableFile(
- ASN1ObjectIdentifier type,
- File file,
- int bufSize)
- {
- this.type = type;
- this.file = file;
- buf = new byte[bufSize];
- }
-
- public InputStream getInputStream()
- throws IOException, CMSException
- {
- return new BufferedInputStream(new FileInputStream(file), DEFAULT_BUF_SIZE);
- }
-
- public void write(OutputStream zOut)
- throws IOException, CMSException
- {
- FileInputStream fIn = new FileInputStream(file);
- int len;
-
- while ((len = fIn.read(buf, 0, buf.length)) > 0)
- {
- zOut.write(buf, 0, len);
- }
-
- fIn.close();
- }
-
- /**
- * Return the file handle.
- */
- public Object getContent()
- {
- return file;
- }
-
- public ASN1ObjectIdentifier getContentType()
- {
- return type;
- }
-}
diff --git a/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/cms/CMSTypedStream.java b/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/cms/CMSTypedStream.java
deleted file mode 100644
index 82466af71..000000000
--- a/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/cms/CMSTypedStream.java
+++ /dev/null
@@ -1,86 +0,0 @@
-package org.spongycastle.cms;
-
-import java.io.BufferedInputStream;
-import java.io.FilterInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-
-import org.spongycastle.asn1.ASN1ObjectIdentifier;
-import org.spongycastle.asn1.pkcs.PKCSObjectIdentifiers;
-import org.spongycastle.util.io.Streams;
-
-public class CMSTypedStream
-{
- private static final int BUF_SIZ = 32 * 1024;
-
- private ASN1ObjectIdentifier _oid;
- private InputStream _in;
-
- public CMSTypedStream(
- InputStream in)
- {
- this(PKCSObjectIdentifiers.data.getId(), in, BUF_SIZ);
- }
-
- public CMSTypedStream(
- String oid,
- InputStream in)
- {
- this(new ASN1ObjectIdentifier(oid), in, BUF_SIZ);
- }
-
- public CMSTypedStream(
- String oid,
- InputStream in,
- int bufSize)
- {
- this(new ASN1ObjectIdentifier(oid), in, bufSize);
- }
-
- public CMSTypedStream(
- ASN1ObjectIdentifier oid,
- InputStream in)
- {
- this(oid, in, BUF_SIZ);
- }
-
- public CMSTypedStream(
- ASN1ObjectIdentifier oid,
- InputStream in,
- int bufSize)
- {
- _oid = oid;
- _in = new FullReaderStream(new BufferedInputStream(in, bufSize));
- }
-
- public ASN1ObjectIdentifier getContentType()
- {
- return _oid;
- }
-
- public InputStream getContentStream()
- {
- return _in;
- }
-
- public void drain()
- throws IOException
- {
- Streams.drain(_in);
- _in.close();
- }
-
- private static class FullReaderStream extends FilterInputStream
- {
- FullReaderStream(InputStream in)
- {
- super(in);
- }
-
- public int read(byte[] buf, int off, int len) throws IOException
- {
- int totalRead = Streams.readFully(super.in, buf, off, len);
- return totalRead > 0 ? totalRead : -1;
- }
- }
-}
diff --git a/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/cms/OriginatorInfoGenerator.java b/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/cms/OriginatorInfoGenerator.java
deleted file mode 100644
index b6cfdd0be..000000000
--- a/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/cms/OriginatorInfoGenerator.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package org.spongycastle.cms;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.spongycastle.asn1.cms.OriginatorInfo;
-import org.spongycastle.cert.X509CertificateHolder;
-import org.spongycastle.util.Store;
-
-public class OriginatorInfoGenerator
-{
- private List origCerts;
- private List origCRLs;
-
- public OriginatorInfoGenerator(X509CertificateHolder origCert)
- {
- this.origCerts = new ArrayList(1);
- this.origCRLs = null;
- origCerts.add(origCert.toASN1Structure());
- }
-
- public OriginatorInfoGenerator(Store origCerts)
- throws CMSException
- {
- this(origCerts, null);
- }
-
- public OriginatorInfoGenerator(Store origCerts, Store origCRLs)
- throws CMSException
- {
- this.origCerts = CMSUtils.getCertificatesFromStore(origCerts);
-
- if (origCRLs != null)
- {
- this.origCRLs = CMSUtils.getCRLsFromStore(origCRLs);
- }
- else
- {
- this.origCRLs = null;
- }
- }
-
- public OriginatorInformation generate()
- {
- if (origCRLs != null)
- {
- return new OriginatorInformation(new OriginatorInfo(CMSUtils.createDerSetFromList(origCerts), CMSUtils.createDerSetFromList(origCRLs)));
- }
- else
- {
- return new OriginatorInformation(new OriginatorInfo(CMSUtils.createDerSetFromList(origCerts), null));
- }
- }
-}
diff --git a/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/cms/RecipientId.java b/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/cms/RecipientId.java
deleted file mode 100644
index f2dd5dff2..000000000
--- a/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/cms/RecipientId.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package org.spongycastle.cms;
-
-import org.spongycastle.util.Selector;
-
-public abstract class RecipientId
- implements Selector
-{
- public static final int keyTrans = 0;
- public static final int kek = 1;
- public static final int keyAgree = 2;
- public static final int password = 3;
-
- private int type;
-
- protected RecipientId(int type)
- {
- this.type = type;
- }
-
- /**
- * Return the type code for this recipient ID.
- *
- * @return one of keyTrans, kek, keyAgree, password
- */
- public int getType()
- {
- return type;
- }
-
- public abstract Object clone();
-}
diff --git a/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/cms/SignerInfoGenerator.java b/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/cms/SignerInfoGenerator.java
deleted file mode 100644
index 47028b995..000000000
--- a/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/cms/SignerInfoGenerator.java
+++ /dev/null
@@ -1,291 +0,0 @@
-package org.spongycastle.cms;
-
-import java.io.IOException;
-import java.io.OutputStream;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.spongycastle.asn1.ASN1Encoding;
-import org.spongycastle.asn1.ASN1ObjectIdentifier;
-import org.spongycastle.asn1.ASN1Set;
-import org.spongycastle.asn1.DEROctetString;
-import org.spongycastle.asn1.DERSet;
-import org.spongycastle.asn1.cms.AttributeTable;
-import org.spongycastle.asn1.cms.SignerIdentifier;
-import org.spongycastle.asn1.cms.SignerInfo;
-import org.spongycastle.asn1.x509.AlgorithmIdentifier;
-import org.spongycastle.cert.X509CertificateHolder;
-import org.spongycastle.operator.ContentSigner;
-import org.spongycastle.operator.DefaultDigestAlgorithmIdentifierFinder;
-import org.spongycastle.operator.DigestAlgorithmIdentifierFinder;
-import org.spongycastle.operator.DigestCalculator;
-import org.spongycastle.operator.DigestCalculatorProvider;
-import org.spongycastle.operator.OperatorCreationException;
-import org.spongycastle.util.Arrays;
-import org.spongycastle.util.io.TeeOutputStream;
-
-public class SignerInfoGenerator
-{
- private SignerIdentifier signerIdentifier;
- private CMSAttributeTableGenerator sAttrGen;
- private CMSAttributeTableGenerator unsAttrGen;
- private ContentSigner signer;
- private DigestCalculator digester;
- private DigestAlgorithmIdentifierFinder digAlgFinder = new DefaultDigestAlgorithmIdentifierFinder();
- private CMSSignatureEncryptionAlgorithmFinder sigEncAlgFinder;
-
- private byte[] calculatedDigest = null;
- private X509CertificateHolder certHolder;
-
- SignerInfoGenerator(
- SignerIdentifier signerIdentifier,
- ContentSigner signer,
- DigestCalculatorProvider digesterProvider,
- CMSSignatureEncryptionAlgorithmFinder sigEncAlgFinder)
- throws OperatorCreationException
- {
- this(signerIdentifier, signer, digesterProvider, sigEncAlgFinder, false);
- }
-
- SignerInfoGenerator(
- SignerIdentifier signerIdentifier,
- ContentSigner signer,
- DigestCalculatorProvider digesterProvider,
- CMSSignatureEncryptionAlgorithmFinder sigEncAlgFinder,
- boolean isDirectSignature)
- throws OperatorCreationException
- {
- this.signerIdentifier = signerIdentifier;
- this.signer = signer;
-
- if (digesterProvider != null)
- {
- this.digester = digesterProvider.get(digAlgFinder.find(signer.getAlgorithmIdentifier()));
- }
- else
- {
- this.digester = null;
- }
-
- if (isDirectSignature)
- {
- this.sAttrGen = null;
- this.unsAttrGen = null;
- }
- else
- {
- this.sAttrGen = new DefaultSignedAttributeTableGenerator();
- this.unsAttrGen = null;
- }
-
- this.sigEncAlgFinder = sigEncAlgFinder;
- }
-
- public SignerInfoGenerator(
- SignerInfoGenerator original,
- CMSAttributeTableGenerator sAttrGen,
- CMSAttributeTableGenerator unsAttrGen)
- {
- this.signerIdentifier = original.signerIdentifier;
- this.signer = original.signer;
- this.digester = original.digester;
- this.sigEncAlgFinder = original.sigEncAlgFinder;
- this.sAttrGen = sAttrGen;
- this.unsAttrGen = unsAttrGen;
- }
-
- SignerInfoGenerator(
- SignerIdentifier signerIdentifier,
- ContentSigner signer,
- DigestCalculatorProvider digesterProvider,
- CMSSignatureEncryptionAlgorithmFinder sigEncAlgFinder,
- CMSAttributeTableGenerator sAttrGen,
- CMSAttributeTableGenerator unsAttrGen)
- throws OperatorCreationException
- {
- this.signerIdentifier = signerIdentifier;
- this.signer = signer;
-
- if (digesterProvider != null)
- {
- this.digester = digesterProvider.get(digAlgFinder.find(signer.getAlgorithmIdentifier()));
- }
- else
- {
- this.digester = null;
- }
-
- this.sAttrGen = sAttrGen;
- this.unsAttrGen = unsAttrGen;
- this.sigEncAlgFinder = sigEncAlgFinder;
- }
-
- public SignerIdentifier getSID()
- {
- return signerIdentifier;
- }
-
- public int getGeneratedVersion()
- {
- return signerIdentifier.isTagged() ? 3 : 1;
- }
-
- public boolean hasAssociatedCertificate()
- {
- return certHolder != null;
- }
-
- public X509CertificateHolder getAssociatedCertificate()
- {
- return certHolder;
- }
-
- public AlgorithmIdentifier getDigestAlgorithm()
- {
- if (digester != null)
- {
- return digester.getAlgorithmIdentifier();
- }
-
- return digAlgFinder.find(signer.getAlgorithmIdentifier());
- }
-
- public OutputStream getCalculatingOutputStream()
- {
- if (digester != null)
- {
- if (sAttrGen == null)
- {
- return new TeeOutputStream(digester.getOutputStream(), signer.getOutputStream());
- }
- return digester.getOutputStream();
- }
- else
- {
- return signer.getOutputStream();
- }
- }
-
- public SignerInfo generate(ASN1ObjectIdentifier contentType)
- throws CMSException
- {
- try
- {
- /* RFC 3852 5.4
- * The result of the message digest calculation process depends on
- * whether the signedAttrs field is present. When the field is absent,
- * the result is just the message digest of the content as described
- *
- * above. When the field is present, however, the result is the message
- * digest of the complete DER encoding of the SignedAttrs value
- * contained in the signedAttrs field.
- */
- ASN1Set signedAttr = null;
-
- AlgorithmIdentifier digestAlg = null;
-
- if (sAttrGen != null)
- {
- digestAlg = digester.getAlgorithmIdentifier();
- calculatedDigest = digester.getDigest();
- Map parameters = getBaseParameters(contentType, digester.getAlgorithmIdentifier(), calculatedDigest);
- AttributeTable signed = sAttrGen.getAttributes(Collections.unmodifiableMap(parameters));
-
- signedAttr = getAttributeSet(signed);
-
- // sig must be composed from the DER encoding.
- OutputStream sOut = signer.getOutputStream();
-
- sOut.write(signedAttr.getEncoded(ASN1Encoding.DER));
-
- sOut.close();
- }
- else
- {
- if (digester != null)
- {
- digestAlg = digester.getAlgorithmIdentifier();
- calculatedDigest = digester.getDigest();
- }
- else
- {
- digestAlg = digAlgFinder.find(signer.getAlgorithmIdentifier());
- calculatedDigest = null;
- }
- }
-
- byte[] sigBytes = signer.getSignature();
-
- ASN1Set unsignedAttr = null;
- if (unsAttrGen != null)
- {
- Map parameters = getBaseParameters(contentType, digestAlg, calculatedDigest);
- parameters.put(CMSAttributeTableGenerator.SIGNATURE, Arrays.clone(sigBytes));
-
- AttributeTable unsigned = unsAttrGen.getAttributes(Collections.unmodifiableMap(parameters));
-
- unsignedAttr = getAttributeSet(unsigned);
- }
-
- AlgorithmIdentifier digestEncryptionAlgorithm = sigEncAlgFinder.findEncryptionAlgorithm(signer.getAlgorithmIdentifier());
-
- return new SignerInfo(signerIdentifier, digestAlg,
- signedAttr, digestEncryptionAlgorithm, new DEROctetString(sigBytes), unsignedAttr);
- }
- catch (IOException e)
- {
- throw new CMSException("encoding error.", e);
- }
- }
-
- void setAssociatedCertificate(X509CertificateHolder certHolder)
- {
- this.certHolder = certHolder;
- }
-
- private ASN1Set getAttributeSet(
- AttributeTable attr)
- {
- if (attr != null)
- {
- return new DERSet(attr.toASN1EncodableVector());
- }
-
- return null;
- }
-
- private Map getBaseParameters(ASN1ObjectIdentifier contentType, AlgorithmIdentifier digAlgId, byte[] hash)
- {
- Map param = new HashMap();
-
- if (contentType != null)
- {
- param.put(CMSAttributeTableGenerator.CONTENT_TYPE, contentType);
- }
-
- param.put(CMSAttributeTableGenerator.DIGEST_ALGORITHM_IDENTIFIER, digAlgId);
- param.put(CMSAttributeTableGenerator.DIGEST, Arrays.clone(hash));
- return param;
- }
-
- public byte[] getCalculatedDigest()
- {
- if (calculatedDigest != null)
- {
- return Arrays.clone(calculatedDigest);
- }
-
- return null;
- }
-
- public CMSAttributeTableGenerator getSignedAttributeTableGenerator()
- {
- return sAttrGen;
- }
-
- public CMSAttributeTableGenerator getUnsignedAttributeTableGenerator()
- {
- return unsAttrGen;
- }
-}
diff --git a/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/cms/jcajce/EnvelopedDataHelper.java b/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/cms/jcajce/EnvelopedDataHelper.java
deleted file mode 100644
index 56f6f2f25..000000000
--- a/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/cms/jcajce/EnvelopedDataHelper.java
+++ /dev/null
@@ -1,671 +0,0 @@
-package org.spongycastle.cms.jcajce;
-
-import java.security.AlgorithmParameterGenerator;
-import java.security.AlgorithmParameters;
-import java.security.GeneralSecurityException;
-import java.security.InvalidAlgorithmParameterException;
-import java.security.InvalidKeyException;
-import java.security.Key;
-import java.security.KeyFactory;
-import java.security.KeyPairGenerator;
-import java.security.NoSuchAlgorithmException;
-import java.security.NoSuchProviderException;
-import java.security.PrivateKey;
-import java.security.SecureRandom;
-import java.security.spec.AlgorithmParameterSpec;
-import java.security.spec.InvalidParameterSpecException;
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.crypto.Cipher;
-import javax.crypto.KeyAgreement;
-import javax.crypto.KeyGenerator;
-import javax.crypto.Mac;
-import javax.crypto.NoSuchPaddingException;
-import javax.crypto.SecretKey;
-import javax.crypto.spec.IvParameterSpec;
-import javax.crypto.spec.RC2ParameterSpec;
-import javax.crypto.spec.SecretKeySpec;
-
-import org.spongycastle.asn1.ASN1Encodable;
-import org.spongycastle.asn1.ASN1Null;
-import org.spongycastle.asn1.ASN1ObjectIdentifier;
-import org.spongycastle.asn1.ASN1OctetString;
-import org.spongycastle.asn1.DERNull;
-import org.spongycastle.asn1.DEROctetString;
-import org.spongycastle.asn1.pkcs.PKCSObjectIdentifiers;
-import org.spongycastle.asn1.pkcs.RC2CBCParameter;
-import org.spongycastle.asn1.x509.AlgorithmIdentifier;
-import org.spongycastle.cms.CMSAlgorithm;
-import org.spongycastle.cms.CMSEnvelopedDataGenerator;
-import org.spongycastle.cms.CMSException;
-import org.spongycastle.operator.DefaultSecretKeySizeProvider;
-import org.spongycastle.operator.GenericKey;
-import org.spongycastle.operator.SecretKeySizeProvider;
-import org.spongycastle.operator.SymmetricKeyUnwrapper;
-import org.spongycastle.operator.jcajce.JceAsymmetricKeyUnwrapper;
-
-public class EnvelopedDataHelper
-{
- protected static final SecretKeySizeProvider KEY_SIZE_PROVIDER = DefaultSecretKeySizeProvider.INSTANCE;
-
- protected static final Map BASE_CIPHER_NAMES = new HashMap();
- protected static final Map CIPHER_ALG_NAMES = new HashMap();
- protected static final Map MAC_ALG_NAMES = new HashMap();
-
- static
- {
- BASE_CIPHER_NAMES.put(CMSAlgorithm.DES_CBC, "DES");
- BASE_CIPHER_NAMES.put(CMSAlgorithm.DES_EDE3_CBC, "DESEDE");
- BASE_CIPHER_NAMES.put(CMSAlgorithm.AES128_CBC, "AES");
- BASE_CIPHER_NAMES.put(CMSAlgorithm.AES192_CBC, "AES");
- BASE_CIPHER_NAMES.put(CMSAlgorithm.AES256_CBC, "AES");
- BASE_CIPHER_NAMES.put(CMSAlgorithm.RC2_CBC, "RC2");
- BASE_CIPHER_NAMES.put(CMSAlgorithm.CAST5_CBC, "CAST5");
- BASE_CIPHER_NAMES.put(CMSAlgorithm.CAMELLIA128_CBC, "Camellia");
- BASE_CIPHER_NAMES.put(CMSAlgorithm.CAMELLIA192_CBC, "Camellia");
- BASE_CIPHER_NAMES.put(CMSAlgorithm.CAMELLIA256_CBC, "Camellia");
- BASE_CIPHER_NAMES.put(CMSAlgorithm.SEED_CBC, "SEED");
- BASE_CIPHER_NAMES.put(PKCSObjectIdentifiers.rc4, "RC4");
-
- CIPHER_ALG_NAMES.put(CMSAlgorithm.DES_CBC, "DES/CBC/PKCS5Padding");
- CIPHER_ALG_NAMES.put(CMSAlgorithm.RC2_CBC, "RC2/CBC/PKCS5Padding");
- CIPHER_ALG_NAMES.put(CMSAlgorithm.DES_EDE3_CBC, "DESEDE/CBC/PKCS5Padding");
- CIPHER_ALG_NAMES.put(CMSAlgorithm.AES128_CBC, "AES/CBC/PKCS5Padding");
- CIPHER_ALG_NAMES.put(CMSAlgorithm.AES192_CBC, "AES/CBC/PKCS5Padding");
- CIPHER_ALG_NAMES.put(CMSAlgorithm.AES256_CBC, "AES/CBC/PKCS5Padding");
- CIPHER_ALG_NAMES.put(PKCSObjectIdentifiers.rsaEncryption, "RSA/ECB/PKCS1Padding");
- CIPHER_ALG_NAMES.put(CMSAlgorithm.CAST5_CBC, "CAST5/CBC/PKCS5Padding");
- CIPHER_ALG_NAMES.put(CMSAlgorithm.CAMELLIA128_CBC, "Camellia/CBC/PKCS5Padding");
- CIPHER_ALG_NAMES.put(CMSAlgorithm.CAMELLIA192_CBC, "Camellia/CBC/PKCS5Padding");
- CIPHER_ALG_NAMES.put(CMSAlgorithm.CAMELLIA256_CBC, "Camellia/CBC/PKCS5Padding");
- CIPHER_ALG_NAMES.put(CMSAlgorithm.SEED_CBC, "SEED/CBC/PKCS5Padding");
- CIPHER_ALG_NAMES.put(PKCSObjectIdentifiers.rc4, "RC4");
-
- MAC_ALG_NAMES.put(CMSAlgorithm.DES_EDE3_CBC, "DESEDEMac");
- MAC_ALG_NAMES.put(CMSAlgorithm.AES128_CBC, "AESMac");
- MAC_ALG_NAMES.put(CMSAlgorithm.AES192_CBC, "AESMac");
- MAC_ALG_NAMES.put(CMSAlgorithm.AES256_CBC, "AESMac");
- MAC_ALG_NAMES.put(CMSAlgorithm.RC2_CBC, "RC2Mac");
- }
-
- private static final short[] rc2Table = {
- 0xbd, 0x56, 0xea, 0xf2, 0xa2, 0xf1, 0xac, 0x2a, 0xb0, 0x93, 0xd1, 0x9c, 0x1b, 0x33, 0xfd, 0xd0,
- 0x30, 0x04, 0xb6, 0xdc, 0x7d, 0xdf, 0x32, 0x4b, 0xf7, 0xcb, 0x45, 0x9b, 0x31, 0xbb, 0x21, 0x5a,
- 0x41, 0x9f, 0xe1, 0xd9, 0x4a, 0x4d, 0x9e, 0xda, 0xa0, 0x68, 0x2c, 0xc3, 0x27, 0x5f, 0x80, 0x36,
- 0x3e, 0xee, 0xfb, 0x95, 0x1a, 0xfe, 0xce, 0xa8, 0x34, 0xa9, 0x13, 0xf0, 0xa6, 0x3f, 0xd8, 0x0c,
- 0x78, 0x24, 0xaf, 0x23, 0x52, 0xc1, 0x67, 0x17, 0xf5, 0x66, 0x90, 0xe7, 0xe8, 0x07, 0xb8, 0x60,
- 0x48, 0xe6, 0x1e, 0x53, 0xf3, 0x92, 0xa4, 0x72, 0x8c, 0x08, 0x15, 0x6e, 0x86, 0x00, 0x84, 0xfa,
- 0xf4, 0x7f, 0x8a, 0x42, 0x19, 0xf6, 0xdb, 0xcd, 0x14, 0x8d, 0x50, 0x12, 0xba, 0x3c, 0x06, 0x4e,
- 0xec, 0xb3, 0x35, 0x11, 0xa1, 0x88, 0x8e, 0x2b, 0x94, 0x99, 0xb7, 0x71, 0x74, 0xd3, 0xe4, 0xbf,
- 0x3a, 0xde, 0x96, 0x0e, 0xbc, 0x0a, 0xed, 0x77, 0xfc, 0x37, 0x6b, 0x03, 0x79, 0x89, 0x62, 0xc6,
- 0xd7, 0xc0, 0xd2, 0x7c, 0x6a, 0x8b, 0x22, 0xa3, 0x5b, 0x05, 0x5d, 0x02, 0x75, 0xd5, 0x61, 0xe3,
- 0x18, 0x8f, 0x55, 0x51, 0xad, 0x1f, 0x0b, 0x5e, 0x85, 0xe5, 0xc2, 0x57, 0x63, 0xca, 0x3d, 0x6c,
- 0xb4, 0xc5, 0xcc, 0x70, 0xb2, 0x91, 0x59, 0x0d, 0x47, 0x20, 0xc8, 0x4f, 0x58, 0xe0, 0x01, 0xe2,
- 0x16, 0x38, 0xc4, 0x6f, 0x3b, 0x0f, 0x65, 0x46, 0xbe, 0x7e, 0x2d, 0x7b, 0x82, 0xf9, 0x40, 0xb5,
- 0x1d, 0x73, 0xf8, 0xeb, 0x26, 0xc7, 0x87, 0x97, 0x25, 0x54, 0xb1, 0x28, 0xaa, 0x98, 0x9d, 0xa5,
- 0x64, 0x6d, 0x7a, 0xd4, 0x10, 0x81, 0x44, 0xef, 0x49, 0xd6, 0xae, 0x2e, 0xdd, 0x76, 0x5c, 0x2f,
- 0xa7, 0x1c, 0xc9, 0x09, 0x69, 0x9a, 0x83, 0xcf, 0x29, 0x39, 0xb9, 0xe9, 0x4c, 0xff, 0x43, 0xab
- };
-
- private static final short[] rc2Ekb = {
- 0x5d, 0xbe, 0x9b, 0x8b, 0x11, 0x99, 0x6e, 0x4d, 0x59, 0xf3, 0x85, 0xa6, 0x3f, 0xb7, 0x83, 0xc5,
- 0xe4, 0x73, 0x6b, 0x3a, 0x68, 0x5a, 0xc0, 0x47, 0xa0, 0x64, 0x34, 0x0c, 0xf1, 0xd0, 0x52, 0xa5,
- 0xb9, 0x1e, 0x96, 0x43, 0x41, 0xd8, 0xd4, 0x2c, 0xdb, 0xf8, 0x07, 0x77, 0x2a, 0xca, 0xeb, 0xef,
- 0x10, 0x1c, 0x16, 0x0d, 0x38, 0x72, 0x2f, 0x89, 0xc1, 0xf9, 0x80, 0xc4, 0x6d, 0xae, 0x30, 0x3d,
- 0xce, 0x20, 0x63, 0xfe, 0xe6, 0x1a, 0xc7, 0xb8, 0x50, 0xe8, 0x24, 0x17, 0xfc, 0x25, 0x6f, 0xbb,
- 0x6a, 0xa3, 0x44, 0x53, 0xd9, 0xa2, 0x01, 0xab, 0xbc, 0xb6, 0x1f, 0x98, 0xee, 0x9a, 0xa7, 0x2d,
- 0x4f, 0x9e, 0x8e, 0xac, 0xe0, 0xc6, 0x49, 0x46, 0x29, 0xf4, 0x94, 0x8a, 0xaf, 0xe1, 0x5b, 0xc3,
- 0xb3, 0x7b, 0x57, 0xd1, 0x7c, 0x9c, 0xed, 0x87, 0x40, 0x8c, 0xe2, 0xcb, 0x93, 0x14, 0xc9, 0x61,
- 0x2e, 0xe5, 0xcc, 0xf6, 0x5e, 0xa8, 0x5c, 0xd6, 0x75, 0x8d, 0x62, 0x95, 0x58, 0x69, 0x76, 0xa1,
- 0x4a, 0xb5, 0x55, 0x09, 0x78, 0x33, 0x82, 0xd7, 0xdd, 0x79, 0xf5, 0x1b, 0x0b, 0xde, 0x26, 0x21,
- 0x28, 0x74, 0x04, 0x97, 0x56, 0xdf, 0x3c, 0xf0, 0x37, 0x39, 0xdc, 0xff, 0x06, 0xa4, 0xea, 0x42,
- 0x08, 0xda, 0xb4, 0x71, 0xb0, 0xcf, 0x12, 0x7a, 0x4e, 0xfa, 0x6c, 0x1d, 0x84, 0x00, 0xc8, 0x7f,
- 0x91, 0x45, 0xaa, 0x2b, 0xc2, 0xb1, 0x8f, 0xd5, 0xba, 0xf2, 0xad, 0x19, 0xb2, 0x67, 0x36, 0xf7,
- 0x0f, 0x0a, 0x92, 0x7d, 0xe3, 0x9d, 0xe9, 0x90, 0x3e, 0x23, 0x27, 0x66, 0x13, 0xec, 0x81, 0x15,
- 0xbd, 0x22, 0xbf, 0x9f, 0x7e, 0xa9, 0x51, 0x4b, 0x4c, 0xfb, 0x02, 0xd3, 0x70, 0x86, 0x31, 0xe7,
- 0x3b, 0x05, 0x03, 0x54, 0x60, 0x48, 0x65, 0x18, 0xd2, 0xcd, 0x5f, 0x32, 0x88, 0x0e, 0x35, 0xfd
- };
-
- private JcaJceExtHelper helper;
-
- EnvelopedDataHelper(JcaJceExtHelper helper)
- {
- this.helper = helper;
- }
-
- String getBaseCipherName(ASN1ObjectIdentifier algorithm)
- {
- String name = (String)BASE_CIPHER_NAMES.get(algorithm);
-
- if (name == null)
- {
- return algorithm.getId();
- }
-
- return name;
- }
-
- Key getJceKey(GenericKey key)
- {
- if (key.getRepresentation() instanceof Key)
- {
- return (Key)key.getRepresentation();
- }
-
- if (key.getRepresentation() instanceof byte[])
- {
- return new SecretKeySpec((byte[])key.getRepresentation(), "ENC");
- }
-
- throw new IllegalArgumentException("unknown generic key type");
- }
-
- public Key getJceKey(ASN1ObjectIdentifier algorithm, GenericKey key)
- {
- if (key.getRepresentation() instanceof Key)
- {
- return (Key)key.getRepresentation();
- }
-
- if (key.getRepresentation() instanceof byte[])
- {
- return new SecretKeySpec((byte[])key.getRepresentation(), getBaseCipherName(algorithm));
- }
-
- throw new IllegalArgumentException("unknown generic key type");
- }
-
- public void keySizeCheck(AlgorithmIdentifier keyAlgorithm, Key key)
- throws CMSException
- {
- int expectedKeySize = EnvelopedDataHelper.KEY_SIZE_PROVIDER.getKeySize(keyAlgorithm);
- if (expectedKeySize > 0)
- {
- byte[] keyEnc = null;
-
- try
- {
- keyEnc = key.getEncoded();
- }
- catch (Exception e)
- {
- // ignore - we're using a HSM...
- }
-
- if (keyEnc != null)
- {
- if (keyEnc.length * 8 != expectedKeySize)
- {
- throw new CMSException("Expected key size for algorithm OID not found in recipient.");
- }
- }
- }
- }
-
- Cipher createCipher(ASN1ObjectIdentifier algorithm)
- throws CMSException
- {
- try
- {
- String cipherName = (String)CIPHER_ALG_NAMES.get(algorithm);
-
- if (cipherName != null)
- {
- try
- {
- // this is reversed as the Sun policy files now allow unlimited strength RSA
- return helper.createCipher(cipherName);
- }
- catch (NoSuchAlgorithmException e)
- {
- // Ignore
- }
- }
- return helper.createCipher(algorithm.getId());
- }
- catch (Exception e)
- {
- throw new CMSException("cannot create cipher: " + e.getMessage(), e);
- }
- }
-
- Mac createMac(ASN1ObjectIdentifier algorithm)
- throws CMSException
- {
- try
- {
- String macName = (String)MAC_ALG_NAMES.get(algorithm);
-
- if (macName != null)
- {
- try
- {
- // this is reversed as the Sun policy files now allow unlimited strength RSA
- return helper.createMac(macName);
- }
- catch (NoSuchAlgorithmException e)
- {
- // Ignore
- }
- }
- return helper.createMac(algorithm.getId());
- }
- catch (Exception e)
- {
- throw new CMSException("cannot create mac: " + e.getMessage(), e);
- }
- }
-
- Cipher createRFC3211Wrapper(ASN1ObjectIdentifier algorithm)
- throws CMSException
- {
- String cipherName = (String)BASE_CIPHER_NAMES.get(algorithm);
-
- if (cipherName == null)
- {
- throw new CMSException("no name for " + algorithm);
- }
-
- cipherName += "RFC3211Wrap";
-
- try
- {
- return helper.createCipher(cipherName);
- }
- catch (Exception e)
- {
- throw new CMSException("cannot create cipher: " + e.getMessage(), e);
- }
- }
-
- KeyAgreement createKeyAgreement(ASN1ObjectIdentifier algorithm)
- throws CMSException
- {
- try
- {
- String agreementName = (String)BASE_CIPHER_NAMES.get(algorithm);
-
- if (agreementName != null)
- {
- try
- {
- // this is reversed as the Sun policy files now allow unlimited strength RSA
- return helper.createKeyAgreement(agreementName);
- }
- catch (NoSuchAlgorithmException e)
- {
- // Ignore
- }
- }
- return helper.createKeyAgreement(algorithm.getId());
- }
- catch (Exception e)
- {
- throw new CMSException("cannot create key pair generator: " + e.getMessage(), e);
- }
- }
-
- AlgorithmParameterGenerator createAlgorithmParameterGenerator(ASN1ObjectIdentifier algorithm)
- throws CMSException
- {
- String algorithmName = (String)BASE_CIPHER_NAMES.get(algorithm);
-
- try
- {
- if (algorithmName != null)
- {
- try
- {
- // this is reversed as the Sun policy files now allow unlimited strength RSA
- return helper.createAlgorithmParameterGenerator(algorithmName);
- }
- catch (NoSuchAlgorithmException e)
- {
- // Ignore
- }
- }
- return helper.createAlgorithmParameterGenerator(algorithm.getId());
- }
- catch (Exception e)
- {
- throw new CMSException("cannot create key pair generator: " + e.getMessage(), e);
- }
- }
-
- public Cipher createContentCipher(final Key sKey, final AlgorithmIdentifier encryptionAlgID)
- throws CMSException
- {
- return (Cipher)execute(new JCECallback()
- {
- public Object doInJCE()
- throws CMSException, InvalidAlgorithmParameterException,
- InvalidKeyException, InvalidParameterSpecException, NoSuchAlgorithmException,
- NoSuchPaddingException, NoSuchProviderException
- {
- Cipher cipher = createCipher(encryptionAlgID.getAlgorithm());
- ASN1Encodable sParams = encryptionAlgID.getParameters();
- String encAlg = encryptionAlgID.getAlgorithm().getId();
-
- if (sParams != null && !(sParams instanceof ASN1Null))
- {
- try
- {
- AlgorithmParameters params = createAlgorithmParameters(encryptionAlgID.getAlgorithm());
-
- CMSUtils.loadParameters(params, sParams);
-
- cipher.init(Cipher.DECRYPT_MODE, sKey, params);
- }
- catch (NoSuchAlgorithmException e)
- {
- if (encAlg.equals(CMSAlgorithm.DES_CBC.getId())
- || encAlg.equals(CMSEnvelopedDataGenerator.DES_EDE3_CBC)
- || encAlg.equals(CMSEnvelopedDataGenerator.IDEA_CBC)
- || encAlg.equals(CMSEnvelopedDataGenerator.AES128_CBC)
- || encAlg.equals(CMSEnvelopedDataGenerator.AES192_CBC)
- || encAlg.equals(CMSEnvelopedDataGenerator.AES256_CBC))
- {
- cipher.init(Cipher.DECRYPT_MODE, sKey, new IvParameterSpec(
- ASN1OctetString.getInstance(sParams).getOctets()));
- }
- else
- {
- throw e;
- }
- }
- }
- else
- {
- if (encAlg.equals(CMSAlgorithm.DES_CBC.getId())
- || encAlg.equals(CMSEnvelopedDataGenerator.DES_EDE3_CBC)
- || encAlg.equals(CMSEnvelopedDataGenerator.IDEA_CBC)
- || encAlg.equals(CMSEnvelopedDataGenerator.CAST5_CBC))
- {
- cipher.init(Cipher.DECRYPT_MODE, sKey, new IvParameterSpec(new byte[8]));
- }
- else
- {
- cipher.init(Cipher.DECRYPT_MODE, sKey);
- }
- }
-
- return cipher;
- }
- });
- }
-
- Mac createContentMac(final Key sKey, final AlgorithmIdentifier macAlgId)
- throws CMSException
- {
- return (Mac)execute(new JCECallback()
- {
- public Object doInJCE()
- throws CMSException, InvalidAlgorithmParameterException,
- InvalidKeyException, InvalidParameterSpecException, NoSuchAlgorithmException,
- NoSuchPaddingException, NoSuchProviderException
- {
- Mac mac = createMac(macAlgId.getAlgorithm());
- ASN1Encodable sParams = macAlgId.getParameters();
- String macAlg = macAlgId.getAlgorithm().getId();
-
- if (sParams != null && !(sParams instanceof ASN1Null))
- {
- try
- {
- AlgorithmParameters params = createAlgorithmParameters(macAlgId.getAlgorithm());
-
- CMSUtils.loadParameters(params, sParams);
-
- mac.init(sKey, params.getParameterSpec(IvParameterSpec.class));
- }
- catch (NoSuchAlgorithmException e)
- {
- throw e;
- }
- }
- else
- {
- mac.init(sKey);
- }
-
- return mac;
- }
- });
- }
-
- AlgorithmParameters createAlgorithmParameters(ASN1ObjectIdentifier algorithm)
- throws NoSuchAlgorithmException, NoSuchProviderException
- {
- String algorithmName = (String)BASE_CIPHER_NAMES.get(algorithm);
-
- if (algorithmName != null)
- {
- try
- {
- // this is reversed as the Sun policy files now allow unlimited strength RSA
- return helper.createAlgorithmParameters(algorithmName);
- }
- catch (NoSuchAlgorithmException e)
- {
- // Ignore
- }
- }
- return helper.createAlgorithmParameters(algorithm.getId());
- }
-
-
- KeyPairGenerator createKeyPairGenerator(ASN1ObjectIdentifier algorithm)
- throws CMSException
- {
- try
- {
- String cipherName = (String)BASE_CIPHER_NAMES.get(algorithm);
-
- if (cipherName != null)
- {
- try
- {
- // this is reversed as the Sun policy files now allow unlimited strength RSA
- return helper.createKeyPairGenerator(cipherName);
- }
- catch (NoSuchAlgorithmException e)
- {
- // Ignore
- }
- }
- return helper.createKeyPairGenerator(algorithm.getId());
- }
- catch (Exception e)
- {
- throw new CMSException("cannot create key pair generator: " + e.getMessage(), e);
- }
- }
-
- public KeyGenerator createKeyGenerator(ASN1ObjectIdentifier algorithm)
- throws CMSException
- {
- try
- {
- String cipherName = (String)BASE_CIPHER_NAMES.get(algorithm);
-
- if (cipherName != null)
- {
- try
- {
- // this is reversed as the Sun policy files now allow unlimited strength RSA
- return helper.createKeyGenerator(cipherName);
- }
- catch (NoSuchAlgorithmException e)
- {
- // Ignore
- }
- }
- return helper.createKeyGenerator(algorithm.getId());
- }
- catch (Exception e)
- {
- throw new CMSException("cannot create key generator: " + e.getMessage(), e);
- }
- }
-
- AlgorithmParameters generateParameters(ASN1ObjectIdentifier encryptionOID, SecretKey encKey, SecureRandom rand)
- throws CMSException
- {
- try
- {
- AlgorithmParameterGenerator pGen = createAlgorithmParameterGenerator(encryptionOID);
-
- if (encryptionOID.equals(CMSAlgorithm.RC2_CBC))
- {
- byte[] iv = new byte[8];
-
- rand.nextBytes(iv);
-
- try
- {
- pGen.init(new RC2ParameterSpec(encKey.getEncoded().length * 8, iv), rand);
- }
- catch (InvalidAlgorithmParameterException e)
- {
- throw new CMSException("parameters generation error: " + e, e);
- }
- }
-
- return pGen.generateParameters();
- }
- catch (Exception e)
- {
- throw new CMSException("exception creating algorithm parameter generator: " + e, e);
- }
- }
-
- AlgorithmIdentifier getAlgorithmIdentifier(ASN1ObjectIdentifier encryptionOID, AlgorithmParameters params)
- throws CMSException
- {
- ASN1Encodable asn1Params;
- if (params != null)
- {
- asn1Params = CMSUtils.extractParameters(params);
- }
- else
- {
- asn1Params = DERNull.INSTANCE;
- }
-
- return new AlgorithmIdentifier(
- encryptionOID,
- asn1Params);
- }
-
- static Object execute(JCECallback callback) throws CMSException
- {
- try
- {
- return callback.doInJCE();
- }
- catch (NoSuchAlgorithmException e)
- {
- throw new CMSException("can't find algorithm.", e);
- }
- catch (InvalidKeyException e)
- {
- throw new CMSException("key invalid in message.", e);
- }
- catch (NoSuchProviderException e)
- {
- throw new CMSException("can't find provider.", e);
- }
- catch (NoSuchPaddingException e)
- {
- throw new CMSException("required padding not supported.", e);
- }
- catch (InvalidAlgorithmParameterException e)
- {
- throw new CMSException("algorithm parameters invalid.", e);
- }
- catch (InvalidParameterSpecException e)
- {
- throw new CMSException("MAC algorithm parameter spec invalid.", e);
- }
- }
-
- public KeyFactory createKeyFactory(ASN1ObjectIdentifier algorithm)
- throws CMSException
- {
- try
- {
- String cipherName = (String)BASE_CIPHER_NAMES.get(algorithm);
-
- if (cipherName != null)
- {
- try
- {
- // this is reversed as the Sun policy files now allow unlimited strength RSA
- return helper.createKeyFactory(cipherName);
- }
- catch (NoSuchAlgorithmException e)
- {
- // Ignore
- }
- }
- return helper.createKeyFactory(algorithm.getId());
- }
- catch (Exception e)
- {
- throw new CMSException("cannot create key factory: " + e.getMessage(), e);
- }
- }
-
- public JceAsymmetricKeyUnwrapper createAsymmetricUnwrapper(AlgorithmIdentifier keyEncryptionAlgorithm, PrivateKey keyEncryptionKey)
- {
- return helper.createAsymmetricUnwrapper(keyEncryptionAlgorithm, keyEncryptionKey);
- }
-
- public SymmetricKeyUnwrapper createSymmetricUnwrapper(AlgorithmIdentifier keyEncryptionAlgorithm, SecretKey keyEncryptionKey)
- {
- return helper.createSymmetricUnwrapper(keyEncryptionAlgorithm, keyEncryptionKey);
- }
-
- public AlgorithmIdentifier getAlgorithmIdentifier(ASN1ObjectIdentifier macOID, AlgorithmParameterSpec paramSpec)
- {
- if (paramSpec instanceof IvParameterSpec)
- {
- return new AlgorithmIdentifier(macOID, new DEROctetString(((IvParameterSpec)paramSpec).getIV()));
- }
-
- if (paramSpec instanceof RC2ParameterSpec)
- {
- RC2ParameterSpec rc2Spec = (RC2ParameterSpec)paramSpec;
-
- int effKeyBits = ((RC2ParameterSpec)paramSpec).getEffectiveKeyBits();
-
- if (effKeyBits != -1)
- {
- int parameterVersion;
-
- if (effKeyBits < 256)
- {
- parameterVersion = rc2Table[effKeyBits];
- }
- else
- {
- parameterVersion = effKeyBits;
- }
-
- return new AlgorithmIdentifier(macOID, new RC2CBCParameter(parameterVersion, rc2Spec.getIV()));
- }
-
- return new AlgorithmIdentifier(macOID, new RC2CBCParameter(rc2Spec.getIV()));
- }
-
- throw new IllegalStateException("unknown parameter spec: " + paramSpec);
- }
-
- static interface JCECallback
- {
- Object doInJCE()
- throws CMSException, InvalidAlgorithmParameterException, InvalidKeyException, InvalidParameterSpecException,
- NoSuchAlgorithmException, NoSuchPaddingException, NoSuchProviderException;
- }
-}
diff --git a/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/cms/jcajce/JcaSelectorConverter.java b/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/cms/jcajce/JcaSelectorConverter.java
deleted file mode 100644
index 6f0224679..000000000
--- a/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/cms/jcajce/JcaSelectorConverter.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package org.spongycastle.cms.jcajce;
-
-import java.security.cert.X509CertSelector;
-
-import org.spongycastle.asn1.ASN1OctetString;
-import org.spongycastle.asn1.x500.X500Name;
-import org.spongycastle.cms.KeyTransRecipientId;
-import org.spongycastle.cms.SignerId;
-
-public class JcaSelectorConverter
-{
- public JcaSelectorConverter()
- {
-
- }
-
- public SignerId getSignerId(X509CertSelector certSelector)
- {
-try
-{
- if (certSelector.getSubjectKeyIdentifier() != null)
- {
- return new SignerId(X500Name.getInstance(certSelector.getIssuerAsBytes()), certSelector.getSerialNumber(), ASN1OctetString.getInstance(certSelector.getSubjectKeyIdentifier()).getOctets());
- }
- else
- {
- return new SignerId(X500Name.getInstance(certSelector.getIssuerAsBytes()), certSelector.getSerialNumber());
- }
-}
-catch (Exception e)
-{
- throw new IllegalArgumentException("conversion failed: " + e.toString());
-}
- }
-
- public KeyTransRecipientId getKeyTransRecipientId(X509CertSelector certSelector)
- {
-try
-{
- if (certSelector.getSubjectKeyIdentifier() != null)
- {
- return new KeyTransRecipientId(X500Name.getInstance(certSelector.getIssuerAsBytes()), certSelector.getSerialNumber(), ASN1OctetString.getInstance(certSelector.getSubjectKeyIdentifier()).getOctets());
- }
- else
- {
- return new KeyTransRecipientId(X500Name.getInstance(certSelector.getIssuerAsBytes()), certSelector.getSerialNumber());
- }
-}
-catch (Exception e)
-{
- throw new IllegalArgumentException("conversion failed: " + e.toString());
-}
- }
-}
diff --git a/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/cms/jcajce/JcaX509CertSelectorConverter.java b/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/cms/jcajce/JcaX509CertSelectorConverter.java
deleted file mode 100644
index ceb138ed6..000000000
--- a/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/cms/jcajce/JcaX509CertSelectorConverter.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package org.spongycastle.cms.jcajce;
-
-import java.security.cert.X509CertSelector;
-
-import org.spongycastle.cms.KeyTransRecipientId;
-import org.spongycastle.cms.SignerId;
-
-public class JcaX509CertSelectorConverter
- extends org.spongycastle.cert.selector.jcajce.JcaX509CertSelectorConverter
-{
- public JcaX509CertSelectorConverter()
- {
- }
-
- public X509CertSelector getCertSelector(KeyTransRecipientId recipientId)
- {
- return doConversion(recipientId.getIssuer(), recipientId.getSerialNumber(), recipientId.getSubjectKeyIdentifier());
- }
-
- public X509CertSelector getCertSelector(SignerId signerId)
- {
- return doConversion(signerId.getIssuer(), signerId.getSerialNumber(), signerId.getSubjectKeyIdentifier());
- }
-}
diff --git a/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/cms/jcajce/JceCMSContentEncryptorBuilder.java b/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/cms/jcajce/JceCMSContentEncryptorBuilder.java
deleted file mode 100644
index b4bdd4ad7..000000000
--- a/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/cms/jcajce/JceCMSContentEncryptorBuilder.java
+++ /dev/null
@@ -1,166 +0,0 @@
-package org.spongycastle.cms.jcajce;
-
-import java.io.OutputStream;
-import java.security.AlgorithmParameters;
-import java.security.GeneralSecurityException;
-import java.security.InvalidKeyException;
-import java.security.Provider;
-import java.security.SecureRandom;
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.crypto.Cipher;
-import javax.crypto.CipherOutputStream;
-import javax.crypto.KeyGenerator;
-import javax.crypto.SecretKey;
-
-import org.spongycastle.asn1.ASN1ObjectIdentifier;
-import org.spongycastle.asn1.x509.AlgorithmIdentifier;
-import org.spongycastle.cms.CMSAlgorithm;
-import org.spongycastle.cms.CMSException;
-import org.spongycastle.operator.GenericKey;
-import org.spongycastle.operator.OutputEncryptor;
-import org.spongycastle.util.Integers;
-
-public class JceCMSContentEncryptorBuilder
-{
- private static Map keySizes = new HashMap();
-
- static
- {
- keySizes.put(CMSAlgorithm.AES128_CBC, Integers.valueOf(128));
- keySizes.put(CMSAlgorithm.AES192_CBC, Integers.valueOf(192));
- keySizes.put(CMSAlgorithm.AES256_CBC, Integers.valueOf(256));
-
- keySizes.put(CMSAlgorithm.CAMELLIA128_CBC, Integers.valueOf(128));
- keySizes.put(CMSAlgorithm.CAMELLIA192_CBC, Integers.valueOf(192));
- keySizes.put(CMSAlgorithm.CAMELLIA256_CBC, Integers.valueOf(256));
- }
-
- private static int getKeySize(ASN1ObjectIdentifier oid)
- {
- Integer size = (Integer)keySizes.get(oid);
-
- if (size != null)
- {
- return size.intValue();
- }
-
- return -1;
- }
-
- private ASN1ObjectIdentifier encryptionOID;
- private int keySize;
-
- private EnvelopedDataHelper helper = new EnvelopedDataHelper(new DefaultJcaJceExtHelper());
- private SecureRandom random;
-
- public JceCMSContentEncryptorBuilder(ASN1ObjectIdentifier encryptionOID)
- {
- this(encryptionOID, getKeySize(encryptionOID));
- }
-
- public JceCMSContentEncryptorBuilder(ASN1ObjectIdentifier encryptionOID, int keySize)
- {
- this.encryptionOID = encryptionOID;
- this.keySize = keySize;
- }
-
- public JceCMSContentEncryptorBuilder setProvider(Provider provider)
- {
- this.helper = new EnvelopedDataHelper(new ProviderJcaJceExtHelper(provider));
-
- return this;
- }
-
- public JceCMSContentEncryptorBuilder setProvider(String providerName)
- {
- this.helper = new EnvelopedDataHelper(new NamedJcaJceExtHelper(providerName));
-
- return this;
- }
-
- public JceCMSContentEncryptorBuilder setSecureRandom(SecureRandom random)
- {
- this.random = random;
-
- return this;
- }
-
- public OutputEncryptor build()
- throws CMSException
- {
- return new CMSOutputEncryptor(encryptionOID, keySize, random);
- }
-
- private class CMSOutputEncryptor
- implements OutputEncryptor
- {
- private SecretKey encKey;
- private AlgorithmIdentifier algorithmIdentifier;
- private Cipher cipher;
-
- CMSOutputEncryptor(ASN1ObjectIdentifier encryptionOID, int keySize, SecureRandom random)
- throws CMSException
- {
- KeyGenerator keyGen = helper.createKeyGenerator(encryptionOID);
-
- if (random == null)
- {
- random = new SecureRandom();
- }
-
- if (keySize < 0)
- {
- keyGen.init(random);
- }
- else
- {
- keyGen.init(keySize, random);
- }
-
- cipher = helper.createCipher(encryptionOID);
- encKey = keyGen.generateKey();
- AlgorithmParameters params = helper.generateParameters(encryptionOID, encKey, random);
-
- try
- {
- cipher.init(Cipher.ENCRYPT_MODE, encKey, params, random);
- }
- catch (InvalidKeyException e)
- {
- throw new CMSException("unable to initialize cipher: " + e.getMessage(), e);
- }
- catch (GeneralSecurityException e)
- {
- throw new CMSException("unable to initialize cipher: " + e.getMessage(), e);
- }
-
- //
- // If params are null we try and second guess on them as some providers don't provide
- // algorithm parameter generation explicity but instead generate them under the hood.
- //
- if (params == null)
- {
- params = cipher.getParameters();
- }
-
- algorithmIdentifier = helper.getAlgorithmIdentifier(encryptionOID, params);
- }
-
- public AlgorithmIdentifier getAlgorithmIdentifier()
- {
- return algorithmIdentifier;
- }
-
- public OutputStream getOutputStream(OutputStream dOut)
- {
- return new CipherOutputStream(dOut, cipher);
- }
-
- public GenericKey getKey()
- {
- return new GenericKey(encKey);
- }
- }
-}
diff --git a/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/cms/jcajce/JceKeyAgreeRecipient.java b/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/cms/jcajce/JceKeyAgreeRecipient.java
deleted file mode 100644
index 93c11b215..000000000
--- a/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/cms/jcajce/JceKeyAgreeRecipient.java
+++ /dev/null
@@ -1,184 +0,0 @@
-package org.spongycastle.cms.jcajce;
-
-import java.io.IOException;
-import java.security.GeneralSecurityException;
-import java.security.InvalidKeyException;
-import java.security.Key;
-import java.security.KeyFactory;
-import java.security.NoSuchAlgorithmException;
-import java.security.PrivateKey;
-import java.security.Provider;
-import java.security.PublicKey;
-import java.security.spec.InvalidKeySpecException;
-import java.security.spec.X509EncodedKeySpec;
-
-import javax.crypto.Cipher;
-import javax.crypto.KeyAgreement;
-import javax.crypto.NoSuchPaddingException;
-import javax.crypto.SecretKey;
-
-import org.spongycastle.asn1.ASN1ObjectIdentifier;
-import org.spongycastle.asn1.ASN1OctetString;
-import org.spongycastle.asn1.ASN1Primitive;
-import org.spongycastle.asn1.cms.ecc.MQVuserKeyingMaterial;
-import org.spongycastle.asn1.pkcs.PrivateKeyInfo;
-import org.spongycastle.asn1.x509.AlgorithmIdentifier;
-import org.spongycastle.asn1.x509.SubjectPublicKeyInfo;
-import org.spongycastle.cms.CMSEnvelopedGenerator;
-import org.spongycastle.cms.CMSException;
-import org.spongycastle.cms.KeyAgreeRecipient;
-import org.spongycastle.jce.spec.MQVPrivateKeySpec;
-import org.spongycastle.jce.spec.MQVPublicKeySpec;
-
-public abstract class JceKeyAgreeRecipient
- implements KeyAgreeRecipient
-{
- private PrivateKey recipientKey;
- protected EnvelopedDataHelper helper = new EnvelopedDataHelper(new DefaultJcaJceExtHelper());
- protected EnvelopedDataHelper contentHelper = helper;
-
- public JceKeyAgreeRecipient(PrivateKey recipientKey)
- {
- this.recipientKey = recipientKey;
- }
-
- /**
- * Set the provider to use for key recovery and content processing.
- *
- * @param provider provider to use.
- * @return this recipient.
- */
- public JceKeyAgreeRecipient setProvider(Provider provider)
- {
- this.helper = new EnvelopedDataHelper(new ProviderJcaJceExtHelper(provider));
- this.contentHelper = helper;
-
- return this;
- }
-
- /**
- * Set the provider to use for key recovery and content processing.
- *
- * @param providerName the name of the provider to use.
- * @return this recipient.
- */
- public JceKeyAgreeRecipient setProvider(String providerName)
- {
- this.helper = new EnvelopedDataHelper(new NamedJcaJceExtHelper(providerName));
- this.contentHelper = helper;
-
- return this;
- }
-
- /**
- * Set the provider to use for content processing. If providerName is null a "no provider" search will be
- * used to satisfy getInstance calls.
- *
- * @param provider the provider to use.
- * @return this recipient.
- */
- public JceKeyAgreeRecipient setContentProvider(Provider provider)
- {
- this.contentHelper = CMSUtils.createContentHelper(provider);
-
- return this;
- }
-
- /**
- * Set the provider to use for content processing. If providerName is null a "no provider" search will be
- * used to satisfy getInstance calls.
- *
- * @param providerName the name of the provider to use.
- * @return this recipient.
- */
- public JceKeyAgreeRecipient setContentProvider(String providerName)
- {
- this.contentHelper = CMSUtils.createContentHelper(providerName);
-
- return this;
- }
-
- private SecretKey calculateAgreedWrapKey(AlgorithmIdentifier keyEncAlg, ASN1ObjectIdentifier wrapAlg,
- PublicKey senderPublicKey, ASN1OctetString userKeyingMaterial, PrivateKey receiverPrivateKey)
- throws CMSException, GeneralSecurityException, IOException, InvalidKeyException, NoSuchAlgorithmException
- {
- String agreeAlg = keyEncAlg.getAlgorithm().getId();
-
- if (agreeAlg.equals(CMSEnvelopedGenerator.ECMQV_SHA1KDF))
- {
- byte[] ukmEncoding = userKeyingMaterial.getOctets();
- MQVuserKeyingMaterial ukm = MQVuserKeyingMaterial.getInstance(
- ASN1Primitive.fromByteArray(ukmEncoding));
-
- SubjectPublicKeyInfo pubInfo = new SubjectPublicKeyInfo(
- getPrivateKeyAlgorithmIdentifier(),
- ukm.getEphemeralPublicKey().getPublicKey().getBytes());
-
- X509EncodedKeySpec pubSpec = new X509EncodedKeySpec(pubInfo.getEncoded());
- KeyFactory fact = helper.createKeyFactory(keyEncAlg.getAlgorithm());
- PublicKey ephemeralKey = fact.generatePublic(pubSpec);
-
- senderPublicKey = new MQVPublicKeySpec(senderPublicKey, ephemeralKey);
- receiverPrivateKey = new MQVPrivateKeySpec(receiverPrivateKey, receiverPrivateKey);
- }
-
- KeyAgreement agreement = helper.createKeyAgreement(keyEncAlg.getAlgorithm());
-
- agreement.init(receiverPrivateKey);
- agreement.doPhase(senderPublicKey, true);
-
- return agreement.generateSecret(wrapAlg.getId());
- }
-
- private Key unwrapSessionKey(ASN1ObjectIdentifier wrapAlg, SecretKey agreedKey, ASN1ObjectIdentifier contentEncryptionAlgorithm, byte[] encryptedContentEncryptionKey)
- throws CMSException, InvalidKeyException, NoSuchAlgorithmException
- {
- Cipher keyCipher = helper.createCipher(wrapAlg);
- keyCipher.init(Cipher.UNWRAP_MODE, agreedKey);
- return keyCipher.unwrap(encryptedContentEncryptionKey, helper.getBaseCipherName(contentEncryptionAlgorithm), Cipher.SECRET_KEY);
- }
-
- protected Key extractSecretKey(AlgorithmIdentifier keyEncryptionAlgorithm, AlgorithmIdentifier contentEncryptionAlgorithm, SubjectPublicKeyInfo senderKey, ASN1OctetString userKeyingMaterial, byte[] encryptedContentEncryptionKey)
- throws CMSException
- {
- try
- {
- ASN1ObjectIdentifier wrapAlg =
- AlgorithmIdentifier.getInstance(keyEncryptionAlgorithm.getParameters()).getAlgorithm();
-
- X509EncodedKeySpec pubSpec = new X509EncodedKeySpec(senderKey.getEncoded());
- KeyFactory fact = helper.createKeyFactory(keyEncryptionAlgorithm.getAlgorithm());
- PublicKey senderPublicKey = fact.generatePublic(pubSpec);
-
- SecretKey agreedWrapKey = calculateAgreedWrapKey(keyEncryptionAlgorithm, wrapAlg,
- senderPublicKey, userKeyingMaterial, recipientKey);
-
- return unwrapSessionKey(wrapAlg, agreedWrapKey, contentEncryptionAlgorithm.getAlgorithm(), encryptedContentEncryptionKey);
- }
- catch (NoSuchAlgorithmException e)
- {
- throw new CMSException("can't find algorithm.", e);
- }
- catch (InvalidKeyException e)
- {
- throw new CMSException("key invalid in message.", e);
- }
- catch (InvalidKeySpecException e)
- {
- throw new CMSException("originator key spec invalid.", e);
- }
- catch (NoSuchPaddingException e)
- {
- throw new CMSException("required padding not supported.", e);
- }
- catch (Exception e)
- {
- throw new CMSException("originator key invalid.", e);
- }
- }
-
- public AlgorithmIdentifier getPrivateKeyAlgorithmIdentifier()
- {
- return PrivateKeyInfo.getInstance(recipientKey.getEncoded()).getAlgorithmId();
- }
-}
diff --git a/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/cms/jcajce/JceKeyAgreeRecipientInfoGenerator.java b/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/cms/jcajce/JceKeyAgreeRecipientInfoGenerator.java
deleted file mode 100644
index b37828840..000000000
--- a/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/cms/jcajce/JceKeyAgreeRecipientInfoGenerator.java
+++ /dev/null
@@ -1,212 +0,0 @@
-package org.spongycastle.cms.jcajce;
-
-import java.security.GeneralSecurityException;
-import java.security.InvalidAlgorithmParameterException;
-import java.security.KeyPair;
-import java.security.KeyPairGenerator;
-import java.security.PrivateKey;
-import java.security.Provider;
-import java.security.PublicKey;
-import java.security.SecureRandom;
-import java.security.InvalidKeyException;
-import java.security.NoSuchAlgorithmException;
-import java.security.cert.CertificateEncodingException;
-import java.security.cert.X509Certificate;
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.crypto.Cipher;
-import javax.crypto.KeyAgreement;
-import javax.crypto.SecretKey;
-
-import org.spongycastle.asn1.ASN1Encodable;
-import org.spongycastle.asn1.ASN1EncodableVector;
-import org.spongycastle.asn1.ASN1ObjectIdentifier;
-import org.spongycastle.asn1.ASN1OctetString;
-import org.spongycastle.asn1.ASN1Sequence;
-import org.spongycastle.asn1.DEROctetString;
-import org.spongycastle.asn1.DERSequence;
-import org.spongycastle.asn1.cms.KeyAgreeRecipientIdentifier;
-import org.spongycastle.asn1.cms.RecipientEncryptedKey;
-import org.spongycastle.asn1.cms.RecipientKeyIdentifier;
-import org.spongycastle.asn1.cms.ecc.MQVuserKeyingMaterial;
-import org.spongycastle.asn1.x509.AlgorithmIdentifier;
-import org.spongycastle.asn1.x509.SubjectPublicKeyInfo;
-import org.spongycastle.cms.CMSAlgorithm;
-import org.spongycastle.cms.CMSEnvelopedGenerator;
-import org.spongycastle.cms.CMSException;
-import org.spongycastle.cms.KeyAgreeRecipientInfoGenerator;
-import org.spongycastle.jce.interfaces.ECPublicKey;
-import org.spongycastle.jce.spec.ECParameterSpec;
-import org.spongycastle.jce.spec.MQVPrivateKeySpec;
-import org.spongycastle.jce.spec.MQVPublicKeySpec;
-import org.spongycastle.operator.GenericKey;
-
-public class JceKeyAgreeRecipientInfoGenerator
- extends KeyAgreeRecipientInfoGenerator
-{
- private List recipientIDs = new ArrayList();
- private List recipientKeys = new ArrayList();
- private PublicKey senderPublicKey;
- private PrivateKey senderPrivateKey;
-
- private EnvelopedDataHelper helper = new EnvelopedDataHelper(new DefaultJcaJceExtHelper());
- private SecureRandom random;
- private KeyPair ephemeralKP;
-
- public JceKeyAgreeRecipientInfoGenerator(ASN1ObjectIdentifier keyAgreementOID, PrivateKey senderPrivateKey, PublicKey senderPublicKey, ASN1ObjectIdentifier keyEncryptionOID)
- {
- super(keyAgreementOID, SubjectPublicKeyInfo.getInstance(senderPublicKey.getEncoded()), keyEncryptionOID);
-
- this.senderPublicKey = senderPublicKey;
- this.senderPrivateKey = senderPrivateKey;
- }
-
- public JceKeyAgreeRecipientInfoGenerator setProvider(Provider provider)
- {
- this.helper = new EnvelopedDataHelper(new ProviderJcaJceExtHelper(provider));
-
- return this;
- }
-
- public JceKeyAgreeRecipientInfoGenerator setProvider(String providerName)
- {
- this.helper = new EnvelopedDataHelper(new NamedJcaJceExtHelper(providerName));
-
- return this;
- }
-
- public JceKeyAgreeRecipientInfoGenerator setSecureRandom(SecureRandom random)
- {
- this.random = random;
-
- return this;
- }
-
- /**
- * Add a recipient based on the passed in certificate's public key and its issuer and serial number.
- *
- * @param recipientCert recipient's certificate
- * @return the current instance.
- * @throws CertificateEncodingException if the necessary data cannot be extracted from the certificate.
- */
- public JceKeyAgreeRecipientInfoGenerator addRecipient(X509Certificate recipientCert)
- throws CertificateEncodingException
- {
- recipientIDs.add(new KeyAgreeRecipientIdentifier(CMSUtils.getIssuerAndSerialNumber(recipientCert)));
- recipientKeys.add(recipientCert.getPublicKey());
-
- return this;
- }
-
- /**
- * Add a recipient identified by the passed in subjectKeyID and the for the passed in public key.
- *
- * @param subjectKeyID identifier actual recipient will use to match the private key.
- * @param publicKey the public key for encrypting the secret key.
- * @return the current instance.
- * @throws CertificateEncodingException
- */
- public JceKeyAgreeRecipientInfoGenerator addRecipient(byte[] subjectKeyID, PublicKey publicKey)
- throws CertificateEncodingException
- {
- recipientIDs.add(new KeyAgreeRecipientIdentifier(new RecipientKeyIdentifier(subjectKeyID)));
- recipientKeys.add(publicKey);
-
- return this;
- }
-
- public ASN1Sequence generateRecipientEncryptedKeys(AlgorithmIdentifier keyAgreeAlgorithm, AlgorithmIdentifier keyEncryptionAlgorithm, GenericKey contentEncryptionKey)
- throws CMSException
- {
- init(keyAgreeAlgorithm.getAlgorithm());
-
- PrivateKey senderPrivateKey = this.senderPrivateKey;
-
- ASN1ObjectIdentifier keyAgreementOID = keyAgreeAlgorithm.getAlgorithm();
-
- if (keyAgreementOID.getId().equals(CMSEnvelopedGenerator.ECMQV_SHA1KDF))
- {
- senderPrivateKey = new MQVPrivateKeySpec(
- senderPrivateKey, ephemeralKP.getPrivate(), ephemeralKP.getPublic());
- }
-
- ASN1EncodableVector recipientEncryptedKeys = new ASN1EncodableVector();
- for (int i = 0; i != recipientIDs.size(); i++)
- {
- PublicKey recipientPublicKey = (PublicKey)recipientKeys.get(i);
- KeyAgreeRecipientIdentifier karId = (KeyAgreeRecipientIdentifier)recipientIDs.get(i);
-
- if (keyAgreementOID.getId().equals(CMSEnvelopedGenerator.ECMQV_SHA1KDF))
- {
- recipientPublicKey = new MQVPublicKeySpec(recipientPublicKey, recipientPublicKey);
- }
-
- try
- {
- // Use key agreement to choose a wrap key for this recipient
- KeyAgreement keyAgreement = helper.createKeyAgreement(keyAgreementOID);
- keyAgreement.init(senderPrivateKey, random);
- keyAgreement.doPhase(recipientPublicKey, true);
- SecretKey keyEncryptionKey = keyAgreement.generateSecret(keyEncryptionAlgorithm.getAlgorithm().getId());
-
- // Wrap the content encryption key with the agreement key
- Cipher keyEncryptionCipher = helper.createCipher(keyEncryptionAlgorithm.getAlgorithm());
-
- keyEncryptionCipher.init(Cipher.WRAP_MODE, keyEncryptionKey, random);
-
- byte[] encryptedKeyBytes = keyEncryptionCipher.wrap(helper.getJceKey(contentEncryptionKey));
-
- ASN1OctetString encryptedKey = new DEROctetString(encryptedKeyBytes);
-
- recipientEncryptedKeys.add(new RecipientEncryptedKey(karId, encryptedKey));
- }
- catch (NoSuchAlgorithmException e)
- {
- throw new CMSException("cannot perform agreement step: " + e.getMessage(), e);
- }
- catch (InvalidKeyException e)
- {
- throw new CMSException("cannot perform agreement step: " + e.getMessage(), e);
- }
- catch (GeneralSecurityException e)
- {
- throw new CMSException("cannot perform agreement step: " + e.getMessage(), e);
- }
- }
-
- return new DERSequence(recipientEncryptedKeys);
- }
-
- protected ASN1Encodable getUserKeyingMaterial(AlgorithmIdentifier keyAgreeAlg)
- throws CMSException
- {
- init(keyAgreeAlg.getAlgorithm());
-
- if (ephemeralKP != null)
- {
- return new MQVuserKeyingMaterial(
- createOriginatorPublicKey(SubjectPublicKeyInfo.getInstance(ephemeralKP.getPublic().getEncoded())), null);
- }
-
- return null;
- }
-
- private void init(ASN1ObjectIdentifier keyAgreementOID)
- throws CMSException
- {
- if (random == null)
- {
- random = new SecureRandom();
- }
-
- if (keyAgreementOID.equals(CMSAlgorithm.ECMQV_SHA1KDF))
- {
- if (ephemeralKP == null)
- {
- throw new CMSException(
- "cannot determine MQV ephemeral key pair parameters from public key");
- }
- }
- }
-}
diff --git a/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/cms/jcajce/JcePasswordRecipient.java b/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/cms/jcajce/JcePasswordRecipient.java
deleted file mode 100644
index 31e8729b3..000000000
--- a/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/cms/jcajce/JcePasswordRecipient.java
+++ /dev/null
@@ -1,107 +0,0 @@
-package org.spongycastle.cms.jcajce;
-
-import java.security.InvalidKeyException;
-import java.security.InvalidAlgorithmParameterException;
-import java.security.NoSuchAlgorithmException;
-import java.security.Key;
-import java.security.Provider;
-
-import javax.crypto.Cipher;
-import javax.crypto.spec.IvParameterSpec;
-import javax.crypto.spec.SecretKeySpec;
-
-import org.spongycastle.asn1.ASN1OctetString;
-import org.spongycastle.asn1.pkcs.PBKDF2Params;
-import org.spongycastle.asn1.x509.AlgorithmIdentifier;
-import org.spongycastle.cms.CMSException;
-import org.spongycastle.cms.PasswordRecipient;
-import org.spongycastle.crypto.generators.PKCS5S2ParametersGenerator;
-import org.spongycastle.crypto.params.KeyParameter;
-
-/**
- * the RecipientInfo class for a recipient who has been sent a message
- * encrypted using a password.
- */
-public abstract class JcePasswordRecipient
- implements PasswordRecipient
-{
- private int schemeID = PasswordRecipient.PKCS5_SCHEME2_UTF8;
- protected EnvelopedDataHelper helper = new EnvelopedDataHelper(new DefaultJcaJceExtHelper());
- private char[] password;
-
- JcePasswordRecipient(
- char[] password)
- {
- this.password = password;
- }
-
- public JcePasswordRecipient setPasswordConversionScheme(int schemeID)
- {
- this.schemeID = schemeID;
-
- return this;
- }
-
- public JcePasswordRecipient setProvider(Provider provider)
- {
- this.helper = new EnvelopedDataHelper(new ProviderJcaJceExtHelper(provider));
-
- return this;
- }
-
- public JcePasswordRecipient setProvider(String providerName)
- {
- this.helper = new EnvelopedDataHelper(new NamedJcaJceExtHelper(providerName));
-
- return this;
- }
-
- protected Key extractSecretKey(AlgorithmIdentifier keyEncryptionAlgorithm, AlgorithmIdentifier contentEncryptionAlgorithm, byte[] derivedKey, byte[] encryptedContentEncryptionKey)
- throws CMSException
- {
- Cipher keyEncryptionCipher = helper.createRFC3211Wrapper(keyEncryptionAlgorithm.getAlgorithm());
-
- try
- {
- IvParameterSpec ivSpec = new IvParameterSpec(ASN1OctetString.getInstance(keyEncryptionAlgorithm.getParameters()).getOctets());
-
- keyEncryptionCipher.init(Cipher.UNWRAP_MODE, new SecretKeySpec(derivedKey, keyEncryptionCipher.getAlgorithm()), ivSpec);
-
- return keyEncryptionCipher.unwrap(encryptedContentEncryptionKey, contentEncryptionAlgorithm.getAlgorithm().getId(), Cipher.SECRET_KEY);
- }
- catch (NoSuchAlgorithmException e)
- {
- throw new CMSException("cannot process content encryption key: " + e.getMessage(), e);
- }
- catch (InvalidKeyException e)
- {
- throw new CMSException("cannot process content encryption key: " + e.getMessage(), e);
- }
- catch (InvalidAlgorithmParameterException e)
- {
- throw new CMSException("cannot process content encryption key: " + e.getMessage(), e);
- }
- }
-
- public byte[] calculateDerivedKey(byte[] encodedPassword, AlgorithmIdentifier derivationAlgorithm, int keySize)
- throws CMSException
- {
- PBKDF2Params params = PBKDF2Params.getInstance(derivationAlgorithm.getParameters());
-
- PKCS5S2ParametersGenerator gen = new PKCS5S2ParametersGenerator();
-
- gen.init(encodedPassword, params.getSalt(), params.getIterationCount().intValue());
-
- return ((KeyParameter)gen.generateDerivedParameters(keySize)).getKey();
- }
-
- public int getPasswordConversionScheme()
- {
- return schemeID;
- }
-
- public char[] getPassword()
- {
- return password;
- }
-}
diff --git a/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/cms/jcajce/JcePasswordRecipientInfoGenerator.java b/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/cms/jcajce/JcePasswordRecipientInfoGenerator.java
deleted file mode 100644
index ae706b10e..000000000
--- a/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/cms/jcajce/JcePasswordRecipientInfoGenerator.java
+++ /dev/null
@@ -1,81 +0,0 @@
-package org.spongycastle.cms.jcajce;
-
-import java.security.GeneralSecurityException;
-import java.security.InvalidKeyException;
-import java.security.Key;
-import java.security.Provider;
-
-import javax.crypto.Cipher;
-import javax.crypto.spec.IvParameterSpec;
-import javax.crypto.spec.SecretKeySpec;
-
-import org.spongycastle.asn1.ASN1ObjectIdentifier;
-import org.spongycastle.asn1.ASN1OctetString;
-import org.spongycastle.asn1.pkcs.PBKDF2Params;
-import org.spongycastle.asn1.x509.AlgorithmIdentifier;
-import org.spongycastle.cms.CMSException;
-import org.spongycastle.cms.PasswordRecipientInfoGenerator;
-import org.spongycastle.crypto.generators.PKCS5S2ParametersGenerator;
-import org.spongycastle.crypto.params.KeyParameter;
-import org.spongycastle.operator.GenericKey;
-
-public class JcePasswordRecipientInfoGenerator
- extends PasswordRecipientInfoGenerator
-{
- private EnvelopedDataHelper helper = new EnvelopedDataHelper(new DefaultJcaJceExtHelper());
-
- public JcePasswordRecipientInfoGenerator(ASN1ObjectIdentifier kekAlgorithm, char[] password)
- {
- super(kekAlgorithm, password);
- }
-
- public JcePasswordRecipientInfoGenerator setProvider(Provider provider)
- {
- this.helper = new EnvelopedDataHelper(new ProviderJcaJceExtHelper(provider));
-
- return this;
- }
-
- public JcePasswordRecipientInfoGenerator setProvider(String providerName)
- {
- this.helper = new EnvelopedDataHelper(new NamedJcaJceExtHelper(providerName));
-
- return this;
- }
-
- protected byte[] calculateDerivedKey(byte[] encodedPassword, AlgorithmIdentifier derivationAlgorithm, int keySize)
- throws CMSException
- {
- PBKDF2Params params = PBKDF2Params.getInstance(derivationAlgorithm.getParameters());
-
- PKCS5S2ParametersGenerator gen = new PKCS5S2ParametersGenerator();
-
- gen.init(encodedPassword, params.getSalt(), params.getIterationCount().intValue());
-
- return ((KeyParameter)gen.generateDerivedParameters(keySize)).getKey();
- }
-
- public byte[] generateEncryptedBytes(AlgorithmIdentifier keyEncryptionAlgorithm, byte[] derivedKey, GenericKey contentEncryptionKey)
- throws CMSException
- {
- Key contentEncryptionKeySpec = helper.getJceKey(contentEncryptionKey);
- Cipher keyEncryptionCipher = helper.createRFC3211Wrapper(keyEncryptionAlgorithm.getAlgorithm());
-
- try
- {
- IvParameterSpec ivSpec = new IvParameterSpec(ASN1OctetString.getInstance(keyEncryptionAlgorithm.getParameters()).getOctets());
-
- keyEncryptionCipher.init(Cipher.WRAP_MODE, new SecretKeySpec(derivedKey, keyEncryptionCipher.getAlgorithm()), ivSpec);
-
- return keyEncryptionCipher.wrap(contentEncryptionKeySpec);
- }
- catch (GeneralSecurityException e)
- {
- throw new CMSException("cannot process content encryption key: " + e.getMessage(), e);
- }
- catch (InvalidKeyException e)
- {
- throw new CMSException("cannot process content encryption key: " + e.getMessage(), e);
- }
- }
-}
diff --git a/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/cms/jcajce/ZlibExpanderProvider.java b/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/cms/jcajce/ZlibExpanderProvider.java
deleted file mode 100644
index 880dc2cea..000000000
--- a/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/cms/jcajce/ZlibExpanderProvider.java
+++ /dev/null
@@ -1,113 +0,0 @@
-package org.spongycastle.cms.jcajce;
-
-import java.io.FilterInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.zip.InflaterInputStream;
-
-import org.spongycastle.asn1.x509.AlgorithmIdentifier;
-import org.spongycastle.operator.InputExpander;
-import org.spongycastle.operator.InputExpanderProvider;
-import org.spongycastle.util.io.StreamOverflowException;
-
-public class ZlibExpanderProvider
- implements InputExpanderProvider
-{
- private long limit;
-
- public ZlibExpanderProvider()
- {
- this.limit = -1;
- }
-
- /**
- * Create a provider which caps the number of expanded bytes that can be produced when the
- * compressed stream is parsed.
- *
- * @param limit max number of bytes allowed in an expanded stream.
- */
- public ZlibExpanderProvider(long limit)
- {
- this.limit = limit;
- }
-
- public InputExpander get(final AlgorithmIdentifier algorithm)
- {
- return new InputExpander()
- {
- public AlgorithmIdentifier getAlgorithmIdentifier()
- {
- return algorithm;
- }
-
- public InputStream getInputStream(InputStream comIn)
- {
- InputStream s = new InflaterInputStream(comIn);
- if (limit >= 0)
- {
- s = new LimitedInputStream(s, limit);
- }
- return s;
- }
- };
- }
-
- private static class LimitedInputStream
- extends FilterInputStream
- {
- private long remaining;
-
- public LimitedInputStream(InputStream input, long limit)
- {
- super(input);
-
- this.remaining = limit;
- }
-
- public int read()
- throws IOException
- {
- // Only a single 'extra' byte will ever be read
- if (remaining >= 0)
- {
- int b = super.in.read();
- if (b < 0 || --remaining >= 0)
- {
- return b;
- }
- }
-
- throw new StreamOverflowException("expanded byte limit exceeded");
- }
-
- public int read(byte[] buf, int off, int len)
- throws IOException
- {
- if (len < 1)
- {
- // This will give correct exceptions/returns for strange lengths
- return super.read(buf, off, len);
- }
-
- if (remaining < 1)
- {
- // Will either return EOF or throw exception
- read();
- return -1;
- }
-
- /*
- * Limit the underlying request to 'remaining' bytes. This ensures the
- * caller will see the full 'limit' bytes before getting an exception.
- * Also, only one extra byte will ever be read.
- */
- int actualLen = (remaining > len ? len : (int)remaining);
- int numRead = super.in.read(buf, off, actualLen);
- if (numRead > 0)
- {
- remaining -= numRead;
- }
- return numRead;
- }
- }
-}
diff --git a/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/openssl/jcajce/JceOpenSSLPKCS8DecryptorProviderBuilder.java b/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/openssl/jcajce/JceOpenSSLPKCS8DecryptorProviderBuilder.java
deleted file mode 100644
index bd0e93f26..000000000
--- a/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/openssl/jcajce/JceOpenSSLPKCS8DecryptorProviderBuilder.java
+++ /dev/null
@@ -1,156 +0,0 @@
-package org.spongycastle.openssl.jcajce;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.security.AlgorithmParameters;
-import java.security.GeneralSecurityException;
-import java.security.NoSuchAlgorithmException;
-import java.security.NoSuchProviderException;
-import java.security.InvalidKeyException;
-import java.security.Provider;
-
-import javax.crypto.Cipher;
-import javax.crypto.CipherInputStream;
-import javax.crypto.SecretKey;
-import javax.crypto.SecretKeyFactory;
-import javax.crypto.spec.PBEKeySpec;
-import javax.crypto.spec.PBEParameterSpec;
-
-import org.spongycastle.asn1.pkcs.KeyDerivationFunc;
-import org.spongycastle.asn1.pkcs.EncryptionScheme;
-import org.spongycastle.asn1.pkcs.PBEParameter;
-import org.spongycastle.asn1.pkcs.PBES2Parameters;
-import org.spongycastle.asn1.pkcs.PBKDF2Params;
-import org.spongycastle.asn1.pkcs.PKCS12PBEParams;
-import org.spongycastle.asn1.x509.AlgorithmIdentifier;
-import org.spongycastle.jcajce.util.DefaultJcaJceHelper;
-import org.spongycastle.jcajce.util.JcaJceHelper;
-import org.spongycastle.jcajce.util.NamedJcaJceHelper;
-import org.spongycastle.jcajce.util.ProviderJcaJceHelper;
-import org.spongycastle.openssl.PEMException;
-import org.spongycastle.operator.InputDecryptor;
-import org.spongycastle.operator.InputDecryptorProvider;
-import org.spongycastle.operator.OperatorCreationException;
-
-public class JceOpenSSLPKCS8DecryptorProviderBuilder
-{
- private JcaJceHelper helper = new DefaultJcaJceHelper();
-
- public JceOpenSSLPKCS8DecryptorProviderBuilder()
- {
- helper = new DefaultJcaJceHelper();
- }
-
- public JceOpenSSLPKCS8DecryptorProviderBuilder setProvider(String providerName)
- {
- helper = new NamedJcaJceHelper(providerName);
-
- return this;
- }
-
- public JceOpenSSLPKCS8DecryptorProviderBuilder setProvider(Provider provider)
- {
- helper = new ProviderJcaJceHelper(provider);
-
- return this;
- }
-
- public InputDecryptorProvider build(final char[] password)
- throws OperatorCreationException
- {
- return new InputDecryptorProvider()
- {
- public InputDecryptor get(final AlgorithmIdentifier algorithm)
- throws OperatorCreationException
- {
- final Cipher cipher;
-
- try
- {
- if (PEMUtilities.isPKCS5Scheme2(algorithm.getAlgorithm()))
- {
- PBES2Parameters params = PBES2Parameters.getInstance(algorithm.getParameters());
- KeyDerivationFunc func = params.getKeyDerivationFunc();
- EncryptionScheme scheme = params.getEncryptionScheme();
- PBKDF2Params defParams = (PBKDF2Params)func.getParameters();
-
- int iterationCount = defParams.getIterationCount().intValue();
- byte[] salt = defParams.getSalt();
-
- String oid = scheme.getAlgorithm().getId();
-
- SecretKey key = PEMUtilities.generateSecretKeyForPKCS5Scheme2(oid, password, salt, iterationCount);
-
- cipher = helper.createCipher(oid);
- AlgorithmParameters algParams = helper.createAlgorithmParameters(oid);
-
- algParams.init(scheme.getParameters().toASN1Primitive().getEncoded());
-
- cipher.init(Cipher.DECRYPT_MODE, key, algParams);
- }
- else if (PEMUtilities.isPKCS12(algorithm.getAlgorithm()))
- {
- PKCS12PBEParams params = PKCS12PBEParams.getInstance(algorithm.getParameters());
- PBEKeySpec pbeSpec = new PBEKeySpec(password);
-
- SecretKeyFactory secKeyFact = helper.createSecretKeyFactory(algorithm.getAlgorithm().getId());
- PBEParameterSpec defParams = new PBEParameterSpec(params.getIV(), params.getIterations().intValue());
-
- cipher = helper.createCipher(algorithm.getAlgorithm().getId());
-
- cipher.init(Cipher.DECRYPT_MODE, secKeyFact.generateSecret(pbeSpec), defParams);
- }
- else if (PEMUtilities.isPKCS5Scheme1(algorithm.getAlgorithm()))
- {
- PBEParameter params = PBEParameter.getInstance(algorithm.getParameters());
- PBEKeySpec pbeSpec = new PBEKeySpec(password);
-
- SecretKeyFactory secKeyFact = helper.createSecretKeyFactory(algorithm.getAlgorithm().getId());
- PBEParameterSpec defParams = new PBEParameterSpec(params.getSalt(), params.getIterationCount().intValue());
-
- cipher = helper.createCipher(algorithm.getAlgorithm().getId());
-
- cipher.init(Cipher.DECRYPT_MODE, secKeyFact.generateSecret(pbeSpec), defParams);
- }
- else
- {
- throw new PEMException("Unknown algorithm: " + algorithm.getAlgorithm());
- }
-
- return new InputDecryptor()
- {
- public AlgorithmIdentifier getAlgorithmIdentifier()
- {
- return algorithm;
- }
-
- public InputStream getInputStream(InputStream encIn)
- {
- return new CipherInputStream(encIn, cipher);
- }
- };
- }
- catch (IOException e)
- {
- throw new OperatorCreationException(algorithm.getAlgorithm() + " not available: " + e.getMessage(), e);
- }
- catch (InvalidKeyException e)
- {
- throw new OperatorCreationException(algorithm.getAlgorithm() + " not available: " + e.getMessage(), e);
- }
- catch (NoSuchProviderException e)
- {
- throw new OperatorCreationException(algorithm.getAlgorithm() + " not available: " + e.getMessage(), e);
- }
- catch (NoSuchAlgorithmException e)
- {
- throw new OperatorCreationException(algorithm.getAlgorithm() + " not available: " + e.getMessage(), e);
- }
- catch (GeneralSecurityException e)
- {
- throw new OperatorCreationException(algorithm.getAlgorithm() + " not available: " + e.getMessage(), e);
- }
- };
- };
- }
-}
diff --git a/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/openssl/jcajce/JceOpenSSLPKCS8EncryptorBuilder.java b/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/openssl/jcajce/JceOpenSSLPKCS8EncryptorBuilder.java
deleted file mode 100644
index 139d6fcc2..000000000
--- a/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/openssl/jcajce/JceOpenSSLPKCS8EncryptorBuilder.java
+++ /dev/null
@@ -1,240 +0,0 @@
-package org.spongycastle.openssl.jcajce;
-
-import java.io.IOException;
-import java.io.OutputStream;
-import java.security.AlgorithmParameterGenerator;
-import java.security.AlgorithmParameters;
-import java.security.GeneralSecurityException;
-import java.security.NoSuchAlgorithmException;
-import java.security.NoSuchProviderException;
-import java.security.InvalidKeyException;
-import java.security.Provider;
-import java.security.SecureRandom;
-
-import javax.crypto.Cipher;
-import javax.crypto.CipherOutputStream;
-import javax.crypto.SecretKey;
-import javax.crypto.SecretKeyFactory;
-import javax.crypto.spec.PBEKeySpec;
-import javax.crypto.spec.PBEParameterSpec;
-
-import org.spongycastle.asn1.ASN1EncodableVector;
-import org.spongycastle.asn1.ASN1Integer;
-import org.spongycastle.asn1.ASN1ObjectIdentifier;
-import org.spongycastle.asn1.ASN1Primitive;
-import org.spongycastle.asn1.DEROctetString;
-import org.spongycastle.asn1.DERSequence;
-import org.spongycastle.asn1.nist.NISTObjectIdentifiers;
-import org.spongycastle.asn1.pkcs.KeyDerivationFunc;
-import org.spongycastle.asn1.pkcs.PBES2Parameters;
-import org.spongycastle.asn1.pkcs.PBKDF2Params;
-import org.spongycastle.asn1.pkcs.PKCS12PBEParams;
-import org.spongycastle.asn1.pkcs.PKCSObjectIdentifiers;
-import org.spongycastle.asn1.x509.AlgorithmIdentifier;
-import org.spongycastle.jcajce.util.DefaultJcaJceHelper;
-import org.spongycastle.jcajce.util.JcaJceHelper;
-import org.spongycastle.jcajce.util.NamedJcaJceHelper;
-import org.spongycastle.jcajce.util.ProviderJcaJceHelper;
-import org.spongycastle.operator.GenericKey;
-import org.spongycastle.operator.OperatorCreationException;
-import org.spongycastle.operator.OutputEncryptor;
-import org.spongycastle.operator.jcajce.JceGenericKey;
-
-public class JceOpenSSLPKCS8EncryptorBuilder
-{
- public static final String AES_128_CBC = NISTObjectIdentifiers.id_aes128_CBC.getId();
- public static final String AES_192_CBC = NISTObjectIdentifiers.id_aes192_CBC.getId();
- public static final String AES_256_CBC = NISTObjectIdentifiers.id_aes256_CBC.getId();
-
- public static final String DES3_CBC = PKCSObjectIdentifiers.des_EDE3_CBC.getId();
-
- public static final String PBE_SHA1_RC4_128 = PKCSObjectIdentifiers.pbeWithSHAAnd128BitRC4.getId();
- public static final String PBE_SHA1_RC4_40 = PKCSObjectIdentifiers.pbeWithSHAAnd40BitRC4.getId();
- public static final String PBE_SHA1_3DES = PKCSObjectIdentifiers.pbeWithSHAAnd3_KeyTripleDES_CBC.getId();
- public static final String PBE_SHA1_2DES = PKCSObjectIdentifiers.pbeWithSHAAnd2_KeyTripleDES_CBC.getId();
- public static final String PBE_SHA1_RC2_128 = PKCSObjectIdentifiers.pbeWithSHAAnd128BitRC2_CBC.getId();
- public static final String PBE_SHA1_RC2_40 = PKCSObjectIdentifiers.pbeWithSHAAnd40BitRC2_CBC.getId();
-
- private JcaJceHelper helper = new DefaultJcaJceHelper();
-
- private AlgorithmParameters params;
- private ASN1ObjectIdentifier algOID;
- byte[] salt;
- int iterationCount;
- private Cipher cipher;
- private SecureRandom random;
- private AlgorithmParameterGenerator paramGen;
- private SecretKeyFactory secKeyFact;
- private char[] password;
-
- private SecretKey key;
-
- public JceOpenSSLPKCS8EncryptorBuilder(ASN1ObjectIdentifier algorithm)
- {
- algOID = algorithm;
-
- this.iterationCount = 2048;
- }
-
- public JceOpenSSLPKCS8EncryptorBuilder setRandom(SecureRandom random)
- {
- this.random = random;
-
- return this;
- }
-
- public JceOpenSSLPKCS8EncryptorBuilder setPasssword(char[] password)
- {
- this.password = password;
-
- return this;
- }
-
- public JceOpenSSLPKCS8EncryptorBuilder setIterationCount(int iterationCount)
- {
- this.iterationCount = iterationCount;
-
- return this;
- }
-
- public JceOpenSSLPKCS8EncryptorBuilder setProvider(String providerName)
- {
- helper = new NamedJcaJceHelper(providerName);
-
- return this;
- }
-
- public JceOpenSSLPKCS8EncryptorBuilder setProvider(Provider provider)
- {
- helper = new ProviderJcaJceHelper(provider);
-
- return this;
- }
-
- public OutputEncryptor build()
- throws OperatorCreationException
- {
- final AlgorithmIdentifier algID;
-
- salt = new byte[20];
-
- if (random == null)
- {
- random = new SecureRandom();
- }
-
- random.nextBytes(salt);
-
- try
- {
- this.cipher = helper.createCipher(algOID.getId());
-
- if (PEMUtilities.isPKCS5Scheme2(algOID))
- {
- this.paramGen = helper.createAlgorithmParameterGenerator(algOID.getId());
- }
- else
- {
- this.secKeyFact = helper.createSecretKeyFactory(algOID.getId());
- }
- }
- catch (NoSuchAlgorithmException e)
- {
- throw new OperatorCreationException(algOID + " not available: " + e.getMessage(), e);
- }
- catch (NoSuchProviderException e)
- {
- throw new OperatorCreationException(algOID + " not available: " + e.getMessage(), e);
- }
- catch (GeneralSecurityException e)
- {
- throw new OperatorCreationException(algOID + " not available: " + e.getMessage(), e);
- }
-
- if (PEMUtilities.isPKCS5Scheme2(algOID))
- {
- params = paramGen.generateParameters();
-
- try
- {
- KeyDerivationFunc scheme = new KeyDerivationFunc(algOID, ASN1Primitive.fromByteArray(params.getEncoded()));
- KeyDerivationFunc func = new KeyDerivationFunc(PKCSObjectIdentifiers.id_PBKDF2, new PBKDF2Params(salt, iterationCount));
-
- ASN1EncodableVector v = new ASN1EncodableVector();
-
- v.add(func);
- v.add(scheme);
-
- algID = new AlgorithmIdentifier(PKCSObjectIdentifiers.id_PBES2, PBES2Parameters.getInstance(new DERSequence(v)));
- }
- catch (IOException e)
- {
- throw new OperatorCreationException(e.getMessage(), e);
- }
-
- key = PEMUtilities.generateSecretKeyForPKCS5Scheme2(algOID.getId(), password, salt, iterationCount);
-
- try
- {
- cipher.init(Cipher.ENCRYPT_MODE, key, params);
- }
- catch (InvalidKeyException e)
- {
- throw new OperatorCreationException(e.getMessage(), e);
- }
- catch (GeneralSecurityException e)
- {
- throw new OperatorCreationException(e.getMessage(), e);
- }
- }
- else if (PEMUtilities.isPKCS12(algOID))
- {
- ASN1EncodableVector v = new ASN1EncodableVector();
-
- v.add(new DEROctetString(salt));
- v.add(new ASN1Integer(iterationCount));
-
- algID = new AlgorithmIdentifier(algOID, PKCS12PBEParams.getInstance(new DERSequence(v)));
-
- try
- {
- PBEKeySpec pbeSpec = new PBEKeySpec(password);
- PBEParameterSpec defParams = new PBEParameterSpec(salt, iterationCount);
-
- key = secKeyFact.generateSecret(pbeSpec);
-
- cipher.init(Cipher.ENCRYPT_MODE, key, defParams);
- }
- catch (InvalidKeyException e)
- {
- throw new OperatorCreationException(e.getMessage(), e);
- }
- catch (GeneralSecurityException e)
- {
- throw new OperatorCreationException(e.getMessage(), e);
- }
- }
- else
- {
- throw new OperatorCreationException("unknown algorithm: " + algOID, null);
- }
-
- return new OutputEncryptor()
- {
- public AlgorithmIdentifier getAlgorithmIdentifier()
- {
- return algID;
- }
-
- public OutputStream getOutputStream(OutputStream encOut)
- {
- return new CipherOutputStream(encOut, cipher);
- }
-
- public GenericKey getKey()
- {
- return new JceGenericKey(algID, key);
- }
- };
- }
-}
diff --git a/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/operator/jcajce/JcaContentSignerBuilder.java b/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/operator/jcajce/JcaContentSignerBuilder.java
deleted file mode 100644
index 9f88073e6..000000000
--- a/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/operator/jcajce/JcaContentSignerBuilder.java
+++ /dev/null
@@ -1,164 +0,0 @@
-package org.spongycastle.operator.jcajce;
-
-import java.io.IOException;
-import java.io.OutputStream;
-import java.security.InvalidKeyException;
-import java.security.PrivateKey;
-import java.security.Provider;
-import java.security.SecureRandom;
-import java.security.Signature;
-import java.security.SignatureException;
-
-import org.spongycastle.asn1.x509.AlgorithmIdentifier;
-import org.spongycastle.jcajce.util.DefaultJcaJceHelper;
-import org.spongycastle.jcajce.util.NamedJcaJceHelper;
-import org.spongycastle.jcajce.util.ProviderJcaJceHelper;
-import org.spongycastle.operator.ContentSigner;
-import org.spongycastle.operator.DefaultSignatureAlgorithmIdentifierFinder;
-import org.spongycastle.operator.OperatorCreationException;
-import org.spongycastle.operator.OperatorStreamException;
-import org.spongycastle.operator.RuntimeOperatorException;
-
-public class JcaContentSignerBuilder
-{
- private OperatorHelper helper = new OperatorHelper(new DefaultJcaJceHelper());
- private SecureRandom random;
- private String signatureAlgorithm;
- private AlgorithmIdentifier sigAlgId;
-
- public JcaContentSignerBuilder(String signatureAlgorithm)
- {
- this.signatureAlgorithm = signatureAlgorithm;
- this.sigAlgId = new DefaultSignatureAlgorithmIdentifierFinder().find(signatureAlgorithm);
- }
-
- public JcaContentSignerBuilder setProvider(Provider provider)
- {
- this.helper = new OperatorHelper(new ProviderJcaJceHelper(provider));
-
- return this;
- }
-
- public JcaContentSignerBuilder setProvider(String providerName)
- {
- this.helper = new OperatorHelper(new NamedJcaJceHelper(providerName));
-
- return this;
- }
-
- public JcaContentSignerBuilder setSecureRandom(SecureRandom random)
- {
- this.random = random;
-
- return this;
- }
-
- public ContentSigner build(PrivateKey privateKey)
- throws OperatorCreationException
- {
- try
- {
- final Signature sig = helper.createSignature(sigAlgId);
-
- if (random != null)
- {
- sig.initSign(privateKey);
- }
- else
- {
- sig.initSign(privateKey);
- }
-
- return new ContentSigner()
- {
- private SignatureOutputStream stream = new SignatureOutputStream(sig);
-
- public AlgorithmIdentifier getAlgorithmIdentifier()
- {
- return sigAlgId;
- }
-
- public OutputStream getOutputStream()
- {
- return stream;
- }
-
- public byte[] getSignature()
- {
- try
- {
- return stream.getSignature();
- }
- catch (SignatureException e)
- {
- throw new RuntimeOperatorException("exception obtaining signature: " + e.getMessage(), e);
- }
- }
- };
- }
- catch (InvalidKeyException e)
- {
- throw new OperatorCreationException("cannot create signer: " + e.getMessage(), e);
- }
- catch (Exception e)
- {
- throw new OperatorCreationException("cannot create signer: " + e.getMessage(), e);
- }
- }
-
- private class SignatureOutputStream
- extends OutputStream
- {
- private Signature sig;
-
- SignatureOutputStream(Signature sig)
- {
- this.sig = sig;
- }
-
- public void write(byte[] bytes, int off, int len)
- throws IOException
- {
- try
- {
- sig.update(bytes, off, len);
- }
- catch (SignatureException e)
- {
- throw new OperatorStreamException("exception in content signer: " + e.getMessage(), e);
- }
- }
-
- public void write(byte[] bytes)
- throws IOException
- {
- try
- {
- sig.update(bytes);
- }
- catch (SignatureException e)
- {
- throw new OperatorStreamException("exception in content signer: " + e.getMessage(), e);
- }
- }
-
- public void write(int b)
- throws IOException
- {
- try
- {
- sig.update((byte)b);
- }
- catch (SignatureException e)
- {
- throw new OperatorStreamException("exception in content signer: " + e.getMessage(), e);
- }
- }
-
- byte[] getSignature()
- throws SignatureException
- {
- return sig.sign();
- }
- }
-}
diff --git a/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/operator/jcajce/JcaContentVerifierProviderBuilder.java b/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/operator/jcajce/JcaContentVerifierProviderBuilder.java
deleted file mode 100644
index 82ddae47d..000000000
--- a/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/operator/jcajce/JcaContentVerifierProviderBuilder.java
+++ /dev/null
@@ -1,311 +0,0 @@
-package org.spongycastle.operator.jcajce;
-
-import java.io.IOException;
-import java.io.OutputStream;
-import java.security.Provider;
-import java.security.PublicKey;
-import java.security.Signature;
-import java.security.SignatureException;
-import java.security.cert.CertificateEncodingException;
-import java.security.cert.CertificateException;
-import java.security.cert.X509Certificate;
-
-import org.spongycastle.asn1.x509.AlgorithmIdentifier;
-import org.spongycastle.asn1.x509.SubjectPublicKeyInfo;
-import org.spongycastle.cert.X509CertificateHolder;
-import org.spongycastle.cert.jcajce.JcaX509CertificateHolder;
-import org.spongycastle.jcajce.util.DefaultJcaJceHelper;
-import org.spongycastle.jcajce.util.NamedJcaJceHelper;
-import org.spongycastle.jcajce.util.ProviderJcaJceHelper;
-import org.spongycastle.operator.ContentVerifier;
-import org.spongycastle.operator.ContentVerifierProvider;
-import org.spongycastle.operator.OperatorCreationException;
-import org.spongycastle.operator.OperatorStreamException;
-import org.spongycastle.operator.RawContentVerifier;
-import org.spongycastle.operator.RuntimeOperatorException;
-
-public class JcaContentVerifierProviderBuilder
-{
- private OperatorHelper helper = new OperatorHelper(new DefaultJcaJceHelper());
-
- public JcaContentVerifierProviderBuilder()
- {
- }
-
- public JcaContentVerifierProviderBuilder setProvider(Provider provider)
- {
- this.helper = new OperatorHelper(new ProviderJcaJceHelper(provider));
-
- return this;
- }
-
- public JcaContentVerifierProviderBuilder setProvider(String providerName)
- {
- this.helper = new OperatorHelper(new NamedJcaJceHelper(providerName));
-
- return this;
- }
-
- public ContentVerifierProvider build(X509CertificateHolder certHolder)
- throws OperatorCreationException, CertificateException
- {
- return build(helper.convertCertificate(certHolder));
- }
-
- public ContentVerifierProvider build(final X509Certificate certificate)
- throws OperatorCreationException
- {
- final X509CertificateHolder certHolder;
-
- try
- {
- certHolder = new JcaX509CertificateHolder(certificate);
- }
- catch (CertificateEncodingException e)
- {
- throw new OperatorCreationException("cannot process certificate: " + e.getMessage(), e);
- }
-
- return new ContentVerifierProvider()
- {
- private SignatureOutputStream stream;
-
- public boolean hasAssociatedCertificate()
- {
- return true;
- }
-
- public X509CertificateHolder getAssociatedCertificate()
- {
- return certHolder;
- }
-
- public ContentVerifier get(AlgorithmIdentifier algorithm)
- throws OperatorCreationException
- {
- try
- {
- Signature sig = helper.createSignature(algorithm);
-
- sig.initVerify(certificate.getPublicKey());
-
- stream = new SignatureOutputStream(sig);
- }
- catch (Exception e)
- {
- throw new OperatorCreationException("exception on setup: " + e, e);
- }
-
- Signature rawSig = createRawSig(algorithm, certificate.getPublicKey());
-
- if (rawSig != null)
- {
- return new RawSigVerifier(algorithm, stream, rawSig);
- }
- else
- {
- return new SigVerifier(algorithm, stream);
- }
- }
- };
- }
-
- public ContentVerifierProvider build(final PublicKey publicKey)
- throws OperatorCreationException
- {
- return new ContentVerifierProvider()
- {
- public boolean hasAssociatedCertificate()
- {
- return false;
- }
-
- public X509CertificateHolder getAssociatedCertificate()
- {
- return null;
- }
-
- public ContentVerifier get(AlgorithmIdentifier algorithm)
- throws OperatorCreationException
- {
- SignatureOutputStream stream = createSignatureStream(algorithm, publicKey);
-
- Signature rawSig = createRawSig(algorithm, publicKey);
-
- if (rawSig != null)
- {
- return new RawSigVerifier(algorithm, stream, rawSig);
- }
- else
- {
- return new SigVerifier(algorithm, stream);
- }
- }
- };
- }
-
- public ContentVerifierProvider build(SubjectPublicKeyInfo publicKey)
- throws OperatorCreationException
- {
- return this.build(helper.convertPublicKey(publicKey));
- }
-
- private SignatureOutputStream createSignatureStream(AlgorithmIdentifier algorithm, PublicKey publicKey)
- throws OperatorCreationException
- {
- try
- {
- Signature sig = helper.createSignature(algorithm);
-
- sig.initVerify(publicKey);
-
- return new SignatureOutputStream(sig);
- }
- catch (Exception e)
- {
- throw new OperatorCreationException("exception on setup: " + e, e);
- }
- }
-
- private Signature createRawSig(AlgorithmIdentifier algorithm, PublicKey publicKey)
- {
- Signature rawSig;
- try
- {
- rawSig = helper.createRawSignature(algorithm);
-
- if (rawSig != null)
- {
- rawSig.initVerify(publicKey);
- }
- }
- catch (Exception e)
- {
- rawSig = null;
- }
- return rawSig;
- }
-
- private class SigVerifier
- implements ContentVerifier
- {
- private SignatureOutputStream stream;
- private AlgorithmIdentifier algorithm;
-
- SigVerifier(AlgorithmIdentifier algorithm, SignatureOutputStream stream)
- {
- this.algorithm = algorithm;
- this.stream = stream;
- }
-
- public AlgorithmIdentifier getAlgorithmIdentifier()
- {
- return algorithm;
- }
-
- public OutputStream getOutputStream()
- {
- if (stream == null)
- {
- throw new IllegalStateException("verifier not initialised");
- }
-
- return stream;
- }
-
- public boolean verify(byte[] expected)
- {
- try
- {
- return stream.verify(expected);
- }
- catch (SignatureException e)
- {
- throw new RuntimeOperatorException("exception obtaining signature: " + e.getMessage(), e);
- }
- }
- }
-
- private class RawSigVerifier
- extends SigVerifier
- implements RawContentVerifier
- {
- private Signature rawSignature;
-
- RawSigVerifier(AlgorithmIdentifier algorithm, SignatureOutputStream stream, Signature rawSignature)
- {
- super(algorithm, stream);
- this.rawSignature = rawSignature;
- }
-
- public boolean verify(byte[] digest, byte[] expected)
- {
- try
- {
- rawSignature.update(digest);
-
- return rawSignature.verify(expected);
- }
- catch (SignatureException e)
- {
- throw new RuntimeOperatorException("exception obtaining raw signature: " + e.getMessage(), e);
- }
- }
- }
-
- private class SignatureOutputStream
- extends OutputStream
- {
- private Signature sig;
-
- SignatureOutputStream(Signature sig)
- {
- this.sig = sig;
- }
-
- public void write(byte[] bytes, int off, int len)
- throws IOException
- {
- try
- {
- sig.update(bytes, off, len);
- }
- catch (SignatureException e)
- {
- throw new OperatorStreamException("exception in content signer: " + e.getMessage(), e);
- }
- }
-
- public void write(byte[] bytes)
- throws IOException
- {
- try
- {
- sig.update(bytes);
- }
- catch (SignatureException e)
- {
- throw new OperatorStreamException("exception in content signer: " + e.getMessage(), e);
- }
- }
-
- public void write(int b)
- throws IOException
- {
- try
- {
- sig.update((byte)b);
- }
- catch (SignatureException e)
- {
- throw new OperatorStreamException("exception in content signer: " + e.getMessage(), e);
- }
- }
-
- boolean verify(byte[] expected)
- throws SignatureException
- {
- return sig.verify(expected);
- }
- }
-}
diff --git a/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/operator/jcajce/JceAsymmetricKeyUnwrapper.java b/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/operator/jcajce/JceAsymmetricKeyUnwrapper.java
deleted file mode 100644
index 29f7fb3d1..000000000
--- a/extern/spongycastle/pkix/src/main/jdk1.1/org/spongycastle/operator/jcajce/JceAsymmetricKeyUnwrapper.java
+++ /dev/null
@@ -1,127 +0,0 @@
-package org.spongycastle.operator.jcajce;
-
-import java.security.InvalidKeyException;
-import java.security.NoSuchAlgorithmException;
-import java.security.Key;
-import java.security.PrivateKey;
-import java.security.Provider;
-import java.security.ProviderException;
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.crypto.BadPaddingException;
-import javax.crypto.Cipher;
-import javax.crypto.IllegalBlockSizeException;
-import javax.crypto.spec.SecretKeySpec;
-
-import org.spongycastle.asn1.ASN1ObjectIdentifier;
-import org.spongycastle.asn1.x509.AlgorithmIdentifier;
-import org.spongycastle.jcajce.util.DefaultJcaJceHelper;
-import org.spongycastle.jcajce.util.NamedJcaJceHelper;
-import org.spongycastle.jcajce.util.ProviderJcaJceHelper;
-import org.spongycastle.operator.AsymmetricKeyUnwrapper;
-import org.spongycastle.operator.GenericKey;
-import org.spongycastle.operator.OperatorException;
-
-public class JceAsymmetricKeyUnwrapper
- extends AsymmetricKeyUnwrapper
-{
- private OperatorHelper helper = new OperatorHelper(new DefaultJcaJceHelper());
- private Map extraMappings = new HashMap();
- private PrivateKey privKey;
-
- public JceAsymmetricKeyUnwrapper(AlgorithmIdentifier algorithmIdentifier, PrivateKey privKey)
- {
- super(algorithmIdentifier);
-
- this.privKey = privKey;
- }
-
- public JceAsymmetricKeyUnwrapper setProvider(Provider provider)
- {
- this.helper = new OperatorHelper(new ProviderJcaJceHelper(provider));
-
- return this;
- }
-
- public JceAsymmetricKeyUnwrapper setProvider(String providerName)
- {
- this.helper = new OperatorHelper(new NamedJcaJceHelper(providerName));
-
- return this;
- }
-
- /**
- * Internally algorithm ids are converted into cipher names using a lookup table. For some providers
- * the standard lookup table won't work. Use this method to establish a specific mapping from an
- * algorithm identifier to a specific algorithm.
- *
- * unwrapper.setAlgorithmMapping(PKCSObjectIdentifiers.rsaEncryption, "RSA");
- *
- *
- * The class will convert X509AttributeCertificate objects into X509AttributeCertificateHolder objects. - *
- */ -public class JcaAttrCertStore - extends CollectionStore -{ - /** - * Basic constructor. - * - * @param collection - initial contents for the store, this is copied. - */ - public JcaAttrCertStore(Collection collection) - throws IOException - { - super(convertCerts(collection)); - } - - public JcaAttrCertStore(X509AttributeCertificate attrCert) - throws IOException - { - this(convertCert(attrCert)); - } - - private static Collection convertCert(X509AttributeCertificate attrCert) - throws IOException - { - List tmp = new ArrayList(); - - tmp.add(attrCert); - - return convertCerts(tmp); - } - - private static Collection convertCerts(Collection collection) - throws IOException - { - List list = new ArrayList(collection.size()); - - for (Iterator it = collection.iterator(); it.hasNext();) - { - Object o = it.next(); - - if (o instanceof X509AttributeCertificate) - { - X509AttributeCertificate cert = (X509AttributeCertificate)o; - - list.add(new JcaX509AttributeCertificateHolder(cert)); - } - else - { - list.add(o); - } - } - - return list; - } -} diff --git a/extern/spongycastle/pkix/src/main/jdk1.2/org/spongycastle/cms/bc/BcCMSContentEncryptorBuilder.java b/extern/spongycastle/pkix/src/main/jdk1.2/org/spongycastle/cms/bc/BcCMSContentEncryptorBuilder.java deleted file mode 100644 index 0e0c1f9fe..000000000 --- a/extern/spongycastle/pkix/src/main/jdk1.2/org/spongycastle/cms/bc/BcCMSContentEncryptorBuilder.java +++ /dev/null @@ -1,124 +0,0 @@ -package org.spongycastle.cms.bc; - -import java.io.OutputStream; -import java.security.SecureRandom; -import java.util.HashMap; -import java.util.Map; - -import org.spongycastle.asn1.ASN1ObjectIdentifier; -import org.spongycastle.asn1.x509.AlgorithmIdentifier; -import org.spongycastle.cms.CMSAlgorithm; -import org.spongycastle.cms.CMSException; -import org.spongycastle.crypto.BufferedBlockCipher; -import org.spongycastle.crypto.CipherKeyGenerator; -import org.spongycastle.crypto.StreamCipher; -import org.spongycastle.crypto.io.CipherOutputStream; -import org.spongycastle.crypto.params.KeyParameter; -import org.spongycastle.operator.GenericKey; -import org.spongycastle.operator.OutputEncryptor; -import org.spongycastle.util.Integers; - -public class BcCMSContentEncryptorBuilder -{ - private static Map keySizes = new HashMap(); - - static - { - keySizes.put(CMSAlgorithm.AES128_CBC, Integers.valueOf(128)); - keySizes.put(CMSAlgorithm.AES192_CBC, Integers.valueOf(192)); - keySizes.put(CMSAlgorithm.AES256_CBC, Integers.valueOf(256)); - - keySizes.put(CMSAlgorithm.CAMELLIA128_CBC, Integers.valueOf(128)); - keySizes.put(CMSAlgorithm.CAMELLIA192_CBC, Integers.valueOf(192)); - keySizes.put(CMSAlgorithm.CAMELLIA256_CBC, Integers.valueOf(256)); - } - - private static int getKeySize(ASN1ObjectIdentifier oid) - { - Integer size = (Integer)keySizes.get(oid); - - if (size != null) - { - return size.intValue(); - } - - return -1; - } - - private ASN1ObjectIdentifier encryptionOID; - private int keySize; - - private EnvelopedDataHelper helper = new EnvelopedDataHelper(); - private SecureRandom random; - - public BcCMSContentEncryptorBuilder(ASN1ObjectIdentifier encryptionOID) - { - this(encryptionOID, getKeySize(encryptionOID)); - } - - public BcCMSContentEncryptorBuilder(ASN1ObjectIdentifier encryptionOID, int keySize) - { - this.encryptionOID = encryptionOID; - this.keySize = keySize; - } - - public BcCMSContentEncryptorBuilder setSecureRandom(SecureRandom random) - { - this.random = random; - - return this; - } - - public OutputEncryptor build() - throws CMSException - { - return new CMSOutputEncryptor(encryptionOID, keySize, random); - } - - private class CMSOutputEncryptor - implements OutputEncryptor - { - private KeyParameter encKey; - private AlgorithmIdentifier algorithmIdentifier; - private Object cipher; - - CMSOutputEncryptor(ASN1ObjectIdentifier encryptionOID, int keySize, SecureRandom random) - throws CMSException - { - if (random == null) - { - random = new SecureRandom(); - } - - CipherKeyGenerator keyGen = helper.createKeyGenerator(encryptionOID, random); - - encKey = new KeyParameter(keyGen.generateKey()); - - algorithmIdentifier = helper.generateAlgorithmIdentifier(encryptionOID, encKey, random); - - cipher = helper.createContentCipher(true, encKey, algorithmIdentifier); - } - - public AlgorithmIdentifier getAlgorithmIdentifier() - { - return algorithmIdentifier; - } - - public OutputStream getOutputStream(OutputStream dOut) - { - if (cipher instanceof BufferedBlockCipher) - { - return new CipherOutputStream(dOut, (BufferedBlockCipher)cipher); - } - else - { - return new CipherOutputStream(dOut, (StreamCipher)cipher); - } - } - - public GenericKey getKey() - { - return new GenericKey(algorithmIdentifier, encKey.getKey()); - } - } -} diff --git a/extern/spongycastle/pkix/src/main/jdk1.2/org/spongycastle/cms/jcajce/JceCMSContentEncryptorBuilder.java b/extern/spongycastle/pkix/src/main/jdk1.2/org/spongycastle/cms/jcajce/JceCMSContentEncryptorBuilder.java deleted file mode 100644 index 60bd74a75..000000000 --- a/extern/spongycastle/pkix/src/main/jdk1.2/org/spongycastle/cms/jcajce/JceCMSContentEncryptorBuilder.java +++ /dev/null @@ -1,161 +0,0 @@ -package org.spongycastle.cms.jcajce; - -import java.io.OutputStream; -import java.security.AlgorithmParameters; -import java.security.GeneralSecurityException; -import java.security.Provider; -import java.security.SecureRandom; -import java.util.HashMap; -import java.util.Map; - -import javax.crypto.Cipher; -import javax.crypto.CipherOutputStream; -import javax.crypto.KeyGenerator; -import javax.crypto.SecretKey; - -import org.spongycastle.asn1.ASN1ObjectIdentifier; -import org.spongycastle.asn1.x509.AlgorithmIdentifier; -import org.spongycastle.cms.CMSAlgorithm; -import org.spongycastle.cms.CMSException; -import org.spongycastle.operator.GenericKey; -import org.spongycastle.operator.OutputEncryptor; -import org.spongycastle.util.Integers; - -public class JceCMSContentEncryptorBuilder -{ - private static Map keySizes = new HashMap(); - - static - { - keySizes.put(CMSAlgorithm.AES128_CBC, Integers.valueOf(128)); - keySizes.put(CMSAlgorithm.AES192_CBC, Integers.valueOf(192)); - keySizes.put(CMSAlgorithm.AES256_CBC, Integers.valueOf(256)); - - keySizes.put(CMSAlgorithm.CAMELLIA128_CBC, Integers.valueOf(128)); - keySizes.put(CMSAlgorithm.CAMELLIA192_CBC, Integers.valueOf(192)); - keySizes.put(CMSAlgorithm.CAMELLIA256_CBC, Integers.valueOf(256)); - } - - private static int getKeySize(ASN1ObjectIdentifier oid) - { - Integer size = (Integer)keySizes.get(oid); - - if (size != null) - { - return size.intValue(); - } - - return -1; - } - - private ASN1ObjectIdentifier encryptionOID; - private int keySize; - - private EnvelopedDataHelper helper = new EnvelopedDataHelper(new DefaultJcaJceExtHelper()); - private SecureRandom random; - - public JceCMSContentEncryptorBuilder(ASN1ObjectIdentifier encryptionOID) - { - this(encryptionOID, getKeySize(encryptionOID)); - } - - public JceCMSContentEncryptorBuilder(ASN1ObjectIdentifier encryptionOID, int keySize) - { - this.encryptionOID = encryptionOID; - this.keySize = keySize; - } - - public JceCMSContentEncryptorBuilder setProvider(Provider provider) - { - this.helper = new EnvelopedDataHelper(new ProviderJcaJceExtHelper(provider)); - - return this; - } - - public JceCMSContentEncryptorBuilder setProvider(String providerName) - { - this.helper = new EnvelopedDataHelper(new NamedJcaJceExtHelper(providerName)); - - return this; - } - - public JceCMSContentEncryptorBuilder setSecureRandom(SecureRandom random) - { - this.random = random; - - return this; - } - - public OutputEncryptor build() - throws CMSException - { - return new CMSOutputEncryptor(encryptionOID, keySize, random); - } - - private class CMSOutputEncryptor - implements OutputEncryptor - { - private SecretKey encKey; - private AlgorithmIdentifier algorithmIdentifier; - private Cipher cipher; - - CMSOutputEncryptor(ASN1ObjectIdentifier encryptionOID, int keySize, SecureRandom random) - throws CMSException - { - KeyGenerator keyGen = helper.createKeyGenerator(encryptionOID); - - if (random == null) - { - random = new SecureRandom(); - } - - if (keySize < 0) - { - keyGen.init(random); - } - else - { - keyGen.init(keySize, random); - } - - cipher = helper.createCipher(encryptionOID); - encKey = keyGen.generateKey(); - AlgorithmParameters params = helper.generateParameters(encryptionOID, encKey, random); - - try - { - cipher.init(Cipher.ENCRYPT_MODE, encKey, params, random); - } - catch (GeneralSecurityException e) - { - throw new CMSException("unable to initialize cipher: " + e.getMessage(), e); - } - - // - // If params are null we try and second guess on them as some providers don't provide - // algorithm parameter generation explicity but instead generate them under the hood. - // - if (params == null) - { - params = cipher.getParameters(); - } - - algorithmIdentifier = helper.getAlgorithmIdentifier(encryptionOID, params); - } - - public AlgorithmIdentifier getAlgorithmIdentifier() - { - return algorithmIdentifier; - } - - public OutputStream getOutputStream(OutputStream dOut) - { - return new CipherOutputStream(dOut, cipher); - } - - public GenericKey getKey() - { - return new GenericKey(encKey); - } - } -} diff --git a/extern/spongycastle/pkix/src/main/jdk1.2/org/spongycastle/cms/jcajce/JceCMSMacCalculatorBuilder.java b/extern/spongycastle/pkix/src/main/jdk1.2/org/spongycastle/cms/jcajce/JceCMSMacCalculatorBuilder.java deleted file mode 100644 index ab168ffb8..000000000 --- a/extern/spongycastle/pkix/src/main/jdk1.2/org/spongycastle/cms/jcajce/JceCMSMacCalculatorBuilder.java +++ /dev/null @@ -1,155 +0,0 @@ -package org.spongycastle.cms.jcajce; - -import java.io.OutputStream; -import java.security.AlgorithmParameterGenerator; -import java.security.AlgorithmParameters; -import java.security.GeneralSecurityException; -import java.security.Provider; -import java.security.SecureRandom; -import java.security.spec.AlgorithmParameterSpec; - -import javax.crypto.KeyGenerator; -import javax.crypto.Mac; -import javax.crypto.SecretKey; -import javax.crypto.spec.IvParameterSpec; -import javax.crypto.spec.RC2ParameterSpec; - -import org.spongycastle.asn1.ASN1ObjectIdentifier; -import org.spongycastle.asn1.pkcs.PKCSObjectIdentifiers; -import org.spongycastle.asn1.x509.AlgorithmIdentifier; -import org.spongycastle.cms.CMSException; -import org.spongycastle.jcajce.io.MacOutputStream; -import org.spongycastle.operator.GenericKey; -import org.spongycastle.operator.MacCalculator; - -public class JceCMSMacCalculatorBuilder -{ - private ASN1ObjectIdentifier macOID; - private int keySize; - - private EnvelopedDataHelper helper = new EnvelopedDataHelper(new DefaultJcaJceExtHelper()); - private SecureRandom random; - private MacOutputStream macOutputStream; - - public JceCMSMacCalculatorBuilder(ASN1ObjectIdentifier macOID) - { - this(macOID, -1); - } - - public JceCMSMacCalculatorBuilder(ASN1ObjectIdentifier macOID, int keySize) - { - this.macOID = macOID; - this.keySize = keySize; - } - - public JceCMSMacCalculatorBuilder setProvider(Provider provider) - { - this.helper = new EnvelopedDataHelper(new ProviderJcaJceExtHelper(provider)); - - return this; - } - - public JceCMSMacCalculatorBuilder setProvider(String providerName) - { - this.helper = new EnvelopedDataHelper(new NamedJcaJceExtHelper(providerName)); - - return this; - } - - public JceCMSMacCalculatorBuilder setSecureRandom(SecureRandom random) - { - this.random = random; - - return this; - } - - public MacCalculator build() - throws CMSException - { - return new CMSOutputEncryptor(macOID, keySize, random); - } - - private class CMSOutputEncryptor - implements MacCalculator - { - private SecretKey encKey; - private AlgorithmIdentifier algorithmIdentifier; - private Mac mac; - private SecureRandom random; - - CMSOutputEncryptor(ASN1ObjectIdentifier macOID, int keySize, SecureRandom random) - throws CMSException - { - KeyGenerator keyGen = helper.createKeyGenerator(macOID); - - if (random == null) - { - random = new SecureRandom(); - } - - this.random = random; - - if (keySize < 0) - { - keyGen.init(random); - } - else - { - keyGen.init(keySize, random); - } - - encKey = keyGen.generateKey(); - - AlgorithmParameterSpec paramSpec = generateParameterSpec(macOID, encKey); - - algorithmIdentifier = helper.getAlgorithmIdentifier(macOID, paramSpec); - mac = helper.createContentMac(encKey, algorithmIdentifier); - } - - public AlgorithmIdentifier getAlgorithmIdentifier() - { - return algorithmIdentifier; - } - - public OutputStream getOutputStream() - { - return new MacOutputStream(mac); - } - - public byte[] getMac() - { - return mac.doFinal(); - } - - public GenericKey getKey() - { - return new GenericKey(encKey); - } - - protected AlgorithmParameterSpec generateParameterSpec(ASN1ObjectIdentifier macOID, SecretKey encKey) - throws CMSException - { - try - { - if (macOID.equals(PKCSObjectIdentifiers.RC2_CBC)) - { - byte[] iv = new byte[8]; - - random.nextBytes(iv); - - return new RC2ParameterSpec(encKey.getEncoded().length * 8, iv); - } - - AlgorithmParameterGenerator pGen = helper.createAlgorithmParameterGenerator(macOID); - - AlgorithmParameters p = pGen.generateParameters(); - - return p.getParameterSpec(IvParameterSpec.class); - } - catch (GeneralSecurityException e) - { - return null; - } - } - } -} diff --git a/extern/spongycastle/pkix/src/main/jdk1.3/org/spongycastle/cert/crmf/jcajce/JcaCertificateRequestMessage.java b/extern/spongycastle/pkix/src/main/jdk1.3/org/spongycastle/cert/crmf/jcajce/JcaCertificateRequestMessage.java deleted file mode 100644 index eac007e0d..000000000 --- a/extern/spongycastle/pkix/src/main/jdk1.3/org/spongycastle/cert/crmf/jcajce/JcaCertificateRequestMessage.java +++ /dev/null @@ -1,55 +0,0 @@ -package org.spongycastle.cert.crmf.jcajce; - -import java.security.Provider; -import java.security.PublicKey; - -import org.spongycastle.asn1.crmf.CertReqMsg; -import org.spongycastle.asn1.x509.SubjectPublicKeyInfo; -import org.spongycastle.cert.crmf.CRMFException; -import org.spongycastle.cert.crmf.CertificateRequestMessage; -import org.spongycastle.jcajce.util.DefaultJcaJceHelper; -import org.spongycastle.jcajce.util.NamedJcaJceHelper; -import org.spongycastle.jcajce.util.ProviderJcaJceHelper; - -public class JcaCertificateRequestMessage - extends CertificateRequestMessage -{ - private CRMFHelper helper = new CRMFHelper(new DefaultJcaJceHelper()); - - public JcaCertificateRequestMessage(CertificateRequestMessage certReqMsg) - { - this(certReqMsg.toASN1Structure()); - } - - public JcaCertificateRequestMessage(CertReqMsg certReqMsg) - { - super(certReqMsg); - } - - public JcaCertificateRequestMessage setProvider(String providerName) - { - this.helper = new CRMFHelper(new NamedJcaJceHelper(providerName)); - - return this; - } - - public JcaCertificateRequestMessage setProvider(Provider provider) - { - this.helper = new CRMFHelper(new ProviderJcaJceHelper(provider)); - - return this; - } - - public PublicKey getPublicKey() - throws CRMFException - { - SubjectPublicKeyInfo subjectPublicKeyInfo = getCertTemplate().getPublicKey(); - - if (subjectPublicKeyInfo != null) - { - return helper.toPublicKey(subjectPublicKeyInfo); - } - - return null; - } -} diff --git a/extern/spongycastle/pkix/src/main/jdk1.3/org/spongycastle/cert/crmf/jcajce/JcaCertificateRequestMessageBuilder.java b/extern/spongycastle/pkix/src/main/jdk1.3/org/spongycastle/cert/crmf/jcajce/JcaCertificateRequestMessageBuilder.java deleted file mode 100644 index 6b2f85217..000000000 --- a/extern/spongycastle/pkix/src/main/jdk1.3/org/spongycastle/cert/crmf/jcajce/JcaCertificateRequestMessageBuilder.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.spongycastle.cert.crmf.jcajce; - -import java.math.BigInteger; -import java.security.PublicKey; - -import org.spongycastle.asn1.x500.X500Name; -import org.spongycastle.asn1.x509.GeneralName; -import org.spongycastle.asn1.x509.SubjectPublicKeyInfo; -import org.spongycastle.cert.crmf.CertificateRequestMessageBuilder; - -public class JcaCertificateRequestMessageBuilder - extends CertificateRequestMessageBuilder -{ - public JcaCertificateRequestMessageBuilder(BigInteger certReqId) - { - super(certReqId); - } - - public JcaCertificateRequestMessageBuilder setPublicKey(PublicKey publicKey) - { - setPublicKey(SubjectPublicKeyInfo.getInstance(publicKey.getEncoded())); - - return this; - } -} diff --git a/extern/spongycastle/pkix/src/main/jdk1.3/org/spongycastle/cert/crmf/jcajce/JcaPKIArchiveControlBuilder.java b/extern/spongycastle/pkix/src/main/jdk1.3/org/spongycastle/cert/crmf/jcajce/JcaPKIArchiveControlBuilder.java deleted file mode 100644 index 9e2963c8f..000000000 --- a/extern/spongycastle/pkix/src/main/jdk1.3/org/spongycastle/cert/crmf/jcajce/JcaPKIArchiveControlBuilder.java +++ /dev/null @@ -1,22 +0,0 @@ -package org.spongycastle.cert.crmf.jcajce; - -import java.security.PrivateKey; - -import org.spongycastle.asn1.pkcs.PrivateKeyInfo; -import org.spongycastle.asn1.x500.X500Name; -import org.spongycastle.asn1.x509.GeneralName; -import org.spongycastle.cert.crmf.PKIArchiveControlBuilder; - -public class JcaPKIArchiveControlBuilder - extends PKIArchiveControlBuilder -{ - public JcaPKIArchiveControlBuilder(PrivateKey privateKey, X500Name name) - { - this(privateKey, new GeneralName(name)); - } - - public JcaPKIArchiveControlBuilder(PrivateKey privateKey, GeneralName generalName) - { - super(PrivateKeyInfo.getInstance(privateKey.getEncoded()), generalName); - } -} diff --git a/extern/spongycastle/pkix/src/main/jdk1.3/org/spongycastle/cert/jcajce/JcaCertStoreBuilder.java b/extern/spongycastle/pkix/src/main/jdk1.3/org/spongycastle/cert/jcajce/JcaCertStoreBuilder.java deleted file mode 100644 index 37a1723cb..000000000 --- a/extern/spongycastle/pkix/src/main/jdk1.3/org/spongycastle/cert/jcajce/JcaCertStoreBuilder.java +++ /dev/null @@ -1,151 +0,0 @@ -package org.spongycastle.cert.jcajce; - -import java.security.GeneralSecurityException; -import java.security.InvalidAlgorithmParameterException; -import java.security.NoSuchAlgorithmException; -import java.security.NoSuchProviderException; -import java.security.Provider; -import java.security.cert.CRLException; -import org.spongycastle.jce.cert.CertStore; -import java.security.cert.CertificateException; -import org.spongycastle.jce.cert.CollectionCertStoreParameters; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; - -import org.spongycastle.cert.X509CRLHolder; -import org.spongycastle.cert.X509CertificateHolder; -import org.spongycastle.util.Store; - -/** - * Builder to create a CertStore from certificate and CRL stores. - */ -public class JcaCertStoreBuilder -{ - private List certs = new ArrayList(); - private List crls = new ArrayList(); - private Object provider; - private JcaX509CertificateConverter certificateConverter = new JcaX509CertificateConverter(); - private JcaX509CRLConverter crlConverter = new JcaX509CRLConverter(); - private String type = "Collection"; - - /** - * Add a store full of X509CertificateHolder objects. - * - * @param certStore a store of X509CertificateHolder objects. - */ - public JcaCertStoreBuilder addCertificates(Store certStore) - { - certs.addAll(certStore.getMatches(null)); - - return this; - } - - /** - * Add a single certificate. - * - * @param cert the X509 certificate holder containing the certificate. - */ - public JcaCertStoreBuilder addCertificate(X509CertificateHolder cert) - { - certs.add(cert); - - return this; - } - - /** - * Add a store full of X509CRLHolder objects. - * @param crlStore a store of X509CRLHolder objects. - */ - public JcaCertStoreBuilder addCRLs(Store crlStore) - { - crls.addAll(crlStore.getMatches(null)); - - return this; - } - - /** - * Add a single CRL. - * - * @param crl the X509 CRL holder containing the CRL. - */ - public JcaCertStoreBuilder addCRL(X509CRLHolder crl) - { - crls.add(crl); - - return this; - } - - public JcaCertStoreBuilder setProvider(String providerName) - { - certificateConverter.setProvider(providerName); - crlConverter.setProvider(providerName); - this.provider = providerName; - - return this; - } - - public JcaCertStoreBuilder setProvider(Provider provider) - { - certificateConverter.setProvider(provider); - crlConverter.setProvider(provider); - this.provider = provider; - - return this; - } - - /** - * Set the type of the CertStore generated. By default it is "Collection". - * - * @param type type of CertStore passed to CertStore.getInstance(). - * @return the current builder. - */ - public JcaCertStoreBuilder setType(String type) - { - this.type = type; - - return this; - } - - /** - * Build the CertStore from the current inputs. - * - * @return a CertStore. - * @throws GeneralSecurityException - */ - public CertStore build() - throws GeneralSecurityException - { - CollectionCertStoreParameters params = convertHolders(certificateConverter, crlConverter); - - if (provider instanceof String) - { - return CertStore.getInstance(type, params, (String)provider); - } - - if (provider instanceof Provider) - { - return CertStore.getInstance(type, params, (Provider)provider); - } - - return CertStore.getInstance(type, params); - } - - private CollectionCertStoreParameters convertHolders(JcaX509CertificateConverter certificateConverter, JcaX509CRLConverter crlConverter) - throws CertificateException, CRLException - { - List jcaObjs = new ArrayList(certs.size() + crls.size()); - - for (Iterator it = certs.iterator(); it.hasNext();) - { - jcaObjs.add(certificateConverter.getCertificate((X509CertificateHolder)it.next())); - } - - for (Iterator it = crls.iterator(); it.hasNext();) - { - jcaObjs.add(crlConverter.getCRL((X509CRLHolder)it.next())); - } - - return new CollectionCertStoreParameters(jcaObjs); - } -} diff --git a/extern/spongycastle/pkix/src/main/jdk1.3/org/spongycastle/cert/jcajce/JcaX500NameUtil.java b/extern/spongycastle/pkix/src/main/jdk1.3/org/spongycastle/cert/jcajce/JcaX500NameUtil.java deleted file mode 100644 index 840dde552..000000000 --- a/extern/spongycastle/pkix/src/main/jdk1.3/org/spongycastle/cert/jcajce/JcaX500NameUtil.java +++ /dev/null @@ -1,58 +0,0 @@ -package org.spongycastle.cert.jcajce; - -import java.security.cert.X509Certificate; - -import org.spongycastle.asn1.x500.X500Name; -import org.spongycastle.asn1.x500.X500NameStyle; -import org.spongycastle.jce.PrincipalUtil; - -public class JcaX500NameUtil -{ - public static X500Name getIssuer(X509Certificate certificate) - { -try -{ - return X500Name.getInstance(PrincipalUtil.getIssuerX509Principal(certificate).getEncoded()); -} -catch (Exception e) -{ - throw new IllegalStateException(e.toString()); -} - } - - public static X500Name getSubject(X509Certificate certificate) - { -try -{ - return X500Name.getInstance(PrincipalUtil.getSubjectX509Principal(certificate).getEncoded()); -} -catch (Exception e) -{ - throw new IllegalStateException(e.toString()); -} - } - - public static X500Name getIssuer(X500NameStyle style, X509Certificate certificate) - { -try -{ - return X500Name.getInstance(style, PrincipalUtil.getIssuerX509Principal(certificate).getEncoded()); -} -catch (Exception e) -{ - throw new IllegalStateException(e.toString()); -} - } - - public static X500Name getSubject(X500NameStyle style, X509Certificate certificate) - { -try -{ - return X500Name.getInstance(style, PrincipalUtil.getSubjectX509Principal(certificate).getEncoded()); -} -catch (Exception e) -{ - throw new IllegalStateException(e.toString()); -} - } -} diff --git a/extern/spongycastle/pkix/src/main/jdk1.3/org/spongycastle/cert/jcajce/JcaX509ExtensionUtils.java b/extern/spongycastle/pkix/src/main/jdk1.3/org/spongycastle/cert/jcajce/JcaX509ExtensionUtils.java deleted file mode 100644 index f40ab480f..000000000 --- a/extern/spongycastle/pkix/src/main/jdk1.3/org/spongycastle/cert/jcajce/JcaX509ExtensionUtils.java +++ /dev/null @@ -1,138 +0,0 @@ -package org.spongycastle.cert.jcajce; - -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.OutputStream; -import java.math.BigInteger; -import java.security.MessageDigest; -import java.security.NoSuchAlgorithmException; -import java.security.PublicKey; -import java.security.cert.CertificateEncodingException; -import java.security.cert.X509Certificate; - -import org.spongycastle.asn1.ASN1OctetString; -import org.spongycastle.asn1.ASN1Primitive; -import org.spongycastle.asn1.oiw.OIWObjectIdentifiers; -import org.spongycastle.asn1.x500.X500Name; -import org.spongycastle.asn1.x509.AlgorithmIdentifier; -import org.spongycastle.asn1.x509.AuthorityKeyIdentifier; -import org.spongycastle.asn1.x509.GeneralName; -import org.spongycastle.asn1.x509.GeneralNames; -import org.spongycastle.asn1.x509.SubjectKeyIdentifier; -import org.spongycastle.asn1.x509.SubjectPublicKeyInfo; -import org.spongycastle.cert.X509ExtensionUtils; -import org.spongycastle.operator.DigestCalculator; - -public class JcaX509ExtensionUtils - extends X509ExtensionUtils -{ - /** - * Create a utility class pre-configured with a SHA-1 digest calculator based on the - * default implementation. - * - * @throws java.security.NoSuchAlgorithmException - */ - public JcaX509ExtensionUtils() - throws NoSuchAlgorithmException - { - super(new SHA1DigestCalculator(MessageDigest.getInstance("SHA1"))); - } - - public JcaX509ExtensionUtils(DigestCalculator calculator) - { - super(calculator); - } - - public AuthorityKeyIdentifier createAuthorityKeyIdentifier( - X509Certificate cert) - throws CertificateEncodingException - { - return super.createAuthorityKeyIdentifier(new JcaX509CertificateHolder(cert)); - } - - public AuthorityKeyIdentifier createAuthorityKeyIdentifier( - PublicKey pubKey) - { - return super.createAuthorityKeyIdentifier(SubjectPublicKeyInfo.getInstance(pubKey.getEncoded())); - } - - public AuthorityKeyIdentifier createAuthorityKeyIdentifier(PublicKey pubKey, GeneralNames generalNames, BigInteger serial) - { - return super.createAuthorityKeyIdentifier(SubjectPublicKeyInfo.getInstance(pubKey.getEncoded()), generalNames, serial); - } - - /** - * Return a RFC 3280 type 1 key identifier. As in: - *- * (1) The keyIdentifier is composed of the 160-bit SHA-1 hash of the - * value of the BIT STRING subjectPublicKey (excluding the tag, - * length, and number of unused bits). - *- * @param publicKey the key object containing the key identifier is to be based on. - * @return the key identifier. - */ - public SubjectKeyIdentifier createSubjectKeyIdentifier( - PublicKey publicKey) - { - return super.createSubjectKeyIdentifier(SubjectPublicKeyInfo.getInstance(publicKey.getEncoded())); - } - - /** - * Return a RFC 3280 type 2 key identifier. As in: - *
- * (2) The keyIdentifier is composed of a four bit type field with - * the value 0100 followed by the least significant 60 bits of the - * SHA-1 hash of the value of the BIT STRING subjectPublicKey. - *- * @param publicKey the key object of interest. - * @return the key identifier. - */ - public SubjectKeyIdentifier createTruncatedSubjectKeyIdentifier(PublicKey publicKey) - { - return super.createSubjectKeyIdentifier(SubjectPublicKeyInfo.getInstance(publicKey.getEncoded())); - } - - /** - * Return the ASN.1 object contained in a byte[] returned by a getExtensionValue() call. - * - * @param encExtValue DER encoded OCTET STRING containing the DER encoded extension object. - * @return an ASN.1 object - * @throws java.io.IOException on a parsing error. - */ - public static ASN1Primitive parseExtensionValue(byte[] encExtValue) - throws IOException - { - return ASN1Primitive.fromByteArray(ASN1OctetString.getInstance(encExtValue).getOctets()); - } - - private static class SHA1DigestCalculator - implements DigestCalculator - { - private ByteArrayOutputStream bOut = new ByteArrayOutputStream(); - private MessageDigest digest; - - public SHA1DigestCalculator(MessageDigest digest) - { - this.digest = digest; - } - - public AlgorithmIdentifier getAlgorithmIdentifier() - { - return new AlgorithmIdentifier(OIWObjectIdentifiers.idSHA1); - } - - public OutputStream getOutputStream() - { - return bOut; - } - - public byte[] getDigest() - { - byte[] bytes = digest.digest(bOut.toByteArray()); - - bOut.reset(); - - return bytes; - } - } -} diff --git a/extern/spongycastle/pkix/src/main/jdk1.3/org/spongycastle/cert/jcajce/JcaX509v1CertificateBuilder.java b/extern/spongycastle/pkix/src/main/jdk1.3/org/spongycastle/cert/jcajce/JcaX509v1CertificateBuilder.java deleted file mode 100644 index b67959bc8..000000000 --- a/extern/spongycastle/pkix/src/main/jdk1.3/org/spongycastle/cert/jcajce/JcaX509v1CertificateBuilder.java +++ /dev/null @@ -1,31 +0,0 @@ -package org.spongycastle.cert.jcajce; - -import java.math.BigInteger; -import java.security.PublicKey; -import java.util.Date; - -import org.spongycastle.asn1.x500.X500Name; -import org.spongycastle.asn1.x509.SubjectPublicKeyInfo; -import org.spongycastle.cert.X509v1CertificateBuilder; - -/** - * JCA helper class to allow JCA objects to be used in the construction of a Version 1 certificate. - */ -public class JcaX509v1CertificateBuilder - extends X509v1CertificateBuilder -{ - /** - * Initialise the builder using a PublicKey. - * - * @param issuer X500Name representing the issuer of this certificate. - * @param serial the serial number for the certificate. - * @param notBefore date before which the certificate is not valid. - * @param notAfter date after which the certificate is not valid. - * @param subject X500Name representing the subject of this certificate. - * @param publicKey the public key to be associated with the certificate. - */ - public JcaX509v1CertificateBuilder(X500Name issuer, BigInteger serial, Date notBefore, Date notAfter, X500Name subject, PublicKey publicKey) - { - super(issuer, serial, notBefore, notAfter, subject, SubjectPublicKeyInfo.getInstance(publicKey.getEncoded())); - } -} diff --git a/extern/spongycastle/pkix/src/main/jdk1.3/org/spongycastle/cert/jcajce/JcaX509v2CRLBuilder.java b/extern/spongycastle/pkix/src/main/jdk1.3/org/spongycastle/cert/jcajce/JcaX509v2CRLBuilder.java deleted file mode 100644 index 4b1f4907b..000000000 --- a/extern/spongycastle/pkix/src/main/jdk1.3/org/spongycastle/cert/jcajce/JcaX509v2CRLBuilder.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.spongycastle.cert.jcajce; - -import java.util.Date; - -import org.spongycastle.asn1.x500.X500Name; -import org.spongycastle.cert.X509v2CRLBuilder; - -public class JcaX509v2CRLBuilder - extends X509v2CRLBuilder -{ - public JcaX509v2CRLBuilder(X500Name issuer, Date now) - { - super(issuer, now); - } -} diff --git a/extern/spongycastle/pkix/src/main/jdk1.3/org/spongycastle/cert/jcajce/JcaX509v3CertificateBuilder.java b/extern/spongycastle/pkix/src/main/jdk1.3/org/spongycastle/cert/jcajce/JcaX509v3CertificateBuilder.java deleted file mode 100644 index 4f7a4a1e5..000000000 --- a/extern/spongycastle/pkix/src/main/jdk1.3/org/spongycastle/cert/jcajce/JcaX509v3CertificateBuilder.java +++ /dev/null @@ -1,54 +0,0 @@ -package org.spongycastle.cert.jcajce; - -import java.math.BigInteger; -import java.security.PublicKey; -import java.security.cert.CertificateEncodingException; -import java.security.cert.X509Certificate; -import java.util.Date; - -import org.spongycastle.asn1.ASN1ObjectIdentifier; -import org.spongycastle.asn1.x500.X500Name; -import org.spongycastle.asn1.x509.SubjectPublicKeyInfo; -import org.spongycastle.cert.X509v3CertificateBuilder; - -/** - * JCA helper class to allow JCA objects to be used in the construction of a Version 3 certificate. - */ -public class JcaX509v3CertificateBuilder - extends X509v3CertificateBuilder -{ - /** - * Initialise the builder using a PublicKey. - * - * @param issuer X500Name representing the issuer of this certificate. - * @param serial the serial number for the certificate. - * @param notBefore date before which the certificate is not valid. - * @param notAfter date after which the certificate is not valid. - * @param subject X500Name representing the subject of this certificate. - * @param publicKey the public key to be associated with the certificate. - */ - public JcaX509v3CertificateBuilder(X500Name issuer, BigInteger serial, Date notBefore, Date notAfter, X500Name subject, PublicKey publicKey) - { - super(issuer, serial, notBefore, notAfter, subject, SubjectPublicKeyInfo.getInstance(publicKey.getEncoded())); - } - - /** - * Add a given extension field for the standard extensions tag (tag 3) - * copying the extension value from another certificate. - * - * @param oid the type of the extension to be copied. - * @param critical true if the extension is to be marked critical, false otherwise. - * @param certificate the source of the extension to be copied. - * @return the builder instance. - */ - public JcaX509v3CertificateBuilder copyAndAddExtension( - ASN1ObjectIdentifier oid, - boolean critical, - X509Certificate certificate) - throws CertificateEncodingException - { - this.copyAndAddExtension(oid, critical, new JcaX509CertificateHolder(certificate)); - - return this; - } -} diff --git a/extern/spongycastle/pkix/src/main/jdk1.3/org/spongycastle/cert/jcajce/ProviderCertHelper.java b/extern/spongycastle/pkix/src/main/jdk1.3/org/spongycastle/cert/jcajce/ProviderCertHelper.java deleted file mode 100644 index a28a7c562..000000000 --- a/extern/spongycastle/pkix/src/main/jdk1.3/org/spongycastle/cert/jcajce/ProviderCertHelper.java +++ /dev/null @@ -1,30 +0,0 @@ -package org.spongycastle.cert.jcajce; - -import java.security.Provider; -import java.security.NoSuchProviderException; -import java.security.cert.CertificateException; -import java.security.cert.CertificateFactory; - -class ProviderCertHelper - extends CertHelper -{ - private final Provider provider; - - ProviderCertHelper(Provider provider) - { - this.provider = provider; - } - - protected CertificateFactory createCertificateFactory(String type) - throws CertificateException - { - try - { - return CertificateFactory.getInstance(type, provider.getName()); - } - catch (NoSuchProviderException e) - { - throw new CertificateException(e.toString()); - } - } -} diff --git a/extern/spongycastle/pkix/src/main/jdk1.3/org/spongycastle/cert/ocsp/jcajce/JcaRespID.java b/extern/spongycastle/pkix/src/main/jdk1.3/org/spongycastle/cert/ocsp/jcajce/JcaRespID.java deleted file mode 100644 index 41d9072c2..000000000 --- a/extern/spongycastle/pkix/src/main/jdk1.3/org/spongycastle/cert/ocsp/jcajce/JcaRespID.java +++ /dev/null @@ -1,19 +0,0 @@ -package org.spongycastle.cert.ocsp.jcajce; - -import java.security.PublicKey; - -import org.spongycastle.asn1.x500.X500Name; -import org.spongycastle.asn1.x509.SubjectPublicKeyInfo; -import org.spongycastle.cert.ocsp.OCSPException; -import org.spongycastle.cert.ocsp.RespID; -import org.spongycastle.operator.DigestCalculator; - -public class JcaRespID - extends RespID -{ - public JcaRespID(PublicKey pubKey, DigestCalculator digCalc) - throws OCSPException - { - super(SubjectPublicKeyInfo.getInstance(pubKey.getEncoded()), digCalc); - } -} diff --git a/extern/spongycastle/pkix/src/main/jdk1.3/org/spongycastle/cert/selector/jcajce/JcaSelectorConverter.java b/extern/spongycastle/pkix/src/main/jdk1.3/org/spongycastle/cert/selector/jcajce/JcaSelectorConverter.java deleted file mode 100644 index cede4acc8..000000000 --- a/extern/spongycastle/pkix/src/main/jdk1.3/org/spongycastle/cert/selector/jcajce/JcaSelectorConverter.java +++ /dev/null @@ -1,34 +0,0 @@ -package org.spongycastle.cert.selector.jcajce; - -import org.spongycastle.jce.cert.X509CertSelector; - -import org.spongycastle.asn1.ASN1OctetString; -import org.spongycastle.asn1.x500.X500Name; -import org.spongycastle.cert.selector.X509CertificateHolderSelector; - -public class JcaSelectorConverter -{ - public JcaSelectorConverter() - { - - } - - public X509CertificateHolderSelector getCertificateHolderSelector(X509CertSelector certSelector) - { -try -{ - if (certSelector.getSubjectKeyIdentifier() != null) - { - return new X509CertificateHolderSelector(X500Name.getInstance(certSelector.getIssuerAsBytes()), certSelector.getSerialNumber(), ASN1OctetString.getInstance(certSelector.getSubjectKeyIdentifier()).getOctets()); - } - else - { - return new X509CertificateHolderSelector(X500Name.getInstance(certSelector.getIssuerAsBytes()), certSelector.getSerialNumber()); - } -} -catch (Exception e) -{ -throw new IllegalArgumentException("conversion failed: " + e.toString()); -} - } -} diff --git a/extern/spongycastle/pkix/src/main/jdk1.3/org/spongycastle/cert/selector/jcajce/JcaX509CertSelectorConverter.java b/extern/spongycastle/pkix/src/main/jdk1.3/org/spongycastle/cert/selector/jcajce/JcaX509CertSelectorConverter.java deleted file mode 100644 index b2dbb563e..000000000 --- a/extern/spongycastle/pkix/src/main/jdk1.3/org/spongycastle/cert/selector/jcajce/JcaX509CertSelectorConverter.java +++ /dev/null @@ -1,57 +0,0 @@ -package org.spongycastle.cert.selector.jcajce; - -import java.io.IOException; -import java.math.BigInteger; -import org.spongycastle.jce.cert.X509CertSelector; - -import org.spongycastle.asn1.DEROctetString; -import org.spongycastle.asn1.x500.X500Name; -import org.spongycastle.cert.selector.X509CertificateHolderSelector; - -public class JcaX509CertSelectorConverter -{ - public JcaX509CertSelectorConverter() - { - } - - protected X509CertSelector doConversion(X500Name issuer, BigInteger serialNumber, byte[] subjectKeyIdentifier) - { - X509CertSelector selector = new X509CertSelector(); - - if (issuer != null) - { - try - { - selector.setIssuer(issuer.getEncoded()); - } - catch (IOException e) - { - throw new IllegalArgumentException("unable to convert issuer: " + e.getMessage()); - } - } - - if (serialNumber != null) - { - selector.setSerialNumber(serialNumber); - } - - if (subjectKeyIdentifier != null) - { - try - { - selector.setSubjectKeyIdentifier(new DEROctetString(subjectKeyIdentifier).getEncoded()); - } - catch (IOException e) - { - throw new IllegalArgumentException("unable to convert issuer: " + e.getMessage()); - } - } - - return selector; - } - - public X509CertSelector getCertSelector(X509CertificateHolderSelector holderSelector) - { - return doConversion(holderSelector.getIssuer(), holderSelector.getSerialNumber(), holderSelector.getSubjectKeyIdentifier()); - } -} diff --git a/extern/spongycastle/pkix/src/main/jdk1.3/org/spongycastle/cert/selector/jcajce/JcaX509CertificateHolderSelector.java b/extern/spongycastle/pkix/src/main/jdk1.3/org/spongycastle/cert/selector/jcajce/JcaX509CertificateHolderSelector.java deleted file mode 100644 index 3280af2a0..000000000 --- a/extern/spongycastle/pkix/src/main/jdk1.3/org/spongycastle/cert/selector/jcajce/JcaX509CertificateHolderSelector.java +++ /dev/null @@ -1,57 +0,0 @@ -package org.spongycastle.cert.selector.jcajce; - -import java.math.BigInteger; -import java.security.cert.X509Certificate; - -import org.spongycastle.jce.X509Principal; -import org.spongycastle.jce.PrincipalUtil; - -import org.spongycastle.asn1.ASN1OctetString; -import org.spongycastle.asn1.x500.X500Name; -import org.spongycastle.asn1.x509.X509Extension; -import org.spongycastle.cert.selector.X509CertificateHolderSelector; - -public class JcaX509CertificateHolderSelector - extends X509CertificateHolderSelector -{ - /** - * Construct a signer identifier based on the issuer, serial number and subject key identifier (if present) of the passed in - * certificate. - * - * @param certificate certificate providing the issue and serial number and subject key identifier. - */ - public JcaX509CertificateHolderSelector(X509Certificate certificate) - { - super(convertPrincipal(certificate), certificate.getSerialNumber(), getSubjectKeyId(certificate)); - } - - private static X500Name convertPrincipal(X509Certificate issuer) - { - if (issuer == null) - { - return null; - } -try -{ - return X500Name.getInstance(PrincipalUtil.getIssuerX509Principal(issuer).toASN1Primitive()); -} -catch (Exception e) -{ - throw new IllegalArgumentException("conversion failed: " + e.toString()); -} - } - - private static byte[] getSubjectKeyId(X509Certificate cert) - { - byte[] ext = cert.getExtensionValue(X509Extension.subjectKeyIdentifier.getId()); - - if (ext != null) - { - return ASN1OctetString.getInstance(ASN1OctetString.getInstance(ext).getOctets()).getOctets(); - } - else - { - return null; - } - } -} diff --git a/extern/spongycastle/pkix/src/main/jdk1.3/org/spongycastle/cms/jcajce/JcaSelectorConverter.java b/extern/spongycastle/pkix/src/main/jdk1.3/org/spongycastle/cms/jcajce/JcaSelectorConverter.java deleted file mode 100644 index c6d0cebe6..000000000 --- a/extern/spongycastle/pkix/src/main/jdk1.3/org/spongycastle/cms/jcajce/JcaSelectorConverter.java +++ /dev/null @@ -1,54 +0,0 @@ -package org.spongycastle.cms.jcajce; - -import org.spongycastle.jce.cert.X509CertSelector; - -import org.spongycastle.asn1.ASN1OctetString; -import org.spongycastle.asn1.x500.X500Name; -import org.spongycastle.cms.KeyTransRecipientId; -import org.spongycastle.cms.SignerId; - -public class JcaSelectorConverter -{ - public JcaSelectorConverter() - { - - } - - public SignerId getSignerId(X509CertSelector certSelector) - { -try -{ - if (certSelector.getSubjectKeyIdentifier() != null) - { - return new SignerId(X500Name.getInstance(certSelector.getIssuerAsBytes()), certSelector.getSerialNumber(), ASN1OctetString.getInstance(certSelector.getSubjectKeyIdentifier()).getOctets()); - } - else - { - return new SignerId(X500Name.getInstance(certSelector.getIssuerAsBytes()), certSelector.getSerialNumber()); - } -} -catch (Exception e) -{ - throw new IllegalArgumentException("conversion failed: " + e.toString()); -} - } - - public KeyTransRecipientId getKeyTransRecipientId(X509CertSelector certSelector) - { -try -{ - if (certSelector.getSubjectKeyIdentifier() != null) - { - return new KeyTransRecipientId(X500Name.getInstance(certSelector.getIssuerAsBytes()), certSelector.getSerialNumber(), ASN1OctetString.getInstance(certSelector.getSubjectKeyIdentifier()).getOctets()); - } - else - { - return new KeyTransRecipientId(X500Name.getInstance(certSelector.getIssuerAsBytes()), certSelector.getSerialNumber()); - } -} -catch (Exception e) -{ - throw new IllegalArgumentException("conversion failed: " + e.toString()); -} - } -} diff --git a/extern/spongycastle/pkix/src/main/jdk1.3/org/spongycastle/cms/jcajce/JcaSignerId.java b/extern/spongycastle/pkix/src/main/jdk1.3/org/spongycastle/cms/jcajce/JcaSignerId.java deleted file mode 100644 index 99650cfb1..000000000 --- a/extern/spongycastle/pkix/src/main/jdk1.3/org/spongycastle/cms/jcajce/JcaSignerId.java +++ /dev/null @@ -1,36 +0,0 @@ -package org.spongycastle.cms.jcajce; - -import java.math.BigInteger; -import java.security.cert.X509Certificate; - -import org.spongycastle.asn1.x500.X500Name; -import org.spongycastle.cms.SignerId; -import org.spongycastle.jce.PrincipalUtil; -import org.spongycastle.jce.X509Principal; - -public class JcaSignerId - extends SignerId -{ - private static X509Principal getPrincipal(X509Certificate cert) - { - try - { - return PrincipalUtil.getIssuerX509Principal(cert); - } - catch (Exception e) - { - throw new IllegalArgumentException("unable to extract principle"); - } - } - - /** - * Construct a signer identifier based on the issuer, serial number and subject key identifier (if present) of the passed in - * certificate. - * - * @param certificate certificate providing the issue and serial number and subject key identifier. - */ - public JcaSignerId(X509Certificate certificate) - { - super(X500Name.getInstance(getPrincipal(certificate).getEncoded()), certificate.getSerialNumber(), CMSUtils.getSubjectKeyId(certificate)); - } -} diff --git a/extern/spongycastle/pkix/src/main/jdk1.3/org/spongycastle/cms/jcajce/JcaX509CertSelectorConverter.java b/extern/spongycastle/pkix/src/main/jdk1.3/org/spongycastle/cms/jcajce/JcaX509CertSelectorConverter.java deleted file mode 100644 index 594ed1d55..000000000 --- a/extern/spongycastle/pkix/src/main/jdk1.3/org/spongycastle/cms/jcajce/JcaX509CertSelectorConverter.java +++ /dev/null @@ -1,24 +0,0 @@ -package org.spongycastle.cms.jcajce; - -import org.spongycastle.jce.cert.X509CertSelector; - -import org.spongycastle.cms.KeyTransRecipientId; -import org.spongycastle.cms.SignerId; - -public class JcaX509CertSelectorConverter - extends org.spongycastle.cert.selector.jcajce.JcaX509CertSelectorConverter -{ - public JcaX509CertSelectorConverter() - { - } - - public X509CertSelector getCertSelector(KeyTransRecipientId recipientId) - { - return doConversion(recipientId.getIssuer(), recipientId.getSerialNumber(), recipientId.getSubjectKeyIdentifier()); - } - - public X509CertSelector getCertSelector(SignerId signerId) - { - return doConversion(signerId.getIssuer(), signerId.getSerialNumber(), signerId.getSubjectKeyIdentifier()); - } -} diff --git a/extern/spongycastle/pkix/src/main/jdk1.3/org/spongycastle/cms/jcajce/JceKeyAgreeRecipientId.java b/extern/spongycastle/pkix/src/main/jdk1.3/org/spongycastle/cms/jcajce/JceKeyAgreeRecipientId.java deleted file mode 100644 index 91875037e..000000000 --- a/extern/spongycastle/pkix/src/main/jdk1.3/org/spongycastle/cms/jcajce/JceKeyAgreeRecipientId.java +++ /dev/null @@ -1,32 +0,0 @@ -package org.spongycastle.cms.jcajce; - -import java.math.BigInteger; -import java.security.cert.CertificateEncodingException; -import java.security.cert.X509Certificate; - -import org.spongycastle.jce.PrincipalUtil; -import org.spongycastle.jce.X509Principal; - -import org.spongycastle.asn1.x500.X500Name; -import org.spongycastle.cms.KeyAgreeRecipientId; - -public class JceKeyAgreeRecipientId - extends KeyAgreeRecipientId -{ - public JceKeyAgreeRecipientId(X509Certificate certificate) - { - super(X500Name.getInstance(extractIssuer(certificate)), certificate.getSerialNumber()); - } - - private static X509Principal extractIssuer(X509Certificate certificate) - { - try - { - return PrincipalUtil.getIssuerX509Principal(certificate); - } - catch (CertificateEncodingException e) - { - throw new IllegalStateException("can't extract issuer"); - } - } -} diff --git a/extern/spongycastle/pkix/src/main/jdk1.3/org/spongycastle/cms/jcajce/JceKeyTransRecipientId.java b/extern/spongycastle/pkix/src/main/jdk1.3/org/spongycastle/cms/jcajce/JceKeyTransRecipientId.java deleted file mode 100644 index 5bac48b57..000000000 --- a/extern/spongycastle/pkix/src/main/jdk1.3/org/spongycastle/cms/jcajce/JceKeyTransRecipientId.java +++ /dev/null @@ -1,30 +0,0 @@ -package org.spongycastle.cms.jcajce; - -import java.security.cert.CertificateEncodingException; -import java.security.cert.X509Certificate; - -import org.spongycastle.asn1.x500.X500Name; -import org.spongycastle.cms.KeyTransRecipientId; -import org.spongycastle.jce.PrincipalUtil; -import org.spongycastle.jce.X509Principal; - -public class JceKeyTransRecipientId - extends KeyTransRecipientId -{ - public JceKeyTransRecipientId(X509Certificate certificate) - { - super(X500Name.getInstance(extractIssuer(certificate)), certificate.getSerialNumber(), CMSUtils.getSubjectKeyId(certificate)); - } - - private static X509Principal extractIssuer(X509Certificate certificate) - { - try - { - return PrincipalUtil.getIssuerX509Principal(certificate); - } - catch (CertificateEncodingException e) - { - throw new IllegalStateException("can't extract issuer"); - } - } -} diff --git a/extern/spongycastle/pkix/src/main/jdk1.3/org/spongycastle/eac/jcajce/ProviderEACHelper.java b/extern/spongycastle/pkix/src/main/jdk1.3/org/spongycastle/eac/jcajce/ProviderEACHelper.java deleted file mode 100644 index 4bc4dfa32..000000000 --- a/extern/spongycastle/pkix/src/main/jdk1.3/org/spongycastle/eac/jcajce/ProviderEACHelper.java +++ /dev/null @@ -1,23 +0,0 @@ -package org.spongycastle.eac.jcajce; - -import java.security.KeyFactory; -import java.security.NoSuchAlgorithmException; -import java.security.NoSuchProviderException; -import java.security.Provider; - -class ProviderEACHelper - implements EACHelper -{ - private final Provider provider; - - ProviderEACHelper(Provider provider) - { - this.provider = provider; - } - - public KeyFactory createKeyFactory(String type) - throws NoSuchAlgorithmException, NoSuchProviderException - { - return KeyFactory.getInstance(type, provider.getName()); - } -} diff --git a/extern/spongycastle/pkix/src/main/jdk1.3/org/spongycastle/eac/operator/jcajce/ProviderEACHelper.java b/extern/spongycastle/pkix/src/main/jdk1.3/org/spongycastle/eac/operator/jcajce/ProviderEACHelper.java deleted file mode 100644 index dcdd1e1c0..000000000 --- a/extern/spongycastle/pkix/src/main/jdk1.3/org/spongycastle/eac/operator/jcajce/ProviderEACHelper.java +++ /dev/null @@ -1,23 +0,0 @@ -package org.spongycastle.eac.operator.jcajce; - -import java.security.NoSuchAlgorithmException; -import java.security.NoSuchProviderException; -import java.security.Provider; -import java.security.Signature; - -class ProviderEACHelper - extends EACHelper -{ - private final Provider provider; - - ProviderEACHelper(Provider provider) - { - this.provider = provider; - } - - protected Signature createSignature(String type) - throws NoSuchAlgorithmException, NoSuchProviderException - { - return Signature.getInstance(type, provider.getName()); - } -} diff --git a/extern/spongycastle/pkix/src/main/jdk1.3/org/spongycastle/operator/jcajce/JcaAlgorithmParametersConverter.java b/extern/spongycastle/pkix/src/main/jdk1.3/org/spongycastle/operator/jcajce/JcaAlgorithmParametersConverter.java deleted file mode 100644 index a4de4911a..000000000 --- a/extern/spongycastle/pkix/src/main/jdk1.3/org/spongycastle/operator/jcajce/JcaAlgorithmParametersConverter.java +++ /dev/null @@ -1,44 +0,0 @@ -package org.spongycastle.operator.jcajce; - - -import java.io.IOException; -import java.security.AlgorithmParameters; -import java.security.InvalidAlgorithmParameterException; -import java.security.spec.AlgorithmParameterSpec; - -import org.spongycastle.asn1.ASN1Encodable; -import org.spongycastle.asn1.ASN1ObjectIdentifier; -import org.spongycastle.asn1.ASN1Primitive; -import org.spongycastle.asn1.DEROctetString; -import org.spongycastle.asn1.pkcs.PKCSObjectIdentifiers; -import org.spongycastle.asn1.pkcs.RSAESOAEPparams; -import org.spongycastle.asn1.x509.AlgorithmIdentifier; -import org.spongycastle.operator.DefaultDigestAlgorithmIdentifierFinder; - -public class JcaAlgorithmParametersConverter -{ - public JcaAlgorithmParametersConverter() - { - } - - public AlgorithmIdentifier getAlgorithmIdentifier(ASN1ObjectIdentifier algId, AlgorithmParameters parameters) - throws InvalidAlgorithmParameterException - { - try - { - ASN1Encodable params = ASN1Primitive.fromByteArray(parameters.getEncoded()); - - return new AlgorithmIdentifier(algId, params); - } - catch (IOException e) - { - throw new InvalidAlgorithmParameterException("unable to encode parameters object: " + e.getMessage()); - } - } - - public AlgorithmIdentifier getAlgorithmIdentifier(ASN1ObjectIdentifier algorithm, AlgorithmParameterSpec algorithmSpec) - throws InvalidAlgorithmParameterException - { - throw new InvalidAlgorithmParameterException("unknown parameter spec passed."); - } -} diff --git a/extern/spongycastle/pkix/src/main/jdk1.3/org/spongycastle/operator/jcajce/OperatorHelper.java b/extern/spongycastle/pkix/src/main/jdk1.3/org/spongycastle/operator/jcajce/OperatorHelper.java deleted file mode 100644 index 419f0939e..000000000 --- a/extern/spongycastle/pkix/src/main/jdk1.3/org/spongycastle/operator/jcajce/OperatorHelper.java +++ /dev/null @@ -1,470 +0,0 @@ -package org.spongycastle.operator.jcajce; - -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.security.AlgorithmParameters; -import java.security.GeneralSecurityException; -import java.security.KeyFactory; -import java.security.MessageDigest; -import java.security.NoSuchAlgorithmException; -import java.security.NoSuchProviderException; -import java.security.PublicKey; -import java.security.Signature; -import java.security.cert.CertificateException; -import java.security.cert.CertificateFactory; -import java.security.cert.X509Certificate; -import java.security.spec.InvalidKeySpecException; -//import java.security.spec.PSSParameterSpec; -import java.security.spec.X509EncodedKeySpec; -import java.util.HashMap; -import java.util.Map; - -import javax.crypto.Cipher; - -import org.spongycastle.asn1.ASN1Encodable; -import org.spongycastle.asn1.ASN1ObjectIdentifier; -import org.spongycastle.asn1.DERNull; -import org.spongycastle.asn1.cryptopro.CryptoProObjectIdentifiers; -import org.spongycastle.asn1.kisa.KISAObjectIdentifiers; -import org.spongycastle.asn1.nist.NISTObjectIdentifiers; -import org.spongycastle.asn1.ntt.NTTObjectIdentifiers; -import org.spongycastle.asn1.oiw.OIWObjectIdentifiers; -import org.spongycastle.asn1.pkcs.PKCSObjectIdentifiers; -import org.spongycastle.asn1.pkcs.RSASSAPSSparams; -import org.spongycastle.asn1.teletrust.TeleTrusTObjectIdentifiers; -import org.spongycastle.asn1.x509.AlgorithmIdentifier; -import org.spongycastle.asn1.x509.SubjectPublicKeyInfo; -import org.spongycastle.asn1.x9.X9ObjectIdentifiers; -import org.spongycastle.cert.X509CertificateHolder; -import org.spongycastle.jcajce.util.JcaJceHelper; -import org.spongycastle.operator.OperatorCreationException; - -class OperatorHelper -{ - private static final Map oids = new HashMap(); - private static final Map asymmetricWrapperAlgNames = new HashMap(); - private static final Map symmetricWrapperAlgNames = new HashMap(); - private static final Map symmetricKeyAlgNames = new HashMap(); - - static - { - // - // reverse mappings - // - oids.put(new ASN1ObjectIdentifier("1.2.840.113549.1.1.5"), "SHA1WITHRSA"); - oids.put(PKCSObjectIdentifiers.sha224WithRSAEncryption, "SHA224WITHRSA"); - oids.put(PKCSObjectIdentifiers.sha256WithRSAEncryption, "SHA256WITHRSA"); - oids.put(PKCSObjectIdentifiers.sha384WithRSAEncryption, "SHA384WITHRSA"); - oids.put(PKCSObjectIdentifiers.sha512WithRSAEncryption, "SHA512WITHRSA"); - oids.put(CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_94, "GOST3411WITHGOST3410"); - oids.put(CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_2001, "GOST3411WITHECGOST3410"); - - oids.put(new ASN1ObjectIdentifier("1.2.840.113549.1.1.4"), "MD5WITHRSA"); - oids.put(new ASN1ObjectIdentifier("1.2.840.113549.1.1.2"), "MD2WITHRSA"); - oids.put(new ASN1ObjectIdentifier("1.2.840.10040.4.3"), "SHA1WITHDSA"); - oids.put(X9ObjectIdentifiers.ecdsa_with_SHA1, "SHA1WITHECDSA"); - oids.put(X9ObjectIdentifiers.ecdsa_with_SHA224, "SHA224WITHECDSA"); - oids.put(X9ObjectIdentifiers.ecdsa_with_SHA256, "SHA256WITHECDSA"); - oids.put(X9ObjectIdentifiers.ecdsa_with_SHA384, "SHA384WITHECDSA"); - oids.put(X9ObjectIdentifiers.ecdsa_with_SHA512, "SHA512WITHECDSA"); - oids.put(OIWObjectIdentifiers.sha1WithRSA, "SHA1WITHRSA"); - oids.put(OIWObjectIdentifiers.dsaWithSHA1, "SHA1WITHDSA"); - oids.put(NISTObjectIdentifiers.dsa_with_sha224, "SHA224WITHDSA"); - oids.put(NISTObjectIdentifiers.dsa_with_sha256, "SHA256WITHDSA"); - - oids.put(OIWObjectIdentifiers.idSHA1, "SHA-1"); - oids.put(NISTObjectIdentifiers.id_sha224, "SHA-224"); - oids.put(NISTObjectIdentifiers.id_sha256, "SHA-256"); - oids.put(NISTObjectIdentifiers.id_sha384, "SHA-384"); - oids.put(NISTObjectIdentifiers.id_sha512, "SHA-512"); - oids.put(TeleTrusTObjectIdentifiers.ripemd128, "RIPEMD-128"); - oids.put(TeleTrusTObjectIdentifiers.ripemd160, "RIPEMD-160"); - oids.put(TeleTrusTObjectIdentifiers.ripemd256, "RIPEMD-256"); - - asymmetricWrapperAlgNames.put(PKCSObjectIdentifiers.rsaEncryption, "RSA/ECB/PKCS1Padding"); - - symmetricWrapperAlgNames.put(PKCSObjectIdentifiers.id_alg_CMS3DESwrap, "DESEDEWrap"); - symmetricWrapperAlgNames.put(PKCSObjectIdentifiers.id_alg_CMSRC2wrap, "RC2Wrap"); - symmetricWrapperAlgNames.put(NISTObjectIdentifiers.id_aes128_wrap, "AESWrap"); - symmetricWrapperAlgNames.put(NISTObjectIdentifiers.id_aes192_wrap, "AESWrap"); - symmetricWrapperAlgNames.put(NISTObjectIdentifiers.id_aes256_wrap, "AESWrap"); - symmetricWrapperAlgNames.put(NTTObjectIdentifiers.id_camellia128_wrap, "CamelliaWrap"); - symmetricWrapperAlgNames.put(NTTObjectIdentifiers.id_camellia192_wrap, "CamelliaWrap"); - symmetricWrapperAlgNames.put(NTTObjectIdentifiers.id_camellia256_wrap, "CamelliaWrap"); - symmetricWrapperAlgNames.put(KISAObjectIdentifiers.id_npki_app_cmsSeed_wrap, "SEEDWrap"); - symmetricWrapperAlgNames.put(PKCSObjectIdentifiers.des_EDE3_CBC, "DESede"); - - symmetricKeyAlgNames.put(NISTObjectIdentifiers.aes, "AES"); - symmetricKeyAlgNames.put(NISTObjectIdentifiers.id_aes128_CBC, "AES"); - symmetricKeyAlgNames.put(NISTObjectIdentifiers.id_aes192_CBC, "AES"); - symmetricKeyAlgNames.put(NISTObjectIdentifiers.id_aes256_CBC, "AES"); - symmetricKeyAlgNames.put(PKCSObjectIdentifiers.des_EDE3_CBC, "DESede"); - symmetricKeyAlgNames.put(PKCSObjectIdentifiers.RC2_CBC, "RC2"); - } - - private JcaJceHelper helper; - - OperatorHelper(JcaJceHelper helper) - { - this.helper = helper; - } - - Cipher createAsymmetricWrapper(ASN1ObjectIdentifier algorithm, Map extraAlgNames) - throws OperatorCreationException - { - try - { - String cipherName = null; - - if (!extraAlgNames.isEmpty()) - { - cipherName = (String)extraAlgNames.get(algorithm); - } - - if (cipherName == null) - { - cipherName = (String)asymmetricWrapperAlgNames.get(algorithm); - } - - if (cipherName != null) - { - try - { - // this is reversed as the Sun policy files now allow unlimited strength RSA - return helper.createCipher(cipherName); - } - catch (NoSuchAlgorithmException e) - { - // try alternate for RSA - if (cipherName.equals("RSA/ECB/PKCS1Padding")) - { - try - { - return helper.createCipher("RSA/NONE/PKCS1Padding"); - } - catch (NoSuchAlgorithmException ex) - { - // Ignore - } - } - // Ignore - } - } - - return helper.createCipher(algorithm.getId()); - } - catch (GeneralSecurityException e) - { - throw new OperatorCreationException("cannot create cipher: " + e.getMessage(), e); - } - } - - Cipher createSymmetricWrapper(ASN1ObjectIdentifier algorithm) - throws OperatorCreationException - { - try - { - String cipherName = (String)symmetricWrapperAlgNames.get(algorithm); - - if (cipherName != null) - { - try - { - // this is reversed as the Sun policy files now allow unlimited strength RSA - return helper.createCipher(cipherName); - } - catch (NoSuchAlgorithmException e) - { - // Ignore - } - } - return helper.createCipher(algorithm.getId()); - } - catch (GeneralSecurityException e) - { - throw new OperatorCreationException("cannot create cipher: " + e.getMessage(), e); - } - } - - AlgorithmParameters createAlgorithmParameters(AlgorithmIdentifier cipherAlgId) - throws OperatorCreationException - { - AlgorithmParameters parameters; - - if (cipherAlgId.getAlgorithm().equals(PKCSObjectIdentifiers.rsaEncryption)) - { - return null; - } - - try - { - parameters = helper.createAlgorithmParameters(cipherAlgId.getAlgorithm().getId()); - } - catch (NoSuchAlgorithmException e) - { - return null; // There's a good chance there aren't any! - } - catch (NoSuchProviderException e) - { - throw new OperatorCreationException("cannot create algorithm parameters: " + e.getMessage(), e); - } - - try - { - parameters.init(cipherAlgId.getParameters().toASN1Primitive().getEncoded()); - } - catch (IOException e) - { - throw new OperatorCreationException("cannot initialise algorithm parameters: " + e.getMessage(), e); - } - - return parameters; - } - - MessageDigest createDigest(AlgorithmIdentifier digAlgId) - throws GeneralSecurityException - { - MessageDigest dig; - - try - { - dig = helper.createDigest(getDigestAlgName(digAlgId.getAlgorithm())); - } - catch (NoSuchAlgorithmException e) - { - // - // try an alternate - // - if (oids.get(digAlgId.getAlgorithm()) != null) - { - String digestAlgorithm = (String)oids.get(digAlgId.getAlgorithm()); - - dig = helper.createDigest(digestAlgorithm); - } - else - { - throw e; - } - } - - return dig; - } - - Signature createSignature(AlgorithmIdentifier sigAlgId) - throws GeneralSecurityException - { - Signature sig; - - try - { - sig = helper.createSignature(getSignatureName(sigAlgId)); - } - catch (NoSuchAlgorithmException e) - { - // - // try an alternate - // - if (oids.get(sigAlgId.getAlgorithm()) != null) - { - String signatureAlgorithm = (String)oids.get(sigAlgId.getAlgorithm()); - - sig = helper.createSignature(signatureAlgorithm); - } - else - { - throw e; - } - } - - return sig; - } - - public Signature createRawSignature(AlgorithmIdentifier algorithm) - { - Signature sig; - - try - { - String algName = getSignatureName(algorithm); - - algName = "NONE" + algName.substring(algName.indexOf("WITH")); - - sig = helper.createSignature(algName); - - // RFC 4056 - // When the id-RSASSA-PSS algorithm identifier is used for a signature, - // the AlgorithmIdentifier parameters field MUST contain RSASSA-PSS-params. -/* - if (algorithm.getAlgorithm().equals(PKCSObjectIdentifiers.id_RSASSA_PSS)) - { - AlgorithmParameters params = helper.createAlgorithmParameters(algName); - - JcaJceUtils.loadParameters(params, algorithm.getParameters()); - - PSSParameterSpec spec = (PSSParameterSpec)params.getParameterSpec(PSSParameterSpec.class); - sig.setParameter(spec); - } -*/ - } - catch (Exception e) - { - return null; - } - - return sig; - } - - private static String getSignatureName( - AlgorithmIdentifier sigAlgId) - { - ASN1Encodable params = sigAlgId.getParameters(); - - if (params != null && !DERNull.INSTANCE.equals(params)) - { - if (sigAlgId.getAlgorithm().equals(PKCSObjectIdentifiers.id_RSASSA_PSS)) - { - RSASSAPSSparams rsaParams = RSASSAPSSparams.getInstance(params); - return getDigestAlgName(rsaParams.getHashAlgorithm().getAlgorithm()) + "WITHRSAANDMGF1"; - } - } - - if (oids.containsKey(sigAlgId.getAlgorithm())) - { - return (String)oids.get(sigAlgId.getAlgorithm()); - } - - return sigAlgId.getAlgorithm().getId(); - } - - private static String getDigestAlgName( - ASN1ObjectIdentifier digestAlgOID) - { - if (PKCSObjectIdentifiers.md5.equals(digestAlgOID)) - { - return "MD5"; - } - else if (OIWObjectIdentifiers.idSHA1.equals(digestAlgOID)) - { - return "SHA1"; - } - else if (NISTObjectIdentifiers.id_sha224.equals(digestAlgOID)) - { - return "SHA224"; - } - else if (NISTObjectIdentifiers.id_sha256.equals(digestAlgOID)) - { - return "SHA256"; - } - else if (NISTObjectIdentifiers.id_sha384.equals(digestAlgOID)) - { - return "SHA384"; - } - else if (NISTObjectIdentifiers.id_sha512.equals(digestAlgOID)) - { - return "SHA512"; - } - else if (TeleTrusTObjectIdentifiers.ripemd128.equals(digestAlgOID)) - { - return "RIPEMD128"; - } - else if (TeleTrusTObjectIdentifiers.ripemd160.equals(digestAlgOID)) - { - return "RIPEMD160"; - } - else if (TeleTrusTObjectIdentifiers.ripemd256.equals(digestAlgOID)) - { - return "RIPEMD256"; - } - else if (CryptoProObjectIdentifiers.gostR3411.equals(digestAlgOID)) - { - return "GOST3411"; - } - else - { - return digestAlgOID.getId(); - } - } - - public X509Certificate convertCertificate(X509CertificateHolder certHolder) - throws CertificateException - { - - try - { - CertificateFactory certFact = helper.createCertificateFactory("X.509"); - - return (X509Certificate)certFact.generateCertificate(new ByteArrayInputStream(certHolder.getEncoded())); - } - catch (IOException e) - { - throw new OpCertificateException("cannot get encoded form of certificate: " + e.getMessage(), e); - } - catch (NoSuchAlgorithmException e) - { - throw new OpCertificateException("cannot create certificate factory: " + e.getMessage(), e); - } - catch (NoSuchProviderException e) - { - throw new OpCertificateException("cannot find factory provider: " + e.getMessage(), e); - } - } - - public PublicKey convertPublicKey(SubjectPublicKeyInfo publicKeyInfo) - throws OperatorCreationException - { - try - { - KeyFactory keyFact = helper.createKeyFactory(publicKeyInfo.getAlgorithm().getAlgorithm().getId()); - - return keyFact.generatePublic(new X509EncodedKeySpec(publicKeyInfo.getEncoded())); - } - catch (IOException e) - { - throw new OperatorCreationException("cannot get encoded form of key: " + e.getMessage(), e); - } - catch (NoSuchAlgorithmException e) - { - throw new OperatorCreationException("cannot create key factory: " + e.getMessage(), e); - } - catch (NoSuchProviderException e) - { - throw new OperatorCreationException("cannot find factory provider: " + e.getMessage(), e); - } - catch (InvalidKeySpecException e) - { - throw new OperatorCreationException("cannot create key factory: " + e.getMessage(), e); - } - } - - // TODO: put somewhere public so cause easily accessed - private static class OpCertificateException - extends CertificateException - { - private Throwable cause; - - public OpCertificateException(String msg, Throwable cause) - { - super(msg); - - this.cause = cause; - } - - public Throwable getCause() - { - return cause; - } - } - - String getKeyAlgorithmName(ASN1ObjectIdentifier oid) - { - - String name = (String)symmetricKeyAlgNames.get(oid); - - if (name != null) - { - return name; - } - - return oid.getId(); - } -} diff --git a/extern/spongycastle/pkix/src/main/jdk1.3/org/spongycastle/pkcs/jcajce/JcaPKCS10CertificationRequestBuilder.java b/extern/spongycastle/pkix/src/main/jdk1.3/org/spongycastle/pkcs/jcajce/JcaPKCS10CertificationRequestBuilder.java deleted file mode 100644 index 2e0000e08..000000000 --- a/extern/spongycastle/pkix/src/main/jdk1.3/org/spongycastle/pkcs/jcajce/JcaPKCS10CertificationRequestBuilder.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.spongycastle.pkcs.jcajce; - -import java.security.PublicKey; - -import org.spongycastle.asn1.x500.X500Name; -import org.spongycastle.asn1.x509.SubjectPublicKeyInfo; -import org.spongycastle.pkcs.PKCS10CertificationRequestBuilder; - -/** - * Extension of the PKCS#10 builder to support PublicKey and X500Principal objects. - */ -public class JcaPKCS10CertificationRequestBuilder - extends PKCS10CertificationRequestBuilder -{ - /** - * Create a PKCS#10 builder for the passed in subject and JCA public key. - * - * @param subject an X500Name containing the subject associated with the request we are building. - * @param publicKey a JCA public key that is to be associated with the request we are building. - */ - public JcaPKCS10CertificationRequestBuilder(X500Name subject, PublicKey publicKey) - { - super(subject, SubjectPublicKeyInfo.getInstance(publicKey.getEncoded())); - } -} diff --git a/extern/spongycastle/pkix/src/main/jdk1.3/org/spongycastle/tsp/cms/CMSTimeStampedData.java b/extern/spongycastle/pkix/src/main/jdk1.3/org/spongycastle/tsp/cms/CMSTimeStampedData.java deleted file mode 100644 index 0b5cb6fda..000000000 --- a/extern/spongycastle/pkix/src/main/jdk1.3/org/spongycastle/tsp/cms/CMSTimeStampedData.java +++ /dev/null @@ -1,204 +0,0 @@ -package org.spongycastle.tsp.cms; - -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.net.URL; -import java.net.MalformedURLException; - -import org.spongycastle.asn1.ASN1InputStream; -import org.spongycastle.asn1.DERIA5String; -import org.spongycastle.asn1.cms.AttributeTable; -import org.spongycastle.asn1.cms.CMSObjectIdentifiers; -import org.spongycastle.asn1.cms.ContentInfo; -import org.spongycastle.asn1.cms.Evidence; -import org.spongycastle.asn1.cms.TimeStampAndCRL; -import org.spongycastle.asn1.cms.TimeStampTokenEvidence; -import org.spongycastle.asn1.cms.TimeStampedData; -import org.spongycastle.cms.CMSException; -import org.spongycastle.operator.DigestCalculator; -import org.spongycastle.operator.DigestCalculatorProvider; -import org.spongycastle.operator.OperatorCreationException; -import org.spongycastle.tsp.TimeStampToken; - -public class CMSTimeStampedData -{ - private TimeStampedData timeStampedData; - private ContentInfo contentInfo; - private TimeStampDataUtil util; - - public CMSTimeStampedData(ContentInfo contentInfo) - { - this.initialize(contentInfo); - } - - public CMSTimeStampedData(InputStream in) - throws IOException - { - try - { - initialize(ContentInfo.getInstance(new ASN1InputStream(in).readObject())); - } - catch (ClassCastException e) - { - throw new IOException("Malformed content: " + e); - } - catch (IllegalArgumentException e) - { - throw new IOException("Malformed content: " + e); - } - } - - public CMSTimeStampedData(byte[] baseData) - throws IOException - { - this(new ByteArrayInputStream(baseData)); - } - - private void initialize(ContentInfo contentInfo) - { - this.contentInfo = contentInfo; - - if (CMSObjectIdentifiers.timestampedData.equals(contentInfo.getContentType())) - { - this.timeStampedData = TimeStampedData.getInstance(contentInfo.getContent()); - } - else - { - throw new IllegalArgumentException("Malformed content - type must be " + CMSObjectIdentifiers.timestampedData.getId()); - } - - util = new TimeStampDataUtil(this.timeStampedData); - } - - public byte[] calculateNextHash(DigestCalculator calculator) - throws CMSException - { - return util.calculateNextHash(calculator); - } - - /** - * Return a new timeStampedData object with the additional token attached. - * - * @throws CMSException - */ - public CMSTimeStampedData addTimeStamp(TimeStampToken token) - throws CMSException - { - TimeStampAndCRL[] timeStamps = util.getTimeStamps(); - TimeStampAndCRL[] newTimeStamps = new TimeStampAndCRL[timeStamps.length + 1]; - - System.arraycopy(timeStamps, 0, newTimeStamps, 0, timeStamps.length); - - newTimeStamps[timeStamps.length] = new TimeStampAndCRL(token.toCMSSignedData().toASN1Structure()); - - return new CMSTimeStampedData(new ContentInfo(CMSObjectIdentifiers.timestampedData, new TimeStampedData(timeStampedData.getDataUri(), timeStampedData.getMetaData(), timeStampedData.getContent(), new Evidence(new TimeStampTokenEvidence(newTimeStamps))))); - } - - public byte[] getContent() - { - if (timeStampedData.getContent() != null) - { - return timeStampedData.getContent().getOctets(); - } - - return null; - } - - public URL getDataUri() - throws MalformedURLException - { - DERIA5String dataURI = this.timeStampedData.getDataUri(); - - if (dataURI != null) - { - return new URL(dataURI.getString()); - } - - return null; - } - - public String getFileName() - { - return util.getFileName(); - } - - public String getMediaType() - { - return util.getMediaType(); - } - - public AttributeTable getOtherMetaData() - { - return util.getOtherMetaData(); - } - - public TimeStampToken[] getTimeStampTokens() - throws CMSException - { - return util.getTimeStampTokens(); - } - - /** - * Initialise the passed in calculator with the MetaData for this message, if it is - * required as part of the initial message imprint calculation. - * - * @param calculator the digest calculator to be initialised. - * @throws CMSException if the MetaData is required and cannot be processed - */ - public void initialiseMessageImprintDigestCalculator(DigestCalculator calculator) - throws CMSException - { - util.initialiseMessageImprintDigestCalculator(calculator); - } - - /** - * Returns an appropriately initialised digest calculator based on the message imprint algorithm - * described in the first time stamp in the TemporalData for this message. If the metadata is required - * to be included in the digest calculation, the returned calculator will be pre-initialised. - * - * @param calculatorProvider a provider of DigestCalculator objects. - * @return an initialised digest calculator. - * @throws OperatorCreationException if the provider is unable to create the calculator. - */ - public DigestCalculator getMessageImprintDigestCalculator(DigestCalculatorProvider calculatorProvider) - throws OperatorCreationException - { - return util.getMessageImprintDigestCalculator(calculatorProvider); - } - - /** - * Validate the digests present in the TimeStampTokens contained in the CMSTimeStampedData. - * - * @param calculatorProvider provider for digest calculators - * @param dataDigest the calculated data digest for the message - * @throws ImprintDigestInvalidException if an imprint digest fails to compare - * @throws CMSException if an exception occurs processing the message. - */ - public void validate(DigestCalculatorProvider calculatorProvider, byte[] dataDigest) - throws ImprintDigestInvalidException, CMSException - { - util.validate(calculatorProvider, dataDigest); - } - - /** - * Validate the passed in timestamp token against the tokens and data present in the message. - * - * @param calculatorProvider provider for digest calculators - * @param dataDigest the calculated data digest for the message. - * @param timeStampToken the timestamp token of interest. - * @throws ImprintDigestInvalidException if the token is not present in the message, or an imprint digest fails to compare. - * @throws CMSException if an exception occurs processing the message. - */ - public void validate(DigestCalculatorProvider calculatorProvider, byte[] dataDigest, TimeStampToken timeStampToken) - throws ImprintDigestInvalidException, CMSException - { - util.validate(calculatorProvider, dataDigest, timeStampToken); - } - - public byte[] getEncoded() - throws IOException - { - return contentInfo.getEncoded(); - } -} diff --git a/extern/spongycastle/pkix/src/main/jdk1.3/org/spongycastle/tsp/cms/CMSTimeStampedDataParser.java b/extern/spongycastle/pkix/src/main/jdk1.3/org/spongycastle/tsp/cms/CMSTimeStampedDataParser.java deleted file mode 100644 index 2b1a695fa..000000000 --- a/extern/spongycastle/pkix/src/main/jdk1.3/org/spongycastle/tsp/cms/CMSTimeStampedDataParser.java +++ /dev/null @@ -1,207 +0,0 @@ -package org.spongycastle.tsp.cms; - -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.net.URL; - -import org.spongycastle.asn1.BERTags; -import org.spongycastle.asn1.DERIA5String; -import org.spongycastle.asn1.cms.AttributeTable; -import org.spongycastle.asn1.cms.CMSObjectIdentifiers; -import org.spongycastle.asn1.cms.ContentInfoParser; -import org.spongycastle.asn1.cms.TimeStampedDataParser; -import org.spongycastle.cms.CMSContentInfoParser; -import org.spongycastle.cms.CMSException; -import org.spongycastle.operator.DigestCalculator; -import org.spongycastle.operator.DigestCalculatorProvider; -import org.spongycastle.operator.OperatorCreationException; -import org.spongycastle.tsp.TimeStampToken; -import org.spongycastle.util.io.Streams; - -public class CMSTimeStampedDataParser - extends CMSContentInfoParser -{ - private TimeStampedDataParser timeStampedData; - private TimeStampDataUtil util; - - public CMSTimeStampedDataParser(InputStream in) - throws CMSException - { - super(in); - - initialize(_contentInfo); - } - - public CMSTimeStampedDataParser(byte[] baseData) - throws CMSException - { - this(new ByteArrayInputStream(baseData)); - } - - private void initialize(ContentInfoParser contentInfo) - throws CMSException - { - try - { - if (CMSObjectIdentifiers.timestampedData.equals(contentInfo.getContentType())) - { - this.timeStampedData = TimeStampedDataParser.getInstance(contentInfo.getContent(BERTags.SEQUENCE)); - } - else - { - throw new IllegalArgumentException("Malformed content - type must be " + CMSObjectIdentifiers.timestampedData.getId()); - } - } - catch (IOException e) - { - throw new CMSException("parsing exception: " + e.getMessage(), e); - } - } - - public byte[] calculateNextHash(DigestCalculator calculator) - throws CMSException - { - return util.calculateNextHash(calculator); - } - - public InputStream getContent() - { - if (timeStampedData.getContent() != null) - { - return timeStampedData.getContent().getOctetStream(); - } - - return null; - } - - public URL getDataUri() - throws MalformedURLException - { - DERIA5String dataURI = this.timeStampedData.getDataUri(); - - if (dataURI != null) - { - return new URL(dataURI.getString()); - } - - return null; - } - - /** - * Initialise the passed in calculator with the MetaData for this message, if it is - * required as part of the initial message imprint calculation. - * - * @param calculator the digest calculator to be initialised. - * @throws CMSException if the MetaData is required and cannot be processed - */ - public void initialiseMessageImprintDigestCalculator(DigestCalculator calculator) - throws CMSException - { - util.initialiseMessageImprintDigestCalculator(calculator); - } - - /** - * Returns an appropriately initialised digest calculator based on the message imprint algorithm - * described in the first time stamp in the TemporalData for this message. If the metadata is required - * to be included in the digest calculation, the returned calculator will be pre-initialised. - * - * @param calculatorProvider a provider of DigestCalculator objects. - * @return an initialised digest calculator. - * @throws OperatorCreationException if the provider is unable to create the calculator. - */ - public DigestCalculator getMessageImprintDigestCalculator(DigestCalculatorProvider calculatorProvider) - throws OperatorCreationException - { - try - { - parseTimeStamps(); - } - catch (CMSException e) - { - throw new OperatorCreationException("unable to extract algorithm ID: " + e.getMessage(), e); - } - - return util.getMessageImprintDigestCalculator(calculatorProvider); - } - - public String getFileName() - { - return util.getFileName(); - } - - public String getMediaType() - { - return util.getMediaType(); - } - - public AttributeTable getOtherMetaData() - { - return util.getOtherMetaData(); - } - - public TimeStampToken[] getTimeStampTokens() - throws CMSException - { - parseTimeStamps(); - - return util.getTimeStampTokens(); - } - - /** - * Validate the digests present in the TimeStampTokens contained in the CMSTimeStampedData. - * - * @param calculatorProvider provider for digest calculators - * @param dataDigest the calculated data digest for the message - * @throws ImprintDigestInvalidException if an imprint digest fails to compare - * @throws CMSException if an exception occurs processing the message. - */ - public void validate(DigestCalculatorProvider calculatorProvider, byte[] dataDigest) - throws ImprintDigestInvalidException, CMSException - { - parseTimeStamps(); - - util.validate(calculatorProvider, dataDigest); - } - - /** - * Validate the passed in timestamp token against the tokens and data present in the message. - * - * @param calculatorProvider provider for digest calculators - * @param dataDigest the calculated data digest for the message. - * @param timeStampToken the timestamp token of interest. - * @throws ImprintDigestInvalidException if the token is not present in the message, or an imprint digest fails to compare. - * @throws CMSException if an exception occurs processing the message. - */ - public void validate(DigestCalculatorProvider calculatorProvider, byte[] dataDigest, TimeStampToken timeStampToken) - throws ImprintDigestInvalidException, CMSException - { - parseTimeStamps(); - - util.validate(calculatorProvider, dataDigest, timeStampToken); - } - - private void parseTimeStamps() - throws CMSException - { - try - { - if (util == null) - { - InputStream cont = this.getContent(); - - if (cont != null) - { - Streams.drain(cont); - } - - util = new TimeStampDataUtil(timeStampedData); - } - } - catch (IOException e) - { - throw new CMSException("unable to parse evidence block: " + e.getMessage(), e); - } - } -} diff --git a/extern/spongycastle/pkix/src/main/jdk1.3/org/spongycastle/tsp/cms/CMSTimeStampedGenerator.java b/extern/spongycastle/pkix/src/main/jdk1.3/org/spongycastle/tsp/cms/CMSTimeStampedGenerator.java deleted file mode 100644 index 614a744b4..000000000 --- a/extern/spongycastle/pkix/src/main/jdk1.3/org/spongycastle/tsp/cms/CMSTimeStampedGenerator.java +++ /dev/null @@ -1,90 +0,0 @@ -package org.spongycastle.tsp.cms; - -import java.net.URL; - -import org.spongycastle.asn1.ASN1Boolean; -import org.spongycastle.asn1.DERBoolean; -import org.spongycastle.asn1.DERIA5String; -import org.spongycastle.asn1.DERUTF8String; -import org.spongycastle.asn1.cms.Attributes; -import org.spongycastle.asn1.cms.MetaData; -import org.spongycastle.cms.CMSException; -import org.spongycastle.operator.DigestCalculator; -import org.spongycastle.util.Integers; - -public class CMSTimeStampedGenerator -{ - protected MetaData metaData; - protected URL dataUri; - - /** - * Set the dataURL to be included in message. - * - * @param dataUri URL for the data the initial message imprint digest is based on. - */ - public void setDataUri(URL dataUri) - { - this.dataUri = dataUri; - } - - /** - * Set the MetaData for the generated message. - * - * @param hashProtected true if the MetaData should be included in first imprint calculation, false otherwise. - * @param fileName optional file name, may be null. - * @param mediaType optional media type, may be null. - */ - public void setMetaData(boolean hashProtected, String fileName, String mediaType) - { - setMetaData(hashProtected, fileName, mediaType, null); - } - - /** - * Set the MetaData for the generated message. - * - * @param hashProtected true if the MetaData should be included in first imprint calculation, false otherwise. - * @param fileName optional file name, may be null. - * @param mediaType optional media type, may be null. - * @param attributes optional attributes, may be null. - */ - public void setMetaData(boolean hashProtected, String fileName, String mediaType, Attributes attributes) - { - DERUTF8String asn1FileName = null; - - if (fileName != null) - { - asn1FileName = new DERUTF8String(fileName); - } - - DERIA5String asn1MediaType = null; - - if (mediaType != null) - { - asn1MediaType = new DERIA5String(mediaType); - } - - setMetaData(hashProtected, asn1FileName, asn1MediaType, attributes); - } - - private void setMetaData(boolean hashProtected, DERUTF8String fileName, DERIA5String mediaType, Attributes attributes) - { - this.metaData = new MetaData(ASN1Boolean.getInstance(hashProtected), fileName, mediaType, attributes); - } - - /** - * Initialise the passed in calculator with the MetaData for this message, if it is - * required as part of the initial message imprint calculation. After initialisation the - * calculator can then be used to calculate the initial message imprint digest for the first - * timestamp. - * - * @param calculator the digest calculator to be initialised. - * @throws CMSException if the MetaData is required and cannot be processed - */ - public void initialiseMessageImprintDigestCalculator(DigestCalculator calculator) - throws CMSException - { - MetaDataUtil util = new MetaDataUtil(metaData); - - util.initialiseMessageImprintDigestCalculator(calculator); - } -} diff --git a/extern/spongycastle/pkix/src/main/jdk1.4/org/spongycastle/cms/jcajce/JceKeyAgreeRecipientInfoGenerator.java b/extern/spongycastle/pkix/src/main/jdk1.4/org/spongycastle/cms/jcajce/JceKeyAgreeRecipientInfoGenerator.java deleted file mode 100644 index d808d5075..000000000 --- a/extern/spongycastle/pkix/src/main/jdk1.4/org/spongycastle/cms/jcajce/JceKeyAgreeRecipientInfoGenerator.java +++ /dev/null @@ -1,215 +0,0 @@ -package org.spongycastle.cms.jcajce; - -import java.security.GeneralSecurityException; -import java.security.InvalidAlgorithmParameterException; -import java.security.KeyPair; -import java.security.KeyPairGenerator; -import java.security.PrivateKey; -import java.security.Provider; -import java.security.PublicKey; -import java.security.SecureRandom; -import java.security.cert.CertificateEncodingException; -import java.security.cert.X509Certificate; -import java.util.ArrayList; -import java.util.List; - -import javax.crypto.Cipher; -import javax.crypto.KeyAgreement; -import javax.crypto.SecretKey; - -import org.spongycastle.asn1.ASN1Encodable; -import org.spongycastle.asn1.ASN1EncodableVector; -import org.spongycastle.asn1.ASN1ObjectIdentifier; -import org.spongycastle.asn1.ASN1OctetString; -import org.spongycastle.asn1.ASN1Sequence; -import org.spongycastle.asn1.DEROctetString; -import org.spongycastle.asn1.DERSequence; -import org.spongycastle.asn1.cms.KeyAgreeRecipientIdentifier; -import org.spongycastle.asn1.cms.RecipientEncryptedKey; -import org.spongycastle.asn1.cms.RecipientKeyIdentifier; -import org.spongycastle.asn1.cms.ecc.MQVuserKeyingMaterial; -import org.spongycastle.asn1.x509.AlgorithmIdentifier; -import org.spongycastle.asn1.x509.SubjectPublicKeyInfo; -import org.spongycastle.cms.CMSAlgorithm; -import org.spongycastle.cms.CMSEnvelopedGenerator; -import org.spongycastle.cms.CMSException; -import org.spongycastle.cms.KeyAgreeRecipientInfoGenerator; -import org.spongycastle.jce.interfaces.ECPublicKey; -import org.spongycastle.jce.spec.ECParameterSpec; -import org.spongycastle.jce.spec.MQVPrivateKeySpec; -import org.spongycastle.jce.spec.MQVPublicKeySpec; -import org.spongycastle.operator.GenericKey; - -public class JceKeyAgreeRecipientInfoGenerator - extends KeyAgreeRecipientInfoGenerator -{ - private List recipientIDs = new ArrayList(); - private List recipientKeys = new ArrayList(); - private PublicKey senderPublicKey; - private PrivateKey senderPrivateKey; - - private EnvelopedDataHelper helper = new EnvelopedDataHelper(new DefaultJcaJceExtHelper()); - private SecureRandom random; - private KeyPair ephemeralKP; - - public JceKeyAgreeRecipientInfoGenerator(ASN1ObjectIdentifier keyAgreementOID, PrivateKey senderPrivateKey, PublicKey senderPublicKey, ASN1ObjectIdentifier keyEncryptionOID) - { - super(keyAgreementOID, SubjectPublicKeyInfo.getInstance(senderPublicKey.getEncoded()), keyEncryptionOID); - - this.senderPublicKey = senderPublicKey; - this.senderPrivateKey = senderPrivateKey; - } - - public JceKeyAgreeRecipientInfoGenerator setProvider(Provider provider) - { - this.helper = new EnvelopedDataHelper(new ProviderJcaJceExtHelper(provider)); - - return this; - } - - public JceKeyAgreeRecipientInfoGenerator setProvider(String providerName) - { - this.helper = new EnvelopedDataHelper(new NamedJcaJceExtHelper(providerName)); - - return this; - } - - public JceKeyAgreeRecipientInfoGenerator setSecureRandom(SecureRandom random) - { - this.random = random; - - return this; - } - - /** - * Add a recipient based on the passed in certificate's public key and its issuer and serial number. - * - * @param recipientCert recipient's certificate - * @return the current instance. - * @throws CertificateEncodingException if the necessary data cannot be extracted from the certificate. - */ - public JceKeyAgreeRecipientInfoGenerator addRecipient(X509Certificate recipientCert) - throws CertificateEncodingException - { - recipientIDs.add(new KeyAgreeRecipientIdentifier(CMSUtils.getIssuerAndSerialNumber(recipientCert))); - recipientKeys.add(recipientCert.getPublicKey()); - - return this; - } - - /** - * Add a recipient identified by the passed in subjectKeyID and the for the passed in public key. - * - * @param subjectKeyID identifier actual recipient will use to match the private key. - * @param publicKey the public key for encrypting the secret key. - * @return the current instance. - * @throws CertificateEncodingException - */ - public JceKeyAgreeRecipientInfoGenerator addRecipient(byte[] subjectKeyID, PublicKey publicKey) - throws CertificateEncodingException - { - recipientIDs.add(new KeyAgreeRecipientIdentifier(new RecipientKeyIdentifier(subjectKeyID))); - recipientKeys.add(publicKey); - - return this; - } - - public ASN1Sequence generateRecipientEncryptedKeys(AlgorithmIdentifier keyAgreeAlgorithm, AlgorithmIdentifier keyEncryptionAlgorithm, GenericKey contentEncryptionKey) - throws CMSException - { - init(keyAgreeAlgorithm.getAlgorithm()); - - PrivateKey senderPrivateKey = this.senderPrivateKey; - - ASN1ObjectIdentifier keyAgreementOID = keyAgreeAlgorithm.getAlgorithm(); - - if (keyAgreementOID.getId().equals(CMSEnvelopedGenerator.ECMQV_SHA1KDF)) - { - senderPrivateKey = new MQVPrivateKeySpec( - senderPrivateKey, ephemeralKP.getPrivate(), ephemeralKP.getPublic()); - } - - ASN1EncodableVector recipientEncryptedKeys = new ASN1EncodableVector(); - for (int i = 0; i != recipientIDs.size(); i++) - { - PublicKey recipientPublicKey = (PublicKey)recipientKeys.get(i); - KeyAgreeRecipientIdentifier karId = (KeyAgreeRecipientIdentifier)recipientIDs.get(i); - - if (keyAgreementOID.getId().equals(CMSEnvelopedGenerator.ECMQV_SHA1KDF)) - { - recipientPublicKey = new MQVPublicKeySpec(recipientPublicKey, recipientPublicKey); - } - - try - { - // Use key agreement to choose a wrap key for this recipient - KeyAgreement keyAgreement = helper.createKeyAgreement(keyAgreementOID); - keyAgreement.init(senderPrivateKey, random); - keyAgreement.doPhase(recipientPublicKey, true); - SecretKey keyEncryptionKey = keyAgreement.generateSecret(keyEncryptionAlgorithm.getAlgorithm().getId()); - - // Wrap the content encryption key with the agreement key - Cipher keyEncryptionCipher = helper.createCipher(keyEncryptionAlgorithm.getAlgorithm()); - - keyEncryptionCipher.init(Cipher.WRAP_MODE, keyEncryptionKey, random); - - byte[] encryptedKeyBytes = keyEncryptionCipher.wrap(helper.getJceKey(contentEncryptionKey)); - - ASN1OctetString encryptedKey = new DEROctetString(encryptedKeyBytes); - - recipientEncryptedKeys.add(new RecipientEncryptedKey(karId, encryptedKey)); - } - catch (GeneralSecurityException e) - { - throw new CMSException("cannot perform agreement step: " + e.getMessage(), e); - } - } - - return new DERSequence(recipientEncryptedKeys); - } - - protected ASN1Encodable getUserKeyingMaterial(AlgorithmIdentifier keyAgreeAlg) - throws CMSException - { - init(keyAgreeAlg.getAlgorithm()); - - if (ephemeralKP != null) - { - return new MQVuserKeyingMaterial( - createOriginatorPublicKey(SubjectPublicKeyInfo.getInstance(ephemeralKP.getPublic().getEncoded())), null); - } - - return null; - } - - private void init(ASN1ObjectIdentifier keyAgreementOID) - throws CMSException - { - if (random == null) - { - random = new SecureRandom(); - } - - if (keyAgreementOID.equals(CMSAlgorithm.ECMQV_SHA1KDF)) - { - if (ephemeralKP == null) - { - try - { - ECParameterSpec ecParamSpec = ((ECPublicKey)senderPublicKey).getParams(); - - KeyPairGenerator ephemKPG = helper.createKeyPairGenerator(keyAgreementOID); - - ephemKPG.initialize(ecParamSpec, random); - - ephemeralKP = ephemKPG.generateKeyPair(); - } - catch (InvalidAlgorithmParameterException e) - { - throw new CMSException( - "cannot determine MQV ephemeral key pair parameters from public key: " + e); - } - } - } - } -} diff --git a/extern/spongycastle/pkix/src/main/jdk1.4/org/spongycastle/eac/jcajce/JcaPublicKeyConverter.java b/extern/spongycastle/pkix/src/main/jdk1.4/org/spongycastle/eac/jcajce/JcaPublicKeyConverter.java deleted file mode 100644 index 9c1801ec8..000000000 --- a/extern/spongycastle/pkix/src/main/jdk1.4/org/spongycastle/eac/jcajce/JcaPublicKeyConverter.java +++ /dev/null @@ -1,141 +0,0 @@ -package org.spongycastle.eac.jcajce; - -import java.math.BigInteger; -import java.security.KeyFactory; -import java.security.NoSuchAlgorithmException; -import java.security.NoSuchProviderException; -import java.security.Provider; -import java.security.PublicKey; -import java.security.spec.InvalidKeySpecException; -import java.security.spec.RSAPublicKeySpec; - -import org.spongycastle.asn1.ASN1ObjectIdentifier; -import org.spongycastle.asn1.eac.EACObjectIdentifiers; -import org.spongycastle.asn1.eac.ECDSAPublicKey; -import org.spongycastle.asn1.eac.PublicKeyDataObject; -import org.spongycastle.asn1.eac.RSAPublicKey; -import org.spongycastle.eac.EACException; -import org.spongycastle.jce.interfaces.ECPublicKey; -import org.spongycastle.jce.spec.ECParameterSpec; -import org.spongycastle.jce.spec.ECPublicKeySpec; -import org.spongycastle.math.ec.ECCurve; -import org.spongycastle.math.ec.ECFieldElement; -import org.spongycastle.math.ec.ECPoint; - -public class JcaPublicKeyConverter -{ - private EACHelper helper = new DefaultEACHelper(); - - public JcaPublicKeyConverter setProvider(String providerName) - { - this.helper = new NamedEACHelper(providerName); - - return this; - } - - public JcaPublicKeyConverter setProvider(Provider provider) - { - this.helper = new ProviderEACHelper(provider); - - return this; - } - - public PublicKey getKey(PublicKeyDataObject publicKeyDataObject) - throws EACException, InvalidKeySpecException - { - if (publicKeyDataObject.getUsage().on(EACObjectIdentifiers.id_TA_ECDSA)) - { - return getECPublicKeyPublicKey((ECDSAPublicKey)publicKeyDataObject); - } - else - { - RSAPublicKey pubKey = (RSAPublicKey)publicKeyDataObject; - RSAPublicKeySpec pubKeySpec = new RSAPublicKeySpec(pubKey.getModulus(), pubKey.getPublicExponent()); - - try - { - KeyFactory factk = helper.createKeyFactory("RSA"); - - return factk.generatePublic(pubKeySpec); - } - catch (NoSuchProviderException e) - { - throw new EACException("cannot find provider: " + e.getMessage(), e); - } - catch (NoSuchAlgorithmException e) - { - throw new EACException("cannot find algorithm ECDSA: " + e.getMessage(), e); - } - } - } - - private PublicKey getECPublicKeyPublicKey(ECDSAPublicKey key) - throws EACException, InvalidKeySpecException - { - ECParameterSpec spec = getParams(key); - ECCurve curve = spec.getCurve(); - - ECPoint point = curve.decodePoint(key.getPublicPointY()); - ECPublicKeySpec pubKeySpec = new ECPublicKeySpec(point, spec); - - KeyFactory factk; - try - { - factk = helper.createKeyFactory("ECDSA"); - } - catch (NoSuchProviderException e) - { - throw new EACException("cannot find provider: " + e.getMessage(), e); - } - catch (NoSuchAlgorithmException e) - { - throw new EACException("cannot find algorithm ECDSA: " + e.getMessage(), e); - } - - return factk.generatePublic(pubKeySpec); - } - - private ECParameterSpec getParams(ECDSAPublicKey key) - { - if (!key.hasParameters()) - { - throw new IllegalArgumentException("Public key does not contains EC Params"); - } - - BigInteger p = key.getPrimeModulusP(); - ECCurve.Fp curve = new ECCurve.Fp(p, key.getFirstCoefA(), key.getSecondCoefB()); - - ECPoint G = curve.decodePoint(key.getBasePointG()); - - BigInteger order = key.getOrderOfBasePointR(); - BigInteger coFactor = key.getCofactorF(); - - ECParameterSpec ecspec = new ECParameterSpec(curve, G, order, coFactor); - - return ecspec; - } - - public PublicKeyDataObject getPublicKeyDataObject(ASN1ObjectIdentifier usage, PublicKey publicKey) - { - if (publicKey instanceof java.security.interfaces.RSAPublicKey) - { - java.security.interfaces.RSAPublicKey pubKey = (java.security.interfaces.RSAPublicKey)publicKey; - - return new RSAPublicKey(usage, pubKey.getModulus(), pubKey.getPublicExponent()); - } - else - { - ECPublicKey pubKey = (ECPublicKey)publicKey; - ECParameterSpec params = pubKey.getParameters(); - - return new ECDSAPublicKey( - usage, - ((ECCurve.Fp)params.getCurve()).getQ(), - ((ECFieldElement.Fp)params.getCurve().getA()).toBigInteger(), ((ECFieldElement.Fp)params.getCurve().getB()).toBigInteger(), - params.getG().getEncoded(), - params.getN(), - pubKey.getQ().getEncoded(), - params.getH().intValue()); - } - } -} diff --git a/extern/spongycastle/pkix/src/main/jdk1.4/org/spongycastle/operator/jcajce/JcaAlgorithmParametersConverter.java b/extern/spongycastle/pkix/src/main/jdk1.4/org/spongycastle/operator/jcajce/JcaAlgorithmParametersConverter.java deleted file mode 100644 index a4de4911a..000000000 --- a/extern/spongycastle/pkix/src/main/jdk1.4/org/spongycastle/operator/jcajce/JcaAlgorithmParametersConverter.java +++ /dev/null @@ -1,44 +0,0 @@ -package org.spongycastle.operator.jcajce; - - -import java.io.IOException; -import java.security.AlgorithmParameters; -import java.security.InvalidAlgorithmParameterException; -import java.security.spec.AlgorithmParameterSpec; - -import org.spongycastle.asn1.ASN1Encodable; -import org.spongycastle.asn1.ASN1ObjectIdentifier; -import org.spongycastle.asn1.ASN1Primitive; -import org.spongycastle.asn1.DEROctetString; -import org.spongycastle.asn1.pkcs.PKCSObjectIdentifiers; -import org.spongycastle.asn1.pkcs.RSAESOAEPparams; -import org.spongycastle.asn1.x509.AlgorithmIdentifier; -import org.spongycastle.operator.DefaultDigestAlgorithmIdentifierFinder; - -public class JcaAlgorithmParametersConverter -{ - public JcaAlgorithmParametersConverter() - { - } - - public AlgorithmIdentifier getAlgorithmIdentifier(ASN1ObjectIdentifier algId, AlgorithmParameters parameters) - throws InvalidAlgorithmParameterException - { - try - { - ASN1Encodable params = ASN1Primitive.fromByteArray(parameters.getEncoded()); - - return new AlgorithmIdentifier(algId, params); - } - catch (IOException e) - { - throw new InvalidAlgorithmParameterException("unable to encode parameters object: " + e.getMessage()); - } - } - - public AlgorithmIdentifier getAlgorithmIdentifier(ASN1ObjectIdentifier algorithm, AlgorithmParameterSpec algorithmSpec) - throws InvalidAlgorithmParameterException - { - throw new InvalidAlgorithmParameterException("unknown parameter spec passed."); - } -} diff --git a/extern/spongycastle/prov/src/main/jdk1.1/org/spongycastle/jcajce/provider/asymmetric/dsa/DSASigner.java b/extern/spongycastle/prov/src/main/jdk1.1/org/spongycastle/jcajce/provider/asymmetric/dsa/DSASigner.java deleted file mode 100644 index 16fe1696a..000000000 --- a/extern/spongycastle/prov/src/main/jdk1.1/org/spongycastle/jcajce/provider/asymmetric/dsa/DSASigner.java +++ /dev/null @@ -1,280 +0,0 @@ -package org.spongycastle.jcajce.provider.asymmetric.dsa; - -import java.io.IOException; -import java.math.BigInteger; -import java.security.InvalidKeyException; -import java.security.PrivateKey; -import java.security.PublicKey; -import java.security.SecureRandom; -import java.security.SignatureException; -import java.security.Signature; -import java.security.interfaces.DSAKey; -import java.security.spec.AlgorithmParameterSpec; - -import org.spongycastle.asn1.ASN1Encoding; -import org.spongycastle.asn1.ASN1Integer; -import org.spongycastle.asn1.ASN1Primitive; -import org.spongycastle.asn1.ASN1Sequence; -import org.spongycastle.asn1.DERSequence; -import org.spongycastle.asn1.pkcs.PKCSObjectIdentifiers; -import org.spongycastle.asn1.x509.SubjectPublicKeyInfo; -import org.spongycastle.asn1.x509.X509ObjectIdentifiers; -import org.spongycastle.crypto.CipherParameters; -import org.spongycastle.crypto.DSA; -import org.spongycastle.crypto.Digest; -import org.spongycastle.crypto.digests.NullDigest; -import org.spongycastle.crypto.digests.SHA1Digest; -import org.spongycastle.crypto.digests.SHA224Digest; -import org.spongycastle.crypto.digests.SHA256Digest; -import org.spongycastle.crypto.digests.SHA384Digest; -import org.spongycastle.crypto.digests.SHA512Digest; -import org.spongycastle.crypto.params.ParametersWithRandom; - -public class DSASigner - extends Signature - implements PKCSObjectIdentifiers, X509ObjectIdentifiers -{ - private Digest digest; - private DSA signer; - private SecureRandom random; - - protected DSASigner( - Digest digest, - DSA signer) - { - super("DSA"); - this.digest = digest; - this.signer = signer; - } - - protected void engineInitVerify( - PublicKey publicKey) - throws InvalidKeyException - { - CipherParameters param; - -// if (publicKey instanceof GOST3410Key) -// { -// param = GOST3410Util.generatePublicKeyParameter(publicKey); -// } -// else if (publicKey instanceof DSAKey) - if (publicKey instanceof DSAKey) - { - param = DSAUtil.generatePublicKeyParameter(publicKey); - } - else - { - try - { - byte[] bytes = publicKey.getEncoded(); - - publicKey = new BCDSAPublicKey(SubjectPublicKeyInfo.getInstance(bytes)); - - if (publicKey instanceof DSAKey) - { - param = DSAUtil.generatePublicKeyParameter(publicKey); - } - else - { - throw new InvalidKeyException("can't recognise key type in DSA based signer"); - } - } - catch (Exception e) - { - throw new InvalidKeyException("can't recognise key type in DSA based signer"); - } - } - - digest.reset(); - signer.init(false, param); - } - - protected void engineInitSign( - PrivateKey privateKey, - SecureRandom random) - throws InvalidKeyException - { - this.random = random; - engineInitSign(privateKey); - } - - protected void engineInitSign( - PrivateKey privateKey) - throws InvalidKeyException - { - CipherParameters param; - -// if (privateKey instanceof GOST3410Key) -// { -// param = GOST3410Util.generatePrivateKeyParameter(privateKey); -// } -// else -// { - param = DSAUtil.generatePrivateKeyParameter(privateKey); -// } - - if (random != null) - { - param = new ParametersWithRandom(param, random); - } - - digest.reset(); - signer.init(true, param); - } - - protected void engineUpdate( - byte b) - throws SignatureException - { - digest.update(b); - } - - protected void engineUpdate( - byte[] b, - int off, - int len) - throws SignatureException - { - digest.update(b, off, len); - } - - protected byte[] engineSign() - throws SignatureException - { - byte[] hash = new byte[digest.getDigestSize()]; - - digest.doFinal(hash, 0); - - try - { - BigInteger[] sig = signer.generateSignature(hash); - - return derEncode(sig[0], sig[1]); - } - catch (Exception e) - { - throw new SignatureException(e.toString()); - } - } - - protected boolean engineVerify( - byte[] sigBytes) - throws SignatureException - { - byte[] hash = new byte[digest.getDigestSize()]; - - digest.doFinal(hash, 0); - - BigInteger[] sig; - - try - { - sig = derDecode(sigBytes); - } - catch (Exception e) - { - throw new SignatureException("error decoding signature bytes."); - } - - return signer.verifySignature(hash, sig[0], sig[1]); - } - - protected void engineSetParameter( - AlgorithmParameterSpec params) - { - throw new UnsupportedOperationException("engineSetParameter unsupported"); - } - - /** - * @deprecated replaced with - */ - protected void engineSetParameter( - String param, - Object value) - { - throw new UnsupportedOperationException("engineSetParameter unsupported"); - } - - /** - * @deprecated - */ - protected Object engineGetParameter( - String param) - { - throw new UnsupportedOperationException("engineSetParameter unsupported"); - } - - private byte[] derEncode( - BigInteger r, - BigInteger s) - throws IOException - { - ASN1Integer[] rs = new ASN1Integer[]{ new ASN1Integer(r), new ASN1Integer(s) }; - return new DERSequence(rs).getEncoded(ASN1Encoding.DER); - } - - private BigInteger[] derDecode( - byte[] encoding) - throws IOException - { - ASN1Sequence s = (ASN1Sequence)ASN1Primitive.fromByteArray(encoding); - return new BigInteger[]{ - ((ASN1Integer)s.getObjectAt(0)).getValue(), - ((ASN1Integer)s.getObjectAt(1)).getValue() - }; - } - - static public class stdDSA - extends DSASigner - { - public stdDSA() - { - super(new SHA1Digest(), new org.spongycastle.crypto.signers.DSASigner()); - } - } - - static public class dsa224 - extends DSASigner - { - public dsa224() - { - super(new SHA224Digest(), new org.spongycastle.crypto.signers.DSASigner()); - } - } - - static public class dsa256 - extends DSASigner - { - public dsa256() - { - super(new SHA256Digest(), new org.spongycastle.crypto.signers.DSASigner()); - } - } - - static public class dsa384 - extends DSASigner - { - public dsa384() - { - super(new SHA384Digest(), new org.spongycastle.crypto.signers.DSASigner()); - } - } - - static public class dsa512 - extends DSASigner - { - public dsa512() - { - super(new SHA512Digest(), new org.spongycastle.crypto.signers.DSASigner()); - } - } - - static public class noneDSA - extends DSASigner - { - public noneDSA() - { - super(new NullDigest(), new org.spongycastle.crypto.signers.DSASigner()); - } - } -} diff --git a/extern/spongycastle/prov/src/main/jdk1.1/org/spongycastle/jcajce/provider/asymmetric/ecgost/SignatureSpi.java b/extern/spongycastle/prov/src/main/jdk1.1/org/spongycastle/jcajce/provider/asymmetric/ecgost/SignatureSpi.java deleted file mode 100644 index 54b83de7e..000000000 --- a/extern/spongycastle/prov/src/main/jdk1.1/org/spongycastle/jcajce/provider/asymmetric/ecgost/SignatureSpi.java +++ /dev/null @@ -1,221 +0,0 @@ -package org.spongycastle.jcajce.provider.asymmetric.ecgost; - -import java.math.BigInteger; -import java.security.InvalidKeyException; -import java.security.PrivateKey; -import java.security.PublicKey; -import java.security.SecureRandom; -import java.security.SignatureException; -import java.security.spec.AlgorithmParameterSpec; - -import org.spongycastle.asn1.pkcs.PKCSObjectIdentifiers; -import org.spongycastle.asn1.x509.SubjectPublicKeyInfo; -import org.spongycastle.asn1.x509.X509ObjectIdentifiers; -import org.spongycastle.crypto.CipherParameters; -import org.spongycastle.crypto.DSA; -import org.spongycastle.crypto.Digest; -import org.spongycastle.crypto.digests.GOST3411Digest; -import org.spongycastle.crypto.params.ParametersWithRandom; -import org.spongycastle.crypto.signers.ECGOST3410Signer; -import org.spongycastle.jcajce.provider.asymmetric.util.ECUtil; -import org.spongycastle.jce.interfaces.ECKey; -import org.spongycastle.jce.interfaces.ECPublicKey; -import org.spongycastle.jce.interfaces.GOST3410Key; -import org.spongycastle.jce.provider.BouncyCastleProvider; -import org.spongycastle.jcajce.provider.asymmetric.util.GOST3410Util; - -public class SignatureSpi - extends java.security.Signature - implements PKCSObjectIdentifiers, X509ObjectIdentifiers -{ - private Digest digest; - private DSA signer; - private SecureRandom appRandom; - - public SignatureSpi() - { - super("ECGOST3410"); - this.digest = new GOST3411Digest(); - this.signer = new ECGOST3410Signer(); - } - - protected void engineInitVerify( - PublicKey publicKey) - throws InvalidKeyException - { - CipherParameters param; - - if (publicKey instanceof ECPublicKey) - { - param = ECUtil.generatePublicKeyParameter(publicKey); - } - else if (publicKey instanceof GOST3410Key) - { - param = GOST3410Util.generatePublicKeyParameter(publicKey); - } - else - { - try - { - byte[] bytes = publicKey.getEncoded(); - - publicKey = BouncyCastleProvider.getPublicKey(SubjectPublicKeyInfo.getInstance(bytes)); - - if (publicKey instanceof ECPublicKey) - { - param = ECUtil.generatePublicKeyParameter(publicKey); - } - else - { - throw new InvalidKeyException("can't recognise key type in DSA based signer"); - } - } - catch (Exception e) - { - throw new InvalidKeyException("can't recognise key type in DSA based signer"); - } - } - - digest.reset(); - signer.init(false, param); - } - - protected void engineInitSign( - PrivateKey privateKey) - throws InvalidKeyException - { - CipherParameters param; - - if (privateKey instanceof ECKey) - { - param = ECUtil.generatePrivateKeyParameter(privateKey); - } - else - { - param = GOST3410Util.generatePrivateKeyParameter(privateKey); - } - - digest.reset(); - - if (appRandom != null) - { - signer.init(true, new ParametersWithRandom(param, appRandom)); - } - else - { - signer.init(true, param); - } - } - - protected void engineUpdate( - byte b) - throws SignatureException - { - digest.update(b); - } - - protected void engineUpdate( - byte[] b, - int off, - int len) - throws SignatureException - { - digest.update(b, off, len); - } - - protected byte[] engineSign() - throws SignatureException - { - byte[] hash = new byte[digest.getDigestSize()]; - - digest.doFinal(hash, 0); - - try - { - byte[] sigBytes = new byte[64]; - BigInteger[] sig = signer.generateSignature(hash); - byte[] r = sig[0].toByteArray(); - byte[] s = sig[1].toByteArray(); - - if (s[0] != 0) - { - System.arraycopy(s, 0, sigBytes, 32 - s.length, s.length); - } - else - { - System.arraycopy(s, 1, sigBytes, 32 - (s.length - 1), s.length - 1); - } - - if (r[0] != 0) - { - System.arraycopy(r, 0, sigBytes, 64 - r.length, r.length); - } - else - { - System.arraycopy(r, 1, sigBytes, 64 - (r.length - 1), r.length - 1); - } - - return sigBytes; - } - catch (Exception e) - { - throw new SignatureException(e.toString()); - } - } - - protected boolean engineVerify( - byte[] sigBytes) - throws SignatureException - { - byte[] hash = new byte[digest.getDigestSize()]; - - digest.doFinal(hash, 0); - - BigInteger[] sig; - - try - { - byte[] r = new byte[32]; - byte[] s = new byte[32]; - - System.arraycopy(sigBytes, 0, s, 0, 32); - - System.arraycopy(sigBytes, 32, r, 0, 32); - - sig = new BigInteger[2]; - sig[0] = new BigInteger(1, r); - sig[1] = new BigInteger(1, s); - } - catch (Exception e) - { - throw new SignatureException("error decoding signature bytes."); - } - - return signer.verifySignature(hash, sig[0], sig[1]); - } - - protected void engineSetParameter( - AlgorithmParameterSpec params) - { - throw new UnsupportedOperationException("engineSetParameter unsupported"); - } - - /** - * @deprecated replaced with - */ - protected void engineSetParameter( - String param, - Object value) - { - throw new UnsupportedOperationException("engineSetParameter unsupported"); - } - - /** - * @deprecated - */ - protected Object engineGetParameter( - String param) - { - throw new UnsupportedOperationException("engineSetParameter unsupported"); - } -} diff --git a/extern/spongycastle/prov/src/main/jdk1.1/org/spongycastle/jcajce/provider/asymmetric/gost/SignatureSpi.java b/extern/spongycastle/prov/src/main/jdk1.1/org/spongycastle/jcajce/provider/asymmetric/gost/SignatureSpi.java deleted file mode 100644 index 65303d3d6..000000000 --- a/extern/spongycastle/prov/src/main/jdk1.1/org/spongycastle/jcajce/provider/asymmetric/gost/SignatureSpi.java +++ /dev/null @@ -1,230 +0,0 @@ -package org.spongycastle.jcajce.provider.asymmetric.gost; - -import java.math.BigInteger; -import java.security.InvalidKeyException; -import java.security.PrivateKey; -import java.security.PublicKey; -import java.security.SecureRandom; -import java.security.SignatureException; -import java.security.spec.AlgorithmParameterSpec; - -import org.spongycastle.asn1.pkcs.PKCSObjectIdentifiers; -import org.spongycastle.asn1.x509.SubjectPublicKeyInfo; -import org.spongycastle.asn1.x509.X509ObjectIdentifiers; -import org.spongycastle.crypto.CipherParameters; -import org.spongycastle.crypto.DSA; -import org.spongycastle.crypto.Digest; -import org.spongycastle.crypto.digests.GOST3411Digest; -import org.spongycastle.crypto.params.ParametersWithRandom; -import org.spongycastle.crypto.signers.GOST3410Signer; -import org.spongycastle.jcajce.provider.asymmetric.util.ECUtil; -import org.spongycastle.jce.interfaces.ECKey; -import org.spongycastle.jce.interfaces.ECPublicKey; -import org.spongycastle.jce.interfaces.GOST3410Key; -import org.spongycastle.jce.provider.BouncyCastleProvider; -import org.spongycastle.jcajce.provider.asymmetric.util.GOST3410Util; - -public class SignatureSpi - extends java.security.Signature - implements PKCSObjectIdentifiers, X509ObjectIdentifiers -{ - private Digest digest; - private DSA signer; - private SecureRandom random; - - public SignatureSpi() - { - super("GOST3410"); - this.digest = new GOST3411Digest(); - this.signer = new GOST3410Signer(); - } - - protected void engineInitVerify( - PublicKey publicKey) - throws InvalidKeyException - { - CipherParameters param; - - if (publicKey instanceof ECPublicKey) - { - param = ECUtil.generatePublicKeyParameter(publicKey); - } - else if (publicKey instanceof GOST3410Key) - { - param = GOST3410Util.generatePublicKeyParameter(publicKey); - } - else - { - try - { - byte[] bytes = publicKey.getEncoded(); - - publicKey = BouncyCastleProvider.getPublicKey(SubjectPublicKeyInfo.getInstance(bytes)); - - if (publicKey instanceof ECPublicKey) - { - param = ECUtil.generatePublicKeyParameter(publicKey); - } - else - { - throw new InvalidKeyException("can't recognise key type in DSA based signer"); - } - } - catch (Exception e) - { - throw new InvalidKeyException("can't recognise key type in DSA based signer"); - } - } - - digest.reset(); - signer.init(false, param); - } - - protected void engineInitSign( - PrivateKey privateKey, - SecureRandom random) - throws InvalidKeyException - { - this.random = random; - engineInitSign(privateKey); - } - - protected void engineInitSign( - PrivateKey privateKey) - throws InvalidKeyException - { - CipherParameters param; - - if (privateKey instanceof ECKey) - { - param = ECUtil.generatePrivateKeyParameter(privateKey); - } - else - { - param = GOST3410Util.generatePrivateKeyParameter(privateKey); - } - - digest.reset(); - - if (random != null) - { - signer.init(true, new ParametersWithRandom(param, random)); - } - else - { - signer.init(true, param); - } - } - - protected void engineUpdate( - byte b) - throws SignatureException - { - digest.update(b); - } - - protected void engineUpdate( - byte[] b, - int off, - int len) - throws SignatureException - { - digest.update(b, off, len); - } - - protected byte[] engineSign() - throws SignatureException - { - byte[] hash = new byte[digest.getDigestSize()]; - - digest.doFinal(hash, 0); - - try - { - byte[] sigBytes = new byte[64]; - BigInteger[] sig = signer.generateSignature(hash); - byte[] r = sig[0].toByteArray(); - byte[] s = sig[1].toByteArray(); - - if (s[0] != 0) - { - System.arraycopy(s, 0, sigBytes, 32 - s.length, s.length); - } - else - { - System.arraycopy(s, 1, sigBytes, 32 - (s.length - 1), s.length - 1); - } - - if (r[0] != 0) - { - System.arraycopy(r, 0, sigBytes, 64 - r.length, r.length); - } - else - { - System.arraycopy(r, 1, sigBytes, 64 - (r.length - 1), r.length - 1); - } - - return sigBytes; - } - catch (Exception e) - { - throw new SignatureException(e.toString()); - } - } - - protected boolean engineVerify( - byte[] sigBytes) - throws SignatureException - { - byte[] hash = new byte[digest.getDigestSize()]; - - digest.doFinal(hash, 0); - - BigInteger[] sig; - - try - { - byte[] r = new byte[32]; - byte[] s = new byte[32]; - - System.arraycopy(sigBytes, 0, s, 0, 32); - - System.arraycopy(sigBytes, 32, r, 0, 32); - - sig = new BigInteger[2]; - sig[0] = new BigInteger(1, r); - sig[1] = new BigInteger(1, s); - } - catch (Exception e) - { - throw new SignatureException("error decoding signature bytes."); - } - - return signer.verifySignature(hash, sig[0], sig[1]); - } - - protected void engineSetParameter( - AlgorithmParameterSpec params) - { - throw new UnsupportedOperationException("engineSetParameter unsupported"); - } - - /** - * @deprecated replaced with - */ - protected void engineSetParameter( - String param, - Object value) - { - throw new UnsupportedOperationException("engineSetParameter unsupported"); - } - - /** - * @deprecated - */ - protected Object engineGetParameter( - String param) - { - throw new UnsupportedOperationException("engineSetParameter unsupported"); - } -} diff --git a/extern/spongycastle/prov/src/main/jdk1.1/org/spongycastle/jcajce/provider/asymmetric/rsa/DigestSignatureSpi.java b/extern/spongycastle/prov/src/main/jdk1.1/org/spongycastle/jcajce/provider/asymmetric/rsa/DigestSignatureSpi.java deleted file mode 100644 index 2807ed4d0..000000000 --- a/extern/spongycastle/prov/src/main/jdk1.1/org/spongycastle/jcajce/provider/asymmetric/rsa/DigestSignatureSpi.java +++ /dev/null @@ -1,368 +0,0 @@ -package org.spongycastle.jcajce.provider.asymmetric.rsa; - -import java.io.IOException; -import java.security.AlgorithmParameters; -import java.security.InvalidKeyException; -import java.security.PrivateKey; -import java.security.PublicKey; -import java.security.SignatureException; -import java.security.Signature; -import java.security.interfaces.RSAPrivateKey; -import java.security.interfaces.RSAPublicKey; -import java.security.spec.AlgorithmParameterSpec; - -import org.spongycastle.asn1.ASN1Encoding; -import org.spongycastle.asn1.ASN1ObjectIdentifier; -import org.spongycastle.asn1.DERNull; -import org.spongycastle.asn1.nist.NISTObjectIdentifiers; -import org.spongycastle.asn1.oiw.OIWObjectIdentifiers; -import org.spongycastle.asn1.pkcs.PKCSObjectIdentifiers; -import org.spongycastle.asn1.teletrust.TeleTrusTObjectIdentifiers; -import org.spongycastle.asn1.x509.AlgorithmIdentifier; -import org.spongycastle.asn1.x509.DigestInfo; -import org.spongycastle.crypto.AsymmetricBlockCipher; -import org.spongycastle.crypto.CipherParameters; -import org.spongycastle.crypto.Digest; -import org.spongycastle.crypto.digests.MD2Digest; -import org.spongycastle.crypto.digests.MD4Digest; -import org.spongycastle.crypto.digests.MD5Digest; -import org.spongycastle.crypto.digests.NullDigest; -import org.spongycastle.crypto.digests.RIPEMD128Digest; -import org.spongycastle.crypto.digests.RIPEMD160Digest; -import org.spongycastle.crypto.digests.RIPEMD256Digest; -import org.spongycastle.crypto.digests.SHA1Digest; -import org.spongycastle.crypto.digests.SHA224Digest; -import org.spongycastle.crypto.digests.SHA256Digest; -import org.spongycastle.crypto.digests.SHA384Digest; -import org.spongycastle.crypto.digests.SHA512Digest; -import org.spongycastle.crypto.encodings.PKCS1Encoding; -import org.spongycastle.crypto.engines.RSABlindedEngine; - -public class DigestSignatureSpi - extends Signature -{ - private Digest digest; - private AsymmetricBlockCipher cipher; - private AlgorithmIdentifier algId; - - // care - this constructor is actually used by outside organisations - protected DigestSignatureSpi( - Digest digest, - AsymmetricBlockCipher cipher) - { - super(digest.getAlgorithmName() + "withRSA"); - this.digest = digest; - this.cipher = cipher; - this.algId = null; - } - - // care - this constructor is actually used by outside organisations - protected DigestSignatureSpi( - ASN1ObjectIdentifier objId, - Digest digest, - AsymmetricBlockCipher cipher) - { - super(digest.getAlgorithmName() + "withRSA"); - this.digest = digest; - this.cipher = cipher; - this.algId = new AlgorithmIdentifier(objId, DERNull.INSTANCE); - } - - protected void engineInitVerify( - PublicKey publicKey) - throws InvalidKeyException - { - if (!(publicKey instanceof RSAPublicKey)) - { - throw new InvalidKeyException("Supplied key (" + getType(publicKey) + ") is not a RSAPublicKey instance"); - } - - CipherParameters param = RSAUtil.generatePublicKeyParameter((RSAPublicKey)publicKey); - - digest.reset(); - cipher.init(false, param); - } - - protected void engineInitSign( - PrivateKey privateKey) - throws InvalidKeyException - { - if (!(privateKey instanceof RSAPrivateKey)) - { - throw new InvalidKeyException("Supplied key (" + getType(privateKey) + ") is not a RSAPrivateKey instance"); - } - - CipherParameters param = RSAUtil.generatePrivateKeyParameter((RSAPrivateKey)privateKey); - - digest.reset(); - - cipher.init(true, param); - } - - private String getType( - Object o) - { - if (o == null) - { - return null; - } - - return o.getClass().getName(); - } - - protected void engineUpdate( - byte b) - throws SignatureException - { - digest.update(b); - } - - protected void engineUpdate( - byte[] b, - int off, - int len) - throws SignatureException - { - digest.update(b, off, len); - } - - protected byte[] engineSign() - throws SignatureException - { - byte[] hash = new byte[digest.getDigestSize()]; - - digest.doFinal(hash, 0); - - try - { - byte[] bytes = derEncode(hash); - - return cipher.processBlock(bytes, 0, bytes.length); - } - catch (ArrayIndexOutOfBoundsException e) - { - throw new SignatureException("key too small for signature type"); - } - catch (Exception e) - { - throw new SignatureException(e.toString()); - } - } - - protected boolean engineVerify( - byte[] sigBytes) - throws SignatureException - { - byte[] hash = new byte[digest.getDigestSize()]; - - digest.doFinal(hash, 0); - - byte[] sig; - byte[] expected; - - try - { - sig = cipher.processBlock(sigBytes, 0, sigBytes.length); - - expected = derEncode(hash); - } - catch (Exception e) - { - return false; - } - - if (sig.length == expected.length) - { - for (int i = 0; i < sig.length; i++) - { - if (sig[i] != expected[i]) - { - return false; - } - } - } - else if (sig.length == expected.length - 2) // NULL left out - { - int sigOffset = sig.length - hash.length - 2; - int expectedOffset = expected.length - hash.length - 2; - - expected[1] -= 2; // adjust lengths - expected[3] -= 2; - - for (int i = 0; i < hash.length; i++) - { - if (sig[sigOffset + i] != expected[expectedOffset + i]) // check hash - { - return false; - } - } - - for (int i = 0; i < sigOffset; i++) - { - if (sig[i] != expected[i]) // check header less NULL - { - return false; - } - } - } - else - { - return false; - } - - return true; - } - - protected void engineSetParameter( - AlgorithmParameterSpec params) - { - throw new UnsupportedOperationException("engineSetParameter unsupported"); - } - - /** - * @deprecated replaced with - */ - protected void engineSetParameter( - String param, - Object value) - { - throw new UnsupportedOperationException("engineSetParameter unsupported"); - } - - /** - * @deprecated - */ - protected Object engineGetParameter( - String param) - { - return null; - } - - protected AlgorithmParameters engineGetParameters() - { - return null; - } - - private byte[] derEncode( - byte[] hash) - throws IOException - { - if (algId == null) - { - // For raw RSA, the DigestInfo must be prepared externally - return hash; - } - - DigestInfo dInfo = new DigestInfo(algId, hash); - - return dInfo.getEncoded(ASN1Encoding.DER); - } - - static public class SHA1 - extends DigestSignatureSpi - { - public SHA1() - { - super(OIWObjectIdentifiers.idSHA1, new SHA1Digest(), new PKCS1Encoding(new RSABlindedEngine())); - } - } - - static public class SHA224 - extends DigestSignatureSpi - { - public SHA224() - { - super(NISTObjectIdentifiers.id_sha224, new SHA224Digest(), new PKCS1Encoding(new RSABlindedEngine())); - } - } - - static public class SHA256 - extends DigestSignatureSpi - { - public SHA256() - { - super(NISTObjectIdentifiers.id_sha256, new SHA256Digest(), new PKCS1Encoding(new RSABlindedEngine())); - } - } - - static public class SHA384 - extends DigestSignatureSpi - { - public SHA384() - { - super(NISTObjectIdentifiers.id_sha384, new SHA384Digest(), new PKCS1Encoding(new RSABlindedEngine())); - } - } - - static public class SHA512 - extends DigestSignatureSpi - { - public SHA512() - { - super(NISTObjectIdentifiers.id_sha512, new SHA512Digest(), new PKCS1Encoding(new RSABlindedEngine())); - } - } - - static public class MD2 - extends DigestSignatureSpi - { - public MD2() - { - super(PKCSObjectIdentifiers.md2, new MD2Digest(), new PKCS1Encoding(new RSABlindedEngine())); - } - } - - static public class MD4 - extends DigestSignatureSpi - { - public MD4() - { - super(PKCSObjectIdentifiers.md4, new MD4Digest(), new PKCS1Encoding(new RSABlindedEngine())); - } - } - - static public class MD5 - extends DigestSignatureSpi - { - public MD5() - { - super(PKCSObjectIdentifiers.md5, new MD5Digest(), new PKCS1Encoding(new RSABlindedEngine())); - } - } - - static public class RIPEMD160 - extends DigestSignatureSpi - { - public RIPEMD160() - { - super(TeleTrusTObjectIdentifiers.ripemd160, new RIPEMD160Digest(), new PKCS1Encoding(new RSABlindedEngine())); - } - } - - static public class RIPEMD128 - extends DigestSignatureSpi - { - public RIPEMD128() - { - super(TeleTrusTObjectIdentifiers.ripemd128, new RIPEMD128Digest(), new PKCS1Encoding(new RSABlindedEngine())); - } - } - - static public class RIPEMD256 - extends DigestSignatureSpi - { - public RIPEMD256() - { - super(TeleTrusTObjectIdentifiers.ripemd256, new RIPEMD256Digest(), new PKCS1Encoding(new RSABlindedEngine())); - } - } - - static public class noneRSA - extends DigestSignatureSpi - { - public noneRSA() - { - super(new NullDigest(), new PKCS1Encoding(new RSABlindedEngine())); - } - } -} diff --git a/extern/spongycastle/prov/src/main/jdk1.1/org/spongycastle/jcajce/provider/asymmetric/rsa/ISOSignatureSpi.java b/extern/spongycastle/prov/src/main/jdk1.1/org/spongycastle/jcajce/provider/asymmetric/rsa/ISOSignatureSpi.java deleted file mode 100644 index e87ccff1e..000000000 --- a/extern/spongycastle/prov/src/main/jdk1.1/org/spongycastle/jcajce/provider/asymmetric/rsa/ISOSignatureSpi.java +++ /dev/null @@ -1,143 +0,0 @@ -package org.spongycastle.jcajce.provider.asymmetric.rsa; - -import java.security.InvalidKeyException; -import java.security.PrivateKey; -import java.security.PublicKey; -import java.security.SignatureException; -import java.security.Signature; -import java.security.interfaces.RSAPrivateKey; -import java.security.interfaces.RSAPublicKey; -import java.security.spec.AlgorithmParameterSpec; - -import org.spongycastle.crypto.AsymmetricBlockCipher; -import org.spongycastle.crypto.CipherParameters; -import org.spongycastle.crypto.Digest; -import org.spongycastle.crypto.digests.MD5Digest; -import org.spongycastle.crypto.digests.RIPEMD160Digest; -import org.spongycastle.crypto.digests.SHA1Digest; -import org.spongycastle.crypto.engines.RSABlindedEngine; -import org.spongycastle.crypto.signers.ISO9796d2Signer; - -public class ISOSignatureSpi - extends Signature -{ - private ISO9796d2Signer signer; - - protected ISOSignatureSpi( - Digest digest, - AsymmetricBlockCipher cipher) - { - super(digest.getAlgorithmName() + "withRSA/ISO9796-2"); - signer = new ISO9796d2Signer(cipher, digest, true); - } - - protected void engineInitVerify( - PublicKey publicKey) - throws InvalidKeyException - { - CipherParameters param = RSAUtil.generatePublicKeyParameter((RSAPublicKey)publicKey); - - signer.init(false, param); - } - - protected void engineInitSign( - PrivateKey privateKey) - throws InvalidKeyException - { - CipherParameters param = RSAUtil.generatePrivateKeyParameter((RSAPrivateKey)privateKey); - - signer.init(true, param); - } - - protected void engineUpdate( - byte b) - throws SignatureException - { - signer.update(b); - } - - protected void engineUpdate( - byte[] b, - int off, - int len) - throws SignatureException - { - signer.update(b, off, len); - } - - protected byte[] engineSign() - throws SignatureException - { - try - { - byte[] sig = signer.generateSignature(); - - return sig; - } - catch (Exception e) - { - throw new SignatureException(e.toString()); - } - } - - protected boolean engineVerify( - byte[] sigBytes) - throws SignatureException - { - boolean yes = signer.verifySignature(sigBytes); - - return yes; - } - - protected void engineSetParameter( - AlgorithmParameterSpec params) - { - throw new UnsupportedOperationException("engineSetParameter unsupported"); - } - - /** - * @deprecated replaced with - */ - protected void engineSetParameter( - String param, - Object value) - { - throw new UnsupportedOperationException("engineSetParameter unsupported"); - } - - /** - * @deprecated - */ - protected Object engineGetParameter( - String param) - { - throw new UnsupportedOperationException("engineSetParameter unsupported"); - } - - static public class SHA1WithRSAEncryption - extends ISOSignatureSpi - { - public SHA1WithRSAEncryption() - { - super(new SHA1Digest(), new RSABlindedEngine()); - } - } - - static public class MD5WithRSAEncryption - extends ISOSignatureSpi - { - public MD5WithRSAEncryption() - { - super(new MD5Digest(), new RSABlindedEngine()); - } - } - - static public class RIPEMD160WithRSAEncryption - extends ISOSignatureSpi - { - public RIPEMD160WithRSAEncryption() - { - super(new RIPEMD160Digest(), new RSABlindedEngine()); - } - } -} diff --git a/extern/spongycastle/prov/src/main/jdk1.1/org/spongycastle/jcajce/provider/asymmetric/util/DSABase.java b/extern/spongycastle/prov/src/main/jdk1.1/org/spongycastle/jcajce/provider/asymmetric/util/DSABase.java deleted file mode 100644 index 9cf4485f9..000000000 --- a/extern/spongycastle/prov/src/main/jdk1.1/org/spongycastle/jcajce/provider/asymmetric/util/DSABase.java +++ /dev/null @@ -1,129 +0,0 @@ -package org.spongycastle.jcajce.provider.asymmetric.util; - -import java.math.BigInteger; -import java.security.InvalidKeyException; -import java.security.PrivateKey; -import java.security.SecureRandom; -import java.security.Signature; -import java.security.SignatureException; -import java.security.spec.AlgorithmParameterSpec; - -import org.spongycastle.asn1.pkcs.PKCSObjectIdentifiers; -import org.spongycastle.asn1.x509.X509ObjectIdentifiers; -import org.spongycastle.crypto.DSA; -import org.spongycastle.crypto.Digest; - -public abstract class DSABase - extends Signature - implements PKCSObjectIdentifiers, X509ObjectIdentifiers -{ - protected Digest digest; - protected DSA signer; - protected DSAEncoder encoder; - private SecureRandom appRandom; - - protected DSABase( - String name, - Digest digest, - DSA signer, - DSAEncoder encoder) - { - super(name); - - this.digest = digest; - this.signer = signer; - this.encoder = encoder; - } - - protected void engineInitSign( - PrivateKey privateKey) - throws InvalidKeyException - { - doEngineInitSign(privateKey, appRandom); - } - - protected void engineUpdate( - byte b) - throws SignatureException - { - digest.update(b); - } - - protected void engineUpdate( - byte[] b, - int off, - int len) - throws SignatureException - { - digest.update(b, off, len); - } - - protected byte[] engineSign() - throws SignatureException - { - byte[] hash = new byte[digest.getDigestSize()]; - - digest.doFinal(hash, 0); - - try - { - BigInteger[] sig = signer.generateSignature(hash); - - return encoder.encode(sig[0], sig[1]); - } - catch (Exception e) - { - throw new SignatureException(e.toString()); - } - } - - protected boolean engineVerify( - byte[] sigBytes) - throws SignatureException - { - byte[] hash = new byte[digest.getDigestSize()]; - - digest.doFinal(hash, 0); - - BigInteger[] sig; - - try - { - sig = encoder.decode(sigBytes); - } - catch (Exception e) - { - throw new SignatureException("error decoding signature bytes."); - } - - return signer.verifySignature(hash, sig[0], sig[1]); - } - - protected void engineSetParameter( - AlgorithmParameterSpec params) - { - throw new UnsupportedOperationException("engineSetParameter unsupported"); - } - - /** - * @deprecated replaced with - */ - protected void engineSetParameter( - String param, - Object value) - { - throw new UnsupportedOperationException("engineSetParameter unsupported"); - } - - /** - * @deprecated - */ - protected Object engineGetParameter( - String param) - { - throw new UnsupportedOperationException("engineSetParameter unsupported"); - } - - protected abstract void doEngineInitSign(PrivateKey privateKey, SecureRandom random) - throws InvalidKeyException; -} diff --git a/extern/spongycastle/prov/src/main/jdk1.1/org/spongycastle/jcajce/provider/asymmetric/x509/CertificateFactory.java b/extern/spongycastle/prov/src/main/jdk1.1/org/spongycastle/jcajce/provider/asymmetric/x509/CertificateFactory.java deleted file mode 100644 index 75d4eb269..000000000 --- a/extern/spongycastle/prov/src/main/jdk1.1/org/spongycastle/jcajce/provider/asymmetric/x509/CertificateFactory.java +++ /dev/null @@ -1,397 +0,0 @@ -package org.spongycastle.jcajce.provider.asymmetric.x509; - -import java.io.IOException; -import java.io.InputStream; -import java.io.PushbackInputStream; -import java.security.cert.CRL; -import java.security.cert.CRLException; -import java.security.cert.CertPath; -import java.security.cert.CertificateException; -import java.security.cert.CertificateFactorySpi; -import java.security.cert.CertificateParsingException; -import java.security.cert.X509Certificate; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Iterator; -import java.util.List; - -import org.spongycastle.asn1.ASN1InputStream; -import org.spongycastle.asn1.ASN1ObjectIdentifier; -import org.spongycastle.asn1.ASN1Sequence; -import org.spongycastle.asn1.ASN1Set; -import org.spongycastle.asn1.ASN1TaggedObject; -import org.spongycastle.asn1.pkcs.PKCSObjectIdentifiers; -import org.spongycastle.asn1.pkcs.SignedData; -import org.spongycastle.asn1.x509.Certificate; -import org.spongycastle.asn1.x509.CertificateList; -import org.spongycastle.jce.provider.X509CRLObject; -import org.spongycastle.jce.provider.X509CertificateObject; - -/** - * class for dealing with X509 certificates. - *
- * At the moment this will deal with "-----BEGIN CERTIFICATE-----" to "-----END CERTIFICATE-----"
- * base 64 encoded certs, as well as the BER binaries of certificates and some classes of PKCS#7
- * objects.
- */
-public class CertificateFactory
- extends CertificateFactorySpi
-{
- private static final PEMUtil PEM_CERT_PARSER = new PEMUtil("CERTIFICATE");
- private static final PEMUtil PEM_CRL_PARSER = new PEMUtil("CRL");
-
- private ASN1Set sData = null;
- private int sDataObjectCount = 0;
- private InputStream currentStream = null;
-
- private ASN1Set sCrlData = null;
- private int sCrlDataObjectCount = 0;
- private InputStream currentCrlStream = null;
-
- private java.security.cert.Certificate readDERCertificate(
- ASN1InputStream dIn)
- throws IOException, CertificateParsingException
- {
- ASN1Sequence seq = (ASN1Sequence)dIn.readObject();
-
- if (seq.size() > 1
- && seq.getObjectAt(0) instanceof ASN1ObjectIdentifier)
- {
- if (seq.getObjectAt(0).equals(PKCSObjectIdentifiers.signedData))
- {
- sData = SignedData.getInstance(ASN1Sequence.getInstance(
- (ASN1TaggedObject)seq.getObjectAt(1), true)).getCertificates();
-
- return getCertificate();
- }
- }
-
- return new X509CertificateObject(
- Certificate.getInstance(seq));
- }
-
- private java.security.cert.Certificate getCertificate()
- throws CertificateParsingException
- {
- if (sData != null)
- {
- while (sDataObjectCount < sData.size())
- {
- Object obj = sData.getObjectAt(sDataObjectCount++);
-
- if (obj instanceof ASN1Sequence)
- {
- return new X509CertificateObject(
- Certificate.getInstance(obj));
- }
- }
- }
-
- return null;
- }
-
- private java.security.cert.Certificate readPEMCertificate(
- InputStream in)
- throws IOException, CertificateParsingException
- {
- ASN1Sequence seq = PEM_CERT_PARSER.readPEMObject(in);
-
- if (seq != null)
- {
- return new X509CertificateObject(
- Certificate.getInstance(seq));
- }
-
- return null;
- }
-
- protected CRL createCRL(CertificateList c)
- throws CRLException
- {
- return new X509CRLObject(c);
- }
-
- private CRL readPEMCRL(
- InputStream in)
- throws IOException, CRLException
- {
- ASN1Sequence seq = PEM_CRL_PARSER.readPEMObject(in);
-
- if (seq != null)
- {
- return createCRL(
- CertificateList.getInstance(seq));
- }
-
- return null;
- }
-
- private CRL readDERCRL(
- ASN1InputStream aIn)
- throws IOException, CRLException
- {
- ASN1Sequence seq = (ASN1Sequence)aIn.readObject();
-
- if (seq.size() > 1
- && seq.getObjectAt(0) instanceof ASN1ObjectIdentifier)
- {
- if (seq.getObjectAt(0).equals(PKCSObjectIdentifiers.signedData))
- {
- sCrlData = SignedData.getInstance(ASN1Sequence.getInstance(
- (ASN1TaggedObject)seq.getObjectAt(1), true)).getCRLs();
-
- return getCRL();
- }
- }
-
- return createCRL(
- CertificateList.getInstance(seq));
- }
-
- private CRL getCRL()
- throws CRLException
- {
- if (sCrlData == null || sCrlDataObjectCount >= sCrlData.size())
- {
- return null;
- }
-
- return createCRL(
- CertificateList.getInstance(
- sCrlData.getObjectAt(sCrlDataObjectCount++)));
- }
-
- /**
- * Generates a certificate object and initializes it with the data
- * read from the input stream inStream.
- */
- public java.security.cert.Certificate engineGenerateCertificate(
- InputStream in)
- throws CertificateException
- {
- if (currentStream == null)
- {
- currentStream = in;
- sData = null;
- sDataObjectCount = 0;
- }
- else if (currentStream != in) // reset if input stream has changed
- {
- currentStream = in;
- sData = null;
- sDataObjectCount = 0;
- }
-
- try
- {
- if (sData != null)
- {
- if (sDataObjectCount != sData.size())
- {
- return getCertificate();
- }
- else
- {
- sData = null;
- sDataObjectCount = 0;
- return null;
- }
- }
-
- PushbackInputStream pis = new PushbackInputStream(in);
- int tag = pis.read();
-
- if (tag == -1)
- {
- return null;
- }
-
- pis.unread(tag);
-
- if (tag != 0x30) // assume ascii PEM encoded.
- {
- return readPEMCertificate(pis);
- }
- else
- {
- return readDERCertificate(new ASN1InputStream(pis));
- }
- }
- catch (Exception e)
- {
- throw new ExCertificateException(e);
- }
- }
-
- /**
- * Returns a (possibly empty) collection view of the certificates
- * read from the given input stream inStream.
- */
- public Collection engineGenerateCertificates(
- InputStream inStream)
- throws CertificateException
- {
- java.security.cert.Certificate cert;
- List certs = new ArrayList();
-
- while ((cert = engineGenerateCertificate(inStream)) != null)
- {
- certs.add(cert);
- }
-
- return certs;
- }
-
- /**
- * Generates a certificate revocation list (CRL) object and initializes
- * it with the data read from the input stream inStream.
- */
- public CRL engineGenerateCRL(
- InputStream inStream)
- throws CRLException
- {
- if (currentCrlStream == null)
- {
- currentCrlStream = inStream;
- sCrlData = null;
- sCrlDataObjectCount = 0;
- }
- else if (currentCrlStream != inStream) // reset if input stream has changed
- {
- currentCrlStream = inStream;
- sCrlData = null;
- sCrlDataObjectCount = 0;
- }
-
- try
- {
- if (sCrlData != null)
- {
- if (sCrlDataObjectCount != sCrlData.size())
- {
- return getCRL();
- }
- else
- {
- sCrlData = null;
- sCrlDataObjectCount = 0;
- return null;
- }
- }
-
- PushbackInputStream pis = new PushbackInputStream(inStream);
- int tag = pis.read();
-
- if (tag == -1)
- {
- return null;
- }
-
- pis.unread(tag);
-
- if (tag != 0x30) // assume ascii PEM encoded.
- {
- return readPEMCRL(pis);
- }
- else
- { // lazy evaluate to help processing of large CRLs
- return readDERCRL(new ASN1InputStream(pis, true));
- }
- }
- catch (CRLException e)
- {
- throw e;
- }
- catch (Exception e)
- {
- throw new CRLException(e.toString());
- }
- }
-
- /**
- * Returns a (possibly empty) collection view of the CRLs read from
- * the given input stream inStream.
- *
- * The inStream may contain a sequence of DER-encoded CRLs, or
- * a PKCS#7 CRL set. This is a PKCS#7 SignedData object, with the
- * only signficant field being crls. In particular the signature
- * and the contents are ignored.
- */
- public Collection engineGenerateCRLs(
- InputStream inStream)
- throws CRLException
- {
- CRL crl;
- List crls = new ArrayList();
-
- while ((crl = engineGenerateCRL(inStream)) != null)
- {
- crls.add(crl);
- }
-
- return crls;
- }
-
- public Iterator engineGetCertPathEncodings()
- {
- return null; // TODO: PKIXCertPath.certPathEncodings.iterator();
- }
-
- public CertPath engineGenerateCertPath(
- InputStream inStream)
- throws CertificateException
- {
- return engineGenerateCertPath(inStream, "PkiPath");
- }
-
- public CertPath engineGenerateCertPath(
- InputStream inStream,
- String encoding)
- throws CertificateException
- {
- return new PKIXCertPath(inStream, encoding);
- }
-
- public CertPath engineGenerateCertPath(
- List certificates)
- throws CertificateException
- {
- Iterator iter = certificates.iterator();
- Object obj;
- while (iter.hasNext())
- {
- obj = iter.next();
- if (obj != null)
- {
- if (!(obj instanceof X509Certificate))
- {
- throw new CertificateException("list contains non X509Certificate object while creating CertPath\n" + obj.toString());
- }
- }
- }
- return new PKIXCertPath(certificates);
- }
-
- private class ExCertificateException
- extends CertificateException
- {
- private Throwable cause;
-
- public ExCertificateException(Throwable cause)
- {
- this.cause = cause;
- }
-
- public ExCertificateException(String msg, Throwable cause)
- {
- super(msg);
-
- this.cause = cause;
- }
-
- public Throwable getCause()
- {
- return cause;
- }
- }
-}
diff --git a/extern/spongycastle/prov/src/main/jdk1.1/org/spongycastle/jcajce/provider/asymmetric/x509/PKIXCertPath.java b/extern/spongycastle/prov/src/main/jdk1.1/org/spongycastle/jcajce/provider/asymmetric/x509/PKIXCertPath.java
deleted file mode 100644
index a2462a9a0..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.1/org/spongycastle/jcajce/provider/asymmetric/x509/PKIXCertPath.java
+++ /dev/null
@@ -1,379 +0,0 @@
-package org.spongycastle.jcajce.provider.asymmetric.x509;
-
-import java.io.BufferedInputStream;
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStreamWriter;
-import java.security.NoSuchProviderException;
-import java.security.cert.CertPath;
-import java.security.cert.Certificate;
-import java.security.cert.CertificateEncodingException;
-import java.security.cert.CertificateException;
-import java.security.cert.CertificateFactory;
-import java.security.cert.X509Certificate;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Enumeration;
-import java.util.Iterator;
-import java.util.List;
-import java.util.ListIterator;
-
-import org.spongycastle.jce.X509Principal;
-import org.spongycastle.jce.PrincipalUtil;
-import org.spongycastle.asn1.ASN1Encodable;
-import org.spongycastle.asn1.ASN1EncodableVector;
-import org.spongycastle.asn1.ASN1Encoding;
-import org.spongycastle.asn1.ASN1InputStream;
-import org.spongycastle.asn1.ASN1Integer;
-import org.spongycastle.asn1.ASN1Primitive;
-import org.spongycastle.asn1.ASN1Sequence;
-import org.spongycastle.asn1.DERSequence;
-import org.spongycastle.asn1.DERSet;
-import org.spongycastle.asn1.pkcs.ContentInfo;
-import org.spongycastle.asn1.pkcs.PKCSObjectIdentifiers;
-import org.spongycastle.asn1.pkcs.SignedData;
-import org.spongycastle.jce.provider.BouncyCastleProvider;
-import org.spongycastle.util.io.pem.PemObject;
-import org.spongycastle.util.io.pem.PemWriter;
-
-/**
- * CertPath implementation for X.509 certificates.
- *
- **/
-public class PKIXCertPath
- extends CertPath
-{
- static final List certPathEncodings;
-
- static
- {
- List encodings = new ArrayList();
- encodings.add("PkiPath");
- encodings.add("PEM");
- encodings.add("PKCS7");
- certPathEncodings = Collections.unmodifiableList(encodings);
- }
-
- private List certificates;
-
- /**
- * @param certs
- */
- private List sortCerts(
- List certs)
- {
- try
- {
- if (certs.size() < 2)
- {
- return certs;
- }
-
- X509Principal issuer = PrincipalUtil.getIssuerX509Principal(((X509Certificate)certs.get(0)));
- boolean okay = true;
-
- for (int i = 1; i != certs.size(); i++)
- {
- X509Certificate cert = (X509Certificate)certs.get(i);
-
- if (issuer.equals(PrincipalUtil.getSubjectX509Principal(cert)))
- {
- issuer = PrincipalUtil.getIssuerX509Principal(((X509Certificate)certs.get(i)));
- }
- else
- {
- okay = false;
- break;
- }
- }
-
- if (okay)
- {
- return certs;
- }
-
- // find end-entity cert
- List retList = new ArrayList(certs.size());
- List orig = new ArrayList(certs);
-
- for (int i = 0; i < certs.size(); i++)
- {
- X509Certificate cert = (X509Certificate)certs.get(i);
- boolean found = false;
-
- X509Principal subject = PrincipalUtil.getSubjectX509Principal(cert);
-
- for (int j = 0; j != certs.size(); j++)
- {
- X509Certificate c = (X509Certificate)certs.get(j);
- if (PrincipalUtil.getIssuerX509Principal(c).equals(subject))
- {
- found = true;
- break;
- }
- }
-
- if (!found)
- {
- retList.add(cert);
- certs.remove(i);
- }
- }
-
- // can only have one end entity cert - something's wrong, give up.
- if (retList.size() > 1)
- {
- return orig;
- }
-
- for (int i = 0; i != retList.size(); i++)
- {
- issuer = PrincipalUtil.getIssuerX509Principal(((X509Certificate)retList.get(i)));
-
- for (int j = 0; j < certs.size(); j++)
- {
- X509Certificate c = (X509Certificate)certs.get(j);
- if (issuer.equals(PrincipalUtil.getSubjectX509Principal(c)))
- {
- retList.add(c);
- certs.remove(j);
- break;
- }
- }
- }
-
- // make sure all certificates are accounted for.
- if (certs.size() > 0)
- {
- return orig;
- }
-
- return retList;
- }
- catch (Exception e)
- {
- return certs;
- }
- }
-
- PKIXCertPath(List certificates)
- {
- super("X.509");
- this.certificates = sortCerts(new ArrayList(certificates));
- }
-
- /**
- * Creates a CertPath of the specified type.
- * This constructor is protected because most users should use
- * a CertificateFactory to create CertPaths.
- **/
- PKIXCertPath(
- InputStream inStream,
- String encoding)
- throws CertificateException
- {
- super("X.509");
- try
- {
- if (encoding.equalsIgnoreCase("PkiPath"))
- {
- ASN1InputStream derInStream = new ASN1InputStream(inStream);
- ASN1Primitive derObject = derInStream.readObject();
- if (!(derObject instanceof ASN1Sequence))
- {
- throw new CertificateException("input stream does not contain a ASN1 SEQUENCE while reading PkiPath encoded data to load CertPath");
- }
- Enumeration e = ((ASN1Sequence)derObject).getObjects();
- certificates = new ArrayList();
- CertificateFactory certFactory = CertificateFactory.getInstance("X.509", BouncyCastleProvider.PROVIDER_NAME);
- while (e.hasMoreElements())
- {
- ASN1Encodable element = (ASN1Encodable)e.nextElement();
- byte[] encoded = element.toASN1Primitive().getEncoded(ASN1Encoding.DER);
- certificates.add(0, certFactory.generateCertificate(
- new ByteArrayInputStream(encoded)));
- }
- }
- else if (encoding.equalsIgnoreCase("PKCS7") || encoding.equalsIgnoreCase("PEM"))
- {
- inStream = new BufferedInputStream(inStream);
- certificates = new ArrayList();
- CertificateFactory certFactory= CertificateFactory.getInstance("X.509", BouncyCastleProvider.PROVIDER_NAME);
- Certificate cert;
- while ((cert = certFactory.generateCertificate(inStream)) != null)
- {
- certificates.add(cert);
- }
- }
- else
- {
- throw new CertificateException("unsupported encoding: " + encoding);
- }
- }
- catch (IOException ex)
- {
- throw new CertificateException("IOException throw while decoding CertPath:\n" + ex.toString());
- }
- catch (NoSuchProviderException ex)
- {
- throw new CertificateException("BouncyCastle provider not found while trying to get a CertificateFactory:\n" + ex.toString());
- }
-
- this.certificates = sortCerts(certificates);
- }
-
- /**
- * Returns an iteration of the encodings supported by this
- * certification path, with the default encoding
- * first. Attempts to modify the returned Iterator via its
- * remove method result in an UnsupportedOperationException.
- *
- * @return an Iterator over the names of the supported encodings (as Strings)
- **/
- public Iterator getEncodings()
- {
- return certPathEncodings.iterator();
- }
-
- /**
- * Returns the encoded form of this certification path, using
- * the default encoding.
- *
- * @return the encoded bytes
- * @exception java.security.cert.CertificateEncodingException if an encoding error occurs
- **/
- public byte[] getEncoded()
- throws CertificateEncodingException
- {
- Iterator iter = getEncodings();
- if (iter.hasNext())
- {
- Object enc = iter.next();
- if (enc instanceof String)
- {
- return getEncoded((String)enc);
- }
- }
- return null;
- }
-
- /**
- * Returns the encoded form of this certification path, using
- * the specified encoding.
- *
- * @param encoding the name of the encoding to use
- * @return the encoded bytes
- * @exception java.security.cert.CertificateEncodingException if an encoding error
- * occurs or the encoding requested is not supported
- *
- **/
- public byte[] getEncoded(String encoding)
- throws CertificateEncodingException
- {
- if (encoding.equalsIgnoreCase("PkiPath"))
- {
- ASN1EncodableVector v = new ASN1EncodableVector();
-
- ListIterator iter = certificates.listIterator(certificates.size());
- while (iter.hasPrevious())
- {
- v.add(toASN1Object((X509Certificate)iter.previous()));
- }
-
- return toDEREncoded(new DERSequence(v));
- }
- else if (encoding.equalsIgnoreCase("PKCS7"))
- {
- ContentInfo encInfo = new ContentInfo(PKCSObjectIdentifiers.data, null);
-
- ASN1EncodableVector v = new ASN1EncodableVector();
- for (int i = 0; i != certificates.size(); i++)
- {
- v.add(toASN1Object((X509Certificate)certificates.get(i)));
- }
-
- SignedData sd = new SignedData(
- new ASN1Integer(1),
- new DERSet(),
- encInfo,
- new DERSet(v),
- null,
- new DERSet());
-
- return toDEREncoded(new ContentInfo(
- PKCSObjectIdentifiers.signedData, sd));
- }
- else if (encoding.equalsIgnoreCase("PEM"))
- {
- ByteArrayOutputStream bOut = new ByteArrayOutputStream();
- PemWriter pWrt = new PemWriter(new OutputStreamWriter(bOut));
-
- try
- {
- for (int i = 0; i != certificates.size(); i++)
- {
- pWrt.writeObject(new PemObject("CERTIFICATE", ((X509Certificate)certificates.get(i)).getEncoded()));
- }
-
- pWrt.close();
- }
- catch (Exception e)
- {
- throw new CertificateEncodingException("can't encode certificate for PEM encoded path");
- }
-
- return bOut.toByteArray();
- }
- else
- {
- throw new CertificateEncodingException("unsupported encoding: " + encoding);
- }
- }
-
- /**
- * Returns the list of certificates in this certification
- * path. The List returned must be immutable and thread-safe.
- *
- * @return an immutable List of Certificates (may be empty, but not null)
- **/
- public List getCertificates()
- {
- return Collections.unmodifiableList(new ArrayList(certificates));
- }
-
- /**
- * Return a DERObject containing the encoded certificate.
- *
- * @param cert the X509Certificate object to be encoded
- *
- * @return the DERObject
- **/
- private ASN1Primitive toASN1Object(
- X509Certificate cert)
- throws CertificateEncodingException
- {
- try
- {
- return new ASN1InputStream(cert.getEncoded()).readObject();
- }
- catch (Exception e)
- {
- throw new CertificateEncodingException("Exception while encoding certificate: " + e.toString());
- }
- }
-
- private byte[] toDEREncoded(ASN1Encodable obj)
- throws CertificateEncodingException
- {
- try
- {
- return obj.toASN1Primitive().getEncoded(ASN1Encoding.DER);
- }
- catch (IOException e)
- {
- throw new CertificateEncodingException("Exception thrown: " + e);
- }
- }
-}
diff --git a/extern/spongycastle/prov/src/main/jdk1.1/org/spongycastle/jcajce/provider/asymmetric/x509/SignatureUtil.java b/extern/spongycastle/prov/src/main/jdk1.1/org/spongycastle/jcajce/provider/asymmetric/x509/SignatureUtil.java
deleted file mode 100644
index e3dc0876b..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.1/org/spongycastle/jcajce/provider/asymmetric/x509/SignatureUtil.java
+++ /dev/null
@@ -1,107 +0,0 @@
-package org.spongycastle.jcajce.provider.asymmetric.x509;
-
-import java.io.IOException;
-import java.security.AlgorithmParameters;
-import java.security.GeneralSecurityException;
-import java.security.InvalidKeyException;
-import java.security.NoSuchAlgorithmException;
-import java.security.NoSuchProviderException;
-import java.security.Signature;
-import java.security.SignatureException;
-
-import org.spongycastle.asn1.ASN1Encodable;
-import org.spongycastle.asn1.ASN1Encoding;
-import org.spongycastle.asn1.ASN1Null;
-import org.spongycastle.asn1.ASN1ObjectIdentifier;
-import org.spongycastle.asn1.ASN1Sequence;
-import org.spongycastle.asn1.DERNull;
-import org.spongycastle.asn1.cryptopro.CryptoProObjectIdentifiers;
-import org.spongycastle.asn1.nist.NISTObjectIdentifiers;
-import org.spongycastle.asn1.oiw.OIWObjectIdentifiers;
-import org.spongycastle.asn1.pkcs.PKCSObjectIdentifiers;
-import org.spongycastle.asn1.pkcs.RSASSAPSSparams;
-import org.spongycastle.asn1.teletrust.TeleTrusTObjectIdentifiers;
-import org.spongycastle.asn1.x509.AlgorithmIdentifier;
-import org.spongycastle.asn1.x9.X9ObjectIdentifiers;
-
-class SignatureUtil
-{
- private static final ASN1Null derNull = new DERNull();
-
- static String getSignatureName(
- AlgorithmIdentifier sigAlgId)
- {
- ASN1Encodable params = sigAlgId.getParameters();
-
- if (params != null && !derNull.equals(params))
- {
- if (sigAlgId.getAlgorithm().equals(PKCSObjectIdentifiers.id_RSASSA_PSS))
- {
- RSASSAPSSparams rsaParams = RSASSAPSSparams.getInstance(params);
-
- return getDigestAlgName(rsaParams.getHashAlgorithm().getAlgorithm()) + "withRSAandMGF1";
- }
- if (sigAlgId.getAlgorithm().equals(X9ObjectIdentifiers.ecdsa_with_SHA2))
- {
- ASN1Sequence ecDsaParams = ASN1Sequence.getInstance(params);
-
- return getDigestAlgName((ASN1ObjectIdentifier)ecDsaParams.getObjectAt(0)) + "withECDSA";
- }
- }
-
- return sigAlgId.getAlgorithm().getId();
- }
-
- /**
- * Return the digest algorithm using one of the standard JCA string
- * representations rather the the algorithm identifier (if possible).
- */
- private static String getDigestAlgName(
- ASN1ObjectIdentifier digestAlgOID)
- {
- if (PKCSObjectIdentifiers.md5.equals(digestAlgOID))
- {
- return "MD5";
- }
- else if (OIWObjectIdentifiers.idSHA1.equals(digestAlgOID))
- {
- return "SHA1";
- }
- else if (NISTObjectIdentifiers.id_sha224.equals(digestAlgOID))
- {
- return "SHA224";
- }
- else if (NISTObjectIdentifiers.id_sha256.equals(digestAlgOID))
- {
- return "SHA256";
- }
- else if (NISTObjectIdentifiers.id_sha384.equals(digestAlgOID))
- {
- return "SHA384";
- }
- else if (NISTObjectIdentifiers.id_sha512.equals(digestAlgOID))
- {
- return "SHA512";
- }
- else if (TeleTrusTObjectIdentifiers.ripemd128.equals(digestAlgOID))
- {
- return "RIPEMD128";
- }
- else if (TeleTrusTObjectIdentifiers.ripemd160.equals(digestAlgOID))
- {
- return "RIPEMD160";
- }
- else if (TeleTrusTObjectIdentifiers.ripemd256.equals(digestAlgOID))
- {
- return "RIPEMD256";
- }
- else if (CryptoProObjectIdentifiers.gostR3411.equals(digestAlgOID))
- {
- return "GOST3411";
- }
- else
- {
- return digestAlgOID.getId();
- }
- }
-}
diff --git a/extern/spongycastle/prov/src/main/jdk1.1/org/spongycastle/jce/MultiCertStoreParameters.java b/extern/spongycastle/prov/src/main/jdk1.1/org/spongycastle/jce/MultiCertStoreParameters.java
deleted file mode 100644
index 8762494b2..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.1/org/spongycastle/jce/MultiCertStoreParameters.java
+++ /dev/null
@@ -1,51 +0,0 @@
-package org.spongycastle.jce;
-
-import java.security.cert.CertStoreParameters;
-import java.util.Collection;
-
-public class MultiCertStoreParameters
- implements CertStoreParameters
-{
- private Collection certStores;
- private boolean searchAllStores;
-
- /**
- * Create a parameters object which specifies searching of all the passed in stores.
- *
- * @param certStores CertStores making up the multi CertStore
- */
- public MultiCertStoreParameters(Collection certStores)
- {
- this(certStores, true);
- }
-
- /**
- * Create a parameters object which can be to used to make a multi store made up
- * of the passed in CertStores. If the searchAllStores parameter is false, any search on
- * the multi-store will terminate as soon as a search query produces a result.
- *
- * @param certStores CertStores making up the multi CertStore
- * @param searchAllStores true if all CertStores should be searched on request, false if a result
- * should be returned on the first successful CertStore query.
- */
- public MultiCertStoreParameters(Collection certStores, boolean searchAllStores)
- {
- this.certStores = certStores;
- this.searchAllStores = searchAllStores;
- }
-
- public Collection getCertStores()
- {
- return certStores;
- }
-
- public boolean getSearchAllStores()
- {
- return searchAllStores;
- }
-
- public Object clone()
- {
- return this;
- }
-}
diff --git a/extern/spongycastle/prov/src/main/jdk1.1/org/spongycastle/jce/netscape/NetscapeCertRequest.java b/extern/spongycastle/prov/src/main/jdk1.1/org/spongycastle/jce/netscape/NetscapeCertRequest.java
deleted file mode 100644
index 45d7975a6..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.1/org/spongycastle/jce/netscape/NetscapeCertRequest.java
+++ /dev/null
@@ -1,296 +0,0 @@
-package org.spongycastle.jce.netscape;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.security.InvalidKeyException;
-import java.security.KeyFactory;
-import java.security.NoSuchAlgorithmException;
-import java.security.NoSuchProviderException;
-import java.security.PrivateKey;
-import java.security.PublicKey;
-import java.security.SecureRandom;
-import java.security.Signature;
-import java.security.SignatureException;
-import java.security.spec.InvalidKeySpecException;
-import java.security.spec.X509EncodedKeySpec;
-
-import org.spongycastle.asn1.ASN1EncodableVector;
-import org.spongycastle.asn1.ASN1Encoding;
-import org.spongycastle.asn1.ASN1InputStream;
-import org.spongycastle.asn1.ASN1Object;
-import org.spongycastle.asn1.ASN1Primitive;
-import org.spongycastle.asn1.ASN1Sequence;
-import org.spongycastle.asn1.DERBitString;
-import org.spongycastle.asn1.DERIA5String;
-import org.spongycastle.asn1.DERSequence;
-import org.spongycastle.asn1.x509.AlgorithmIdentifier;
-import org.spongycastle.asn1.x509.SubjectPublicKeyInfo;
-
-/**
- *
- *
- * Handles NetScape certificate request (KEYGEN), these are constructed as:
- *
- * SignedPublicKeyAndChallenge ::= SEQUENCE {
- * publicKeyAndChallenge PublicKeyAndChallenge,
- * signatureAlgorithm AlgorithmIdentifier,
- * signature BIT STRING
- * }
- *
- *
- * PublicKey's encoded-format has to be X.509.
- *
- **/
-public class NetscapeCertRequest
- extends ASN1Object
-{
- AlgorithmIdentifier sigAlg;
- AlgorithmIdentifier keyAlg;
- byte sigBits [];
- String challenge;
- DERBitString content;
- PublicKey pubkey ;
-
- private static ASN1Sequence getReq(
- byte[] r)
- throws IOException
- {
- ASN1InputStream aIn = new ASN1InputStream(new ByteArrayInputStream(r));
-
- return ASN1Sequence.getInstance(aIn.readObject());
- }
-
- public NetscapeCertRequest(
- byte[] req)
- throws IOException
- {
- this(getReq(req));
- }
-
- public NetscapeCertRequest (ASN1Sequence spkac)
- {
- try
- {
-
- //
- // SignedPublicKeyAndChallenge ::= SEQUENCE {
- // publicKeyAndChallenge PublicKeyAndChallenge,
- // signatureAlgorithm AlgorithmIdentifier,
- // signature BIT STRING
- // }
- //
- if (spkac.size() != 3)
- {
- throw new IllegalArgumentException("invalid SPKAC (size):"
- + spkac.size());
- }
-
- sigAlg = new AlgorithmIdentifier((ASN1Sequence)spkac
- .getObjectAt(1));
- sigBits = ((DERBitString)spkac.getObjectAt(2)).getBytes();
-
- //
- // PublicKeyAndChallenge ::= SEQUENCE {
- // spki SubjectPublicKeyInfo,
- // challenge IA5STRING
- // }
- //
- ASN1Sequence pkac = (ASN1Sequence)spkac.getObjectAt(0);
-
- if (pkac.size() != 2)
- {
- throw new IllegalArgumentException("invalid PKAC (len): "
- + pkac.size());
- }
-
- challenge = ((DERIA5String)pkac.getObjectAt(1)).getString();
-
- //this could be dangerous, as ASN.1 decoding/encoding
- //could potentially alter the bytes
- content = new DERBitString(pkac);
-
- SubjectPublicKeyInfo pubkeyinfo = new SubjectPublicKeyInfo(
- (ASN1Sequence)pkac.getObjectAt(0));
-
- X509EncodedKeySpec xspec = new X509EncodedKeySpec(new DERBitString(
- pubkeyinfo).getBytes());
-
- keyAlg = pubkeyinfo.getAlgorithmId();
- pubkey = KeyFactory.getInstance(keyAlg.getObjectId().getId(), "SC")
- .generatePublic(xspec);
-
- }
- catch (Exception e)
- {
- throw new IllegalArgumentException(e.toString());
- }
- }
-
- public NetscapeCertRequest(
- String challenge,
- AlgorithmIdentifier signing_alg,
- PublicKey pub_key) throws NoSuchAlgorithmException,
- InvalidKeySpecException, NoSuchProviderException, IOException
- {
-
- this.challenge = challenge;
- sigAlg = signing_alg;
- pubkey = pub_key;
-
- ASN1EncodableVector content_der = new ASN1EncodableVector();
- content_der.add(getKeySpec());
- //content_der.add(new SubjectPublicKeyInfo(sigAlg, new RSAPublicKeyStructure(pubkey.getModulus(), pubkey.getPublicExponent()).getDERObject()));
- content_der.add(new DERIA5String(challenge));
-
- content = new DERBitString(new DERSequence(content_der));
- }
-
- public String getChallenge()
- {
- return challenge;
- }
-
- public void setChallenge(String value)
- {
- challenge = value;
- }
-
- public AlgorithmIdentifier getSigningAlgorithm()
- {
- return sigAlg;
- }
-
- public void setSigningAlgorithm(AlgorithmIdentifier value)
- {
- sigAlg = value;
- }
-
- public AlgorithmIdentifier getKeyAlgorithm()
- {
- return keyAlg;
- }
-
- public void setKeyAlgorithm(AlgorithmIdentifier value)
- {
- keyAlg = value;
- }
-
- public PublicKey getPublicKey()
- {
- return pubkey;
- }
-
- public void setPublicKey(PublicKey value)
- {
- pubkey = value;
- }
-
- public boolean verify(String challenge) throws NoSuchAlgorithmException,
- InvalidKeyException, SignatureException, NoSuchProviderException
- {
- if (!challenge.equals(this.challenge))
- {
- return false;
- }
-
- //
- // Verify the signature .. shows the response was generated
- // by someone who knew the associated private key
- //
- Signature sig = Signature.getInstance(sigAlg.getObjectId().getId(),
- "SC");
- sig.initVerify(pubkey);
- sig.update(content.getBytes());
-
- return sig.verify(sigBits);
- }
-
- public void sign(PrivateKey priv_key) throws NoSuchAlgorithmException,
- InvalidKeyException, SignatureException, NoSuchProviderException,
- InvalidKeySpecException
- {
- sign(priv_key, null);
- }
-
- public void sign(PrivateKey priv_key, SecureRandom rand)
- throws NoSuchAlgorithmException, InvalidKeyException,
- SignatureException, NoSuchProviderException,
- InvalidKeySpecException
- {
- Signature sig = Signature.getInstance(sigAlg.getAlgorithm().getId(),
- "SC");
-
- if (rand != null)
- {
- sig.initSign(priv_key);
- }
- else
- {
- sig.initSign(priv_key);
- }
-
- ASN1EncodableVector pkac = new ASN1EncodableVector();
-
- pkac.add(getKeySpec());
- pkac.add(new DERIA5String(challenge));
-
- try
- {
- sig.update(new DERSequence(pkac).getEncoded(ASN1Encoding.DER));
- }
- catch (IOException ioe)
- {
- throw new SignatureException(ioe.getMessage());
- }
-
- sigBits = sig.sign();
- }
-
- private ASN1Primitive getKeySpec() throws NoSuchAlgorithmException,
- InvalidKeySpecException, NoSuchProviderException
- {
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
-
- ASN1Primitive obj = null;
- try
- {
-
- baos.write(pubkey.getEncoded());
- baos.close();
-
- ASN1InputStream derin = new ASN1InputStream(
- new ByteArrayInputStream(baos.toByteArray()));
-
- obj = derin.readObject();
- }
- catch (IOException ioe)
- {
- throw new InvalidKeySpecException(ioe.getMessage());
- }
- return obj;
- }
-
- public ASN1Primitive toASN1Primitive()
- {
- ASN1EncodableVector spkac = new ASN1EncodableVector();
- ASN1EncodableVector pkac = new ASN1EncodableVector();
-
- try
- {
- pkac.add(getKeySpec());
- }
- catch (Exception e)
- {
- //ignore
- }
-
- pkac.add(new DERIA5String(challenge));
-
- spkac.add(new DERSequence(pkac));
- spkac.add(sigAlg);
- spkac.add(new DERBitString(sigBits));
-
- return new DERSequence(spkac);
- }
-}
diff --git a/extern/spongycastle/prov/src/main/jdk1.1/org/spongycastle/jce/provider/AnnotatedException.java b/extern/spongycastle/prov/src/main/jdk1.1/org/spongycastle/jce/provider/AnnotatedException.java
deleted file mode 100644
index 8c115d984..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.1/org/spongycastle/jce/provider/AnnotatedException.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package org.spongycastle.jce.provider;
-
-public class AnnotatedException
- extends Exception
-{
- private Throwable _underlyingException;
-
- AnnotatedException(String string, Throwable e)
- {
- super(string);
-
- _underlyingException = e;
- }
-
- AnnotatedException(String string)
- {
- this(string, null);
- }
-
- Throwable getUnderlyingException()
- {
- return _underlyingException;
- }
-
- public Throwable getCause()
- {
- return _underlyingException;
- }
-}
diff --git a/extern/spongycastle/prov/src/main/jdk1.1/org/spongycastle/jce/provider/BouncyCastleProvider.java b/extern/spongycastle/prov/src/main/jdk1.1/org/spongycastle/jce/provider/BouncyCastleProvider.java
deleted file mode 100644
index 107e4c9f9..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.1/org/spongycastle/jce/provider/BouncyCastleProvider.java
+++ /dev/null
@@ -1,274 +0,0 @@
-package org.spongycastle.jce.provider;
-
-import java.io.IOException;
-import java.security.PrivateKey;
-import java.security.Provider;
-import java.security.PublicKey;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.spongycastle.asn1.ASN1ObjectIdentifier;
-import org.spongycastle.asn1.pkcs.PrivateKeyInfo;
-import org.spongycastle.asn1.x509.SubjectPublicKeyInfo;
-import org.spongycastle.jcajce.provider.config.ConfigurableProvider;
-import org.spongycastle.jcajce.provider.config.ProviderConfiguration;
-import org.spongycastle.jcajce.provider.util.AlgorithmProvider;
-import org.spongycastle.jcajce.provider.util.AsymmetricKeyInfoConverter;
-
-/**
- * To add the provider at runtime use:
- * - * import java.security.Security; - * import org.spongycastle.jce.provider.BouncyCastleProvider; - * - * Security.addProvider(new BouncyCastleProvider()); - *- * The provider can also be configured as part of your environment via - * static registration by adding an entry to the java.security properties - * file (found in $JAVA_HOME/jre/lib/security/java.security, where - * $JAVA_HOME is the location of your JDK/JRE distribution). You'll find - * detailed instructions in the file but basically it comes down to adding - * a line: - *
- *
- * security.provider.<n>=org.spongycastle.jce.provider.BouncyCastleProvider
- *
- *
- * Where <n> is the preference you want the provider at (1 being the
- * most preferred).
- * Note: JCE algorithm names should be upper-case only so the case insensitive
- * test for getInstance works.
- */
-public final class BouncyCastleProvider extends Provider
- implements ConfigurableProvider
-{
- private static String info = "BouncyCastle Security Provider v1.51";
-
- public static final String PROVIDER_NAME = "SC";
-
- public static final ProviderConfiguration CONFIGURATION = new BouncyCastleProviderConfiguration();
-
- private static final Map keyInfoConverters = new HashMap();
-
- /*
- * Configurable symmetric ciphers
- */
- private static final String SYMMETRIC_PACKAGE = "org.spongycastle.jcajce.provider.symmetric.";
-
- private static final String[] SYMMETRIC_GENERIC =
- {
- "PBEPBKDF2", "PBEPKCS12"
- };
-
- private static final String[] SYMMETRIC_MACS =
- {
- "SipHash"
- };
-
- private static final String[] SYMMETRIC_CIPHERS =
- {
- "AES", "ARC4", "Blowfish", "Camellia", "CAST5", "CAST6", "ChaCha", "DES", "DESede",
- "GOST28147", "Grainv1", "Grain128", "HC128", "HC256", "IDEA", "Noekeon", "RC2", "RC5",
- "RC6", "Rijndael", "Salsa20", "SEED", "Serpent", "Shacal2", "Skipjack", "TEA", "Twofish", "Threefish",
- "VMPC", "VMPCKSA3", "XTEA", "XSalsa20"
- };
-
- /*
- * Configurable asymmetric ciphers
- */
- private static final String ASYMMETRIC_PACKAGE = "org.spongycastle.jcajce.provider.asymmetric.";
-
- // this one is required for GNU class path - it needs to be loaded first as the
- // later ones configure it.
- private static final String[] ASYMMETRIC_GENERIC =
- {
- "X509", "IES"
- };
-
- private static final String[] ASYMMETRIC_CIPHERS =
- {
- "DSA", "DH", "EC", "RSA", "GOST", "ECGOST", "ElGamal", "DSTU4145"
- };
-
- /*
- * Configurable digests
- */
- private static final String DIGEST_PACKAGE = "org.spongycastle.jcajce.provider.digest.";
- private static final String[] DIGESTS =
- {
- "GOST3411", "MD2", "MD4", "MD5", "SHA1", "RIPEMD128", "RIPEMD160", "RIPEMD256", "RIPEMD320", "SHA224", "SHA256", "SHA384", "SHA512", "SHA3", "Skein", "SM3", "Tiger", "Whirlpool"
- };
-
- /*
- * Configurable keystores
- */
- private static final String KEYSTORE_PACKAGE = "org.spongycastle.jcajce.provider.keystore.";
- private static final String[] KEYSTORES =
- {
- "SC", "PKCS12"
- };
-
- /**
- * Construct a new provider. This should only be required when
- * using runtime registration of the provider using the
- *
- *
- * This cannot be used if a v1 attribute certificate is used.
- *
- * @param digestedObjectType The digest object type.
- * @param digestAlgorithm The algorithm identifier for the hash.
- * @param otherObjectTypeID The object type ID if
- *
- *
- * Each attribute certificate may contain a target information extension
- * limiting the servers where this attribute certificate can be used. If
- * this extension is not present, the attribute certificate is not targeted
- * and may be accepted by any server.
- *
- * @param name The name as a GeneralName (not
- * Each attribute certificate may contain a target information extension
- * limiting the servers where this attribute certificate can be used. If
- * this extension is not present, the attribute certificate is not targeted
- * and may be accepted by any server.
- *
- * @param name a byte array containing the name in ASN.1 DER encoded form of a GeneralName
- * @throws IOException if a parsing error occurs.
- */
- public void addTargetName(byte[] name) throws IOException
- {
- addTargetName(GeneralName.getInstance(ASN1Primitive.fromByteArray(name)));
- }
-
- /**
- * Adds a collection with target names criteria. If
- * The collection consists of either GeneralName objects or byte[] arrays representing
- * DER encoded GeneralName structures.
- *
- * @param names A collection of target names.
- * @throws IOException if a parsing error occurs.
- * @see #addTargetName(byte[])
- * @see #addTargetName(GeneralName)
- */
- public void setTargetNames(Collection names) throws IOException
- {
- targetNames = extractGeneralNames(names);
- }
-
- /**
- * Gets the target names. The collection consists of
- * The returned collection is immutable.
- *
- * @return The collection of target names
- * @see #setTargetNames(Collection)
- */
- public Collection getTargetNames()
- {
- return Collections.unmodifiableCollection(targetNames);
- }
-
- /**
- * Adds a target group criterion for the attribute certificate to the target
- * information extension criteria. The
- * Each attribute certificate may contain a target information extension
- * limiting the servers where this attribute certificate can be used. If
- * this extension is not present, the attribute certificate is not targeted
- * and may be accepted by any server.
- *
- * @param group The group as GeneralName form (not
- * Each attribute certificate may contain a target information extension
- * limiting the servers where this attribute certificate can be used. If
- * this extension is not present, the attribute certificate is not targeted
- * and may be accepted by any server.
- *
- * @param name a byte array containing the group in ASN.1 DER encoded form of a GeneralName
- * @throws IOException if a parsing error occurs.
- */
- public void addTargetGroup(byte[] name) throws IOException
- {
- addTargetGroup(GeneralName.getInstance(ASN1Primitive.fromByteArray(name)));
- }
-
- /**
- * Adds a collection with target groups criteria. If
- * The collection consists of
- * The returned collection is immutable.
- *
- * @return The collection of target groups.
- * @see #setTargetGroups(Collection)
- */
- public Collection getTargetGroups()
- {
- return Collections.unmodifiableCollection(targetGroups);
- }
-
- private Set extractGeneralNames(Collection names)
- throws IOException
- {
- if (names == null || names.isEmpty())
- {
- return new HashSet();
- }
- Set temp = new HashSet();
- for (Iterator it = names.iterator(); it.hasNext();)
- {
- Object o = it.next();
- if (o instanceof GeneralName)
- {
- temp.add(o);
- }
- else
- {
- temp.add(GeneralName.getInstance(ASN1Primitive.fromByteArray((byte[])o)));
- }
- }
- return temp;
- }
-}
diff --git a/extern/spongycastle/prov/src/main/jdk1.1/org/spongycastle/x509/X509CRLStoreSelector.java b/extern/spongycastle/prov/src/main/jdk1.1/org/spongycastle/x509/X509CRLStoreSelector.java
deleted file mode 100644
index a6c8cc31f..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.1/org/spongycastle/x509/X509CRLStoreSelector.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package org.spongycastle.x509;
-
-import org.spongycastle.util.Selector;
-
-import java.security.cert.X509CRLSelector;
-import java.security.cert.CRL;
-
-public class X509CRLStoreSelector
- extends X509CRLSelector
- implements Selector
-{
- public boolean match(Object obj)
- {
- if (!(obj instanceof CRL))
- {
- return false;
- }
-
- return super.match((CRL)obj);
- }
-
- public boolean match(CRL obj)
- {
- return this.match((Object)obj);
- }
-}
diff --git a/extern/spongycastle/prov/src/main/jdk1.1/org/spongycastle/x509/X509CertStoreSelector.java b/extern/spongycastle/prov/src/main/jdk1.1/org/spongycastle/x509/X509CertStoreSelector.java
deleted file mode 100644
index 2c0e6cc34..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.1/org/spongycastle/x509/X509CertStoreSelector.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package org.spongycastle.x509;
-
-import org.spongycastle.util.Selector;
-
-import java.security.cert.X509CertSelector;
-import java.security.cert.Certificate;
-
-public class X509CertStoreSelector
- extends X509CertSelector
- implements Selector
-{
- public boolean match(Object obj)
- {
- if (!(obj instanceof Certificate))
- {
- return false;
- }
-
- return super.match((Certificate)obj);
- }
-
- public boolean match(Certificate obj)
- {
- return this.match((Object)obj);
- }
-}
diff --git a/extern/spongycastle/prov/src/main/jdk1.1/org/spongycastle/x509/X509Util.java b/extern/spongycastle/prov/src/main/jdk1.1/org/spongycastle/x509/X509Util.java
deleted file mode 100644
index 74aa897bb..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.1/org/spongycastle/x509/X509Util.java
+++ /dev/null
@@ -1,397 +0,0 @@
-package org.spongycastle.x509;
-
-import java.io.IOException;
-import java.security.InvalidKeyException;
-import java.security.NoSuchAlgorithmException;
-import java.security.NoSuchProviderException;
-import java.security.PrivateKey;
-import java.security.Provider;
-import java.security.SecureRandom;
-import java.security.Security;
-import java.security.Signature;
-import java.security.SignatureException;
-import java.util.ArrayList;
-import java.util.Enumeration;
-import java.util.HashSet;
-import java.util.Hashtable;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-
-import org.spongycastle.asn1.ASN1Encodable;
-import org.spongycastle.asn1.ASN1Encoding;
-import org.spongycastle.asn1.ASN1Integer;
-import org.spongycastle.asn1.DERNull;
-import org.spongycastle.asn1.ASN1ObjectIdentifier;
-import org.spongycastle.asn1.cryptopro.CryptoProObjectIdentifiers;
-import org.spongycastle.asn1.nist.NISTObjectIdentifiers;
-import org.spongycastle.asn1.oiw.OIWObjectIdentifiers;
-import org.spongycastle.asn1.pkcs.PKCSObjectIdentifiers;
-import org.spongycastle.asn1.pkcs.RSASSAPSSparams;
-import org.spongycastle.asn1.teletrust.TeleTrusTObjectIdentifiers;
-import org.spongycastle.asn1.x509.AlgorithmIdentifier;
-import org.spongycastle.asn1.x9.X9ObjectIdentifiers;
-import org.spongycastle.jce.X509Principal;
-import org.spongycastle.util.Strings;
-
-class X509Util
-{
- private static Hashtable algorithms = new Hashtable();
- private static Hashtable params = new Hashtable();
- private static Set noParams = new HashSet();
-
- static
- {
- algorithms.put("MD2WITHRSAENCRYPTION", PKCSObjectIdentifiers.md2WithRSAEncryption);
- algorithms.put("MD2WITHRSA", PKCSObjectIdentifiers.md2WithRSAEncryption);
- algorithms.put("MD5WITHRSAENCRYPTION", PKCSObjectIdentifiers.md5WithRSAEncryption);
- algorithms.put("MD5WITHRSA", PKCSObjectIdentifiers.md5WithRSAEncryption);
- algorithms.put("SHA1WITHRSAENCRYPTION", PKCSObjectIdentifiers.sha1WithRSAEncryption);
- algorithms.put("SHA1WITHRSA", PKCSObjectIdentifiers.sha1WithRSAEncryption);
- algorithms.put("SHA224WITHRSAENCRYPTION", PKCSObjectIdentifiers.sha224WithRSAEncryption);
- algorithms.put("SHA224WITHRSA", PKCSObjectIdentifiers.sha224WithRSAEncryption);
- algorithms.put("SHA256WITHRSAENCRYPTION", PKCSObjectIdentifiers.sha256WithRSAEncryption);
- algorithms.put("SHA256WITHRSA", PKCSObjectIdentifiers.sha256WithRSAEncryption);
- algorithms.put("SHA384WITHRSAENCRYPTION", PKCSObjectIdentifiers.sha384WithRSAEncryption);
- algorithms.put("SHA384WITHRSA", PKCSObjectIdentifiers.sha384WithRSAEncryption);
- algorithms.put("SHA512WITHRSAENCRYPTION", PKCSObjectIdentifiers.sha512WithRSAEncryption);
- algorithms.put("SHA512WITHRSA", PKCSObjectIdentifiers.sha512WithRSAEncryption);
- algorithms.put("SHA1WITHRSAANDMGF1", PKCSObjectIdentifiers.id_RSASSA_PSS);
- algorithms.put("SHA224WITHRSAANDMGF1", PKCSObjectIdentifiers.id_RSASSA_PSS);
- algorithms.put("SHA256WITHRSAANDMGF1", PKCSObjectIdentifiers.id_RSASSA_PSS);
- algorithms.put("SHA384WITHRSAANDMGF1", PKCSObjectIdentifiers.id_RSASSA_PSS);
- algorithms.put("SHA512WITHRSAANDMGF1", PKCSObjectIdentifiers.id_RSASSA_PSS);
- algorithms.put("RIPEMD160WITHRSAENCRYPTION", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd160);
- algorithms.put("RIPEMD160WITHRSA", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd160);
- algorithms.put("RIPEMD128WITHRSAENCRYPTION", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd128);
- algorithms.put("RIPEMD128WITHRSA", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd128);
- algorithms.put("RIPEMD256WITHRSAENCRYPTION", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd256);
- algorithms.put("RIPEMD256WITHRSA", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd256);
- algorithms.put("SHA1WITHDSA", X9ObjectIdentifiers.id_dsa_with_sha1);
- algorithms.put("DSAWITHSHA1", X9ObjectIdentifiers.id_dsa_with_sha1);
- algorithms.put("SHA224WITHDSA", NISTObjectIdentifiers.dsa_with_sha224);
- algorithms.put("SHA256WITHDSA", NISTObjectIdentifiers.dsa_with_sha256);
- algorithms.put("SHA384WITHDSA", NISTObjectIdentifiers.dsa_with_sha384);
- algorithms.put("SHA512WITHDSA", NISTObjectIdentifiers.dsa_with_sha512);
- algorithms.put("SHA1WITHECDSA", X9ObjectIdentifiers.ecdsa_with_SHA1);
- algorithms.put("ECDSAWITHSHA1", X9ObjectIdentifiers.ecdsa_with_SHA1);
- algorithms.put("SHA224WITHECDSA", X9ObjectIdentifiers.ecdsa_with_SHA224);
- algorithms.put("SHA256WITHECDSA", X9ObjectIdentifiers.ecdsa_with_SHA256);
- algorithms.put("SHA384WITHECDSA", X9ObjectIdentifiers.ecdsa_with_SHA384);
- algorithms.put("SHA512WITHECDSA", X9ObjectIdentifiers.ecdsa_with_SHA512);
- algorithms.put("GOST3411WITHGOST3410", CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_94);
- algorithms.put("GOST3411WITHGOST3410-94", CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_94);
- algorithms.put("GOST3411WITHECGOST3410", CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_2001);
- algorithms.put("GOST3411WITHECGOST3410-2001", CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_2001);
- algorithms.put("GOST3411WITHGOST3410-2001", CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_2001);
-
- //
- // According to RFC 3279, the ASN.1 encoding SHALL (id-dsa-with-sha1) or MUST (ecdsa-with-SHA*) omit the parameters field.
- // The parameters field SHALL be NULL for RSA based signature algorithms.
- //
- noParams.add(X9ObjectIdentifiers.ecdsa_with_SHA1);
- noParams.add(X9ObjectIdentifiers.ecdsa_with_SHA224);
- noParams.add(X9ObjectIdentifiers.ecdsa_with_SHA256);
- noParams.add(X9ObjectIdentifiers.ecdsa_with_SHA384);
- noParams.add(X9ObjectIdentifiers.ecdsa_with_SHA512);
- noParams.add(X9ObjectIdentifiers.id_dsa_with_sha1);
- noParams.add(NISTObjectIdentifiers.dsa_with_sha224);
- noParams.add(NISTObjectIdentifiers.dsa_with_sha256);
- noParams.add(NISTObjectIdentifiers.dsa_with_sha384);
- noParams.add(NISTObjectIdentifiers.dsa_with_sha512);
-
- //
- // RFC 4491
- //
- noParams.add(CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_94);
- noParams.add(CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_2001);
-
- //
- // explicit params
- //
- AlgorithmIdentifier sha1AlgId = new AlgorithmIdentifier(OIWObjectIdentifiers.idSHA1, new DERNull());
- params.put("SHA1WITHRSAANDMGF1", creatPSSParams(sha1AlgId, 20));
-
- AlgorithmIdentifier sha224AlgId = new AlgorithmIdentifier(NISTObjectIdentifiers.id_sha224, new DERNull());
- params.put("SHA224WITHRSAANDMGF1", creatPSSParams(sha224AlgId, 28));
-
- AlgorithmIdentifier sha256AlgId = new AlgorithmIdentifier(NISTObjectIdentifiers.id_sha256, new DERNull());
- params.put("SHA256WITHRSAANDMGF1", creatPSSParams(sha256AlgId, 32));
-
- AlgorithmIdentifier sha384AlgId = new AlgorithmIdentifier(NISTObjectIdentifiers.id_sha384, new DERNull());
- params.put("SHA384WITHRSAANDMGF1", creatPSSParams(sha384AlgId, 48));
-
- AlgorithmIdentifier sha512AlgId = new AlgorithmIdentifier(NISTObjectIdentifiers.id_sha512, new DERNull());
- params.put("SHA512WITHRSAANDMGF1", creatPSSParams(sha512AlgId, 64));
- }
-
- private static RSASSAPSSparams creatPSSParams(AlgorithmIdentifier hashAlgId, int saltSize)
- {
- return new RSASSAPSSparams(
- hashAlgId,
- new AlgorithmIdentifier(PKCSObjectIdentifiers.id_mgf1, hashAlgId),
- new ASN1Integer(saltSize),
- new ASN1Integer(1));
- }
-
- static ASN1ObjectIdentifier getAlgorithmOID(
- String algorithmName)
- {
- algorithmName = Strings.toUpperCase(algorithmName);
-
- if (algorithms.containsKey(algorithmName))
- {
- return (ASN1ObjectIdentifier)algorithms.get(algorithmName);
- }
-
- return new ASN1ObjectIdentifier(algorithmName);
- }
-
- static AlgorithmIdentifier getSigAlgID(
- ASN1ObjectIdentifier sigOid,
- String algorithmName)
- {
- if (noParams.contains(sigOid))
- {
- return new AlgorithmIdentifier(sigOid);
- }
-
- algorithmName = Strings.toUpperCase(algorithmName);
-
- if (params.containsKey(algorithmName))
- {
- return new AlgorithmIdentifier(sigOid, (ASN1Encodable)params.get(algorithmName));
- }
- else
- {
- return new AlgorithmIdentifier(sigOid, new DERNull());
- }
- }
-
- static Iterator getAlgNames()
- {
- Enumeration e = algorithms.keys();
- List l = new ArrayList();
-
- while (e.hasMoreElements())
- {
- l.add(e.nextElement());
- }
-
- return l.iterator();
- }
-
- static Signature getSignatureInstance(
- String algorithm)
- throws NoSuchAlgorithmException
- {
- return Signature.getInstance(algorithm);
- }
-
- static Signature getSignatureInstance(
- String algorithm,
- String provider)
- throws NoSuchProviderException, NoSuchAlgorithmException
- {
- if (provider != null)
- {
- return Signature.getInstance(algorithm, provider);
- }
- else
- {
- return Signature.getInstance(algorithm);
- }
- }
-
- static byte[] calculateSignature(
- ASN1ObjectIdentifier sigOid,
- String sigName,
- PrivateKey key,
- SecureRandom random,
- ASN1Encodable object)
- throws IOException, NoSuchAlgorithmException, InvalidKeyException, SignatureException
- {
- Signature sig;
-
- if (sigOid == null)
- {
- throw new IllegalStateException("no signature algorithm specified");
- }
-
- sig = X509Util.getSignatureInstance(sigName);
-
- if (random != null)
- {
- sig.initSign(key);
- }
- else
- {
- sig.initSign(key);
- }
-
- sig.update(object.toASN1Primitive().getEncoded(ASN1Encoding.DER));
-
- return sig.sign();
- }
-
- static byte[] calculateSignature(
- ASN1ObjectIdentifier sigOid,
- String sigName,
- String provider,
- PrivateKey key,
- SecureRandom random,
- ASN1Encodable object)
- throws IOException, NoSuchProviderException, NoSuchAlgorithmException, InvalidKeyException, SignatureException
- {
- Signature sig;
-
- if (sigOid == null)
- {
- throw new IllegalStateException("no signature algorithm specified");
- }
-
- sig = X509Util.getSignatureInstance(sigName, provider);
-
- if (random != null)
- {
- sig.initSign(key);
- }
- else
- {
- sig.initSign(key);
- }
-
- sig.update(object.toASN1Primitive().getEncoded(ASN1Encoding.DER));
-
- return sig.sign();
- }
-
- static class Implementation
- {
- Object engine;
- Provider provider;
-
- Implementation(
- Object engine,
- Provider provider)
- {
- this.engine = engine;
- this.provider = provider;
- }
-
- Object getEngine()
- {
- return engine;
- }
-
- Provider getProvider()
- {
- return provider;
- }
- }
-
- /**
- * see if we can find an algorithm (or its alias and what it represents) in
- * the property table for the given provider.
- */
- static Implementation getImplementation(
- String baseName,
- String algorithm,
- Provider prov)
- throws NoSuchAlgorithmException
- {
- algorithm = Strings.toUpperCase(algorithm);
-
- String alias;
-
- while ((alias = prov.getProperty("Alg.Alias." + baseName + "." + algorithm)) != null)
- {
- algorithm = alias;
- }
-
- String className = prov.getProperty(baseName + "." + algorithm);
-
- if (className != null)
- {
- try
- {
- Class cls;
- ClassLoader clsLoader = prov.getClass().getClassLoader();
-
- if (clsLoader != null)
- {
- cls = clsLoader.loadClass(className);
- }
- else
- {
- cls = Class.forName(className);
- }
-
- return new Implementation(cls.newInstance(), prov);
- }
- catch (ClassNotFoundException e)
- {
- throw new IllegalStateException(
- "algorithm " + algorithm + " in provider " + prov.getName() + " but no class \"" + className + "\" found!");
- }
- catch (Exception e)
- {
- throw new IllegalStateException(
- "algorithm " + algorithm + " in provider " + prov.getName() + " but class \"" + className + "\" inaccessible!");
- }
- }
-
- throw new NoSuchAlgorithmException("cannot find implementation " + algorithm + " for provider " + prov.getName());
- }
-
- /**
- * return an implementation for a given algorithm/provider.
- * If the provider is null, we grab the first avalaible who has the required algorithm.
- */
- static Implementation getImplementation(
- String baseName,
- String algorithm)
- throws NoSuchAlgorithmException
- {
- Provider[] prov = Security.getProviders();
-
- //
- // search every provider looking for the algorithm we want.
- //
- for (int i = 0; i != prov.length; i++)
- {
- //
- // try case insensitive
- //
- Implementation imp = getImplementation(baseName, Strings.toUpperCase(algorithm), prov[i]);
- if (imp != null)
- {
- return imp;
- }
-
- try
- {
- imp = getImplementation(baseName, algorithm, prov[i]);
- }
- catch (NoSuchAlgorithmException e)
- {
- // continue
- }
- }
-
- throw new NoSuchAlgorithmException("cannot find implementation " + algorithm);
- }
-
- static Provider getProvider(String provider)
- throws NoSuchProviderException
- {
- Provider prov = Security.getProvider(provider);
-
- if (prov == null)
- {
- throw new NoSuchProviderException("Provider " + provider + " not found");
- }
-
- return prov;
- }
-}
diff --git a/extern/spongycastle/prov/src/main/jdk1.1/org/spongycastle/x509/X509V1CertificateGenerator.java b/extern/spongycastle/prov/src/main/jdk1.1/org/spongycastle/x509/X509V1CertificateGenerator.java
deleted file mode 100644
index 95cf7d6ad..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.1/org/spongycastle/x509/X509V1CertificateGenerator.java
+++ /dev/null
@@ -1,345 +0,0 @@
-package org.spongycastle.x509;
-
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.math.BigInteger;
-import java.security.GeneralSecurityException;
-import java.security.InvalidKeyException;
-import java.security.NoSuchAlgorithmException;
-import java.security.NoSuchProviderException;
-import java.security.PrivateKey;
-import java.security.PublicKey;
-import java.security.SecureRandom;
-import java.security.SignatureException;
-import java.security.cert.CertificateEncodingException;
-import java.security.cert.CertificateParsingException;
-import java.security.cert.X509Certificate;
-import java.util.Date;
-import java.util.Iterator;
-
-import org.spongycastle.asn1.ASN1EncodableVector;
-import org.spongycastle.asn1.ASN1InputStream;
-import org.spongycastle.asn1.ASN1Integer;
-import org.spongycastle.asn1.ASN1Sequence;
-import org.spongycastle.asn1.DERBitString;
-import org.spongycastle.asn1.ASN1ObjectIdentifier;
-import org.spongycastle.asn1.DERSequence;
-import org.spongycastle.asn1.x509.AlgorithmIdentifier;
-import org.spongycastle.asn1.x509.SubjectPublicKeyInfo;
-import org.spongycastle.asn1.x509.TBSCertificate;
-import org.spongycastle.asn1.x509.Time;
-import org.spongycastle.asn1.x509.V1TBSCertificateGenerator;
-import org.spongycastle.asn1.x509.Certificate;
-import org.spongycastle.asn1.x509.X509Name;
-import org.spongycastle.jce.provider.X509CertificateObject;
-
-/**
- * class to produce an X.509 Version 1 certificate.
- * @deprecated use org.spongycastle.cert.X509v1CertificateBuilder.
- */
-public class X509V1CertificateGenerator
-{
- private V1TBSCertificateGenerator tbsGen;
- private ASN1ObjectIdentifier sigOID;
- private AlgorithmIdentifier sigAlgId;
- private String signatureAlgorithm;
-
- public X509V1CertificateGenerator()
- {
- tbsGen = new V1TBSCertificateGenerator();
- }
-
- /**
- * reset the generator
- */
- public void reset()
- {
- tbsGen = new V1TBSCertificateGenerator();
- }
-
- /**
- * set the serial number for the certificate.
- */
- public void setSerialNumber(
- BigInteger serialNumber)
- {
- if (serialNumber.compareTo(BigInteger.valueOf(0)) <= 0)
- {
- throw new IllegalArgumentException("serial number must be a positive integer");
- }
-
- tbsGen.setSerialNumber(new ASN1Integer(serialNumber));
- }
-
- /**
- * Set the issuer distinguished name - the issuer is the entity whose private key is used to sign the
- * certificate.
- */
- public void setIssuerDN(
- X509Name issuer)
- {
- tbsGen.setIssuer(issuer);
- }
-
- public void setNotBefore(
- Date date)
- {
- tbsGen.setStartDate(new Time(date));
- }
-
- public void setNotAfter(
- Date date)
- {
- tbsGen.setEndDate(new Time(date));
- }
-
- /**
- * Set the subject distinguished name. The subject describes the entity associated with the public key.
- */
- public void setSubjectDN(
- X509Name subject)
- {
- tbsGen.setSubject(subject);
- }
-
- public void setPublicKey(
- PublicKey key)
- {
- try
- {
- tbsGen.setSubjectPublicKeyInfo(new SubjectPublicKeyInfo((ASN1Sequence)new ASN1InputStream(
- new ByteArrayInputStream(key.getEncoded())).readObject()));
- }
- catch (Exception e)
- {
- throw new IllegalArgumentException("unable to process key - " + e.toString());
- }
- }
-
- /**
- * Set the signature algorithm. This can be either a name or an OID, names
- * are treated as case insensitive.
- *
- * @param signatureAlgorithm string representation of the algorithm name.
- */
- public void setSignatureAlgorithm(
- String signatureAlgorithm)
- {
- this.signatureAlgorithm = signatureAlgorithm;
-
- try
- {
- sigOID = X509Util.getAlgorithmOID(signatureAlgorithm);
- }
- catch (Exception e)
- {
- throw new IllegalArgumentException("Unknown signature type requested");
- }
-
- sigAlgId = X509Util.getSigAlgID(sigOID, signatureAlgorithm);
-
- tbsGen.setSignature(sigAlgId);
- }
-
- /**
- * generate an X509 certificate, based on the current issuer and subject
- * using the default provider "SC".
- * @deprecated use generate(key, "SC")
- */
- public X509Certificate generateX509Certificate(
- PrivateKey key)
- throws SecurityException, SignatureException, InvalidKeyException
- {
- try
- {
- return generateX509Certificate(key, "SC", null);
- }
- catch (NoSuchProviderException e)
- {
- throw new SecurityException("BC provider not installed!");
- }
- }
-
- /**
- * generate an X509 certificate, based on the current issuer and subject
- * using the default provider "SC" and the passed in source of randomness
- * @deprecated use generate(key, random, "SC")
- */
- public X509Certificate generateX509Certificate(
- PrivateKey key,
- SecureRandom random)
- throws SecurityException, SignatureException, InvalidKeyException
- {
- try
- {
- return generateX509Certificate(key, "SC", random);
- }
- catch (NoSuchProviderException e)
- {
- throw new SecurityException("BC provider not installed!");
- }
- }
-
- /**
- * generate an X509 certificate, based on the current issuer and subject,
- * using the passed in provider for the signing, and the passed in source
- * of randomness (if required).
- * @deprecated use generate()
- */
- public X509Certificate generateX509Certificate(
- PrivateKey key,
- String provider)
- throws NoSuchProviderException, SecurityException, SignatureException, InvalidKeyException
- {
- return generateX509Certificate(key, provider, null);
- }
-
- /**
- * generate an X509 certificate, based on the current issuer and subject,
- * using the passed in provider for the signing, and the passed in source
- * of randomness (if required).
- * @deprecated use generate()
- */
- public X509Certificate generateX509Certificate(
- PrivateKey key,
- String provider,
- SecureRandom random)
- throws NoSuchProviderException, SecurityException, SignatureException, InvalidKeyException
- {
- try
- {
- return generate(key, provider, random);
- }
- catch (NoSuchProviderException e)
- {
- throw e;
- }
- catch (SignatureException e)
- {
- throw e;
- }
- catch (InvalidKeyException e)
- {
- throw e;
- }
- catch (NoSuchAlgorithmException e)
- {
- throw new SecurityException("exception: " + e);
- }
- catch (GeneralSecurityException e)
- {
- throw new SecurityException("exception: " + e);
- }
- }
-
- /**
- * generate an X509 certificate, based on the current issuer and subject
- * using the default provider.
- *
- * Note: this differs from the deprecated method in that the default provider is
- * used - not "SC".
- *
- * Note: this differs from the deprecated method in that the default provider is
- * used - not "SC".
- *
- * Note: this differs from the deprecated method in that the default provider is
- * used - not "SC".
- *
- * Note: this differs from the deprecated method in that the default provider is
- * used - not "SC".
- *
- * Note: this differs from the deprecated method in that the default provider is
- * used - not "SC".
- *
- * Note: this differs from the deprecated method in that the default provider is
- * used - not "SC".
- *
- * At the moment this will deal with "-----BEGIN CERTIFICATE-----" to "-----END CERTIFICATE-----"
- * base 64 encoded certs, as well as the BER binaries of certificates and some classes of PKCS#7
- * objects.
- */
-public class CertificateFactory
- extends CertificateFactorySpi
-{
- private static final PEMUtil PEM_CERT_PARSER = new PEMUtil("CERTIFICATE");
- private static final PEMUtil PEM_CRL_PARSER = new PEMUtil("CRL");
-
- private ASN1Set sData = null;
- private int sDataObjectCount = 0;
- private InputStream currentStream = null;
-
- private ASN1Set sCrlData = null;
- private int sCrlDataObjectCount = 0;
- private InputStream currentCrlStream = null;
-
- private java.security.cert.Certificate readDERCertificate(
- ASN1InputStream dIn)
- throws IOException, CertificateParsingException
- {
- ASN1Sequence seq = (ASN1Sequence)dIn.readObject();
-
- if (seq.size() > 1
- && seq.getObjectAt(0) instanceof ASN1ObjectIdentifier)
- {
- if (seq.getObjectAt(0).equals(PKCSObjectIdentifiers.signedData))
- {
- sData = SignedData.getInstance(ASN1Sequence.getInstance(
- (ASN1TaggedObject)seq.getObjectAt(1), true)).getCertificates();
-
- return getCertificate();
- }
- }
-
- return new X509CertificateObject(
- Certificate.getInstance(seq));
- }
-
- private java.security.cert.Certificate getCertificate()
- throws CertificateParsingException
- {
- if (sData != null)
- {
- while (sDataObjectCount < sData.size())
- {
- Object obj = sData.getObjectAt(sDataObjectCount++);
-
- if (obj instanceof ASN1Sequence)
- {
- return new X509CertificateObject(
- Certificate.getInstance(obj));
- }
- }
- }
-
- return null;
- }
-
- private java.security.cert.Certificate readPEMCertificate(
- InputStream in)
- throws IOException, CertificateParsingException
- {
- ASN1Sequence seq = PEM_CERT_PARSER.readPEMObject(in);
-
- if (seq != null)
- {
- return new X509CertificateObject(
- Certificate.getInstance(seq));
- }
-
- return null;
- }
-
- protected CRL createCRL(CertificateList c)
- throws CRLException
- {
- return new X509CRLObject(c);
- }
-
- private CRL readPEMCRL(
- InputStream in)
- throws IOException, CRLException
- {
- ASN1Sequence seq = PEM_CRL_PARSER.readPEMObject(in);
-
- if (seq != null)
- {
- return createCRL(
- CertificateList.getInstance(seq));
- }
-
- return null;
- }
-
- private CRL readDERCRL(
- ASN1InputStream aIn)
- throws IOException, CRLException
- {
- ASN1Sequence seq = (ASN1Sequence)aIn.readObject();
-
- if (seq.size() > 1
- && seq.getObjectAt(0) instanceof ASN1ObjectIdentifier)
- {
- if (seq.getObjectAt(0).equals(PKCSObjectIdentifiers.signedData))
- {
- sCrlData = SignedData.getInstance(ASN1Sequence.getInstance(
- (ASN1TaggedObject)seq.getObjectAt(1), true)).getCRLs();
-
- return getCRL();
- }
- }
-
- return createCRL(
- CertificateList.getInstance(seq));
- }
-
- private CRL getCRL()
- throws CRLException
- {
- if (sCrlData == null || sCrlDataObjectCount >= sCrlData.size())
- {
- return null;
- }
-
- return createCRL(
- CertificateList.getInstance(
- sCrlData.getObjectAt(sCrlDataObjectCount++)));
- }
-
- /**
- * Generates a certificate object and initializes it with the data
- * read from the input stream inStream.
- */
- public java.security.cert.Certificate engineGenerateCertificate(
- InputStream in)
- throws CertificateException
- {
- if (currentStream == null)
- {
- currentStream = in;
- sData = null;
- sDataObjectCount = 0;
- }
- else if (currentStream != in) // reset if input stream has changed
- {
- currentStream = in;
- sData = null;
- sDataObjectCount = 0;
- }
-
- try
- {
- if (sData != null)
- {
- if (sDataObjectCount != sData.size())
- {
- return getCertificate();
- }
- else
- {
- sData = null;
- sDataObjectCount = 0;
- return null;
- }
- }
-
- PushbackInputStream pis = new PushbackInputStream(in);
- int tag = pis.read();
-
- if (tag == -1)
- {
- return null;
- }
-
- pis.unread(tag);
-
- if (tag != 0x30) // assume ascii PEM encoded.
- {
- return readPEMCertificate(pis);
- }
- else
- {
- return readDERCertificate(new ASN1InputStream(pis));
- }
- }
- catch (Exception e)
- {
- throw new ExCertificateException(e);
- }
- }
-
- /**
- * Returns a (possibly empty) collection view of the certificates
- * read from the given input stream inStream.
- */
- public Collection engineGenerateCertificates(
- InputStream inStream)
- throws CertificateException
- {
- java.security.cert.Certificate cert;
- List certs = new ArrayList();
-
- while ((cert = engineGenerateCertificate(inStream)) != null)
- {
- certs.add(cert);
- }
-
- return certs;
- }
-
- /**
- * Generates a certificate revocation list (CRL) object and initializes
- * it with the data read from the input stream inStream.
- */
- public CRL engineGenerateCRL(
- InputStream inStream)
- throws CRLException
- {
- if (currentCrlStream == null)
- {
- currentCrlStream = inStream;
- sCrlData = null;
- sCrlDataObjectCount = 0;
- }
- else if (currentCrlStream != inStream) // reset if input stream has changed
- {
- currentCrlStream = inStream;
- sCrlData = null;
- sCrlDataObjectCount = 0;
- }
-
- try
- {
- if (sCrlData != null)
- {
- if (sCrlDataObjectCount != sCrlData.size())
- {
- return getCRL();
- }
- else
- {
- sCrlData = null;
- sCrlDataObjectCount = 0;
- return null;
- }
- }
-
- PushbackInputStream pis = new PushbackInputStream(inStream);
- int tag = pis.read();
-
- if (tag == -1)
- {
- return null;
- }
-
- pis.unread(tag);
-
- if (tag != 0x30) // assume ascii PEM encoded.
- {
- return readPEMCRL(pis);
- }
- else
- { // lazy evaluate to help processing of large CRLs
- return readDERCRL(new ASN1InputStream(pis, true));
- }
- }
- catch (CRLException e)
- {
- throw e;
- }
- catch (Exception e)
- {
- throw new CRLException(e.toString());
- }
- }
-
- /**
- * Returns a (possibly empty) collection view of the CRLs read from
- * the given input stream inStream.
- *
- * The inStream may contain a sequence of DER-encoded CRLs, or
- * a PKCS#7 CRL set. This is a PKCS#7 SignedData object, with the
- * only signficant field being crls. In particular the signature
- * and the contents are ignored.
- */
- public Collection engineGenerateCRLs(
- InputStream inStream)
- throws CRLException
- {
- CRL crl;
- List crls = new ArrayList();
-
- while ((crl = engineGenerateCRL(inStream)) != null)
- {
- crls.add(crl);
- }
-
- return crls;
- }
-
- public Iterator engineGetCertPathEncodings()
- {
- return null; // TODO: PKIXCertPath.certPathEncodings.iterator();
- }
-
- public CertPath engineGenerateCertPath(
- InputStream inStream)
- throws CertificateException
- {
- return engineGenerateCertPath(inStream, "PkiPath");
- }
-
- public CertPath engineGenerateCertPath(
- InputStream inStream,
- String encoding)
- throws CertificateException
- {
- return new PKIXCertPath(inStream, encoding);
- }
-
- public CertPath engineGenerateCertPath(
- List certificates)
- throws CertificateException
- {
- Iterator iter = certificates.iterator();
- Object obj;
- while (iter.hasNext())
- {
- obj = iter.next();
- if (obj != null)
- {
- if (!(obj instanceof X509Certificate))
- {
- throw new CertificateException("list contains non X509Certificate object while creating CertPath\n" + obj.toString());
- }
- }
- }
- return new PKIXCertPath(certificates);
- }
-
- private class ExCertificateException
- extends CertificateException
- {
- private Throwable cause;
-
- public ExCertificateException(Throwable cause)
- {
- this.cause = cause;
- }
-
- public ExCertificateException(String msg, Throwable cause)
- {
- super(msg);
-
- this.cause = cause;
- }
-
- public Throwable getCause()
- {
- return cause;
- }
- }
-}
diff --git a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jcajce/provider/asymmetric/x509/PKIXCertPath.java b/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jcajce/provider/asymmetric/x509/PKIXCertPath.java
deleted file mode 100644
index 0bc938326..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jcajce/provider/asymmetric/x509/PKIXCertPath.java
+++ /dev/null
@@ -1,379 +0,0 @@
-package org.spongycastle.jcajce.provider.asymmetric.x509;
-
-import java.io.BufferedInputStream;
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStreamWriter;
-import java.security.NoSuchProviderException;
-import org.spongycastle.jce.cert.CertPath;
-import java.security.cert.Certificate;
-import java.security.cert.CertificateEncodingException;
-import java.security.cert.CertificateException;
-import java.security.cert.CertificateFactory;
-import java.security.cert.X509Certificate;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Enumeration;
-import java.util.Iterator;
-import java.util.List;
-import java.util.ListIterator;
-
-import org.spongycastle.jce.X509Principal;
-import org.spongycastle.jce.PrincipalUtil;
-import org.spongycastle.asn1.ASN1Encodable;
-import org.spongycastle.asn1.ASN1EncodableVector;
-import org.spongycastle.asn1.ASN1Encoding;
-import org.spongycastle.asn1.ASN1InputStream;
-import org.spongycastle.asn1.ASN1Integer;
-import org.spongycastle.asn1.ASN1Primitive;
-import org.spongycastle.asn1.ASN1Sequence;
-import org.spongycastle.asn1.DERSequence;
-import org.spongycastle.asn1.DERSet;
-import org.spongycastle.asn1.pkcs.ContentInfo;
-import org.spongycastle.asn1.pkcs.PKCSObjectIdentifiers;
-import org.spongycastle.asn1.pkcs.SignedData;
-import org.spongycastle.jce.provider.BouncyCastleProvider;
-import org.spongycastle.util.io.pem.PemObject;
-import org.spongycastle.util.io.pem.PemWriter;
-
-/**
- * CertPath implementation for X.509 certificates.
- *
- * The
- * Each element of the set is a
- * All X.509 certificate extensions that a
- * This methods inherits DSA parameters from the indexed certificate or
- * previous certificates in the certificate chain to the returned
- *
- * If the indexed certificate does not contain a DSA key this method simply
- * returns the public key. If the DSA key already contains DSA parameters
- * the key is also only returned.
- * Security.addProvider()
mechanism.
- */
- public BouncyCastleProvider()
- {
- super(PROVIDER_NAME, 1.51, info);
-
- setup();
- }
-
- private void setup()
- {
- loadAlgorithms(DIGEST_PACKAGE, DIGESTS);
-
- loadAlgorithms(SYMMETRIC_PACKAGE, SYMMETRIC_GENERIC);
-
- loadAlgorithms(SYMMETRIC_PACKAGE, SYMMETRIC_MACS);
-
- loadAlgorithms(SYMMETRIC_PACKAGE, SYMMETRIC_CIPHERS);
-
- loadAlgorithms(ASYMMETRIC_PACKAGE, ASYMMETRIC_GENERIC);
-
- loadAlgorithms(ASYMMETRIC_PACKAGE, ASYMMETRIC_CIPHERS);
-
- loadAlgorithms(KEYSTORE_PACKAGE, KEYSTORES);
-
- //
- // X509Store
- //
- put("X509Store.CERTIFICATE/COLLECTION", "org.spongycastle.jce.provider.X509StoreCertCollection");
- put("X509Store.ATTRIBUTECERTIFICATE/COLLECTION", "org.spongycastle.jce.provider.X509StoreAttrCertCollection");
- put("X509Store.CRL/COLLECTION", "org.spongycastle.jce.provider.X509StoreCRLCollection");
- put("X509Store.CERTIFICATEPAIR/COLLECTION", "org.spongycastle.jce.provider.X509StoreCertPairCollection");
-
- put("X509Store.CERTIFICATE/LDAP", "org.spongycastle.jce.provider.X509StoreLDAPCerts");
- put("X509Store.CRL/LDAP", "org.spongycastle.jce.provider.X509StoreLDAPCRLs");
- put("X509Store.ATTRIBUTECERTIFICATE/LDAP", "org.spongycastle.jce.provider.X509StoreLDAPAttrCerts");
- put("X509Store.CERTIFICATEPAIR/LDAP", "org.spongycastle.jce.provider.X509StoreLDAPCertPairs");
-
- //
- // X509StreamParser
- //
- put("X509StreamParser.CERTIFICATE", "org.spongycastle.jce.provider.X509CertParser");
- put("X509StreamParser.ATTRIBUTECERTIFICATE", "org.spongycastle.jce.provider.X509AttrCertParser");
- put("X509StreamParser.CRL", "org.spongycastle.jce.provider.X509CRLParser");
- put("X509StreamParser.CERTIFICATEPAIR", "org.spongycastle.jce.provider.X509CertPairParser");
-
- //
- // cipher engines
- //
- put("Cipher.BROKENPBEWITHMD5ANDDES", "org.spongycastle.jce.provider.BrokenJCEBlockCipher$BrokePBEWithMD5AndDES");
-
- put("Cipher.BROKENPBEWITHSHA1ANDDES", "org.spongycastle.jce.provider.BrokenJCEBlockCipher$BrokePBEWithSHA1AndDES");
-
-
- put("Cipher.OLDPBEWITHSHAANDTWOFISH-CBC", "org.spongycastle.jce.provider.BrokenJCEBlockCipher$OldPBEWithSHAAndTwofish");
-
- // Certification Path API
- put("CertPathValidator.RFC3281", "org.spongycastle.jce.provider.PKIXAttrCertPathValidatorSpi");
- put("CertPathBuilder.RFC3281", "org.spongycastle.jce.provider.PKIXAttrCertPathBuilderSpi");
- put("CertPathValidator.RFC3280", "org.spongycastle.jce.provider.PKIXCertPathValidatorSpi");
- put("CertPathBuilder.RFC3280", "org.spongycastle.jce.provider.PKIXCertPathBuilderSpi");
- put("CertPathValidator.PKIX", "org.spongycastle.jce.provider.PKIXCertPathValidatorSpi");
- put("CertPathBuilder.PKIX", "org.spongycastle.jce.provider.PKIXCertPathBuilderSpi");
- put("CertStore.Collection", "org.spongycastle.jce.provider.CertStoreCollectionSpi");
- put("CertStore.LDAP", "org.spongycastle.jce.provider.X509LDAPCertStoreSpi");
- put("CertStore.Multi", "org.spongycastle.jce.provider.MultiCertStoreSpi");
- put("Alg.Alias.CertStore.X509LDAP", "LDAP");
- }
-
- private void loadAlgorithms(String packageName, String[] names)
- {
- for (int i = 0; i != names.length; i++)
- {
- Class clazz = null;
- try
- {
- ClassLoader loader = this.getClass().getClassLoader();
-
- if (loader != null)
- {
- clazz = loader.loadClass(packageName + names[i] + "$Mappings");
- }
- else
- {
- clazz = Class.forName(packageName + names[i] + "$Mappings");
- }
- }
- catch (ClassNotFoundException e)
- {
- // ignore
- }
-
- if (clazz != null)
- {
- try
- {
- ((AlgorithmProvider)clazz.newInstance()).configure(this);
- }
- catch (Exception e)
- { // this should never ever happen!!
- throw new InternalError("cannot create instance of "
- + packageName + names[i] + "$Mappings : " + e);
- }
- }
- }
- }
-
- public void setParameter(String parameterName, Object parameter)
- {
- synchronized (CONFIGURATION)
- {
- ((BouncyCastleProviderConfiguration)CONFIGURATION).setParameter(parameterName, parameter);
- }
- }
-
- public boolean hasAlgorithm(String type, String name)
- {
- return containsKey(type + "." + name) || containsKey("Alg.Alias." + type + "." + name);
- }
-
- public void addAlgorithm(String key, String value)
- {
- if (containsKey(key))
- {
- throw new IllegalStateException("duplicate provider key (" + key + ") found");
- }
-
- put(key, value);
- }
-
- public void addKeyInfoConverter(ASN1ObjectIdentifier oid, AsymmetricKeyInfoConverter keyInfoConverter)
- {
- keyInfoConverters.put(oid, keyInfoConverter);
- }
-
- public static PublicKey getPublicKey(SubjectPublicKeyInfo publicKeyInfo)
- throws IOException
- {
- AsymmetricKeyInfoConverter converter = (AsymmetricKeyInfoConverter)keyInfoConverters.get(publicKeyInfo.getAlgorithm().getAlgorithm());
-
- if (converter == null)
- {
- return null;
- }
-
- return converter.generatePublic(publicKeyInfo);
- }
-
- public static PrivateKey getPrivateKey(PrivateKeyInfo privateKeyInfo)
- throws IOException
- {
- AsymmetricKeyInfoConverter converter = (AsymmetricKeyInfoConverter)keyInfoConverters.get(privateKeyInfo.getPrivateKeyAlgorithm().getAlgorithm());
-
- if (converter == null)
- {
- return null;
- }
-
- return converter.generatePrivate(privateKeyInfo);
- }
-}
diff --git a/extern/spongycastle/prov/src/main/jdk1.1/org/spongycastle/jce/provider/BouncyCastleProviderConfiguration.java b/extern/spongycastle/prov/src/main/jdk1.1/org/spongycastle/jce/provider/BouncyCastleProviderConfiguration.java
deleted file mode 100644
index bfeedb2ad..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.1/org/spongycastle/jce/provider/BouncyCastleProviderConfiguration.java
+++ /dev/null
@@ -1,108 +0,0 @@
-package org.spongycastle.jce.provider;
-
-import javax.crypto.spec.DHParameterSpec;
-
-import org.spongycastle.jcajce.provider.config.ConfigurableProvider;
-import org.spongycastle.jcajce.provider.config.ProviderConfiguration;
-import org.spongycastle.jce.spec.ECParameterSpec;
-
-class BouncyCastleProviderConfiguration
- implements ProviderConfiguration
-{
- private volatile ECParameterSpec ecImplicitCaParams;
- private volatile Object dhDefaultParams;
-
- void setParameter(String parameterName, Object parameter)
- {
- SecurityManager securityManager = System.getSecurityManager();
-
- if (parameterName.equals(ConfigurableProvider.THREAD_LOCAL_EC_IMPLICITLY_CA))
- {
- ECParameterSpec curveSpec;
-
- if (parameter instanceof ECParameterSpec || parameter == null)
- {
- curveSpec = (ECParameterSpec)parameter;
- }
- else
- {
- throw new IllegalArgumentException("not a valid ECParameterSpec");
- }
-
- ecImplicitCaParams = (ECParameterSpec)curveSpec;
- }
- else if (parameterName.equals(ConfigurableProvider.EC_IMPLICITLY_CA))
- {
- if (parameter instanceof ECParameterSpec || parameter == null)
- {
- ecImplicitCaParams = (ECParameterSpec)parameter;
- }
- else // assume java.security.spec
- {
- throw new IllegalArgumentException("not a valid ECParameterSpec");
- }
- }
- else if (parameterName.equals(ConfigurableProvider.THREAD_LOCAL_DH_DEFAULT_PARAMS))
- {
- Object dhSpec;
-
-
- if (parameter instanceof DHParameterSpec || parameter instanceof DHParameterSpec[] || parameter == null)
- {
- dhSpec = parameter;
- }
- else
- {
- throw new IllegalArgumentException("not a valid DHParameterSpec");
- }
-
- dhDefaultParams = dhSpec;
- }
- else if (parameterName.equals(ConfigurableProvider.DH_DEFAULT_PARAMS))
- {
-
- if (parameter instanceof DHParameterSpec || parameter instanceof DHParameterSpec[] || parameter == null)
- {
- dhDefaultParams = parameter;
- }
- else
- {
- throw new IllegalArgumentException("not a valid DHParameterSpec or DHParameterSpec[]");
- }
- }
- }
-
- public ECParameterSpec getEcImplicitlyCa()
- {
- return ecImplicitCaParams;
- }
-
- public DHParameterSpec getDHDefaultParameters(int keySize)
- {
- Object params = dhDefaultParams;
-
- if (params instanceof DHParameterSpec)
- {
- DHParameterSpec spec = (DHParameterSpec)params;
-
- if (spec.getP().bitLength() == keySize)
- {
- return spec;
- }
- }
- else if (params instanceof DHParameterSpec[])
- {
- DHParameterSpec[] specs = (DHParameterSpec[])params;
-
- for (int i = 0; i != specs.length; i++)
- {
- if (specs[i].getP().bitLength() == keySize)
- {
- return specs[i];
- }
- }
- }
-
- return null;
- }
-}
diff --git a/extern/spongycastle/prov/src/main/jdk1.1/org/spongycastle/jce/provider/CertStoreCollectionSpi.java b/extern/spongycastle/prov/src/main/jdk1.1/org/spongycastle/jce/provider/CertStoreCollectionSpi.java
deleted file mode 100644
index 19a361ae4..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.1/org/spongycastle/jce/provider/CertStoreCollectionSpi.java
+++ /dev/null
@@ -1,104 +0,0 @@
-package org.spongycastle.jce.provider;
-
-import java.security.InvalidAlgorithmParameterException;
-import java.security.cert.CRL;
-import java.security.cert.CRLSelector;
-import java.security.cert.CertSelector;
-import java.security.cert.CertStoreException;
-import java.security.cert.CertStoreParameters;
-import java.security.cert.CertStoreSpi;
-import java.security.cert.Certificate;
-import java.security.cert.CollectionCertStoreParameters;
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Set;
-
-public class CertStoreCollectionSpi extends CertStoreSpi
-{
- private CollectionCertStoreParameters params;
-
- public CertStoreCollectionSpi(CertStoreParameters params)
- throws InvalidAlgorithmParameterException
- {
- super(params);
-
- if (!(params instanceof CollectionCertStoreParameters))
- {
- throw new InvalidAlgorithmParameterException( "org.spongycastle.jce.provider.CertStoreCollectionSpi: parameter must be a CollectionCertStoreParameters object\n" + params.toString() );
- }
-
- this.params = (CollectionCertStoreParameters)params;
- }
-
- public Collection engineGetCertificates(
- CertSelector selector)
- throws CertStoreException
- {
- Set col = new HashSet();
- Iterator iter = params.getCollection().iterator();
-
- if (selector == null)
- {
- while (iter.hasNext())
- {
- Object obj = iter.next();
-
- if (obj instanceof Certificate)
- {
- col.add(obj);
- }
- }
- }
- else
- {
- while (iter.hasNext())
- {
- Object obj = iter.next();
-
- if ((obj instanceof Certificate) && selector.match((Certificate)obj))
- {
- col.add(obj);
- }
- }
- }
-
- return col;
- }
-
-
- public Collection engineGetCRLs(
- CRLSelector selector)
- throws CertStoreException
- {
- Set col = new HashSet();
- Iterator iter = params.getCollection().iterator();
-
- if (selector == null)
- {
- while (iter.hasNext())
- {
- Object obj = iter.next();
-
- if (obj instanceof CRL)
- {
- col.add(obj);
- }
- }
- }
- else
- {
- while (iter.hasNext())
- {
- Object obj = iter.next();
-
- if ((obj instanceof CRL) && selector.match((CRL)obj))
- {
- col.add(obj);
- }
- }
- }
-
- return col;
- }
-}
diff --git a/extern/spongycastle/prov/src/main/jdk1.1/org/spongycastle/jce/provider/MultiCertStoreSpi.java b/extern/spongycastle/prov/src/main/jdk1.1/org/spongycastle/jce/provider/MultiCertStoreSpi.java
deleted file mode 100644
index c6db1bdbd..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.1/org/spongycastle/jce/provider/MultiCertStoreSpi.java
+++ /dev/null
@@ -1,85 +0,0 @@
-package org.spongycastle.jce.provider;
-
-import org.spongycastle.jce.MultiCertStoreParameters;
-
-import java.security.InvalidAlgorithmParameterException;
-import java.security.cert.CRLSelector;
-import java.security.cert.CertSelector;
-import java.security.cert.CertStore;
-import java.security.cert.CertStoreException;
-import java.security.cert.CertStoreParameters;
-import java.security.cert.CertStoreSpi;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-
-public class MultiCertStoreSpi
- extends CertStoreSpi
-{
- private MultiCertStoreParameters params;
-
- public MultiCertStoreSpi(CertStoreParameters params)
- throws InvalidAlgorithmParameterException
- {
- super(params);
-
- if (!(params instanceof MultiCertStoreParameters))
- {
- throw new InvalidAlgorithmParameterException("org.spongycastle.jce.provider.MultiCertStoreSpi: parameter must be a MultiCertStoreParameters object\n" + params.toString());
- }
-
- this.params = (MultiCertStoreParameters)params;
- }
-
- public Collection engineGetCertificates(CertSelector certSelector)
- throws CertStoreException
- {
- boolean searchAllStores = params.getSearchAllStores();
- Iterator iter = params.getCertStores().iterator();
- List allCerts = searchAllStores ? new ArrayList() : Collections.EMPTY_LIST;
-
- while (iter.hasNext())
- {
- CertStore store = (CertStore)iter.next();
- Collection certs = store.getCertificates(certSelector);
-
- if (searchAllStores)
- {
- allCerts.addAll(certs);
- }
- else if (!certs.isEmpty())
- {
- return certs;
- }
- }
-
- return allCerts;
- }
-
- public Collection engineGetCRLs(CRLSelector crlSelector)
- throws CertStoreException
- {
- boolean searchAllStores = params.getSearchAllStores();
- Iterator iter = params.getCertStores().iterator();
- List allCRLs = searchAllStores ? new ArrayList() : Collections.EMPTY_LIST;
-
- while (iter.hasNext())
- {
- CertStore store = (CertStore)iter.next();
- Collection crls = store.getCRLs(crlSelector);
-
- if (searchAllStores)
- {
- allCRLs.addAll(crls);
- }
- else if (!crls.isEmpty())
- {
- return crls;
- }
- }
-
- return allCRLs;
- }
-}
diff --git a/extern/spongycastle/prov/src/main/jdk1.1/org/spongycastle/jce/provider/PKIXCertPathBuilderSpi.java b/extern/spongycastle/prov/src/main/jdk1.1/org/spongycastle/jce/provider/PKIXCertPathBuilderSpi.java
deleted file mode 100644
index e09a3526f..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.1/org/spongycastle/jce/provider/PKIXCertPathBuilderSpi.java
+++ /dev/null
@@ -1,365 +0,0 @@
-package org.spongycastle.jce.provider;
-
-import java.io.IOException;
-import java.security.InvalidAlgorithmParameterException;
-import java.security.PublicKey;
-import java.security.cert.*;
-import org.spongycastle.jce.*;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-
-/**
- * Implements the PKIX CertPathBuilding algorithem for BouncyCastle.
- *
- * MAYBE: implement more CertPath validation whil build path to omit invalid pathes
- *
- * @see CertPathBuilderSpi
- **/
-public class PKIXCertPathBuilderSpi
- extends CertPathBuilderSpi
-{
- /**
- * Build and validate a CertPath using the given parameter.
- *
- * @param params PKIXBuilderParameters object containing all
- * information to build the CertPath
- **/
- public CertPathBuilderResult engineBuild(
- CertPathParameters params)
- throws CertPathBuilderException, InvalidAlgorithmParameterException
- {
- if (!(params instanceof PKIXBuilderParameters))
- {
- throw new InvalidAlgorithmParameterException("params must be a PKIXBuilderParameters instance");
- }
-
- PKIXBuilderParameters pkixParams = (PKIXBuilderParameters)params;
-
- Collection targets;
- Iterator targetIter;
- List certPathList = new ArrayList();
- X509Certificate cert;
- Collection certs;
- CertPath certPath = null;
- Exception certPathException = null;
-
- // search target certificates
- CertSelector certSelect = pkixParams.getTargetCertConstraints();
- if (certSelect == null)
- {
- throw new CertPathBuilderException("targetCertConstraints must be non-null for CertPath building");
- }
-
- try
- {
- targets = findCertificates(certSelect, pkixParams.getCertStores());
- }
- catch (CertStoreException e)
- {
- throw new CertPathBuilderException(e);
- }
-
- if (targets.isEmpty())
- {
- throw new CertPathBuilderException("no certificate found matching targetCertContraints");
- }
-
- CertificateFactory cFact;
- CertPathValidator validator;
-
- try
- {
- cFact = CertificateFactory.getInstance("X.509", "SC");
- validator = CertPathValidator.getInstance("PKIX", "SC");
- }
- catch (Exception e)
- {
- throw new CertPathBuilderException("exception creating support classes: " + e);
- }
-
- //
- // check all potential target certificates
- targetIter = targets.iterator();
- while (targetIter.hasNext())
- {
- cert = (X509Certificate)targetIter.next();
- certPathList.clear();
- while (cert != null)
- {
- // add cert to the certpath
- certPathList.add(cert);
-
- // check wether the issuer of TrustAnchor
object if found or
- * null
if not.
- *
- * @exception CertPathValidatorException if a TrustAnchor was
- * found but the signature verificytion on the given certificate
- * has thrown an exception. This Exception can be obtainted with
- * getCause()
method.
- **/
- final TrustAnchor findTrustAnchor(
- X509Certificate cert,
- Set trustAnchors)
- throws CertPathBuilderException
- {
- Iterator iter = trustAnchors.iterator();
- TrustAnchor trust = null;
- PublicKey trustPublicKey = null;
- Exception invalidKeyEx = null;
-
- X509CertSelector certSelectX509 = new X509CertSelector();
-
- try
- {
- certSelectX509.setSubject(PrincipalUtil.getIssuerX509Principal(cert).getEncoded());
- }
- catch (CertificateEncodingException ex)
- {
- throw new CertPathBuilderException("can't get trust anchor principal",null);
- }
- catch (IOException ex)
- {
- throw new CertPathBuilderException("can't get trust anchor principal",null);
- }
-
- while (iter.hasNext() && trust == null)
- {
- trust = (TrustAnchor)iter.next();
- if (trust.getTrustedCert() != null)
- {
- if (certSelectX509.match(trust.getTrustedCert()))
- {
- trustPublicKey = trust.getTrustedCert().getPublicKey();
- }
- else
- {
- trust = null;
- }
- }
- else if (trust.getCAName() != null
- && trust.getCAPublicKey() != null)
- {
- try
- {
- X509Principal certIssuer = PrincipalUtil.getIssuerX509Principal(cert);
- X509Principal caName = new X509Principal(trust.getCAName());
- if (certIssuer.equals(caName))
- {
- trustPublicKey = trust.getCAPublicKey();
- }
- else
- {
- trust = null;
- }
- }
- catch (CertificateEncodingException ex)
- {
- trust = null;
- }
- catch (IllegalArgumentException ex)
- {
- trust = null;
- }
- }
- else
- {
- trust = null;
- }
-
- if (trustPublicKey != null)
- {
- try
- {
- cert.verify(trustPublicKey);
- }
- catch (Exception ex)
- {
- invalidKeyEx = ex;
- trust = null;
- }
- }
- }
-
- if (trust == null && invalidKeyEx != null)
- {
- throw new CertPathBuilderException("TrustAnchor found put certificate validation failed",invalidKeyEx);
- }
-
- return trust;
- }
-
- /**
- * Return a Collection of all certificates found in the
- * CertStore's that are matching the certSelect criteriums.
- *
- * @param certSelector a {@link CertSelector CertSelector}
- * object that will be used to select the certificates
- * @param certStores a List containing only {@link CertStore
- * CertStore} objects. These are used to search for
- * certificates
- *
- * @return a Collection of all found {@link Certificate Certificate}
- * objects. May be empty but never null
.
- **/
- private Collection findCertificates(
- CertSelector certSelect,
- List certStores)
- throws CertStoreException
- {
- Set certs = new HashSet();
- Iterator iter = certStores.iterator();
-
- while (iter.hasNext())
- {
- CertStore certStore = (CertStore)iter.next();
-
- certs.addAll(certStore.getCertificates(certSelect));
- }
-
- return certs;
- }
-
- /**
- * Find the issuer certificate of the given certificate.
- *
- * @param cert the certificate hows issuer certificate should
- * be found.
- * @param certStores a list of CertStore
object
- * that will be searched
- *
- * @return then X509Certificate
object containing
- * the issuer certificate or null
if not found
- *
- * @exception CertPathValidatorException if a TrustAnchor was
- * found but the signature verificytion on the given certificate
- * has thrown an exception. This Exception can be obtainted with
- * getCause()
method.
- **/
- private X509Certificate findIssuer(
- X509Certificate cert,
- List certStores)
- throws CertPathValidatorException
- {
- Exception invalidKeyEx = null;
- X509CertSelector certSelect = new X509CertSelector();
- try
- {
- certSelect.setSubject(PrincipalUtil.getIssuerX509Principal(cert).getEncoded());
- }
- catch (CertificateEncodingException ex)
- {
- throw new CertPathValidatorException("Issuer not found", null, null, -1);
- }
- catch (IOException ex)
- {
- throw new CertPathValidatorException("Issuer not found", null, null, -1);
- }
-
- Iterator iter;
- try
- {
- iter = findCertificates(certSelect, certStores).iterator();
- }
- catch (CertStoreException e)
- {
- throw new CertPathValidatorException(e);
- }
-
- X509Certificate issuer = null;
- while (iter.hasNext() && issuer == null)
- {
- issuer = (X509Certificate)iter.next();
- try
- {
- cert.verify(issuer.getPublicKey());
- }
- catch (Exception ex)
- {
- invalidKeyEx = ex;
- issuer = null;
- }
- }
-
- if (issuer == null && invalidKeyEx == null)
- {
- throw new CertPathValidatorException("Issuer not found", null, null, -1);
- }
-
- if (issuer == null && invalidKeyEx != null)
- {
- throw new CertPathValidatorException("issuer found but certificate validation failed",invalidKeyEx,null,-1);
- }
-
- return issuer;
- }
-}
diff --git a/extern/spongycastle/prov/src/main/jdk1.1/org/spongycastle/jce/provider/PKIXCertPathValidatorSpi.java b/extern/spongycastle/prov/src/main/jdk1.1/org/spongycastle/jce/provider/PKIXCertPathValidatorSpi.java
deleted file mode 100644
index 7f6955549..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.1/org/spongycastle/jce/provider/PKIXCertPathValidatorSpi.java
+++ /dev/null
@@ -1,2183 +0,0 @@
-package org.spongycastle.jce.provider;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.math.BigInteger;
-import java.security.InvalidAlgorithmParameterException;
-import java.security.PublicKey;
-import java.security.cert.CRLException;
-import java.security.cert.CertificateNotYetValidException;
-import java.security.cert.CertificateExpiredException;
-import java.security.cert.CertificateEncodingException;
-import java.security.cert.CertPath;
-import java.security.cert.CertPathParameters;
-import java.security.cert.CertPathValidatorSpi;
-import java.security.cert.CertPathValidatorException;
-import java.security.cert.CertPathValidatorResult;
-import java.security.cert.PolicyQualifierInfo;
-import java.security.cert.X509Certificate;
-import java.security.cert.X509CRL;
-import java.security.cert.X509CRLEntry;
-import java.security.cert.X509CRLSelector;
-import java.security.cert.X509CertSelector;
-import java.security.cert.PKIXParameters;
-import java.security.cert.PKIXCertPathChecker;
-import java.security.cert.PKIXCertPathValidatorResult;
-import java.security.cert.TrustAnchor;
-import java.security.cert.PKIXParameters;
-import java.security.cert.CertStore;
-import java.security.cert.CertStoreException;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Date;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.TimeZone;
-import java.text.SimpleDateFormat;
-
-import org.spongycastle.jce.X509Principal;
-import org.spongycastle.jce.PrincipalUtil;
-import org.spongycastle.asn1.ASN1InputStream;
-import org.spongycastle.asn1.ASN1OctetString;
-import org.spongycastle.asn1.ASN1OutputStream;
-import org.spongycastle.asn1.ASN1Sequence;
-import org.spongycastle.asn1.ASN1TaggedObject;
-import org.spongycastle.asn1.BERConstructedOctetString;
-import org.spongycastle.asn1.ASN1Encodable;
-import org.spongycastle.asn1.ASN1Enumerated;
-import org.spongycastle.asn1.DERIA5String;
-import org.spongycastle.asn1.ASN1Integer;
-import org.spongycastle.asn1.ASN1Primitive;
-import org.spongycastle.asn1.ASN1ObjectIdentifier;
-import org.spongycastle.asn1.x509.AlgorithmIdentifier;
-import org.spongycastle.asn1.x509.BasicConstraints;
-import org.spongycastle.asn1.x509.GeneralName;
-import org.spongycastle.asn1.x509.GeneralSubtree;
-import org.spongycastle.asn1.x509.IssuingDistributionPoint;
-import org.spongycastle.asn1.x509.NameConstraints;
-import org.spongycastle.asn1.x509.PolicyInformation;
-import org.spongycastle.asn1.x509.SubjectPublicKeyInfo;
-import org.spongycastle.asn1.x509.X509Extensions;
-
-/**
- * CertPathValidatorSpi implemenation for X.509 Certificate validation ala rfc 3280
- **/
-public class PKIXCertPathValidatorSpi extends CertPathValidatorSpi
-{
- private static final String CERTIFICATE_POLICIES = X509Extensions.CertificatePolicies.getId();
- private static final String POLICY_MAPPINGS = X509Extensions.PolicyMappings.getId();
- private static final String INHIBIT_ANY_POLICY = X509Extensions.InhibitAnyPolicy.getId();
- private static final String ISSUING_DISTRIBUTION_POINT = X509Extensions.IssuingDistributionPoint.getId();
- private static final String DELTA_CRL_INDICATOR = X509Extensions.DeltaCRLIndicator.getId();
- private static final String POLICY_CONSTRAINTS = X509Extensions.PolicyConstraints.getId();
- private static final String BASIC_CONSTRAINTS = X509Extensions.BasicConstraints.getId();
- private static final String SUBJECT_ALTERNATIVE_NAME = X509Extensions.SubjectAlternativeName.getId();
- private static final String NAME_CONSTRAINTS = X509Extensions.NameConstraints.getId();
- private static final String KEY_USAGE = X509Extensions.KeyUsage.getId();
-
- private static final String CRL_NUMBER = X509Extensions.CRLNumber.getId();
-
- private static final String ANY_POLICY = "2.5.29.32.0";
-
-
- /*
- * key usage bits
- */
- private static final int KEY_CERT_SIGN = 5;
- private static final int CRL_SIGN = 6;
-
- private static final String[] crlReasons = new String[] {
- "unspecified",
- "keyCompromise",
- "cACompromise",
- "affiliationChanged",
- "superseded",
- "cessationOfOperation",
- "certificateHold",
- "unknown",
- "removeFromCRL",
- "privilegeWithdrawn",
- "aACompromise" };
-
- /**
- * extract the value of the given extension, if it exists.
- */
- private ASN1Primitive getExtensionValue(
- java.security.cert.X509Extension ext,
- String oid)
- throws AnnotatedException
- {
- byte[] bytes = ext.getExtensionValue(oid);
- if (bytes == null)
- {
- return null;
- }
-
- return getObject(oid, bytes);
- }
-
- private ASN1Primitive getObject(
- String oid,
- byte[] ext)
- throws AnnotatedException
- {
- try
- {
- ASN1InputStream aIn = new ASN1InputStream(ext);
- ASN1OctetString octs = (ASN1OctetString)aIn.readObject();
-
- aIn = new ASN1InputStream(octs.getOctets());
- return aIn.readObject();
- }
- catch (IOException e)
- {
- throw new AnnotatedException("exception processing extension " + oid, e);
- }
- }
-
- private boolean withinDNSubtree(
- ASN1Sequence dns,
- ASN1Sequence subtree)
- {
- if (subtree.size() < 1)
- {
- return false;
- }
-
- if (subtree.size() > dns.size())
- {
- return false;
- }
-
- for (int j = subtree.size() - 1; j >= 0; j--)
- {
- if (!subtree.getObjectAt(j).equals(dns.getObjectAt(j)))
- {
- return false;
- }
- }
-
- return true;
- }
-
- private void checkPermittedDN(
- Set permitted,
- ASN1Sequence dns)
- throws CertPathValidatorException
- {
- if (permitted.isEmpty())
- {
- return;
- }
-
- Iterator it = permitted.iterator();
-
- while (it.hasNext())
- {
- ASN1Sequence subtree = (ASN1Sequence)it.next();
-
- if (withinDNSubtree(dns, subtree))
- {
- return;
- }
- }
-
- throw new CertPathValidatorException("Subject distinguished name is not from a permitted subtree");
- }
-
- private void checkExcludedDN(
- Set excluded,
- ASN1Sequence dns)
- throws CertPathValidatorException
- {
- if (excluded.isEmpty())
- {
- return;
- }
-
- Iterator it = excluded.iterator();
-
- while (it.hasNext())
- {
- ASN1Sequence subtree = (ASN1Sequence)it.next();
-
- if (withinDNSubtree(dns, subtree))
- {
- throw new CertPathValidatorException("Subject distinguished name is from an excluded subtree");
- }
- }
- }
-
- private Set intersectDN(
- Set permitted,
- ASN1Sequence dn)
- {
- if (permitted.isEmpty())
- {
- permitted.add(dn);
-
- return permitted;
- }
- else
- {
- Set intersect = new HashSet();
-
- Iterator _iter = permitted.iterator();
- while (_iter.hasNext())
- {
- ASN1Sequence subtree = (ASN1Sequence)_iter.next();
-
- if (withinDNSubtree(dn, subtree))
- {
- intersect.add(dn);
- }
- else if (withinDNSubtree(subtree, dn))
- {
- intersect.add(subtree);
- }
- }
-
- return intersect;
- }
- }
-
- private Set unionDN(
- Set excluded,
- ASN1Sequence dn)
- {
- if (excluded.isEmpty())
- {
- excluded.add(dn);
-
- return excluded;
- }
- else
- {
- Set intersect = new HashSet();
-
- Iterator _iter = excluded.iterator();
- while (_iter.hasNext())
- {
- ASN1Sequence subtree = (ASN1Sequence)_iter.next();
-
- if (withinDNSubtree(dn, subtree))
- {
- intersect.add(subtree);
- }
- else if (withinDNSubtree(subtree, dn))
- {
- intersect.add(dn);
- }
- else
- {
- intersect.add(subtree);
- intersect.add(dn);
- }
- }
-
- return intersect;
- }
- }
-
- private Set intersectEmail(
- Set permitted,
- String email)
- {
- String _sub = email.substring(email.indexOf('@') + 1);
-
- if (permitted.isEmpty())
- {
- permitted.add(_sub);
-
- return permitted;
- }
- else
- {
- Set intersect = new HashSet();
-
- Iterator _iter = permitted.iterator();
- while (_iter.hasNext())
- {
- String _permitted = (String)_iter.next();
-
- if (_sub.endsWith(_permitted))
- {
- intersect.add(_sub);
- }
- else if (_permitted.endsWith(_sub))
- {
- intersect.add(_permitted);
- }
- }
-
- return intersect;
- }
- }
-
- private Set unionEmail(
- Set excluded,
- String email)
- {
- String _sub = email.substring(email.indexOf('@') + 1);
-
- if (excluded.isEmpty())
- {
- excluded.add(_sub);
- return excluded;
- }
- else
- {
- Set intersect = new HashSet();
-
- Iterator _iter = excluded.iterator();
- while (_iter.hasNext())
- {
- String _excluded = (String)_iter.next();
-
- if (_sub.endsWith(_excluded))
- {
- intersect.add(_excluded);
- }
- else if (_excluded.endsWith(_sub))
- {
- intersect.add(_sub);
- }
- else
- {
- intersect.add(_excluded);
- intersect.add(_sub);
- }
- }
-
- return intersect;
- }
- }
-
- private Set intersectIP(
- Set permitted,
- byte[] ip)
- {
- // TBD
- return permitted;
- }
-
- private Set unionIP(
- Set excluded,
- byte[] ip)
- {
- // TBD
- return excluded;
- }
-
- private void checkPermittedEmail(
- Set permitted,
- String email)
- throws CertPathValidatorException
- {
- if (permitted.isEmpty())
- {
- return;
- }
-
- String sub = email.substring(email.indexOf('@') + 1);
- Iterator it = permitted.iterator();
-
- while (it.hasNext())
- {
- String str = (String)it.next();
-
- if (sub.endsWith(str))
- {
- return;
- }
- }
-
- throw new CertPathValidatorException("Subject email address is not from a permitted subtree");
- }
-
- private void checkExcludedEmail(
- Set excluded,
- String email)
- throws CertPathValidatorException
- {
- if (excluded.isEmpty())
- {
- return;
- }
-
- String sub = email.substring(email.indexOf('@') + 1);
- Iterator it = excluded.iterator();
-
- while (it.hasNext())
- {
- String str = (String)it.next();
- if (sub.endsWith(str))
- {
- throw new CertPathValidatorException("Subject email address is from an excluded subtree");
- }
- }
- }
-
- private void checkPermittedIP(
- Set permitted,
- byte[] ip)
- throws CertPathValidatorException
- {
- if (permitted.isEmpty())
- {
- return;
- }
-
- // TODO: ??? Something here
- }
-
- private void checkExcludedIP(
- Set excluded,
- byte[] ip)
- throws CertPathValidatorException
- {
- if (excluded.isEmpty())
- {
- return;
- }
-
- // TODO, check RFC791 and RFC1883 for IP bytes definition.
- }
-
- private PKIXPolicyNode removePolicyNode(
- PKIXPolicyNode validPolicyTree,
- List [] policyNodes,
- PKIXPolicyNode _node)
- {
- PKIXPolicyNode _parent = (PKIXPolicyNode)_node.getParent();
-
- if (validPolicyTree == null)
- {
- return null;
- }
-
- if (_parent == null)
- {
- for (int j = 0; j < policyNodes.length; j++)
- {
- policyNodes[j] = new ArrayList();
- }
-
- return null;
- }
- else
- {
- _parent.removeChild(_node);
- removePolicyNodeRecurse(policyNodes, _node);
-
- return validPolicyTree;
- }
- }
-
- private void removePolicyNodeRecurse(
- List [] policyNodes,
- PKIXPolicyNode _node)
- {
- policyNodes[_node.getDepth()].remove(_node);
-
- if (_node.hasChildren())
- {
- Iterator _iter = _node.getChildren();
- while (_iter.hasNext())
- {
- PKIXPolicyNode _child = (PKIXPolicyNode)_iter.next();
- removePolicyNodeRecurse(policyNodes, _child);
- }
- }
- }
-
- private boolean isSelfIssued(
- X509Certificate cert)
- {
- return cert.getSubjectDN().equals(cert.getIssuerDN());
- }
-
- private boolean isAnyPolicy(
- Set policySet)
- {
- return policySet == null || policySet.contains(ANY_POLICY) || policySet.isEmpty();
- }
-
- private AlgorithmIdentifier getAlgorithmIdentifier(
- PublicKey key)
- throws CertPathValidatorException
- {
- try
- {
- ASN1InputStream aIn = new ASN1InputStream(
- new ByteArrayInputStream(key.getEncoded()));
-
- SubjectPublicKeyInfo info = SubjectPublicKeyInfo.getInstance(aIn.readObject());
-
- return info.getAlgorithmId();
- }
- catch (IOException e)
- {
- throw new CertPathValidatorException("exception processing public key");
- }
- }
-
- private Set getQualifierSet(ASN1Sequence qualifiers)
- throws CertPathValidatorException
- {
- Set pq = new HashSet();
-
- if (qualifiers == null)
- {
- return pq;
- }
-
- ByteArrayOutputStream bOut = new ByteArrayOutputStream();
- ASN1OutputStream aOut = new ASN1OutputStream(bOut);
-
- Enumeration e = qualifiers.getObjects();
-
- while (e.hasMoreElements())
- {
- try
- {
- aOut.writeObject((ASN1Encodable)e.nextElement());
-
- pq.add(new PolicyQualifierInfo(bOut.toByteArray()));
- }
- catch (IOException ex)
- {
- throw new CertPathValidatorException("exception building qualifier set: " + ex);
- }
-
- bOut.reset();
- }
-
- return pq;
- }
-
- private boolean processCertD1i(
- int index,
- List [] policyNodes,
- ASN1ObjectIdentifier pOid,
- Set pq)
- {
- List policyNodeVec = policyNodes[index - 1];
-
- for (int j = 0; j < policyNodeVec.size(); j++)
- {
- PKIXPolicyNode node = (PKIXPolicyNode)policyNodeVec.get(j);
- Set expectedPolicies = node.getExpectedPolicies();
-
- if (expectedPolicies.contains(pOid.getId()))
- {
- Set childExpectedPolicies = new HashSet();
- childExpectedPolicies.add(pOid.getId());
-
- PKIXPolicyNode child = new PKIXPolicyNode(new ArrayList(),
- index,
- childExpectedPolicies,
- node,
- pq,
- pOid.getId(),
- false);
- node.addChild(child);
- policyNodes[index].add(child);
-
- return true;
- }
- }
-
- return false;
- }
-
- private void processCertD1ii(
- int index,
- List [] policyNodes,
- ASN1ObjectIdentifier _poid,
- Set _pq)
- {
- List policyNodeVec = policyNodes[index - 1];
-
- for (int j = 0; j < policyNodeVec.size(); j++)
- {
- PKIXPolicyNode _node = (PKIXPolicyNode)policyNodeVec.get(j);
- Set _expectedPolicies = _node.getExpectedPolicies();
-
- if (ANY_POLICY.equals(_node.getValidPolicy()))
- {
- Set _childExpectedPolicies = new HashSet();
- _childExpectedPolicies.add(_poid.getId());
-
- PKIXPolicyNode _child = new PKIXPolicyNode(new ArrayList(),
- index,
- _childExpectedPolicies,
- _node,
- _pq,
- _poid.getId(),
- false);
- _node.addChild(_child);
- policyNodes[index].add(_child);
- return;
- }
- }
- }
-
- public CertPathValidatorResult engineValidate(
- CertPath certPath,
- CertPathParameters params)
- throws CertPathValidatorException, InvalidAlgorithmParameterException
- {
- if (!(params instanceof PKIXParameters))
- {
- throw new InvalidAlgorithmParameterException("params must be a PKIXParameters instance");
- }
-
- PKIXParameters paramsPKIX = (PKIXParameters)params;
- if (paramsPKIX.getTrustAnchors() == null)
- {
- throw new InvalidAlgorithmParameterException("trustAnchors is null, this is not allowed for path validation");
- }
-
- //
- // 6.1.1 - inputs
- //
-
- //
- // (a)
- //
- List certs = certPath.getCertificates();
- int n = certs.size();
-
- if (certs.isEmpty())
- {
- throw new CertPathValidatorException("CertPath is empty", null, certPath, 0);
- }
-
- //
- // (b)
- //
- Date validDate = getValidDate(paramsPKIX);
-
- //
- // (c)
- //
- Set userInitialPolicySet = paramsPKIX.getInitialPolicies();
-
- //
- // (d)
- //
- TrustAnchor trust = findTrustAnchor((X509Certificate)certs.get(certs.size() - 1), certPath, certs.size() - 1, paramsPKIX.getTrustAnchors());
-
- if (trust == null)
- {
- throw new CertPathValidatorException("TrustAnchor for CertPath not found.", null, certPath, -1);
- }
-
- //
- // (e), (f), (g) are part of the paramsPKIX object.
- //
-
- Iterator certIter;
- int index = 0;
- int i;
- //Certificate for each interation of the validation loop
- //Signature information for each iteration of the validation loop
- Set subTreeContraints = new HashSet();
- Set subTreeExcludes = new HashSet();
-
- //
- // 6.1.2 - setup
- //
-
- //
- // (a)
- //
- List [] policyNodes = new ArrayList[n + 1];
- for (int j = 0; j < policyNodes.length; j++)
- {
- policyNodes[j] = new ArrayList();
- }
-
- Set policySet = new HashSet();
-
- policySet.add(ANY_POLICY);
-
- PKIXPolicyNode validPolicyTree = new PKIXPolicyNode(new ArrayList(), 0, policySet, null, new HashSet(), ANY_POLICY, false);
-
- policyNodes[0].add(validPolicyTree);
-
- //
- // (b)
- //
- Set permittedSubtreesDN = new HashSet();
- Set permittedSubtreesEmail = new HashSet();
- Set permittedSubtreesIP = new HashSet();
-
- //
- // (c)
- //
- Set excludedSubtreesDN = new HashSet();
- Set excludedSubtreesEmail = new HashSet();
- Set excludedSubtreesIP = new HashSet();
-
- //
- // (d)
- //
- int explicitPolicy;
- Set acceptablePolicies = null;
-
- if (paramsPKIX.isExplicitPolicyRequired())
- {
- explicitPolicy = 0;
- }
- else
- {
- explicitPolicy = n + 1;
- }
-
- //
- // (e)
- //
- int inhibitAnyPolicy;
-
- if (paramsPKIX.isAnyPolicyInhibited())
- {
- inhibitAnyPolicy = 0;
- }
- else
- {
- inhibitAnyPolicy = n + 1;
- }
-
- //
- // (f)
- //
- int policyMapping;
-
- if (paramsPKIX.isPolicyMappingInhibited())
- {
- policyMapping = 0;
- }
- else
- {
- policyMapping = n + 1;
- }
-
- //
- // (g), (h), (i), (j)
- //
- PublicKey workingPublicKey;
- X509Principal workingIssuerName;
-
- X509Certificate sign = trust.getTrustedCert();
- try
- {
- if (sign != null)
- {
- workingIssuerName = getSubjectPrincipal(sign);
- workingPublicKey = sign.getPublicKey();
- }
- else
- {
- workingIssuerName = new X509Principal(trust.getCAName());
- workingPublicKey = trust.getCAPublicKey();
- }
- }
- catch (IllegalArgumentException ex)
- {
- throw new CertPathValidatorException("TrustAnchor subjectDN: " + ex.toString());
- }
- catch (AnnotatedException ex)
- {
- throw new CertPathValidatorException(ex.getMessage(), ex.getUnderlyingException(), certPath, index);
- }
-
- AlgorithmIdentifier workingAlgId = getAlgorithmIdentifier(workingPublicKey);
- ASN1ObjectIdentifier workingPublicKeyAlgorithm = workingAlgId.getObjectId();
- ASN1Encodable workingPublicKeyParameters = workingAlgId.getParameters();
-
- //
- // (k)
- //
- int maxPathLength = n;
-
- //
- // 6.1.3
- //
- Iterator tmpIter;
- int tmpInt;
-
- if (paramsPKIX.getTargetCertConstraints() != null
- && !paramsPKIX.getTargetCertConstraints().match((X509Certificate)certs.get(0)))
- {
- throw new CertPathValidatorException("target certificate in certpath does not match targetcertconstraints", null, certPath, 0);
- }
-
-
- //
- // initialise CertPathChecker's
- //
- List pathCheckers = paramsPKIX.getCertPathCheckers();
- certIter = pathCheckers.iterator();
- while (certIter.hasNext())
- {
- ((PKIXCertPathChecker)certIter.next()).init(false);
- }
-
- X509Certificate cert = null;
-
- for (index = certs.size() - 1; index >= 0 ; index--)
- {
- try
- {
- //
- // i as defined in the algorithm description
- //
- i = n - index;
-
- //
- // set certificate to be checked in this round
- // sign and workingPublicKey and workingIssuerName are set
- // at the end of the for loop and initialied the
- // first time from the TrustAnchor
- //
- cert = (X509Certificate)certs.get(index);
-
- //
- // 6.1.3
- //
-
- //
- // (a) verify
- //
- try
- {
- // (a) (1)
- //
- cert.verify(workingPublicKey, "SC");
- }
- catch (Exception e)
- {
- throw new CertPathValidatorException("Could not validate certificate signature.", e, certPath, index);
- }
-
- try
- {
- // (a) (2)
- //
- cert.checkValidity(validDate);
- }
- catch (CertificateExpiredException e)
- {
- throw new CertPathValidatorException("Could not validate certificate: " + e.getMessage(), e, certPath, index);
- }
- catch (CertificateNotYetValidException e)
- {
- throw new CertPathValidatorException("Could not validate certificate: " + e.getMessage(), e, certPath, index);
- }
-
- //
- // (a) (3)
- //
- if (paramsPKIX.isRevocationEnabled())
- {
- checkCRLs(paramsPKIX, cert, validDate, sign, workingPublicKey);
- }
-
- //
- // (a) (4) name chaining
- //
- if (!getEncodedIssuerPrincipal(cert).equals(workingIssuerName))
- {
- throw new CertPathValidatorException(
- "IssuerName(" + getEncodedIssuerPrincipal(cert) +
- ") does not match SubjectName(" + workingIssuerName +
- ") of signing certificate", null, certPath, index);
- }
-
- //
- // (b), (c) permitted and excluded subtree checking.
- //
- if (!(isSelfIssued(cert) && (i < n)))
- {
- X509Principal principal = getSubjectPrincipal(cert);
- ASN1InputStream aIn = new ASN1InputStream(new ByteArrayInputStream(principal.getEncoded()));
- ASN1Sequence dns;
-
- try
- {
- dns = (ASN1Sequence)aIn.readObject();
- }
- catch (IOException e)
- {
- throw new CertPathValidatorException("exception extracting subject name when checking subtrees");
- }
-
- checkPermittedDN(permittedSubtreesDN, dns);
-
- checkExcludedDN(excludedSubtreesDN, dns);
-
- ASN1Sequence altName = (ASN1Sequence)getExtensionValue(cert, SUBJECT_ALTERNATIVE_NAME);
- if (altName != null)
- {
- for (int j = 0; j < altName.size(); j++)
- {
- ASN1TaggedObject o = (ASN1TaggedObject)altName.getObjectAt(j);
-
- switch(o.getTagNo())
- {
- case 1:
- String email = DERIA5String.getInstance(o, true).getString();
-
- checkPermittedEmail(permittedSubtreesEmail, email);
- checkExcludedEmail(excludedSubtreesEmail, email);
- break;
- case 4:
- ASN1Sequence altDN = ASN1Sequence.getInstance(o, true);
-
- checkPermittedDN(permittedSubtreesDN, altDN);
- checkExcludedDN(excludedSubtreesDN, altDN);
- break;
- case 7:
- byte[] ip = ASN1OctetString.getInstance(o, true).getOctets();
-
- checkPermittedIP(permittedSubtreesIP, ip);
- checkExcludedIP(excludedSubtreesIP, ip);
- }
- }
- }
- }
-
- //
- // (d) policy Information checking against initial policy and
- // policy mapping
- //
- ASN1Sequence certPolicies = (ASN1Sequence)getExtensionValue(cert, CERTIFICATE_POLICIES);
- if (certPolicies != null && validPolicyTree != null)
- {
- //
- // (d) (1)
- //
- Enumeration e = certPolicies.getObjects();
- Set pols = new HashSet();
-
- while (e.hasMoreElements())
- {
- PolicyInformation pInfo = PolicyInformation.getInstance(e.nextElement());
- ASN1ObjectIdentifier pOid = pInfo.getPolicyIdentifier();
-
- pols.add(pOid.getId());
-
- if (!ANY_POLICY.equals(pOid.getId()))
- {
- Set pq = getQualifierSet(pInfo.getPolicyQualifiers());
-
- boolean match = processCertD1i(i, policyNodes, pOid, pq);
-
- if (!match)
- {
- processCertD1ii(i, policyNodes, pOid, pq);
- }
- }
- }
-
- if (acceptablePolicies == null || acceptablePolicies.contains(ANY_POLICY))
- {
- acceptablePolicies = pols;
- }
- else
- {
- Iterator it = acceptablePolicies.iterator();
- Set t1 = new HashSet();
-
- while (it.hasNext())
- {
- Object o = it.next();
-
- if (pols.contains(o))
- {
- t1.add(o);
- }
- }
-
- acceptablePolicies = t1;
- }
-
- //
- // (d) (2)
- //
- if ((inhibitAnyPolicy > 0) || ((i < n) && isSelfIssued(cert)))
- {
- e = certPolicies.getObjects();
-
- while (e.hasMoreElements())
- {
- PolicyInformation pInfo = PolicyInformation.getInstance(e.nextElement());
-
- if (ANY_POLICY.equals(pInfo.getPolicyIdentifier().getId()))
- {
- Set _apq = getQualifierSet(pInfo.getPolicyQualifiers());
- List _nodes = policyNodes[i - 1];
-
- for (int k = 0; k < _nodes.size(); k++)
- {
- PKIXPolicyNode _node = (PKIXPolicyNode)_nodes.get(k);
-
- Iterator _policySetIter = _node.getExpectedPolicies().iterator();
- while (_policySetIter.hasNext())
- {
- Object _tmp = _policySetIter.next();
-
- String _policy;
- if (_tmp instanceof String)
- {
- _policy = (String)_tmp;
- }
- else if (_tmp instanceof ASN1ObjectIdentifier)
- {
- _policy = ((ASN1ObjectIdentifier)_tmp).getId();
- }
- else
- {
- continue;
- }
-
- boolean _found = false;
- Iterator _childrenIter = _node.getChildren();
-
- while (_childrenIter.hasNext())
- {
- PKIXPolicyNode _child = (PKIXPolicyNode)_childrenIter.next();
-
- if (_policy.equals(_child.getValidPolicy()))
- {
- _found = true;
- }
- }
-
- if (!_found)
- {
- Set _newChildExpectedPolicies = new HashSet();
- _newChildExpectedPolicies.add(_policy);
-
- PKIXPolicyNode _newChild = new PKIXPolicyNode(new ArrayList(),
- i,
- _newChildExpectedPolicies,
- _node,
- _apq,
- _policy,
- false);
- _node.addChild(_newChild);
- policyNodes[i].add(_newChild);
- }
- }
- }
- break;
- }
- }
- }
-
- //
- // (d) (3)
- //
- for (int j = (i - 1); j >= 0; j--)
- {
- List nodes = policyNodes[j];
-
- for (int k = 0; k < nodes.size(); k++)
- {
- PKIXPolicyNode node = (PKIXPolicyNode)nodes.get(k);
- if (!node.hasChildren())
- {
- validPolicyTree = removePolicyNode(validPolicyTree, policyNodes, node);
- if (validPolicyTree == null)
- {
- break;
- }
- }
- }
- }
-
- //
- // d (4)
- //
- Set criticalExtensionOids = cert.getCriticalExtensionOIDs();
-
- if (criticalExtensionOids != null)
- {
- boolean critical = criticalExtensionOids.contains(CERTIFICATE_POLICIES);
-
- List nodes = policyNodes[i];
- for (int j = 0; j < nodes.size(); j++)
- {
- PKIXPolicyNode node = (PKIXPolicyNode)nodes.get(j);
- node.setCritical(critical);
- }
- }
- }
-
- //
- // (e)
- //
- if (certPolicies == null)
- {
- validPolicyTree = null;
- }
-
- //
- // (f)
- //
- if (explicitPolicy <= 0 && validPolicyTree == null)
- {
- throw new CertPathValidatorException("No valid policy tree found when one expected.");
- }
-
- //
- // 6.1.4
- //
-
- if (i != n)
- {
- if (cert != null && cert.getVersion() == 1)
- {
- throw new CertPathValidatorException(
- "Version 1 certs can't be used as CA ones");
- }
-
- //
- //
- // (a) check the policy mappings
- //
- ASN1Primitive pm = getExtensionValue(cert, POLICY_MAPPINGS);
- if (pm != null)
- {
- ASN1Sequence mappings = (ASN1Sequence)pm;
-
- for (int j = 0; j < mappings.size(); j++)
- {
- ASN1Sequence mapping = (ASN1Sequence)mappings.getObjectAt(j);
-
- ASN1ObjectIdentifier issuerDomainPolicy = (ASN1ObjectIdentifier)mapping.getObjectAt(0);
- ASN1ObjectIdentifier subjectDomainPolicy = (ASN1ObjectIdentifier)mapping.getObjectAt(1);
-
- if (ANY_POLICY.equals(issuerDomainPolicy.getId()))
- {
-
- throw new CertPathValidatorException("IssuerDomainPolicy is anyPolicy");
- }
-
- if (ANY_POLICY.equals(subjectDomainPolicy.getId()))
- {
-
- throw new CertPathValidatorException("SubjectDomainPolicy is anyPolicy");
- }
- }
- }
-
- // (b)
- //
- if (pm != null)
- {
- ASN1Sequence mappings = (ASN1Sequence)pm;
- Map m_idp = new HashMap();
- Set s_idp = new HashSet();
-
- for (int j = 0; j < mappings.size(); j++)
- {
- ASN1Sequence mapping = (ASN1Sequence)mappings.getObjectAt(j);
- String id_p = ((ASN1ObjectIdentifier)mapping.getObjectAt(0)).getId();
- String sd_p = ((ASN1ObjectIdentifier)mapping.getObjectAt(1)).getId();
- Set tmp;
-
- if (!m_idp.containsKey(id_p))
- {
- tmp = new HashSet();
- tmp.add(sd_p);
- m_idp.put(id_p, tmp);
- s_idp.add(id_p);
- }
- else
- {
- tmp = (Set)m_idp.get(id_p);
- tmp.add(sd_p);
- }
- }
-
- Iterator it_idp = s_idp.iterator();
- while (it_idp.hasNext())
- {
- String id_p = (String)it_idp.next();
-
- //
- // (1)
- //
- if (policyMapping > 0)
- {
- boolean idp_found = false;
- Iterator nodes_i = policyNodes[i].iterator();
- while (nodes_i.hasNext())
- {
- PKIXPolicyNode node = (PKIXPolicyNode)nodes_i.next();
- if (node.getValidPolicy().equals(id_p))
- {
- idp_found = true;
- node.expectedPolicies = (Set)m_idp.get(id_p);
- break;
- }
- }
-
- if (!idp_found)
- {
- nodes_i = policyNodes[i].iterator();
- while (nodes_i.hasNext())
- {
- PKIXPolicyNode node = (PKIXPolicyNode)nodes_i.next();
- if (ANY_POLICY.equals(node.getValidPolicy()))
- {
- Set pq = null;
- ASN1Sequence policies = (ASN1Sequence)getExtensionValue(
- cert, CERTIFICATE_POLICIES);
- Enumeration e = policies.getObjects();
- while (e.hasMoreElements())
- {
- PolicyInformation pinfo = PolicyInformation.getInstance(e.nextElement());
- if (ANY_POLICY.equals(pinfo.getPolicyIdentifier().getId()))
- {
- pq = getQualifierSet(pinfo.getPolicyQualifiers());
- break;
- }
- }
- boolean ci = false;
- if (cert.getCriticalExtensionOIDs() != null)
- {
- ci = cert.getCriticalExtensionOIDs().contains(CERTIFICATE_POLICIES);
- }
-
- PKIXPolicyNode p_node = (PKIXPolicyNode)node.getParent();
- if (ANY_POLICY.equals(p_node.getValidPolicy()))
- {
- PKIXPolicyNode c_node = new PKIXPolicyNode(
- new ArrayList(), i,
- (Set)m_idp.get(id_p),
- p_node, pq, id_p, ci);
- p_node.addChild(c_node);
- policyNodes[i].add(c_node);
- }
- break;
- }
- }
- }
-
- //
- // (2)
- //
- }
- else if (policyMapping <= 0)
- {
- Iterator nodes_i = policyNodes[i].iterator();
- while (nodes_i.hasNext())
- {
- PKIXPolicyNode node = (PKIXPolicyNode)nodes_i.next();
- if (node.getValidPolicy().equals(id_p))
- {
- PKIXPolicyNode p_node = (PKIXPolicyNode)node.getParent();
- p_node.removeChild(node);
- nodes_i.remove();
- for (int k = (i - 1); k >= 0; k--)
- {
- List nodes = policyNodes[k];
- for (int l = 0; l < nodes.size(); l++)
- {
- PKIXPolicyNode node2 = (PKIXPolicyNode)nodes.get(l);
- if (!node2.hasChildren())
- {
- validPolicyTree = removePolicyNode(validPolicyTree, policyNodes, node2);
- if (validPolicyTree == null)
- {
- break;
- }
- }
- }
- }
- }
- }
- }
- }
- }
-
- //
- // (g) handle the name constraints extension
- //
- ASN1Sequence ncSeq = (ASN1Sequence)getExtensionValue(cert, NAME_CONSTRAINTS);
- if (ncSeq != null)
- {
- NameConstraints nc = NameConstraints.getInstance(ncSeq);
-
- //
- // (g) (1) permitted subtrees
- //
- GeneralSubtree[] permitted = nc.getPermittedSubtrees();
- if (permitted != null)
- {
- for (int indx = 0; indx != permitted.length; indx++)
- {
- GeneralSubtree subtree = permitted[indx];
- GeneralName base = subtree.getBase();
-
- switch(base.getTagNo())
- {
- case 1:
- permittedSubtreesEmail = intersectEmail(permittedSubtreesEmail, DERIA5String.getInstance(base.getName()).getString());
- break;
- case 4:
- permittedSubtreesDN = intersectDN(permittedSubtreesDN, (ASN1Sequence)base.getName());
- break;
- case 7:
- permittedSubtreesIP = intersectIP(permittedSubtreesIP, BERConstructedOctetString.fromSequence((ASN1Sequence)base.getName()).getOctets());
- break;
- }
- }
- }
-
- //
- // (g) (2) excluded subtrees
- //
- GeneralSubtree[] excluded = nc.getExcludedSubtrees();
- if (excluded != null)
- {
- for (int indx = 0; indx != excluded.length; indx++)
- {
- GeneralSubtree subtree = excluded[indx];
- GeneralName base = subtree.getBase();
-
- switch(base.getTagNo())
- {
- case 1:
- excludedSubtreesEmail = unionEmail(excludedSubtreesEmail, DERIA5String.getInstance(base.getName()).getString());
- break;
- case 4:
- excludedSubtreesDN = unionDN(excludedSubtreesDN, (ASN1Sequence)base.getName());
- break;
- case 7:
- excludedSubtreesIP = unionIP(excludedSubtreesIP, BERConstructedOctetString.fromSequence((ASN1Sequence)base.getName()).getOctets());
- break;
- }
- }
- }
- }
-
- //
- // (h)
- //
- if (!isSelfIssued(cert))
- {
- //
- // (1)
- //
- if (explicitPolicy != 0)
- {
- explicitPolicy--;
- }
-
- //
- // (2)
- //
- if (policyMapping != 0)
- {
- policyMapping--;
- }
-
- //
- // (3)
- //
- if (inhibitAnyPolicy != 0)
- {
- inhibitAnyPolicy--;
- }
- }
-
- //
- // (i)
- //
- ASN1Sequence pc = (ASN1Sequence)getExtensionValue(cert, POLICY_CONSTRAINTS);
-
- if (pc != null)
- {
- Enumeration policyConstraints = pc.getObjects();
-
- while (policyConstraints.hasMoreElements())
- {
- ASN1TaggedObject constraint = (ASN1TaggedObject)policyConstraints.nextElement();
- switch (constraint.getTagNo())
- {
- case 0:
- tmpInt = ASN1Integer.getInstance(constraint).getValue().intValue();
- if (tmpInt < explicitPolicy)
- {
- explicitPolicy = tmpInt;
- }
- break;
- case 1:
- tmpInt = ASN1Integer.getInstance(constraint).getValue().intValue();
- if (tmpInt < policyMapping)
- {
- policyMapping = tmpInt;
- }
- break;
- }
- }
- }
-
- //
- // (j)
- //
- ASN1Integer iap = (ASN1Integer)getExtensionValue(cert, INHIBIT_ANY_POLICY);
-
- if (iap != null)
- {
- int _inhibitAnyPolicy = iap.getValue().intValue();
-
- if (_inhibitAnyPolicy < inhibitAnyPolicy)
- {
- inhibitAnyPolicy = _inhibitAnyPolicy;
- }
- }
-
- //
- // (k)
- //
- BasicConstraints bc = BasicConstraints.getInstance(
- getExtensionValue(cert, BASIC_CONSTRAINTS));
- if (bc != null)
- {
- if (!(bc.isCA()))
- {
- throw new CertPathValidatorException("Not a CA certificate");
- }
- }
- else
- {
- throw new CertPathValidatorException("Intermediate certificate lacks BasicConstraints");
- }
-
- //
- // (l)
- //
- if (!isSelfIssued(cert))
- {
- if (maxPathLength <= 0)
- {
- throw new CertPathValidatorException("Max path length not greater than zero");
- }
-
- maxPathLength--;
- }
-
- //
- // (m)
- //
- if (bc != null)
- {
- BigInteger _pathLengthConstraint = bc.getPathLenConstraint();
-
- if (_pathLengthConstraint != null)
- {
- int _plc = _pathLengthConstraint.intValue();
-
- if (_plc < maxPathLength)
- {
- maxPathLength = _plc;
- }
- }
- }
-
- //
- // (n)
- //
- boolean[] _usage = cert.getKeyUsage();
-
- if ((_usage != null) && !_usage[5])
- {
- throw new CertPathValidatorException(
- "Issuer certificate keyusage extension is critical an does not permit key signing.\n",
- null, certPath, index);
- }
-
- //
- // (o)
- //
- Set criticalExtensions = new HashSet(cert.getCriticalExtensionOIDs());
- // these extensions are handle by the algorithem
- criticalExtensions.remove(KEY_USAGE);
- criticalExtensions.remove(CERTIFICATE_POLICIES);
- criticalExtensions.remove(POLICY_MAPPINGS);
- criticalExtensions.remove(INHIBIT_ANY_POLICY);
- criticalExtensions.remove(ISSUING_DISTRIBUTION_POINT);
- criticalExtensions.remove(DELTA_CRL_INDICATOR);
- criticalExtensions.remove(POLICY_CONSTRAINTS);
- criticalExtensions.remove(BASIC_CONSTRAINTS);
- criticalExtensions.remove(SUBJECT_ALTERNATIVE_NAME);
- criticalExtensions.remove(NAME_CONSTRAINTS);
-
- tmpIter = pathCheckers.iterator();
- while (tmpIter.hasNext())
- {
- try
- {
- ((PKIXCertPathChecker)tmpIter.next()).check(cert, criticalExtensions);
- }
- catch (CertPathValidatorException e)
- {
- throw new CertPathValidatorException(e.getMessage(), e.getCause(), certPath, index);
- }
- }
- if (!criticalExtensions.isEmpty())
- {
- throw new CertPathValidatorException(
- "Certificate has unsupported critical extension", null, certPath, index);
- }
- }
-
- // set signing certificate for next round
- sign = cert;
- workingPublicKey = sign.getPublicKey();
- try
- {
- workingIssuerName = getSubjectPrincipal(sign);
- }
- catch (IllegalArgumentException ex)
- {
- throw new CertPathValidatorException(sign.getSubjectDN().getName() + " :" + ex.toString());
- }
- workingAlgId = getAlgorithmIdentifier(workingPublicKey);
- workingPublicKeyAlgorithm = workingAlgId.getObjectId();
- workingPublicKeyParameters = workingAlgId.getParameters();
- }
- catch (AnnotatedException e)
- {
- throw new CertPathValidatorException(e.getMessage(), e.getUnderlyingException(), certPath, index);
- }
- }
-
- //
- // 6.1.5 Wrap-up procedure
- //
-
- //
- // (a)
- //
- if (!isSelfIssued(cert) && (explicitPolicy != 0))
- {
- explicitPolicy--;
- }
-
- //
- // (b)
- //
- try
- {
- ASN1Sequence pc = (ASN1Sequence)getExtensionValue(cert, POLICY_CONSTRAINTS);
- if (pc != null)
- {
- Enumeration policyConstraints = pc.getObjects();
-
- while (policyConstraints.hasMoreElements())
- {
- ASN1TaggedObject constraint = (ASN1TaggedObject)policyConstraints.nextElement();
- switch (constraint.getTagNo())
- {
- case 0:
- tmpInt = ASN1Integer.getInstance(constraint).getValue().intValue();
- if (tmpInt == 0)
- {
- explicitPolicy = 0;
- }
- break;
- }
- }
- }
- }
- catch (AnnotatedException e)
- {
- throw new CertPathValidatorException(e.getMessage(), e.getUnderlyingException(), certPath, index);
- }
-
- //
- // (c) (d) and (e) are already done
- //
-
- //
- // (f)
- //
- Set criticalExtensions = cert.getCriticalExtensionOIDs();
-
- if (criticalExtensions != null)
- {
- criticalExtensions = new HashSet(criticalExtensions);
- // these extensions are handle by the algorithm
- criticalExtensions.remove(KEY_USAGE);
- criticalExtensions.remove(CERTIFICATE_POLICIES);
- criticalExtensions.remove(POLICY_MAPPINGS);
- criticalExtensions.remove(INHIBIT_ANY_POLICY);
- criticalExtensions.remove(ISSUING_DISTRIBUTION_POINT);
- criticalExtensions.remove(DELTA_CRL_INDICATOR);
- criticalExtensions.remove(POLICY_CONSTRAINTS);
- criticalExtensions.remove(BASIC_CONSTRAINTS);
- criticalExtensions.remove(SUBJECT_ALTERNATIVE_NAME);
- criticalExtensions.remove(NAME_CONSTRAINTS);
- }
- else
- {
- criticalExtensions = new HashSet();
- }
-
- tmpIter = pathCheckers.iterator();
- while (tmpIter.hasNext())
- {
- try
- {
- ((PKIXCertPathChecker)tmpIter.next()).check(cert, criticalExtensions);
- }
- catch (CertPathValidatorException e)
- {
- throw new CertPathValidatorException(e.getMessage(), e.getCause(), certPath, index);
- }
- }
-
- if (!criticalExtensions.isEmpty())
- {
- throw new CertPathValidatorException(
- "Certificate has unsupported critical extension", null, certPath, index);
- }
-
- //
- // (g)
- //
- PKIXPolicyNode intersection;
-
-
- //
- // (g) (i)
- //
- if (validPolicyTree == null)
- {
- if (paramsPKIX.isExplicitPolicyRequired())
- {
- throw new CertPathValidatorException("Explicit policy requested but none available.");
- }
- intersection = null;
- }
- else if (isAnyPolicy(userInitialPolicySet)) // (g) (ii)
- {
- if (paramsPKIX.isExplicitPolicyRequired())
- {
- if (acceptablePolicies.isEmpty())
- {
- throw new CertPathValidatorException("Explicit policy requested but none available.");
- }
- else
- {
- Set _validPolicyNodeSet = new HashSet();
-
- for (int j = 0; j < policyNodes.length; j++)
- {
- List _nodeDepth = policyNodes[j];
-
- for (int k = 0; k < _nodeDepth.size(); k++)
- {
- PKIXPolicyNode _node = (PKIXPolicyNode)_nodeDepth.get(k);
-
- if (ANY_POLICY.equals(_node.getValidPolicy()))
- {
- Iterator _iter = _node.getChildren();
- while (_iter.hasNext())
- {
- _validPolicyNodeSet.add(_iter.next());
- }
- }
- }
- }
-
- Iterator _vpnsIter = _validPolicyNodeSet.iterator();
- while (_vpnsIter.hasNext())
- {
- PKIXPolicyNode _node = (PKIXPolicyNode)_vpnsIter.next();
- String _validPolicy = _node.getValidPolicy();
-
- if (!acceptablePolicies.contains(_validPolicy))
- {
- //validPolicyTree = removePolicyNode(validPolicyTree, policyNodes, _node);
- }
- }
- if (validPolicyTree != null)
- {
- for (int j = (n - 1); j >= 0; j--)
- {
- List nodes = policyNodes[j];
-
- for (int k = 0; k < nodes.size(); k++)
- {
- PKIXPolicyNode node = (PKIXPolicyNode)nodes.get(k);
- if (!node.hasChildren())
- {
- validPolicyTree = removePolicyNode(validPolicyTree, policyNodes, node);
- }
- }
- }
- }
- }
- }
-
- intersection = validPolicyTree;
- }
- else
- {
- //
- // (g) (iii)
- //
- // This implementation is not exactly same as the one described in RFC3280.
- // However, as far as the validation result is concerned, both produce
- // adequate result. The only difference is whether AnyPolicy is remain
- // in the policy tree or not.
- //
- // (g) (iii) 1
- //
- Set _validPolicyNodeSet = new HashSet();
-
- for (int j = 0; j < policyNodes.length; j++)
- {
- List _nodeDepth = policyNodes[j];
-
- for (int k = 0; k < _nodeDepth.size(); k++)
- {
- PKIXPolicyNode _node = (PKIXPolicyNode)_nodeDepth.get(k);
-
- if (ANY_POLICY.equals(_node.getValidPolicy()))
- {
- Iterator _iter = _node.getChildren();
- while (_iter.hasNext())
- {
- PKIXPolicyNode _c_node = (PKIXPolicyNode)_iter.next();
- if (!ANY_POLICY.equals(_c_node.getValidPolicy()))
- {
- _validPolicyNodeSet.add(_c_node);
- }
- }
- }
- }
- }
-
- //
- // (g) (iii) 2
- //
- Iterator _vpnsIter = _validPolicyNodeSet.iterator();
- while (_vpnsIter.hasNext())
- {
- PKIXPolicyNode _node = (PKIXPolicyNode)_vpnsIter.next();
- String _validPolicy = _node.getValidPolicy();
-
- if (!userInitialPolicySet.contains(_validPolicy))
- {
- validPolicyTree = removePolicyNode(validPolicyTree, policyNodes, _node);
- }
- }
-
- //
- // (g) (iii) 4
- //
- if (validPolicyTree != null)
- {
- for (int j = (n - 1); j >= 0; j--)
- {
- List nodes = policyNodes[j];
-
- for (int k = 0; k < nodes.size(); k++)
- {
- PKIXPolicyNode node = (PKIXPolicyNode)nodes.get(k);
- if (!node.hasChildren())
- {
- validPolicyTree = removePolicyNode(validPolicyTree, policyNodes, node);
- }
- }
- }
- }
-
- intersection = validPolicyTree;
- }
-
- if ((explicitPolicy > 0) || (intersection != null))
- {
- return new PKIXCertPathValidatorResult(trust, intersection, workingPublicKey);
- }
-
- throw new CertPathValidatorException("Path processing failed on policy.", null, certPath, index);
- }
-
- private Date getValidDate(
- PKIXParameters paramsPKIX)
- {
- Date validDate = paramsPKIX.getDate();
-
- if (validDate == null)
- {
- validDate = new Date();
- }
-
- return validDate;
- }
-
- private void checkCRLs(PKIXParameters paramsPKIX, X509Certificate cert, Date validDate, X509Certificate sign, PublicKey workingPublicKey)
- throws AnnotatedException
- {
- X509CRLSelector crlselect;
- crlselect = new X509CRLSelector();
-
- try
- {
- crlselect.addIssuerName(getEncodedIssuerPrincipal(cert).getEncoded());
- }
- catch (IOException e)
- {
- throw new AnnotatedException("Cannot extract issuer from certificate: " + e, e);
- }
-
- crlselect.setCertificateChecking(cert);
-
- Iterator crl_iter = findCRLs(crlselect, paramsPKIX.getCertStores()).iterator();
- boolean validCrlFound = false;
- X509CRLEntry crl_entry;
- while (crl_iter.hasNext())
- {
- X509CRL crl = (X509CRL)crl_iter.next();
-
- if (cert.getNotAfter().after(crl.getThisUpdate()))
- {
- if (crl.getNextUpdate() == null
- || validDate.before(crl.getNextUpdate()))
- {
- validCrlFound = true;
- }
-
- if (sign != null)
- {
- boolean[] keyusage = sign.getKeyUsage();
-
- if (keyusage != null
- && (keyusage.length < 7 || !keyusage[CRL_SIGN]))
- {
- throw new AnnotatedException(
- "Issuer certificate keyusage extension does not permit crl signing.\n" + sign);
- }
- }
-
- try
- {
- crl.verify(workingPublicKey, "SC");
- }
- catch (Exception e)
- {
- throw new AnnotatedException("can't verify CRL: " + e, e);
- }
-
- crl_entry = crl.getRevokedCertificate(cert.getSerialNumber());
- if (crl_entry != null
- && !validDate.before(crl_entry.getRevocationDate()))
- {
- String reason = null;
-
- if (crl_entry.hasExtensions())
- {
- ASN1Enumerated reasonCode = ASN1Enumerated.getInstance(getExtensionValue(crl_entry, X509Extensions.ReasonCode.getId()));
- if (reasonCode != null)
- {
- reason = crlReasons[reasonCode.getValue().intValue()];
- }
- }
-
- SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss Z");
- df.setTimeZone(TimeZone.getTimeZone("UTC"));
- String message = "Certificate revocation after " + df.format(crl_entry.getRevocationDate());
-
- if (reason != null)
- {
- message += ", reason: " + reason;
- }
-
- throw new AnnotatedException(message);
- }
-
- //
- // check the DeltaCRL indicator, base point and the issuing distribution point
- //
- ASN1Primitive idp = getExtensionValue(crl, ISSUING_DISTRIBUTION_POINT);
- ASN1Primitive dci = getExtensionValue(crl, DELTA_CRL_INDICATOR);
-
- if (dci != null)
- {
- X509CRLSelector baseSelect = new X509CRLSelector();
-
- try
- {
- baseSelect.addIssuerName(getIssuerPrincipal(crl).getEncoded());
- }
- catch (IOException e)
- {
- throw new AnnotatedException("can't extract issuer from certificate: " + e, e);
- }
-
- baseSelect.setMinCRLNumber(((ASN1Integer)dci).getPositiveValue());
- baseSelect.setMaxCRLNumber(((ASN1Integer)getExtensionValue(crl, CRL_NUMBER)).getPositiveValue().subtract(BigInteger.valueOf(1)));
-
- boolean foundBase = false;
- Iterator it = findCRLs(baseSelect, paramsPKIX.getCertStores()).iterator();
- while (it.hasNext())
- {
- X509CRL base = (X509CRL)it.next();
-
- ASN1Primitive baseIdp = getExtensionValue(base, ISSUING_DISTRIBUTION_POINT);
-
- if (idp == null)
- {
- if (baseIdp == null)
- {
- foundBase = true;
- break;
- }
- }
- else
- {
- if (idp.equals(baseIdp))
- {
- foundBase = true;
- break;
- }
- }
- }
-
- if (!foundBase)
- {
- throw new AnnotatedException("No base CRL for delta CRL");
- }
- }
-
- if (idp != null)
- {
- IssuingDistributionPoint p = IssuingDistributionPoint.getInstance(idp);
- BasicConstraints bc = BasicConstraints.getInstance(getExtensionValue(cert, BASIC_CONSTRAINTS));
-
- if (p.onlyContainsUserCerts() && (bc != null && bc.isCA()))
- {
- throw new AnnotatedException("CA Cert CRL only contains user certificates");
- }
-
- if (p.onlyContainsCACerts() && (bc == null || !bc.isCA()))
- {
- throw new AnnotatedException("End CRL only contains CA certificates");
- }
-
- if (p.onlyContainsAttributeCerts())
- {
- throw new AnnotatedException("onlyContainsAttributeCerts boolean is asserted");
- }
- }
- }
- }
-
- if (!validCrlFound)
- {
- throw new AnnotatedException("no valid CRL found");
- }
- }
-
- /**
- * Return a Collection of all CRLs found in the
- * CertStore's that are matching the crlSelect criteriums.
- *
- * @param certSelector a {@link CertSelector CertSelector}
- * object that will be used to select the certificates
- * @param certStores a List containing only {@link CertStore
- * CertStore} objects. These are used to search for
- * CRLs
- *
- * @return a Collection of all found {@link CRL CRL}
- * objects. May be empty but never null
.
- */
- private Collection findCRLs(
- X509CRLSelector crlSelect,
- List crlStores)
- throws AnnotatedException
- {
- Set crls = new HashSet();
- Iterator iter = crlStores.iterator();
-
- while (iter.hasNext())
- {
- CertStore certStore = (CertStore)iter.next();
-
- try
- {
- crls.addAll(certStore.getCRLs(crlSelect));
- }
- catch (CertStoreException e)
- {
- throw new AnnotatedException("cannot extract crl: " + e, e);
- }
- }
-
- return crls;
- }
-
- /**
- * Search the given Set of TrustAnchor's for one that is the
- * issuer of the fiven X509 certificate.
- *
- * @param cert the X509 certificate
- * @param trustAnchors a Set of TrustAnchor's
- *
- * @return the TrustAnchor
object if found or
- * null
if not.
- *
- * @exception CertPathValidatorException if a TrustAnchor was
- * found but the signature verification on the given certificate
- * has thrown an exception. This Exception can be obtainted with
- * getCause()
method.
- **/
- final TrustAnchor findTrustAnchor(
- X509Certificate cert,
- CertPath certPath,
- int index,
- Set trustAnchors)
- throws CertPathValidatorException
- {
- Iterator iter = trustAnchors.iterator();
- TrustAnchor trust = null;
- PublicKey trustPublicKey = null;
- Exception invalidKeyEx = null;
-
- X509CertSelector certSelectX509 = new X509CertSelector();
-
- try
- {
- certSelectX509.setSubject(getEncodedIssuerPrincipal(cert).getEncoded());
- }
- catch (IOException ex)
- {
- throw new CertPathValidatorException(ex);
- }
- catch (AnnotatedException ex)
- {
- throw new CertPathValidatorException(ex.getUnderlyingException());
- }
-
- while (iter.hasNext() && trust == null)
- {
- trust = (TrustAnchor)iter.next();
- if (trust.getTrustedCert() != null)
- {
- if (certSelectX509.match(trust.getTrustedCert()))
- {
- trustPublicKey = trust.getTrustedCert().getPublicKey();
- }
- else
- {
- trust = null;
- }
- }
- else if (trust.getCAName() != null
- && trust.getCAPublicKey() != null)
- {
- try
- {
- X509Principal certIssuer = getEncodedIssuerPrincipal(cert);
- X509Principal caName = new X509Principal(trust.getCAName());
- if (certIssuer.equals(caName))
- {
- trustPublicKey = trust.getCAPublicKey();
- }
- else
- {
- trust = null;
- }
- }
- catch (AnnotatedException ex)
- {
- throw new CertPathValidatorException(ex.getMessage(), ex.getUnderlyingException(), certPath, index);
- }
- catch (IllegalArgumentException ex)
- {
- trust = null;
- }
- }
- else
- {
- trust = null;
- }
-
- if (trustPublicKey != null)
- {
- try
- {
- cert.verify(trustPublicKey);
- }
- catch (Exception ex)
- {
- invalidKeyEx = ex;
- trust = null;
- }
- }
- }
-
- if (trust == null && invalidKeyEx != null)
- {
- throw new CertPathValidatorException("TrustAnchor found but certificate validation failed.", invalidKeyEx, certPath, index);
- }
-
- return trust;
- }
-
- private X509Principal getIssuerPrincipal(X509CRL crl)
- throws AnnotatedException
- {
- try
- {
- return PrincipalUtil.getIssuerX509Principal(crl);
- }
- catch (CRLException e)
- {
- throw new AnnotatedException("can't get CRL issuer principal", e);
- }
- }
-
- private X509Principal getEncodedIssuerPrincipal(X509Certificate cert)
- throws AnnotatedException
- {
- try
- {
- return PrincipalUtil.getIssuerX509Principal(cert);
- }
- catch (CertificateEncodingException e)
- {
- throw new AnnotatedException("can't get issuer principal.", e);
- }
- }
-
- private X509Principal getSubjectPrincipal(X509Certificate cert)
- throws AnnotatedException
- {
- try
- {
- return PrincipalUtil.getSubjectX509Principal(cert);
- }
- catch (CertificateEncodingException e)
- {
- throw new AnnotatedException("can't get subject principal.", e);
- }
- }
-}
diff --git a/extern/spongycastle/prov/src/main/jdk1.1/org/spongycastle/jce/provider/PKIXPolicyNode.java b/extern/spongycastle/prov/src/main/jdk1.1/org/spongycastle/jce/provider/PKIXPolicyNode.java
deleted file mode 100644
index 9cb2fbbfd..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.1/org/spongycastle/jce/provider/PKIXPolicyNode.java
+++ /dev/null
@@ -1,167 +0,0 @@
-package org.spongycastle.jce.provider;
-
-import java.security.cert.PolicyNode;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-
-public class PKIXPolicyNode
- implements PolicyNode
-{
- protected List children;
- protected int depth;
- protected Set expectedPolicies;
- protected PolicyNode parent;
- protected Set policyQualifiers;
- protected String validPolicy;
- protected boolean critical;
-
- /*
- *
- * CONSTRUCTORS
- *
- */
-
- public PKIXPolicyNode(
- List _children,
- int _depth,
- Set _expectedPolicies,
- PolicyNode _parent,
- Set _policyQualifiers,
- String _validPolicy,
- boolean _critical)
- {
- children = _children;
- depth = _depth;
- expectedPolicies = _expectedPolicies;
- parent = _parent;
- policyQualifiers = _policyQualifiers;
- validPolicy = _validPolicy;
- critical = _critical;
- }
-
- public void addChild(
- PKIXPolicyNode _child)
- {
- children.add(_child);
- _child.setParent(this);
- }
-
- public Iterator getChildren()
- {
- return children.iterator();
- }
-
- public int getDepth()
- {
- return depth;
- }
-
- public Set getExpectedPolicies()
- {
- return expectedPolicies;
- }
-
- public PolicyNode getParent()
- {
- return parent;
- }
-
- public Set getPolicyQualifiers()
- {
- return policyQualifiers;
- }
-
- public String getValidPolicy()
- {
- return validPolicy;
- }
-
- public boolean hasChildren()
- {
- return !children.isEmpty();
- }
-
- public boolean isCritical()
- {
- return critical;
- }
-
- public void removeChild(PKIXPolicyNode _child)
- {
- children.remove(_child);
- }
-
- public void setCritical(boolean _critical)
- {
- critical = _critical;
- }
-
- public void setParent(PKIXPolicyNode _parent)
- {
- parent = _parent;
- }
-
- public String toString()
- {
- return toString("");
- }
-
- public String toString(String _indent)
- {
- StringBuffer _buf = new StringBuffer();
- _buf.append(_indent);
- _buf.append(validPolicy);
- _buf.append(" {\n");
-
- for(int i = 0; i < children.size(); i++) {
- _buf.append(((PKIXPolicyNode)children.get(i)).toString(_indent + " "));
- }
-
- _buf.append(_indent);
- _buf.append("}\n");
- return _buf.toString();
- }
-
- public Object clone()
- {
- return copy();
- }
-
- public PKIXPolicyNode copy()
- {
- HashSet _expectedPolicies = new HashSet();
- Iterator _iter = expectedPolicies.iterator();
- while (_iter.hasNext())
- {
- _expectedPolicies.add(new String((String)_iter.next()));
- }
-
- HashSet _policyQualifiers = new HashSet();
- _iter = policyQualifiers.iterator();
- while (_iter.hasNext())
- {
- _policyQualifiers.add(new String((String)_iter.next()));
- }
-
- PKIXPolicyNode _node = new PKIXPolicyNode(new ArrayList(),
- depth,
- _expectedPolicies,
- null,
- _policyQualifiers,
- new String(validPolicy),
- critical);
-
- _iter = children.iterator();
- while (_iter.hasNext())
- {
- PKIXPolicyNode _child = ((PKIXPolicyNode)_iter.next()).copy();
- _child.setParent(_node);
- _node.addChild(_child);
- }
-
- return _node;
- }
-}
diff --git a/extern/spongycastle/prov/src/main/jdk1.1/org/spongycastle/jce/provider/ProviderUtil.java b/extern/spongycastle/prov/src/main/jdk1.1/org/spongycastle/jce/provider/ProviderUtil.java
deleted file mode 100644
index a67007e6d..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.1/org/spongycastle/jce/provider/ProviderUtil.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package org.spongycastle.jce.provider;
-
-import org.spongycastle.jcajce.provider.config.ConfigurableProvider;
-import org.spongycastle.jce.spec.ECParameterSpec;
-
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-
-public class ProviderUtil
-{
- private static final long MAX_MEMORY = Integer.MAX_VALUE;
-
- private static volatile ECParameterSpec ecImplicitCaParams;
-
- static void setParameter(String parameterName, Object parameter)
- {
- if (parameterName.equals(ConfigurableProvider.EC_IMPLICITLY_CA))
- {
- if (parameter instanceof ECParameterSpec || parameter == null)
- {
- ecImplicitCaParams = (ECParameterSpec)parameter;
- }
- }
- }
-
- public static ECParameterSpec getEcImplicitlyCa()
- {
- return ecImplicitCaParams;
- }
-
- static int getReadLimit(InputStream in)
- throws IOException
- {
- if (in instanceof ByteArrayInputStream)
- {
- return in.available();
- }
-
- if (MAX_MEMORY > Integer.MAX_VALUE)
- {
- return Integer.MAX_VALUE;
- }
-
- return (int)MAX_MEMORY;
- }
-}
diff --git a/extern/spongycastle/prov/src/main/jdk1.1/org/spongycastle/jce/provider/RFC3280CertPathUtilities.java b/extern/spongycastle/prov/src/main/jdk1.1/org/spongycastle/jce/provider/RFC3280CertPathUtilities.java
deleted file mode 100644
index 2be3e0c28..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.1/org/spongycastle/jce/provider/RFC3280CertPathUtilities.java
+++ /dev/null
@@ -1,87 +0,0 @@
-package org.spongycastle.jce.provider;
-
-import java.io.IOException;
-import java.math.BigInteger;
-import java.security.GeneralSecurityException;
-import java.security.PublicKey;
-import java.security.cert.CertPath;
-import java.security.cert.CertPathBuilder;
-import java.security.cert.CertPathBuilderException;
-import java.security.cert.CertPathValidatorException;
-import java.security.cert.CertificateExpiredException;
-import java.security.cert.CertificateNotYetValidException;
-import java.security.cert.PKIXCertPathChecker;
-import java.security.cert.X509CRL;
-import java.security.cert.X509Certificate;
-import java.security.cert.X509Extension;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Date;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.Vector;
-
-import org.spongycastle.asn1.ASN1EncodableVector;
-import org.spongycastle.asn1.ASN1InputStream;
-import org.spongycastle.asn1.ASN1Sequence;
-import org.spongycastle.asn1.ASN1TaggedObject;
-import org.spongycastle.asn1.x509.BasicConstraints;
-import org.spongycastle.asn1.x509.CRLDistPoint;
-import org.spongycastle.asn1.x509.CRLReason;
-import org.spongycastle.asn1.x509.DistributionPoint;
-import org.spongycastle.asn1.x509.DistributionPointName;
-import org.spongycastle.asn1.x509.GeneralName;
-import org.spongycastle.asn1.x509.GeneralNames;
-import org.spongycastle.asn1.x509.GeneralSubtree;
-import org.spongycastle.asn1.x509.IssuingDistributionPoint;
-import org.spongycastle.asn1.x509.NameConstraints;
-import org.spongycastle.asn1.x509.PolicyInformation;
-import org.spongycastle.asn1.x509.X509Extensions;
-import org.spongycastle.asn1.x509.X509Name;
-import org.spongycastle.util.Arrays;
-
-public class RFC3280CertPathUtilities
-{
- public static final String CERTIFICATE_POLICIES = X509Extensions.CertificatePolicies.getId();
-
- public static final String POLICY_MAPPINGS = X509Extensions.PolicyMappings.getId();
-
- public static final String INHIBIT_ANY_POLICY = X509Extensions.InhibitAnyPolicy.getId();
-
- public static final String ISSUING_DISTRIBUTION_POINT = X509Extensions.IssuingDistributionPoint.getId();
-
- public static final String FRESHEST_CRL = X509Extensions.FreshestCRL.getId();
-
- public static final String DELTA_CRL_INDICATOR = X509Extensions.DeltaCRLIndicator.getId();
-
- public static final String POLICY_CONSTRAINTS = X509Extensions.PolicyConstraints.getId();
-
- public static final String BASIC_CONSTRAINTS = X509Extensions.BasicConstraints.getId();
-
- public static final String CRL_DISTRIBUTION_POINTS = X509Extensions.CRLDistributionPoints.getId();
-
- public static final String SUBJECT_ALTERNATIVE_NAME = X509Extensions.SubjectAlternativeName.getId();
-
- public static final String NAME_CONSTRAINTS = X509Extensions.NameConstraints.getId();
-
- public static final String AUTHORITY_KEY_IDENTIFIER = X509Extensions.AuthorityKeyIdentifier.getId();
-
- public static final String KEY_USAGE = X509Extensions.KeyUsage.getId();
-
- public static final String CRL_NUMBER = X509Extensions.CRLNumber.getId();
-
- public static final String ANY_POLICY = "2.5.29.32.0";
-
- /*
- * key usage bits
- */
- public static final int KEY_CERT_SIGN = 5;
-
- public static final int CRL_SIGN = 6;
-
-}
diff --git a/extern/spongycastle/prov/src/main/jdk1.1/org/spongycastle/jce/provider/X509CRLObject.java b/extern/spongycastle/prov/src/main/jdk1.1/org/spongycastle/jce/provider/X509CRLObject.java
deleted file mode 100644
index ff7745287..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.1/org/spongycastle/jce/provider/X509CRLObject.java
+++ /dev/null
@@ -1,554 +0,0 @@
-package org.spongycastle.jce.provider;
-
-import java.io.IOException;
-import java.math.BigInteger;
-import java.security.InvalidKeyException;
-import java.security.NoSuchAlgorithmException;
-import java.security.NoSuchProviderException;
-import java.security.Principal;
-import java.security.PublicKey;
-import java.security.Signature;
-import java.security.SignatureException;
-import java.security.cert.CRLException;
-import java.security.cert.Certificate;
-import java.security.cert.CertificateEncodingException;
-import java.security.cert.X509CRL;
-import java.security.cert.X509CRLEntry;
-import java.security.cert.X509Certificate;
-import java.util.Collections;
-import java.util.Date;
-import java.util.Enumeration;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Set;
-
-import org.spongycastle.asn1.ASN1Encodable;
-import org.spongycastle.asn1.ASN1Encoding;
-import org.spongycastle.asn1.ASN1InputStream;
-import org.spongycastle.asn1.ASN1ObjectIdentifier;
-import org.spongycastle.asn1.ASN1Integer;
-import org.spongycastle.asn1.util.ASN1Dump;
-import org.spongycastle.asn1.x500.X500Name;
-import org.spongycastle.asn1.x509.CRLDistPoint;
-import org.spongycastle.asn1.x509.CRLNumber;
-import org.spongycastle.asn1.x509.CertificateList;
-import org.spongycastle.asn1.x509.Extension;
-import org.spongycastle.asn1.x509.Extensions;
-import org.spongycastle.asn1.x509.GeneralNames;
-import org.spongycastle.asn1.x509.IssuingDistributionPoint;
-import org.spongycastle.asn1.x509.TBSCertList;
-import org.spongycastle.jce.X509Principal;
-import org.spongycastle.util.encoders.Hex;
-import org.spongycastle.x509.extension.X509ExtensionUtil;
-
-/**
- * The following extensions are listed in RFC 2459 as relevant to CRLs
- *
- * Authority Key Identifier
- * Issuer Alternative Name
- * CRL Number
- * Delta CRL Indicator (critical)
- * Issuing Distribution Point (critical)
- */
-public class X509CRLObject
- extends X509CRL
-{
- private CertificateList c;
- private String sigAlgName;
- private byte[] sigAlgParams;
- private boolean isIndirect;
-
- static boolean isIndirectCRL(X509CRL crl)
- throws CRLException
- {
- try
- {
- byte[] idp = crl.getExtensionValue(Extension.issuingDistributionPoint.getId());
- return idp != null
- && IssuingDistributionPoint.getInstance(X509ExtensionUtil.fromExtensionValue(idp)).isIndirectCRL();
- }
- catch (Exception e)
- {
- throw new ExtCRLException(
- "Exception reading IssuingDistributionPoint", e);
- }
- }
-
- public X509CRLObject(
- CertificateList c)
- throws CRLException
- {
- this.c = c;
-
- try
- {
- this.sigAlgName = X509SignatureUtil.getSignatureName(c.getSignatureAlgorithm());
-
- if (c.getSignatureAlgorithm().getParameters() != null)
- {
- this.sigAlgParams = ((ASN1Encodable)c.getSignatureAlgorithm().getParameters()).toASN1Primitive().getEncoded(ASN1Encoding.DER);
- }
- else
- {
- this.sigAlgParams = null;
- }
-
- this.isIndirect = isIndirectCRL(this);
- }
- catch (Exception e)
- {
- throw new CRLException("CRL contents invalid: " + e);
- }
- }
-
- /**
- * Will return true if any extensions are present and marked
- * as critical as we currently dont handle any extensions!
- */
- public boolean hasUnsupportedCriticalExtension()
- {
- Set extns = getCriticalExtensionOIDs();
-
- if (extns == null)
- {
- return false;
- }
-
- extns.remove(RFC3280CertPathUtilities.ISSUING_DISTRIBUTION_POINT);
- extns.remove(RFC3280CertPathUtilities.DELTA_CRL_INDICATOR);
-
- return !extns.isEmpty();
- }
-
- private Set getExtensionOIDs(boolean critical)
- {
- if (this.getVersion() == 2)
- {
- Extensions extensions = c.getTBSCertList().getExtensions();
-
- if (extensions != null)
- {
- Set set = new HashSet();
- Enumeration e = extensions.oids();
-
- while (e.hasMoreElements())
- {
- ASN1ObjectIdentifier oid = (ASN1ObjectIdentifier)e.nextElement();
- Extension ext = extensions.getExtension(oid);
-
- if (critical == ext.isCritical())
- {
- set.add(oid.getId());
- }
- }
-
- return set;
- }
- }
-
- return null;
- }
-
- public Set getCriticalExtensionOIDs()
- {
- return getExtensionOIDs(true);
- }
-
- public Set getNonCriticalExtensionOIDs()
- {
- return getExtensionOIDs(false);
- }
-
- public byte[] getExtensionValue(String oid)
- {
- Extensions exts = c.getTBSCertList().getExtensions();
-
- if (exts != null)
- {
- Extension ext = exts.getExtension(new ASN1ObjectIdentifier(oid));
-
- if (ext != null)
- {
- try
- {
- return ext.getExtnValue().getEncoded();
- }
- catch (Exception e)
- {
- throw new IllegalStateException("error parsing " + e.toString());
- }
- }
- }
-
- return null;
- }
-
- public byte[] getEncoded()
- throws CRLException
- {
- try
- {
- return c.getEncoded(ASN1Encoding.DER);
- }
- catch (IOException e)
- {
- throw new CRLException(e.toString());
- }
- }
-
- public void verify(PublicKey key)
- throws CRLException, NoSuchAlgorithmException,
- InvalidKeyException, NoSuchProviderException, SignatureException
- {
- verify(key, BouncyCastleProvider.PROVIDER_NAME);
- }
-
- public void verify(PublicKey key, String sigProvider)
- throws CRLException, NoSuchAlgorithmException,
- InvalidKeyException, NoSuchProviderException, SignatureException
- {
- if (!c.getSignatureAlgorithm().equals(c.getTBSCertList().getSignature()))
- {
- throw new CRLException("Signature algorithm on CertificateList does not match TBSCertList.");
- }
-
- Signature sig;
-
- if (sigProvider != null)
- {
- sig = Signature.getInstance(getSigAlgName(), sigProvider);
- }
- else
- {
- sig = Signature.getInstance(getSigAlgName());
- }
-
- sig.initVerify(key);
- sig.update(this.getTBSCertList());
-
- if (!sig.verify(this.getSignature()))
- {
- throw new SignatureException("CRL does not verify with supplied public key.");
- }
- }
-
- public int getVersion()
- {
- return c.getVersionNumber();
- }
-
- public Principal getIssuerDN()
- {
- return new X509Principal(X500Name.getInstance(c.getIssuer().toASN1Primitive()));
- }
-
- public Date getThisUpdate()
- {
- return c.getThisUpdate().getDate();
- }
-
- public Date getNextUpdate()
- {
- if (c.getNextUpdate() != null)
- {
- return c.getNextUpdate().getDate();
- }
-
- return null;
- }
-
- private Set loadCRLEntries()
- {
- Set entrySet = new HashSet();
- Enumeration certs = c.getRevokedCertificateEnumeration();
-
- X500Name previousCertificateIssuer = c.getIssuer();
- while (certs.hasMoreElements())
- {
- TBSCertList.CRLEntry entry = (TBSCertList.CRLEntry)certs.nextElement();
- X509CRLEntryObject crlEntry = new X509CRLEntryObject(entry, isIndirect, previousCertificateIssuer);
- entrySet.add(crlEntry);
- if (isIndirect && entry.hasExtensions())
- {
- Extension currentCaName = entry.getExtensions().getExtension(Extension.certificateIssuer);
-
- if (currentCaName != null)
- {
- previousCertificateIssuer = X500Name.getInstance(GeneralNames.getInstance(currentCaName.getParsedValue()).getNames()[0].getName());
- }
- }
- }
-
- return entrySet;
- }
-
- public X509CRLEntry getRevokedCertificate(BigInteger serialNumber)
- {
- Enumeration certs = c.getRevokedCertificateEnumeration();
-
- X500Name previousCertificateIssuer = c.getIssuer();
- while (certs.hasMoreElements())
- {
- TBSCertList.CRLEntry entry = (TBSCertList.CRLEntry)certs.nextElement();
-
- if (serialNumber.equals(entry.getUserCertificate().getValue()))
- {
- return new X509CRLEntryObject(entry, isIndirect, previousCertificateIssuer);
- }
-
- if (isIndirect && entry.hasExtensions())
- {
- Extension currentCaName = entry.getExtensions().getExtension(Extension.certificateIssuer);
-
- if (currentCaName != null)
- {
- previousCertificateIssuer = X500Name.getInstance(GeneralNames.getInstance(currentCaName.getParsedValue()).getNames()[0].getName());
- }
- }
- }
-
- return null;
- }
-
- public Set getRevokedCertificates()
- {
- Set entrySet = loadCRLEntries();
-
- if (!entrySet.isEmpty())
- {
- return Collections.unmodifiableSet(entrySet);
- }
-
- return null;
- }
-
- public byte[] getTBSCertList()
- throws CRLException
- {
- try
- {
- return c.getTBSCertList().getEncoded("DER");
- }
- catch (IOException e)
- {
- throw new CRLException(e.toString());
- }
- }
-
- public byte[] getSignature()
- {
- return c.getSignature().getBytes();
- }
-
- public String getSigAlgName()
- {
- return sigAlgName;
- }
-
- public String getSigAlgOID()
- {
- return c.getSignatureAlgorithm().getAlgorithm().getId();
- }
-
- public byte[] getSigAlgParams()
- {
- if (sigAlgParams != null)
- {
- byte[] tmp = new byte[sigAlgParams.length];
-
- System.arraycopy(sigAlgParams, 0, tmp, 0, tmp.length);
-
- return tmp;
- }
-
- return null;
- }
-
- /**
- * Returns a string representation of this CRL.
- *
- * @return a string representation of this CRL.
- */
- public String toString()
- {
- StringBuffer buf = new StringBuffer();
- String nl = System.getProperty("line.separator");
-
- buf.append(" Version: ").append(this.getVersion()).append(
- nl);
- buf.append(" IssuerDN: ").append(this.getIssuerDN())
- .append(nl);
- buf.append(" This update: ").append(this.getThisUpdate())
- .append(nl);
- buf.append(" Next update: ").append(this.getNextUpdate())
- .append(nl);
- buf.append(" Signature Algorithm: ").append(this.getSigAlgName())
- .append(nl);
-
- byte[] sig = this.getSignature();
-
- buf.append(" Signature: ").append(
- new String(Hex.encode(sig, 0, 20))).append(nl);
- for (int i = 20; i < sig.length; i += 20)
- {
- if (i < sig.length - 20)
- {
- buf.append(" ").append(
- new String(Hex.encode(sig, i, 20))).append(nl);
- }
- else
- {
- buf.append(" ").append(
- new String(Hex.encode(sig, i, sig.length - i))).append(nl);
- }
- }
-
- Extensions extensions = c.getTBSCertList().getExtensions();
-
- if (extensions != null)
- {
- Enumeration e = extensions.oids();
-
- if (e.hasMoreElements())
- {
- buf.append(" Extensions: ").append(nl);
- }
-
- while (e.hasMoreElements())
- {
- ASN1ObjectIdentifier oid = (ASN1ObjectIdentifier) e.nextElement();
- Extension ext = extensions.getExtension(oid);
-
- if (ext.getExtnValue() != null)
- {
- byte[] octs = ext.getExtnValue().getOctets();
- ASN1InputStream dIn = new ASN1InputStream(octs);
- buf.append(" critical(").append(
- ext.isCritical()).append(") ");
- try
- {
- if (oid.equals(Extension.cRLNumber))
- {
- buf.append(
- new CRLNumber(ASN1Integer.getInstance(
- dIn.readObject()).getPositiveValue()))
- .append(nl);
- }
- else if (oid.equals(Extension.deltaCRLIndicator))
- {
- buf.append(
- "Base CRL: "
- + new CRLNumber(ASN1Integer.getInstance(
- dIn.readObject()).getPositiveValue()))
- .append(nl);
- }
- else if (oid
- .equals(Extension.issuingDistributionPoint))
- {
- buf.append(
- IssuingDistributionPoint.getInstance(dIn.readObject())).append(nl);
- }
- else if (oid
- .equals(Extension.cRLDistributionPoints))
- {
- buf.append(
- CRLDistPoint.getInstance(dIn.readObject())).append(nl);
- }
- else if (oid.equals(Extension.freshestCRL))
- {
- buf.append(
- CRLDistPoint.getInstance(dIn.readObject())).append(nl);
- }
- else
- {
- buf.append(oid.getId());
- buf.append(" value = ").append(
- ASN1Dump.dumpAsString(dIn.readObject()))
- .append(nl);
- }
- }
- catch (Exception ex)
- {
- buf.append(oid.getId());
- buf.append(" value = ").append("*****").append(nl);
- }
- }
- else
- {
- buf.append(nl);
- }
- }
- }
- Set set = getRevokedCertificates();
- if (set != null)
- {
- Iterator it = set.iterator();
- while (it.hasNext())
- {
- buf.append(it.next());
- buf.append(nl);
- }
- }
- return buf.toString();
- }
-
- /**
- * Checks whether the given certificate is on this CRL.
- *
- * @param cert the certificate to check for.
- * @return true if the given certificate is on this CRL,
- * false otherwise.
- */
- public boolean isRevoked(Certificate cert)
- {
- if (!cert.getType().equals("X.509"))
- {
- throw new RuntimeException("X.509 CRL used with non X.509 Cert");
- }
-
- TBSCertList.CRLEntry[] certs = c.getRevokedCertificates();
-
- X500Name caName = c.getIssuer();
-
- if (certs != null)
- {
- BigInteger serial = ((X509Certificate)cert).getSerialNumber();
-
- for (int i = 0; i < certs.length; i++)
- {
- if (isIndirect && certs[i].hasExtensions())
- {
- Extension currentCaName = certs[i].getExtensions().getExtension(Extension.certificateIssuer);
-
- if (currentCaName != null)
- {
- caName = X500Name.getInstance(GeneralNames.getInstance(currentCaName.getParsedValue()).getNames()[0].getName());
- }
- }
-
- if (certs[i].getUserCertificate().getValue().equals(serial))
- {
- X500Name issuer;
-
- try
- {
- issuer = org.spongycastle.asn1.x509.Certificate.getInstance(cert.getEncoded()).getIssuer();
- }
- catch (CertificateEncodingException e)
- {
- throw new RuntimeException("Cannot process certificate");
- }
-
- if (!caName.equals(issuer))
- {
- return false;
- }
-
- return true;
- }
- }
- }
-
- return false;
- }
-}
diff --git a/extern/spongycastle/prov/src/main/jdk1.1/org/spongycastle/jce/provider/X509CertificateObject.java b/extern/spongycastle/prov/src/main/jdk1.1/org/spongycastle/jce/provider/X509CertificateObject.java
deleted file mode 100644
index cd1c6d7c9..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.1/org/spongycastle/jce/provider/X509CertificateObject.java
+++ /dev/null
@@ -1,856 +0,0 @@
-package org.spongycastle.jce.provider;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.math.BigInteger;
-import java.net.InetAddress;
-import java.net.UnknownHostException;
-import java.security.InvalidKeyException;
-import java.security.NoSuchAlgorithmException;
-import java.security.NoSuchProviderException;
-import java.security.Principal;
-import java.security.Provider;
-import java.security.PublicKey;
-import java.security.Security;
-import java.security.Signature;
-import java.security.SignatureException;
-import java.security.cert.Certificate;
-import java.security.cert.CertificateEncodingException;
-import java.security.cert.CertificateException;
-import java.security.cert.CertificateExpiredException;
-import java.security.cert.CertificateNotYetValidException;
-import java.security.cert.CertificateParsingException;
-import java.security.cert.X509Certificate;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Date;
-import java.util.Enumeration;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-import org.spongycastle.asn1.ASN1Encodable;
-import org.spongycastle.asn1.ASN1Encoding;
-import org.spongycastle.asn1.ASN1InputStream;
-import org.spongycastle.asn1.ASN1ObjectIdentifier;
-import org.spongycastle.asn1.ASN1OutputStream;
-import org.spongycastle.asn1.ASN1Primitive;
-import org.spongycastle.asn1.ASN1Sequence;
-import org.spongycastle.asn1.ASN1String;
-import org.spongycastle.asn1.DERBitString;
-import org.spongycastle.asn1.DERIA5String;
-import org.spongycastle.asn1.DERNull;
-import org.spongycastle.asn1.DEROctetString;
-import org.spongycastle.asn1.misc.MiscObjectIdentifiers;
-import org.spongycastle.asn1.misc.NetscapeCertType;
-import org.spongycastle.asn1.misc.NetscapeRevocationURL;
-import org.spongycastle.asn1.misc.VerisignCzagExtension;
-import org.spongycastle.asn1.util.ASN1Dump;
-import org.spongycastle.asn1.x500.X500Name;
-import org.spongycastle.asn1.x500.style.RFC4519Style;
-import org.spongycastle.asn1.x509.AlgorithmIdentifier;
-import org.spongycastle.asn1.x509.BasicConstraints;
-import org.spongycastle.asn1.x509.Extension;
-import org.spongycastle.asn1.x509.Extensions;
-import org.spongycastle.asn1.x509.GeneralName;
-import org.spongycastle.asn1.x509.KeyUsage;
-import org.spongycastle.jcajce.provider.asymmetric.util.PKCS12BagAttributeCarrierImpl;
-import org.spongycastle.jce.X509Principal;
-import org.spongycastle.jce.interfaces.PKCS12BagAttributeCarrier;
-import org.spongycastle.util.Arrays;
-import org.spongycastle.util.Integers;
-import org.spongycastle.util.encoders.Hex;
-
-public class X509CertificateObject
- extends X509Certificate
- implements PKCS12BagAttributeCarrier
-{
- private org.spongycastle.asn1.x509.Certificate c;
- private BasicConstraints basicConstraints;
- private boolean[] keyUsage;
- private boolean hashValueSet;
- private int hashValue;
-
- private PKCS12BagAttributeCarrier attrCarrier = new PKCS12BagAttributeCarrierImpl();
-
- public X509CertificateObject(
- org.spongycastle.asn1.x509.Certificate c)
- throws CertificateParsingException
- {
- this.c = c;
-
- try
- {
- byte[] bytes = this.getExtensionBytes("2.5.29.19");
-
- if (bytes != null)
- {
- basicConstraints = BasicConstraints.getInstance(ASN1Primitive.fromByteArray(bytes));
- }
- }
- catch (Exception e)
- {
- throw new CertificateParsingException("cannot construct BasicConstraints: " + e);
- }
-
- try
- {
- byte[] bytes = this.getExtensionBytes("2.5.29.15");
- if (bytes != null)
- {
- DERBitString bits = DERBitString.getInstance(ASN1Primitive.fromByteArray(bytes));
-
- bytes = bits.getBytes();
- int length = (bytes.length * 8) - bits.getPadBits();
-
- keyUsage = new boolean[(length < 9) ? 9 : length];
-
- for (int i = 0; i != length; i++)
- {
- keyUsage[i] = (bytes[i / 8] & (0x80 >>> (i % 8))) != 0;
- }
- }
- else
- {
- keyUsage = null;
- }
- }
- catch (Exception e)
- {
- throw new CertificateParsingException("cannot construct KeyUsage: " + e);
- }
- }
-
- public void checkValidity()
- throws CertificateExpiredException, CertificateNotYetValidException
- {
- this.checkValidity(new Date());
- }
-
- public void checkValidity(
- Date date)
- throws CertificateExpiredException, CertificateNotYetValidException
- {
- if (date.getTime() > this.getNotAfter().getTime()) // for other VM compatibility
- {
- throw new CertificateExpiredException("certificate expired on " + c.getEndDate().getTime());
- }
-
- if (date.getTime() < this.getNotBefore().getTime())
- {
- throw new CertificateNotYetValidException("certificate not valid till " + c.getStartDate().getTime());
- }
- }
-
- public int getVersion()
- {
- return c.getVersionNumber();
- }
-
- public BigInteger getSerialNumber()
- {
- return c.getSerialNumber().getValue();
- }
-
- public Principal getIssuerDN()
- {
- try
- {
- return new X509Principal(X500Name.getInstance(c.getIssuer().getEncoded()));
- }
- catch (IOException e)
- {
- return null;
- }
- }
-
- public Principal getSubjectDN()
- {
- return new X509Principal(X500Name.getInstance(c.getSubject().toASN1Primitive()));
- }
-
- public Date getNotBefore()
- {
- return c.getStartDate().getDate();
- }
-
- public Date getNotAfter()
- {
- return c.getEndDate().getDate();
- }
-
- public byte[] getTBSCertificate()
- throws CertificateEncodingException
- {
- try
- {
- return c.getTBSCertificate().getEncoded(ASN1Encoding.DER);
- }
- catch (IOException e)
- {
- throw new CertificateEncodingException(e.toString());
- }
- }
-
- public byte[] getSignature()
- {
- return c.getSignature().getBytes();
- }
-
- /**
- * return a more "meaningful" representation for the signature algorithm used in
- * the certficate.
- */
- public String getSigAlgName()
- {
- Provider prov = Security.getProvider(BouncyCastleProvider.PROVIDER_NAME);
-
- if (prov != null)
- {
- String algName = prov.getProperty("Alg.Alias.Signature." + this.getSigAlgOID());
-
- if (algName != null)
- {
- return algName;
- }
- }
-
- Provider[] provs = Security.getProviders();
-
- //
- // search every provider looking for a real algorithm
- //
- for (int i = 0; i != provs.length; i++)
- {
- String algName = provs[i].getProperty("Alg.Alias.Signature." + this.getSigAlgOID());
- if (algName != null)
- {
- return algName;
- }
- }
-
- return this.getSigAlgOID();
- }
-
- /**
- * return the object identifier for the signature.
- */
- public String getSigAlgOID()
- {
- return c.getSignatureAlgorithm().getAlgorithm().getId();
- }
-
- /**
- * return the signature parameters, or null if there aren't any.
- */
- public byte[] getSigAlgParams()
- {
- if (c.getSignatureAlgorithm().getParameters() != null)
- {
- try
- {
- return c.getSignatureAlgorithm().getParameters().toASN1Primitive().getEncoded(ASN1Encoding.DER);
- }
- catch (IOException e)
- {
- return null;
- }
- }
- else
- {
- return null;
- }
- }
-
- public boolean[] getIssuerUniqueID()
- {
- DERBitString id = c.getTBSCertificate().getIssuerUniqueId();
-
- if (id != null)
- {
- byte[] bytes = id.getBytes();
- boolean[] boolId = new boolean[bytes.length * 8 - id.getPadBits()];
-
- for (int i = 0; i != boolId.length; i++)
- {
- boolId[i] = (bytes[i / 8] & (0x80 >>> (i % 8))) != 0;
- }
-
- return boolId;
- }
-
- return null;
- }
-
- public boolean[] getSubjectUniqueID()
- {
- DERBitString id = c.getTBSCertificate().getSubjectUniqueId();
-
- if (id != null)
- {
- byte[] bytes = id.getBytes();
- boolean[] boolId = new boolean[bytes.length * 8 - id.getPadBits()];
-
- for (int i = 0; i != boolId.length; i++)
- {
- boolId[i] = (bytes[i / 8] & (0x80 >>> (i % 8))) != 0;
- }
-
- return boolId;
- }
-
- return null;
- }
-
- public boolean[] getKeyUsage()
- {
- return keyUsage;
- }
-
- public List getExtendedKeyUsage()
- throws CertificateParsingException
- {
- byte[] bytes = this.getExtensionBytes("2.5.29.37");
-
- if (bytes != null)
- {
- try
- {
- ASN1InputStream dIn = new ASN1InputStream(bytes);
- ASN1Sequence seq = (ASN1Sequence)dIn.readObject();
- List list = new ArrayList();
-
- for (int i = 0; i != seq.size(); i++)
- {
- list.add(((ASN1ObjectIdentifier)seq.getObjectAt(i)).getId());
- }
-
- return Collections.unmodifiableList(list);
- }
- catch (Exception e)
- {
- throw new CertificateParsingException("error processing extended key usage extension");
- }
- }
-
- return null;
- }
-
- public int getBasicConstraints()
- {
- if (basicConstraints != null)
- {
- if (basicConstraints.isCA())
- {
- if (basicConstraints.getPathLenConstraint() == null)
- {
- return Integer.MAX_VALUE;
- }
- else
- {
- return basicConstraints.getPathLenConstraint().intValue();
- }
- }
- else
- {
- return -1;
- }
- }
-
- return -1;
- }
-
- public Collection getSubjectAlternativeNames()
- throws CertificateParsingException
- {
- return getAlternativeNames(getExtensionBytes(Extension.subjectAlternativeName.getId()));
- }
-
- public Collection getIssuerAlternativeNames()
- throws CertificateParsingException
- {
- return getAlternativeNames(getExtensionBytes(Extension.issuerAlternativeName.getId()));
- }
-
- public Set getCriticalExtensionOIDs()
- {
- if (this.getVersion() == 3)
- {
- Set set = new HashSet();
- Extensions extensions = c.getTBSCertificate().getExtensions();
-
- if (extensions != null)
- {
- Enumeration e = extensions.oids();
-
- while (e.hasMoreElements())
- {
- ASN1ObjectIdentifier oid = (ASN1ObjectIdentifier)e.nextElement();
- Extension ext = extensions.getExtension(oid);
-
- if (ext.isCritical())
- {
- set.add(oid.getId());
- }
- }
-
- return set;
- }
- }
-
- return null;
- }
-
- private byte[] getExtensionBytes(String oid)
- {
- Extensions exts = c.getTBSCertificate().getExtensions();
-
- if (exts != null)
- {
- Extension ext = exts.getExtension(new ASN1ObjectIdentifier(oid));
- if (ext != null)
- {
- return ext.getExtnValue().getOctets();
- }
- }
-
- return null;
- }
-
- public byte[] getExtensionValue(String oid)
- {
- Extensions exts = c.getTBSCertificate().getExtensions();
-
- if (exts != null)
- {
- Extension ext = exts.getExtension(new ASN1ObjectIdentifier(oid));
-
- if (ext != null)
- {
- try
- {
- return ext.getExtnValue().getEncoded();
- }
- catch (Exception e)
- {
- throw new IllegalStateException("error parsing " + e.toString());
- }
- }
- }
-
- return null;
- }
-
- public Set getNonCriticalExtensionOIDs()
- {
- if (this.getVersion() == 3)
- {
- Set set = new HashSet();
- Extensions extensions = c.getTBSCertificate().getExtensions();
-
- if (extensions != null)
- {
- Enumeration e = extensions.oids();
-
- while (e.hasMoreElements())
- {
- ASN1ObjectIdentifier oid = (ASN1ObjectIdentifier)e.nextElement();
- Extension ext = extensions.getExtension(oid);
-
- if (!ext.isCritical())
- {
- set.add(oid.getId());
- }
- }
-
- return set;
- }
- }
-
- return null;
- }
-
- public boolean hasUnsupportedCriticalExtension()
- {
- if (this.getVersion() == 3)
- {
- Extensions extensions = c.getTBSCertificate().getExtensions();
-
- if (extensions != null)
- {
- Enumeration e = extensions.oids();
-
- while (e.hasMoreElements())
- {
- ASN1ObjectIdentifier oid = (ASN1ObjectIdentifier)e.nextElement();
- String oidId = oid.getId();
-
- if (oidId.equals(RFC3280CertPathUtilities.KEY_USAGE)
- || oidId.equals(RFC3280CertPathUtilities.CERTIFICATE_POLICIES)
- || oidId.equals(RFC3280CertPathUtilities.POLICY_MAPPINGS)
- || oidId.equals(RFC3280CertPathUtilities.INHIBIT_ANY_POLICY)
- || oidId.equals(RFC3280CertPathUtilities.CRL_DISTRIBUTION_POINTS)
- || oidId.equals(RFC3280CertPathUtilities.ISSUING_DISTRIBUTION_POINT)
- || oidId.equals(RFC3280CertPathUtilities.DELTA_CRL_INDICATOR)
- || oidId.equals(RFC3280CertPathUtilities.POLICY_CONSTRAINTS)
- || oidId.equals(RFC3280CertPathUtilities.BASIC_CONSTRAINTS)
- || oidId.equals(RFC3280CertPathUtilities.SUBJECT_ALTERNATIVE_NAME)
- || oidId.equals(RFC3280CertPathUtilities.NAME_CONSTRAINTS))
- {
- continue;
- }
-
- Extension ext = extensions.getExtension(oid);
-
- if (ext.isCritical())
- {
- return true;
- }
- }
- }
- }
-
- return false;
- }
-
- public PublicKey getPublicKey()
- {
- try
- {
- return BouncyCastleProvider.getPublicKey(c.getSubjectPublicKeyInfo());
- }
- catch (IOException e)
- {
- return null; // should never happen...
- }
- }
-
- public byte[] getEncoded()
- throws CertificateEncodingException
- {
- try
- {
- return c.getEncoded(ASN1Encoding.DER);
- }
- catch (IOException e)
- {
- throw new CertificateEncodingException(e.toString());
- }
- }
-
- public boolean equals(
- Object o)
- {
- if (o == this)
- {
- return true;
- }
-
- if (!(o instanceof Certificate))
- {
- return false;
- }
-
- Certificate other = (Certificate)o;
-
- try
- {
- byte[] b1 = this.getEncoded();
- byte[] b2 = other.getEncoded();
-
- return Arrays.areEqual(b1, b2);
- }
- catch (CertificateEncodingException e)
- {
- return false;
- }
- }
-
- public synchronized int hashCode()
- {
- if (!hashValueSet)
- {
- hashValue = calculateHashCode();
- hashValueSet = true;
- }
-
- return hashValue;
- }
-
- private int calculateHashCode()
- {
- try
- {
- int hashCode = 0;
- byte[] certData = this.getEncoded();
- for (int i = 1; i < certData.length; i++)
- {
- hashCode += certData[i] * i;
- }
- return hashCode;
- }
- catch (CertificateEncodingException e)
- {
- return 0;
- }
- }
-
- public void setBagAttribute(
- ASN1ObjectIdentifier oid,
- ASN1Encodable attribute)
- {
- attrCarrier.setBagAttribute(oid, attribute);
- }
-
- public ASN1Encodable getBagAttribute(
- ASN1ObjectIdentifier oid)
- {
- return attrCarrier.getBagAttribute(oid);
- }
-
- public Enumeration getBagAttributeKeys()
- {
- return attrCarrier.getBagAttributeKeys();
- }
-
- public String toString()
- {
- StringBuffer buf = new StringBuffer();
- String nl = System.getProperty("line.separator");
-
- buf.append(" [0] Version: ").append(this.getVersion()).append(nl);
- buf.append(" SerialNumber: ").append(this.getSerialNumber()).append(nl);
- buf.append(" IssuerDN: ").append(this.getIssuerDN()).append(nl);
- buf.append(" Start Date: ").append(this.getNotBefore()).append(nl);
- buf.append(" Final Date: ").append(this.getNotAfter()).append(nl);
- buf.append(" SubjectDN: ").append(this.getSubjectDN()).append(nl);
- buf.append(" Public Key: ").append(this.getPublicKey()).append(nl);
- buf.append(" Signature Algorithm: ").append(this.getSigAlgName()).append(nl);
-
- byte[] sig = this.getSignature();
-
- buf.append(" Signature: ").append(new String(Hex.encode(sig, 0, 20))).append(nl);
- for (int i = 20; i < sig.length; i += 20)
- {
- if (i < sig.length - 20)
- {
- buf.append(" ").append(new String(Hex.encode(sig, i, 20))).append(nl);
- }
- else
- {
- buf.append(" ").append(new String(Hex.encode(sig, i, sig.length - i))).append(nl);
- }
- }
-
- Extensions extensions = c.getTBSCertificate().getExtensions();
-
- if (extensions != null)
- {
- Enumeration e = extensions.oids();
-
- if (e.hasMoreElements())
- {
- buf.append(" Extensions: \n");
- }
-
- while (e.hasMoreElements())
- {
- ASN1ObjectIdentifier oid = (ASN1ObjectIdentifier)e.nextElement();
- Extension ext = extensions.getExtension(oid);
-
- if (ext.getExtnValue() != null)
- {
- byte[] octs = ext.getExtnValue().getOctets();
- ASN1InputStream dIn = new ASN1InputStream(octs);
- buf.append(" critical(").append(ext.isCritical()).append(") ");
- try
- {
- if (oid.equals(Extension.basicConstraints))
- {
- buf.append(BasicConstraints.getInstance(dIn.readObject())).append(nl);
- }
- else if (oid.equals(Extension.keyUsage))
- {
- buf.append(KeyUsage.getInstance(dIn.readObject())).append(nl);
- }
- else if (oid.equals(MiscObjectIdentifiers.netscapeCertType))
- {
- buf.append(new NetscapeCertType((DERBitString)dIn.readObject())).append(nl);
- }
- else if (oid.equals(MiscObjectIdentifiers.netscapeRevocationURL))
- {
- buf.append(new NetscapeRevocationURL((DERIA5String)dIn.readObject())).append(nl);
- }
- else if (oid.equals(MiscObjectIdentifiers.verisignCzagExtension))
- {
- buf.append(new VerisignCzagExtension((DERIA5String)dIn.readObject())).append(nl);
- }
- else
- {
- buf.append(oid.getId());
- buf.append(" value = ").append(ASN1Dump.dumpAsString(dIn.readObject())).append(nl);
- //buf.append(" value = ").append("*****").append(nl);
- }
- }
- catch (Exception ex)
- {
- buf.append(oid.getId());
- // buf.append(" value = ").append(new String(Hex.encode(ext.getExtnValue().getOctets()))).append(nl);
- buf.append(" value = ").append("*****").append(nl);
- }
- }
- else
- {
- buf.append(nl);
- }
- }
- }
-
- return buf.toString();
- }
-
- public final void verify(
- PublicKey key)
- throws CertificateException, NoSuchAlgorithmException,
- InvalidKeyException, NoSuchProviderException, SignatureException
- {
- Signature signature;
- String sigName = X509SignatureUtil.getSignatureName(c.getSignatureAlgorithm());
-
- try
- {
- signature = Signature.getInstance(sigName, BouncyCastleProvider.PROVIDER_NAME);
- }
- catch (Exception e)
- {
- signature = Signature.getInstance(sigName);
- }
-
- checkSignature(key, signature);
- }
-
- public final void verify(
- PublicKey key,
- String sigProvider)
- throws CertificateException, NoSuchAlgorithmException,
- InvalidKeyException, NoSuchProviderException, SignatureException
- {
- String sigName = X509SignatureUtil.getSignatureName(c.getSignatureAlgorithm());
- Signature signature = Signature.getInstance(sigName, sigProvider);
-
- checkSignature(key, signature);
- }
-
- private void checkSignature(
- PublicKey key,
- Signature signature)
- throws CertificateException, NoSuchAlgorithmException,
- SignatureException, InvalidKeyException
- {
- if (!isAlgIdEqual(c.getSignatureAlgorithm(), c.getTBSCertificate().getSignature()))
- {
- throw new CertificateException("signature algorithm in TBS cert not same as outer cert");
- }
-
- ASN1Encodable params = c.getSignatureAlgorithm().getParameters();
-
- // TODO This should go after the initVerify?
- X509SignatureUtil.setSignatureParameters(signature, params);
-
- signature.initVerify(key);
-
- signature.update(this.getTBSCertificate());
-
- if (!signature.verify(this.getSignature()))
- {
- throw new SignatureException("certificate does not verify with supplied key");
- }
- }
-
- private boolean isAlgIdEqual(AlgorithmIdentifier id1, AlgorithmIdentifier id2)
- {
- if (!id1.getAlgorithm().equals(id2.getAlgorithm()))
- {
- return false;
- }
-
- if (id1.getParameters() == null)
- {
- if (id2.getParameters() != null && !id2.getParameters().equals(DERNull.INSTANCE))
- {
- return false;
- }
-
- return true;
- }
-
- if (id2.getParameters() == null)
- {
- if (id1.getParameters() != null && !id1.getParameters().equals(DERNull.INSTANCE))
- {
- return false;
- }
-
- return true;
- }
-
- return id1.getParameters().equals(id2.getParameters());
- }
-
- private static Collection getAlternativeNames(byte[] extVal)
- throws CertificateParsingException
- {
- if (extVal == null)
- {
- return null;
- }
- try
- {
- Collection temp = new ArrayList();
- Enumeration it = ASN1Sequence.getInstance(extVal).getObjects();
- while (it.hasMoreElements())
- {
- GeneralName genName = GeneralName.getInstance(it.nextElement());
- List list = new ArrayList();
- list.add(Integers.valueOf(genName.getTagNo()));
- switch (genName.getTagNo())
- {
- case GeneralName.ediPartyName:
- case GeneralName.x400Address:
- case GeneralName.otherName:
- list.add(genName.getEncoded());
- break;
- case GeneralName.directoryName:
- list.add(X500Name.getInstance(RFC4519Style.INSTANCE, genName.getName()).toString());
- break;
- case GeneralName.dNSName:
- case GeneralName.rfc822Name:
- case GeneralName.uniformResourceIdentifier:
- list.add(((ASN1String)genName.getName()).getString());
- break;
- case GeneralName.registeredID:
- list.add(ASN1ObjectIdentifier.getInstance(genName.getName()).getId());
- break;
- case GeneralName.iPAddress:
- byte[] addrBytes = DEROctetString.getInstance(genName.getName()).getOctets();
- list.add(addrBytes);
- break;
- default:
- throw new IOException("Bad tag number: " + genName.getTagNo());
- }
-
- temp.add(list);
- }
- if (temp.size() == 0)
- {
- return null;
- }
- return Collections.unmodifiableCollection(temp);
- }
- catch (Exception e)
- {
- throw new CertificateParsingException(e.getMessage());
- }
- }
-}
diff --git a/extern/spongycastle/prov/src/main/jdk1.1/org/spongycastle/x509/AttributeCertificateHolder.java b/extern/spongycastle/prov/src/main/jdk1.1/org/spongycastle/x509/AttributeCertificateHolder.java
deleted file mode 100644
index 644883d4e..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.1/org/spongycastle/x509/AttributeCertificateHolder.java
+++ /dev/null
@@ -1,406 +0,0 @@
-package org.spongycastle.x509;
-
-import java.io.IOException;
-import java.math.BigInteger;
-import java.security.MessageDigest;
-import java.security.Principal;
-import java.security.cert.Certificate;
-import java.security.cert.CertificateEncodingException;
-import java.security.cert.CertificateParsingException;
-import java.security.cert.X509Certificate;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.spongycastle.asn1.ASN1Encodable;
-import org.spongycastle.asn1.ASN1Integer;
-import org.spongycastle.asn1.ASN1Sequence;
-import org.spongycastle.asn1.ASN1ObjectIdentifier;
-import org.spongycastle.asn1.x509.AlgorithmIdentifier;
-import org.spongycastle.asn1.x509.GeneralName;
-import org.spongycastle.asn1.x509.GeneralNames;
-import org.spongycastle.asn1.x509.Holder;
-import org.spongycastle.asn1.x509.IssuerSerial;
-import org.spongycastle.asn1.x509.ObjectDigestInfo;
-import org.spongycastle.jce.PrincipalUtil;
-import org.spongycastle.jce.X509Principal;
-import java.security.cert.CertSelector;
-import org.spongycastle.util.Arrays;
-import org.spongycastle.util.Selector;
-
-/**
- * The Holder object.
- *
- *
- * Holder ::= SEQUENCE {
- * baseCertificateID [0] IssuerSerial OPTIONAL,
- * -- the issuer and serial number of
- * -- the holder's Public Key Certificate
- * entityName [1] GeneralNames OPTIONAL,
- * -- the name of the claimant or role
- * objectDigestInfo [2] ObjectDigestInfo OPTIONAL
- * -- used to directly authenticate the holder,
- * -- for example, an executable
- * }
- *
- * @deprecated use org.spongycastle.cert.AttributeCertificateHolder
- */
-public class AttributeCertificateHolder
- implements CertSelector, Selector
-{
- final Holder holder;
-
- AttributeCertificateHolder(ASN1Sequence seq)
- {
- holder = Holder.getInstance(seq);
- }
-
- public AttributeCertificateHolder(X509Principal issuerName,
- BigInteger serialNumber)
- {
- holder = new org.spongycastle.asn1.x509.Holder(new IssuerSerial(
- new GeneralNames(new GeneralName(issuerName)),
- new ASN1Integer(serialNumber)));
- }
-
- public AttributeCertificateHolder(X509Certificate cert)
- throws CertificateParsingException
- {
- X509Principal name;
-
- try
- {
- name = PrincipalUtil.getIssuerX509Principal(cert);
- }
- catch (Exception e)
- {
- throw new CertificateParsingException(e.getMessage());
- }
-
- holder = new Holder(new IssuerSerial(generateGeneralNames(name),
- new ASN1Integer(cert.getSerialNumber())));
- }
-
- public AttributeCertificateHolder(X509Principal principal)
- {
- holder = new Holder(generateGeneralNames(principal));
- }
-
- /**
- * Constructs a holder for v2 attribute certificates with a hash value for
- * some type of object.
- * digestedObjectType
can be one of the following:
- *
- *
- * otherObjectTypeID
must not be empty.
- * digestedObjectType
is
- * otherObjectDigest
.
- * @param objectDigest The hash value.
- */
- public AttributeCertificateHolder(int digestedObjectType,
- String digestAlgorithm, String otherObjectTypeID, byte[] objectDigest)
- {
- holder = new Holder(new ObjectDigestInfo(digestedObjectType,
- new ASN1ObjectIdentifier(otherObjectTypeID), new AlgorithmIdentifier(digestAlgorithm), Arrays
- .clone(objectDigest)));
- }
-
- /**
- * Returns the digest object type if an object digest info is used.
- *
- *
- *
- * @return The digest object type or -1 if no object digest info is set.
- */
- public int getDigestedObjectType()
- {
- if (holder.getObjectDigestInfo() != null)
- {
- return holder.getObjectDigestInfo().getDigestedObjectType()
- .getValue().intValue();
- }
- return -1;
- }
-
- /**
- * Returns the other object type ID if an object digest info is used.
- *
- * @return The other object type ID or otherObjectTypeID
must not be empty.
- * null
if no object
- * digest info is set.
- */
- public String getDigestAlgorithm()
- {
- if (holder.getObjectDigestInfo() != null)
- {
- return holder.getObjectDigestInfo().getDigestAlgorithm().getObjectId()
- .getId();
- }
- return null;
- }
-
- /**
- * Returns the hash if an object digest info is used.
- *
- * @return The hash or null
if no object digest info is set.
- */
- public byte[] getObjectDigest()
- {
- if (holder.getObjectDigestInfo() != null)
- {
- return holder.getObjectDigestInfo().getObjectDigest().getBytes();
- }
- return null;
- }
-
- /**
- * Returns the digest algorithm ID if an object digest info is used.
- *
- * @return The digest algorithm ID or null
if no object
- * digest info is set.
- */
- public String getOtherObjectTypeID()
- {
- if (holder.getObjectDigestInfo() != null)
- {
- holder.getObjectDigestInfo().getOtherObjectTypeID().getId();
- }
- return null;
- }
-
- private GeneralNames generateGeneralNames(X509Principal principal)
- {
- return new GeneralNames(new GeneralName(principal));
- }
-
- private boolean matchesDN(X509Principal subject, GeneralNames targets)
- {
- GeneralName[] names = targets.getNames();
-
- for (int i = 0; i != names.length; i++)
- {
- GeneralName gn = names[i];
-
- if (gn.getTagNo() == GeneralName.directoryName)
- {
- try
- {
- if (new X509Principal(((ASN1Encodable)gn.getName()).toASN1Primitive()
- .getEncoded()).equals(subject))
- {
- return true;
- }
- }
- catch (IOException e)
- {
- }
- }
- }
-
- return false;
- }
-
- private Object[] getNames(GeneralName[] names)
- {
- List l = new ArrayList(names.length);
-
- for (int i = 0; i != names.length; i++)
- {
- if (names[i].getTagNo() == GeneralName.directoryName)
- {
- try
- {
- l.add(new X509Principal(
- ((ASN1Encodable)names[i].getName()).toASN1Primitive().getEncoded()));
- }
- catch (IOException e)
- {
- throw new RuntimeException("badly formed Name object");
- }
- }
- }
-
- return l.toArray(new Object[l.size()]);
- }
-
- private Principal[] getPrincipals(GeneralNames names)
- {
- Object[] p = this.getNames(names.getNames());
- List l = new ArrayList();
-
- for (int i = 0; i != p.length; i++)
- {
- if (p[i] instanceof Principal)
- {
- l.add(p[i]);
- }
- }
-
- return (Principal[])l.toArray(new Principal[l.size()]);
- }
-
- /**
- * Return any principal objects inside the attribute certificate holder
- * entity names field.
- *
- * @return an array of Principal objects (usually X509Principal), null if no
- * entity names field is set.
- */
- public Principal[] getEntityNames()
- {
- if (holder.getEntityName() != null)
- {
- return getPrincipals(holder.getEntityName());
- }
-
- return null;
- }
-
- /**
- * Return the principals associated with the issuer attached to this holder
- *
- * @return an array of principals, null if no BaseCertificateID is set.
- */
- public Principal[] getIssuer()
- {
- if (holder.getBaseCertificateID() != null)
- {
- return getPrincipals(holder.getBaseCertificateID().getIssuer());
- }
-
- return null;
- }
-
- /**
- * Return the serial number associated with the issuer attached to this
- * holder.
- *
- * @return the certificate serial number, null if no BaseCertificateID is
- * set.
- */
- public BigInteger getSerialNumber()
- {
- if (holder.getBaseCertificateID() != null)
- {
- return holder.getBaseCertificateID().getSerial().getValue();
- }
-
- return null;
- }
-
- public Object clone()
- {
- return new AttributeCertificateHolder((ASN1Sequence)holder
- .toASN1Object());
- }
-
- public boolean match(Certificate cert)
- {
- if (!(cert instanceof X509Certificate))
- {
- return false;
- }
-
- X509Certificate x509Cert = (X509Certificate)cert;
-
- try
- {
- if (holder.getBaseCertificateID() != null)
- {
- return holder.getBaseCertificateID().getSerial().getValue().equals(x509Cert.getSerialNumber())
- && matchesDN(PrincipalUtil.getIssuerX509Principal(x509Cert), holder.getBaseCertificateID().getIssuer());
- }
-
- if (holder.getEntityName() != null)
- {
- if (matchesDN(PrincipalUtil.getSubjectX509Principal(x509Cert),
- holder.getEntityName()))
- {
- return true;
- }
- }
- if (holder.getObjectDigestInfo() != null)
- {
- MessageDigest md = null;
- try
- {
- md = MessageDigest.getInstance(getDigestAlgorithm(), "SC");
-
- }
- catch (Exception e)
- {
- return false;
- }
- switch (getDigestedObjectType())
- {
- case ObjectDigestInfo.publicKey:
- // TODO: DSA Dss-parms
- md.update(cert.getPublicKey().getEncoded());
- break;
- case ObjectDigestInfo.publicKeyCert:
- md.update(cert.getEncoded());
- break;
- }
- if (!Arrays.areEqual(md.digest(), getObjectDigest()))
- {
- return false;
- }
- }
- }
- catch (CertificateEncodingException e)
- {
- return false;
- }
-
- return false;
- }
-
- public boolean equals(Object obj)
- {
- if (obj == this)
- {
- return true;
- }
-
- if (!(obj instanceof AttributeCertificateHolder))
- {
- return false;
- }
-
- AttributeCertificateHolder other = (AttributeCertificateHolder)obj;
-
- return this.holder.equals(other.holder);
- }
-
- public int hashCode()
- {
- return this.holder.hashCode();
- }
-
- public boolean match(Object obj)
- {
- if (!(obj instanceof X509Certificate))
- {
- return false;
- }
-
- return match((Certificate)obj);
- }
-}
diff --git a/extern/spongycastle/prov/src/main/jdk1.1/org/spongycastle/x509/AttributeCertificateIssuer.java b/extern/spongycastle/prov/src/main/jdk1.1/org/spongycastle/x509/AttributeCertificateIssuer.java
deleted file mode 100644
index 383292d78..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.1/org/spongycastle/x509/AttributeCertificateIssuer.java
+++ /dev/null
@@ -1,212 +0,0 @@
-package org.spongycastle.x509;
-
-import org.spongycastle.asn1.ASN1Encodable;
-import org.spongycastle.asn1.DERSequence;
-import org.spongycastle.asn1.x509.AttCertIssuer;
-import org.spongycastle.asn1.x509.GeneralName;
-import org.spongycastle.asn1.x509.GeneralNames;
-import org.spongycastle.asn1.x509.V2Form;
-import org.spongycastle.jce.PrincipalUtil;
-import org.spongycastle.jce.X509Principal;
-import org.spongycastle.util.Selector;
-
-import java.io.IOException;
-import java.security.Principal;
-import java.security.cert.CertSelector;
-import java.security.cert.Certificate;
-import java.security.cert.CertificateEncodingException;
-import java.security.cert.X509Certificate;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Carrying class for an attribute certificate issuer.
- */
-public class AttributeCertificateIssuer
- implements CertSelector, Selector
-{
- final ASN1Encodable form;
-
- /**
- * @param issuer
- */
- AttributeCertificateIssuer(
- AttCertIssuer issuer)
- {
- form = issuer.getIssuer();
- }
-
- public AttributeCertificateIssuer(
- X509Principal principal)
- {
- form = new V2Form(new GeneralNames(new GeneralName(principal)));
- }
-
- private Object[] getNames()
- {
- GeneralNames name;
-
- if (form instanceof V2Form)
- {
- name = ((V2Form)form).getIssuerName();
- }
- else
- {
- name = (GeneralNames)form;
- }
-
- GeneralName[] names = name.getNames();
-
- List l = new ArrayList(names.length);
-
- for (int i = 0; i != names.length; i++)
- {
- if (names[i].getTagNo() == GeneralName.directoryName)
- {
- try
- {
- l.add(new X509Principal(((ASN1Encodable)names[i].getName()).toASN1Primitive().getEncoded()));
- }
- catch (IOException e)
- {
- throw new RuntimeException("badly formed Name object");
- }
- }
- }
-
- return l.toArray(new Object[l.size()]);
- }
-
- /**
- * Return any principal objects inside the attribute certificate issuer object.
- *
- * @return an array of Principal objects (usually X509Principal)
- */
- public Principal[] getPrincipals()
- {
- Object[] p = this.getNames();
- List l = new ArrayList();
-
- for (int i = 0; i != p.length; i++)
- {
- if (p[i] instanceof Principal)
- {
- l.add(p[i]);
- }
- }
-
- return (Principal[])l.toArray(new Principal[l.size()]);
- }
-
- private boolean matchesDN(X509Principal subject, GeneralNames targets)
- {
- GeneralName[] names = targets.getNames();
-
- for (int i = 0; i != names.length; i++)
- {
- GeneralName gn = names[i];
-
- if (gn.getTagNo() == GeneralName.directoryName)
- {
- try
- {
- if (new X509Principal(((ASN1Encodable)gn.getName()).toASN1Primitive().getEncoded()).equals(subject))
- {
- return true;
- }
- }
- catch (IOException e)
- {
- }
- }
- }
-
- return false;
- }
-
- /* (non-Javadoc)
- * @see java.security.cert.CertSelector#clone()
- */
- public Object clone()
- {
- return new AttributeCertificateIssuer(AttCertIssuer.getInstance(form));
- }
-
- /* (non-Javadoc)
- * @see java.security.cert.CertSelector#match(java.security.cert.Certificate)
- */
- public boolean match(Certificate cert)
- {
- if (!(cert instanceof X509Certificate))
- {
- return false;
- }
-
- X509Certificate x509Cert = (X509Certificate)cert;
-
- try
- {
- if (form instanceof V2Form)
- {
- V2Form issuer = (V2Form)form;
- if (issuer.getBaseCertificateID() != null)
- {
- return issuer.getBaseCertificateID().getSerial().getValue().equals(x509Cert.getSerialNumber())
- && matchesDN(PrincipalUtil.getIssuerX509Principal(x509Cert), issuer.getBaseCertificateID().getIssuer());
- }
-
- GeneralNames name = issuer.getIssuerName();
- if (matchesDN(PrincipalUtil.getSubjectX509Principal(x509Cert), name))
- {
- return true;
- }
- }
- else
- {
- GeneralNames name = (GeneralNames)form;
- if (matchesDN(PrincipalUtil.getSubjectX509Principal(x509Cert), name))
- {
- return true;
- }
- }
- }
- catch (CertificateEncodingException e)
- {
- return false;
- }
-
- return false;
- }
-
- public boolean equals(Object obj)
- {
- if (obj == this)
- {
- return true;
- }
-
- if (!(obj instanceof AttributeCertificateIssuer))
- {
- return false;
- }
-
- AttributeCertificateIssuer other = (AttributeCertificateIssuer)obj;
-
- return this.form.equals(other.form);
- }
-
- public int hashCode()
- {
- return this.form.hashCode();
- }
-
- public boolean match(Object obj)
- {
- if (!(obj instanceof X509Certificate))
- {
- return false;
- }
-
- return match((Certificate)obj);
- }
-}
diff --git a/extern/spongycastle/prov/src/main/jdk1.1/org/spongycastle/x509/X509AttributeCertStoreSelector.java b/extern/spongycastle/prov/src/main/jdk1.1/org/spongycastle/x509/X509AttributeCertStoreSelector.java
deleted file mode 100644
index eafa21d0f..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.1/org/spongycastle/x509/X509AttributeCertStoreSelector.java
+++ /dev/null
@@ -1,488 +0,0 @@
-package org.spongycastle.x509;
-
-import org.spongycastle.asn1.ASN1InputStream;
-import org.spongycastle.asn1.ASN1Object;
-import org.spongycastle.asn1.ASN1Primitive;
-import org.spongycastle.asn1.DEROctetString;
-import org.spongycastle.asn1.x509.GeneralName;
-import org.spongycastle.asn1.x509.Target;
-import org.spongycastle.asn1.x509.TargetInformation;
-import org.spongycastle.asn1.x509.Targets;
-import org.spongycastle.asn1.x509.X509Extensions;
-import org.spongycastle.util.Selector;
-
-import java.io.IOException;
-import java.math.BigInteger;
-import java.security.cert.CertificateExpiredException;
-import java.security.cert.CertificateNotYetValidException;
-import java.security.cert.X509CertSelector;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Date;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Set;
-
-/**
- * This class is an Selector
like implementation to select
- * attribute certificates from a given set of criteria.
- *
- * @see org.spongycastle.x509.X509AttributeCertificate
- * @see org.spongycastle.x509.X509Store
- */
-public class X509AttributeCertStoreSelector
- implements Selector
-{
-
- // TODO: name constraints???
-
- private AttributeCertificateHolder holder;
-
- private AttributeCertificateIssuer issuer;
-
- private BigInteger serialNumber;
-
- private Date attributeCertificateValid;
-
- private X509AttributeCertificate attributeCert;
-
- private Collection targetNames = new HashSet();
-
- private Collection targetGroups = new HashSet();
-
- public X509AttributeCertStoreSelector()
- {
- super();
- }
-
- /**
- * Decides if the given attribute certificate should be selected.
- *
- * @param obj The attribute certificate which should be checked.
- * @return true
if the attribute certificate can be selected,
- * false
otherwise.
- */
- public boolean match(Object obj)
- {
- if (!(obj instanceof X509AttributeCertificate))
- {
- return false;
- }
-
- X509AttributeCertificate attrCert = (X509AttributeCertificate) obj;
-
- if (this.attributeCert != null)
- {
- if (!this.attributeCert.equals(attrCert))
- {
- return false;
- }
- }
- if (serialNumber != null)
- {
- if (!attrCert.getSerialNumber().equals(serialNumber))
- {
- return false;
- }
- }
- if (holder != null)
- {
- if (!attrCert.getHolder().equals(holder))
- {
- return false;
- }
- }
- if (issuer != null)
- {
- if (!attrCert.getIssuer().equals(issuer))
- {
- return false;
- }
- }
-
- if (attributeCertificateValid != null)
- {
- try
- {
- attrCert.checkValidity(attributeCertificateValid);
- }
- catch (CertificateExpiredException e)
- {
- return false;
- }
- catch (CertificateNotYetValidException e)
- {
- return false;
- }
- }
- if (!targetNames.isEmpty() || !targetGroups.isEmpty())
- {
-
- byte[] targetInfoExt = attrCert
- .getExtensionValue(X509Extensions.TargetInformation.getId());
- if (targetInfoExt != null)
- {
- TargetInformation targetinfo;
- try
- {
- targetinfo = TargetInformation
- .getInstance(new ASN1InputStream(
- ((DEROctetString) DEROctetString
- .fromByteArray(targetInfoExt)).getOctets())
- .readObject());
- }
- catch (IOException e)
- {
- return false;
- }
- catch (IllegalArgumentException e)
- {
- return false;
- }
- Targets[] targetss = targetinfo.getTargetsObjects();
- if (!targetNames.isEmpty())
- {
- boolean found = false;
-
- for (int i=0; inull
- * is given any will do.
- *
- * @param attributeCertificateValid The attribute certificate validation
- * time to set.
- */
- public void setAttributeCertificateValid(Date attributeCertificateValid)
- {
- if (attributeCertificateValid != null)
- {
- this.attributeCertificateValid = new Date(attributeCertificateValid
- .getTime());
- }
- else
- {
- this.attributeCertificateValid = null;
- }
- }
-
- /**
- * Gets the holder.
- *
- * @return Returns the holder.
- */
- public AttributeCertificateHolder getHolder()
- {
- return holder;
- }
-
- /**
- * Sets the holder. If null
is given any will do.
- *
- * @param holder The holder to set.
- */
- public void setHolder(AttributeCertificateHolder holder)
- {
- this.holder = holder;
- }
-
- /**
- * Returns the issuer criterion.
- *
- * @return Returns the issuer.
- */
- public AttributeCertificateIssuer getIssuer()
- {
- return issuer;
- }
-
- /**
- * Sets the issuer the attribute certificate must have. If null
- * is given any will do.
- *
- * @param issuer The issuer to set.
- */
- public void setIssuer(AttributeCertificateIssuer issuer)
- {
- this.issuer = issuer;
- }
-
- /**
- * Gets the serial number the attribute certificate must have.
- *
- * @return Returns the serialNumber.
- */
- public BigInteger getSerialNumber()
- {
- return serialNumber;
- }
-
- /**
- * Sets the serial number the attribute certificate must have. If
- * null
is given any will do.
- *
- * @param serialNumber The serialNumber to set.
- */
- public void setSerialNumber(BigInteger serialNumber)
- {
- this.serialNumber = serialNumber;
- }
-
- /**
- * Adds a target name criterion for the attribute certificate to the target
- * information extension criteria. The X509AttributeCertificate
- * must contain at least one of the specified target names.
- * null
)
- */
- public void addTargetName(GeneralName name)
- {
- targetNames.add(name);
- }
-
- /**
- * Adds a target name criterion for the attribute certificate to the target
- * information extension criteria. The X509AttributeCertificate
- * must contain at least one of the specified target names.
- * null
is
- * given any will do.
- * List
s
- * made up of an Integer
in the first entry and a DER encoded
- * byte array or a String
in the second entry.
- * X509AttributeCertificate
- * must contain at least one of the specified target groups.
- * null
)
- */
- public void addTargetGroup(GeneralName group)
- {
- targetGroups.add(group);
- }
-
- /**
- * Adds a target group criterion for the attribute certificate to the target
- * information extension criteria. The X509AttributeCertificate
- * must contain at least one of the specified target groups.
- * null
is
- * given any will do.
- * GeneralName
objects or byte[]
Lists
- * made up of an Integer
in the first entry and a DER encoded
- * byte array or a String
in the second entry.
- *
- **/
-public class PKIXCertPath
- extends CertPath
-{
- static final List certPathEncodings;
-
- static
- {
- List encodings = new ArrayList();
- encodings.add("PkiPath");
- encodings.add("PEM");
- encodings.add("PKCS7");
- certPathEncodings = Collections.unmodifiableList(encodings);
- }
-
- private List certificates;
-
- /**
- * @param certs
- */
- private List sortCerts(
- List certs)
- {
- try
- {
- if (certs.size() < 2)
- {
- return certs;
- }
-
- X509Principal issuer = PrincipalUtil.getIssuerX509Principal(((X509Certificate)certs.get(0)));
- boolean okay = true;
-
- for (int i = 1; i != certs.size(); i++)
- {
- X509Certificate cert = (X509Certificate)certs.get(i);
-
- if (issuer.equals(PrincipalUtil.getSubjectX509Principal(cert)))
- {
- issuer = PrincipalUtil.getIssuerX509Principal(((X509Certificate)certs.get(i)));
- }
- else
- {
- okay = false;
- break;
- }
- }
-
- if (okay)
- {
- return certs;
- }
-
- // find end-entity cert
- List retList = new ArrayList(certs.size());
- List orig = new ArrayList(certs);
-
- for (int i = 0; i < certs.size(); i++)
- {
- X509Certificate cert = (X509Certificate)certs.get(i);
- boolean found = false;
-
- X509Principal subject = PrincipalUtil.getSubjectX509Principal(cert);
-
- for (int j = 0; j != certs.size(); j++)
- {
- X509Certificate c = (X509Certificate)certs.get(j);
- if (PrincipalUtil.getIssuerX509Principal(c).equals(subject))
- {
- found = true;
- break;
- }
- }
-
- if (!found)
- {
- retList.add(cert);
- certs.remove(i);
- }
- }
-
- // can only have one end entity cert - something's wrong, give up.
- if (retList.size() > 1)
- {
- return orig;
- }
-
- for (int i = 0; i != retList.size(); i++)
- {
- issuer = PrincipalUtil.getIssuerX509Principal(((X509Certificate)retList.get(i)));
-
- for (int j = 0; j < certs.size(); j++)
- {
- X509Certificate c = (X509Certificate)certs.get(j);
- if (issuer.equals(PrincipalUtil.getSubjectX509Principal(c)))
- {
- retList.add(c);
- certs.remove(j);
- break;
- }
- }
- }
-
- // make sure all certificates are accounted for.
- if (certs.size() > 0)
- {
- return orig;
- }
-
- return retList;
- }
- catch (Exception e)
- {
- return certs;
- }
- }
-
- PKIXCertPath(List certificates)
- {
- super("X.509");
- this.certificates = sortCerts(new ArrayList(certificates));
- }
-
- /**
- * Creates a CertPath of the specified type.
- * This constructor is protected because most users should use
- * a CertificateFactory to create CertPaths.
- **/
- PKIXCertPath(
- InputStream inStream,
- String encoding)
- throws CertificateException
- {
- super("X.509");
- try
- {
- if (encoding.equalsIgnoreCase("PkiPath"))
- {
- ASN1InputStream derInStream = new ASN1InputStream(inStream);
- ASN1Primitive derObject = derInStream.readObject();
- if (!(derObject instanceof ASN1Sequence))
- {
- throw new CertificateException("input stream does not contain a ASN1 SEQUENCE while reading PkiPath encoded data to load CertPath");
- }
- Enumeration e = ((ASN1Sequence)derObject).getObjects();
- certificates = new ArrayList();
- CertificateFactory certFactory = CertificateFactory.getInstance("X.509", BouncyCastleProvider.PROVIDER_NAME);
- while (e.hasMoreElements())
- {
- ASN1Encodable element = (ASN1Encodable)e.nextElement();
- byte[] encoded = element.toASN1Primitive().getEncoded(ASN1Encoding.DER);
- certificates.add(0, certFactory.generateCertificate(
- new ByteArrayInputStream(encoded)));
- }
- }
- else if (encoding.equalsIgnoreCase("PKCS7") || encoding.equalsIgnoreCase("PEM"))
- {
- inStream = new BufferedInputStream(inStream);
- certificates = new ArrayList();
- CertificateFactory certFactory= CertificateFactory.getInstance("X.509", BouncyCastleProvider.PROVIDER_NAME);
- Certificate cert;
- while ((cert = certFactory.generateCertificate(inStream)) != null)
- {
- certificates.add(cert);
- }
- }
- else
- {
- throw new CertificateException("unsupported encoding: " + encoding);
- }
- }
- catch (IOException ex)
- {
- throw new CertificateException("IOException throw while decoding CertPath:\n" + ex.toString());
- }
- catch (NoSuchProviderException ex)
- {
- throw new CertificateException("BouncyCastle provider not found while trying to get a CertificateFactory:\n" + ex.toString());
- }
-
- this.certificates = sortCerts(certificates);
- }
-
- /**
- * Returns an iteration of the encodings supported by this
- * certification path, with the default encoding
- * first. Attempts to modify the returned Iterator via its
- * remove method result in an UnsupportedOperationException.
- *
- * @return an Iterator over the names of the supported encodings (as Strings)
- **/
- public Iterator getEncodings()
- {
- return certPathEncodings.iterator();
- }
-
- /**
- * Returns the encoded form of this certification path, using
- * the default encoding.
- *
- * @return the encoded bytes
- * @exception java.security.cert.CertificateEncodingException if an encoding error occurs
- **/
- public byte[] getEncoded()
- throws CertificateEncodingException
- {
- Iterator iter = getEncodings();
- if (iter.hasNext())
- {
- Object enc = iter.next();
- if (enc instanceof String)
- {
- return getEncoded((String)enc);
- }
- }
- return null;
- }
-
- /**
- * Returns the encoded form of this certification path, using
- * the specified encoding.
- *
- * @param encoding the name of the encoding to use
- * @return the encoded bytes
- * @exception java.security.cert.CertificateEncodingException if an encoding error
- * occurs or the encoding requested is not supported
- *
- **/
- public byte[] getEncoded(String encoding)
- throws CertificateEncodingException
- {
- if (encoding.equalsIgnoreCase("PkiPath"))
- {
- ASN1EncodableVector v = new ASN1EncodableVector();
-
- ListIterator iter = certificates.listIterator(certificates.size());
- while (iter.hasPrevious())
- {
- v.add(toASN1Object((X509Certificate)iter.previous()));
- }
-
- return toDEREncoded(new DERSequence(v));
- }
- else if (encoding.equalsIgnoreCase("PKCS7"))
- {
- ContentInfo encInfo = new ContentInfo(PKCSObjectIdentifiers.data, null);
-
- ASN1EncodableVector v = new ASN1EncodableVector();
- for (int i = 0; i != certificates.size(); i++)
- {
- v.add(toASN1Object((X509Certificate)certificates.get(i)));
- }
-
- SignedData sd = new SignedData(
- new ASN1Integer(1),
- new DERSet(),
- encInfo,
- new DERSet(v),
- null,
- new DERSet());
-
- return toDEREncoded(new ContentInfo(
- PKCSObjectIdentifiers.signedData, sd));
- }
- else if (encoding.equalsIgnoreCase("PEM"))
- {
- ByteArrayOutputStream bOut = new ByteArrayOutputStream();
- PemWriter pWrt = new PemWriter(new OutputStreamWriter(bOut));
-
- try
- {
- for (int i = 0; i != certificates.size(); i++)
- {
- pWrt.writeObject(new PemObject("CERTIFICATE", ((X509Certificate)certificates.get(i)).getEncoded()));
- }
-
- pWrt.close();
- }
- catch (Exception e)
- {
- throw new CertificateEncodingException("can't encode certificate for PEM encoded path");
- }
-
- return bOut.toByteArray();
- }
- else
- {
- throw new CertificateEncodingException("unsupported encoding: " + encoding);
- }
- }
-
- /**
- * Returns the list of certificates in this certification
- * path. The List returned must be immutable and thread-safe.
- *
- * @return an immutable List of Certificates (may be empty, but not null)
- **/
- public List getCertificates()
- {
- return Collections.unmodifiableList(new ArrayList(certificates));
- }
-
- /**
- * Return a DERObject containing the encoded certificate.
- *
- * @param cert the X509Certificate object to be encoded
- *
- * @return the DERObject
- **/
- private ASN1Primitive toASN1Object(
- X509Certificate cert)
- throws CertificateEncodingException
- {
- try
- {
- return new ASN1InputStream(cert.getEncoded()).readObject();
- }
- catch (Exception e)
- {
- throw new CertificateEncodingException("Exception while encoding certificate: " + e.toString());
- }
- }
-
- private byte[] toDEREncoded(ASN1Encodable obj)
- throws CertificateEncodingException
- {
- try
- {
- return obj.toASN1Primitive().getEncoded(ASN1Encoding.DER);
- }
- catch (IOException e)
- {
- throw new CertificateEncodingException("Exception thrown: " + e);
- }
- }
-}
diff --git a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jcajce/provider/asymmetric/x509/SignatureUtil.java b/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jcajce/provider/asymmetric/x509/SignatureUtil.java
deleted file mode 100644
index 96a1529c2..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jcajce/provider/asymmetric/x509/SignatureUtil.java
+++ /dev/null
@@ -1,134 +0,0 @@
-package org.spongycastle.jcajce.provider.asymmetric.x509;
-
-import java.io.IOException;
-import java.security.AlgorithmParameters;
-import java.security.GeneralSecurityException;
-import java.security.InvalidKeyException;
-import java.security.NoSuchAlgorithmException;
-import java.security.NoSuchProviderException;
-import java.security.Signature;
-import java.security.SignatureException;
-
-import org.spongycastle.asn1.ASN1Encodable;
-import org.spongycastle.asn1.ASN1Encoding;
-import org.spongycastle.asn1.ASN1Null;
-import org.spongycastle.asn1.ASN1ObjectIdentifier;
-import org.spongycastle.asn1.ASN1Sequence;
-import org.spongycastle.asn1.DERNull;
-import org.spongycastle.asn1.cryptopro.CryptoProObjectIdentifiers;
-import org.spongycastle.asn1.nist.NISTObjectIdentifiers;
-import org.spongycastle.asn1.oiw.OIWObjectIdentifiers;
-import org.spongycastle.asn1.pkcs.PKCSObjectIdentifiers;
-import org.spongycastle.asn1.pkcs.RSASSAPSSparams;
-import org.spongycastle.asn1.teletrust.TeleTrusTObjectIdentifiers;
-import org.spongycastle.asn1.x509.AlgorithmIdentifier;
-import org.spongycastle.asn1.x9.X9ObjectIdentifiers;
-
-class SignatureUtil
-{
- private static final ASN1Null derNull = new DERNull();
-
- static void setSignatureParameters(
- Signature signature,
- ASN1Encodable params)
- throws NoSuchAlgorithmException, SignatureException, InvalidKeyException
- {
- if (params != null && !derNull.equals(params.toASN1Primitive()))
- {
- try
- {
- AlgorithmParameters sigParams = AlgorithmParameters.getInstance(signature.getAlgorithm(), signature.getProvider().getName());
-
- try
- {
- sigParams.init(params.toASN1Primitive().getEncoded(ASN1Encoding.DER));
- }
- catch (IOException e)
- {
- throw new SignatureException("IOException decoding parameters: " + e.getMessage());
- }
- }
- catch (NoSuchProviderException e)
- {
- throw new SignatureException("cannot find provider: " + e.getMessage());
- }
- }
- }
-
- static String getSignatureName(
- AlgorithmIdentifier sigAlgId)
- {
- ASN1Encodable params = sigAlgId.getParameters();
-
- if (params != null && !derNull.equals(params))
- {
- if (sigAlgId.getAlgorithm().equals(PKCSObjectIdentifiers.id_RSASSA_PSS))
- {
- RSASSAPSSparams rsaParams = RSASSAPSSparams.getInstance(params);
-
- return getDigestAlgName(rsaParams.getHashAlgorithm().getAlgorithm()) + "withRSAandMGF1";
- }
- if (sigAlgId.getAlgorithm().equals(X9ObjectIdentifiers.ecdsa_with_SHA2))
- {
- ASN1Sequence ecDsaParams = ASN1Sequence.getInstance(params);
-
- return getDigestAlgName((ASN1ObjectIdentifier)ecDsaParams.getObjectAt(0)) + "withECDSA";
- }
- }
-
- return sigAlgId.getAlgorithm().getId();
- }
-
- /**
- * Return the digest algorithm using one of the standard JCA string
- * representations rather the the algorithm identifier (if possible).
- */
- private static String getDigestAlgName(
- ASN1ObjectIdentifier digestAlgOID)
- {
- if (PKCSObjectIdentifiers.md5.equals(digestAlgOID))
- {
- return "MD5";
- }
- else if (OIWObjectIdentifiers.idSHA1.equals(digestAlgOID))
- {
- return "SHA1";
- }
- else if (NISTObjectIdentifiers.id_sha224.equals(digestAlgOID))
- {
- return "SHA224";
- }
- else if (NISTObjectIdentifiers.id_sha256.equals(digestAlgOID))
- {
- return "SHA256";
- }
- else if (NISTObjectIdentifiers.id_sha384.equals(digestAlgOID))
- {
- return "SHA384";
- }
- else if (NISTObjectIdentifiers.id_sha512.equals(digestAlgOID))
- {
- return "SHA512";
- }
- else if (TeleTrusTObjectIdentifiers.ripemd128.equals(digestAlgOID))
- {
- return "RIPEMD128";
- }
- else if (TeleTrusTObjectIdentifiers.ripemd160.equals(digestAlgOID))
- {
- return "RIPEMD160";
- }
- else if (TeleTrusTObjectIdentifiers.ripemd256.equals(digestAlgOID))
- {
- return "RIPEMD256";
- }
- else if (CryptoProObjectIdentifiers.gostR3411.equals(digestAlgOID))
- {
- return "GOST3411";
- }
- else
- {
- return digestAlgOID.getId();
- }
- }
-}
diff --git a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jcajce/provider/asymmetric/x509/X509CRLEntryObject.java b/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jcajce/provider/asymmetric/x509/X509CRLEntryObject.java
deleted file mode 100644
index dac30008b..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jcajce/provider/asymmetric/x509/X509CRLEntryObject.java
+++ /dev/null
@@ -1,293 +0,0 @@
-package org.spongycastle.jcajce.provider.asymmetric.x509;
-
-import java.io.IOException;
-import java.math.BigInteger;
-import java.security.cert.CRLException;
-import java.security.cert.X509CRLEntry;
-import java.util.Date;
-import java.util.Enumeration;
-import java.util.HashSet;
-import java.util.Set;
-
-import org.spongycastle.asn1.ASN1Encoding;
-import org.spongycastle.asn1.ASN1InputStream;
-import org.spongycastle.asn1.ASN1ObjectIdentifier;
-import org.spongycastle.asn1.ASN1Enumerated;
-import org.spongycastle.asn1.util.ASN1Dump;
-import org.spongycastle.asn1.x500.X500Name;
-import org.spongycastle.asn1.x509.CRLReason;
-import org.spongycastle.asn1.x509.Extension;
-import org.spongycastle.asn1.x509.Extensions;
-import org.spongycastle.asn1.x509.GeneralName;
-import org.spongycastle.asn1.x509.GeneralNames;
-import org.spongycastle.asn1.x509.TBSCertList;
-import org.spongycastle.asn1.x509.X509Extension;
-import org.spongycastle.x509.extension.X509ExtensionUtil;
-import org.spongycastle.jce.X509Principal;
-
-/**
- * The following extensions are listed in RFC 2459 as relevant to CRL Entries
- *
- * ReasonCode Hode Instruction Code Invalidity Date Certificate Issuer
- * (critical)
- */
-class X509CRLEntryObject extends X509CRLEntry
-{
- private TBSCertList.CRLEntry c;
-
- private X500Name certificateIssuer;
- private int hashValue;
- private boolean isHashValueSet;
-
- public X509CRLEntryObject(TBSCertList.CRLEntry c)
- {
- this.c = c;
- this.certificateIssuer = null;
- }
-
- /**
- * Constructor for CRLEntries of indirect CRLs. If isIndirect
- * is false
{@link #getCertificateIssuer()} will always
- * return null
, previousCertificateIssuer
is
- * ignored. If this isIndirect
is specified and this CRLEntry
- * has no certificate issuer CRL entry extension
- * previousCertificateIssuer
is returned by
- * {@link #getCertificateIssuer()}.
- *
- * @param c
- * TBSCertList.CRLEntry object.
- * @param isIndirect
- * true
if the corresponding CRL is a indirect
- * CRL.
- * @param previousCertificateIssuer
- * Certificate issuer of the previous CRLEntry.
- */
- public X509CRLEntryObject(
- TBSCertList.CRLEntry c,
- boolean isIndirect,
- X500Name previousCertificateIssuer)
- {
- this.c = c;
- this.certificateIssuer = loadCertificateIssuer(isIndirect, previousCertificateIssuer);
- }
-
- /**
- * Will return true if any extensions are present and marked as critical as
- * we currently don't handle any extensions!
- */
- public boolean hasUnsupportedCriticalExtension()
- {
- Set extns = getCriticalExtensionOIDs();
-
- return extns != null && !extns.isEmpty();
- }
-
- private X500Name loadCertificateIssuer(boolean isIndirect, X500Name previousCertificateIssuer)
- {
- if (!isIndirect)
- {
- return null;
- }
-
- byte[] ext = getExtensionValue(X509Extension.certificateIssuer.getId());
- if (ext == null)
- {
- return previousCertificateIssuer;
- }
-
- try
- {
- GeneralName[] names = GeneralNames.getInstance(
- X509ExtensionUtil.fromExtensionValue(ext)).getNames();
- for (int i = 0; i < names.length; i++)
- {
- if (names[i].getTagNo() == GeneralName.directoryName)
- {
- return X500Name.getInstance(names[i].getName());
- }
- }
- return null;
- }
- catch (IOException e)
- {
- return null;
- }
- }
-
- X509Principal getCertificateIssuer()
- {
- if (certificateIssuer == null)
- {
- return null;
- }
- try
- {
- return new X509Principal(certificateIssuer.getEncoded());
- }
- catch (Exception e)
- {
- throw new IllegalStateException(e.toString());
- }
- }
- private Set getExtensionOIDs(boolean critical)
- {
- Extensions extensions = c.getExtensions();
-
- if (extensions != null)
- {
- Set set = new HashSet();
- Enumeration e = extensions.oids();
-
- while (e.hasMoreElements())
- {
- ASN1ObjectIdentifier oid = (ASN1ObjectIdentifier) e.nextElement();
- Extension ext = extensions.getExtension(oid);
-
- if (critical == ext.isCritical())
- {
- set.add(oid.getId());
- }
- }
-
- return set;
- }
-
- return null;
- }
-
- public Set getCriticalExtensionOIDs()
- {
- return getExtensionOIDs(true);
- }
-
- public Set getNonCriticalExtensionOIDs()
- {
- return getExtensionOIDs(false);
- }
-
- public byte[] getExtensionValue(String oid)
- {
- Extensions exts = c.getExtensions();
-
- if (exts != null)
- {
- Extension ext = exts.getExtension(new ASN1ObjectIdentifier(oid));
-
- if (ext != null)
- {
- try
- {
- return ext.getExtnValue().getEncoded();
- }
- catch (Exception e)
- {
- throw new RuntimeException("error encoding " + e.toString());
- }
- }
- }
-
- return null;
- }
-
- /**
- * Cache the hashCode value - calculating it with the standard method.
- * @return calculated hashCode.
- */
- public int hashCode()
- {
- if (!isHashValueSet)
- {
- hashValue = super.hashCode();
- isHashValueSet = true;
- }
-
- return hashValue;
- }
-
- public byte[] getEncoded()
- throws CRLException
- {
- try
- {
- return c.getEncoded(ASN1Encoding.DER);
- }
- catch (IOException e)
- {
- throw new CRLException(e.toString());
- }
- }
-
- public BigInteger getSerialNumber()
- {
- return c.getUserCertificate().getValue();
- }
-
- public Date getRevocationDate()
- {
- return c.getRevocationDate().getDate();
- }
-
- public boolean hasExtensions()
- {
- return c.getExtensions() != null;
- }
-
- public String toString()
- {
- StringBuffer buf = new StringBuffer();
- String nl = System.getProperty("line.separator");
-
- buf.append(" userCertificate: ").append(this.getSerialNumber()).append(nl);
- buf.append(" revocationDate: ").append(this.getRevocationDate()).append(nl);
-
- Extensions extensions = c.getExtensions();
-
- if (extensions != null)
- {
- Enumeration e = extensions.oids();
- if (e.hasMoreElements())
- {
- buf.append(" crlEntryExtensions:").append(nl);
-
- while (e.hasMoreElements())
- {
- ASN1ObjectIdentifier oid = (ASN1ObjectIdentifier)e.nextElement();
- Extension ext = extensions.getExtension(oid);
- if (ext.getExtnValue() != null)
- {
- byte[] octs = ext.getExtnValue().getOctets();
- ASN1InputStream dIn = new ASN1InputStream(octs);
- buf.append(" critical(").append(ext.isCritical()).append(") ");
- try
- {
- if (oid.equals(X509Extension.reasonCode))
- {
- buf.append(CRLReason.getInstance(ASN1Enumerated.getInstance(dIn.readObject()))).append(nl);
- }
- else if (oid.equals(X509Extension.certificateIssuer))
- {
- buf.append("Certificate issuer: ").append(GeneralNames.getInstance(dIn.readObject())).append(nl);
- }
- else
- {
- buf.append(oid.getId());
- buf.append(" value = ").append(ASN1Dump.dumpAsString(dIn.readObject())).append(nl);
- }
- }
- catch (Exception ex)
- {
- buf.append(oid.getId());
- buf.append(" value = ").append("*****").append(nl);
- }
- }
- else
- {
- buf.append(nl);
- }
- }
- }
- }
-
- return buf.toString();
- }
-}
diff --git a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jcajce/provider/asymmetric/x509/X509CRLObject.java b/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jcajce/provider/asymmetric/x509/X509CRLObject.java
deleted file mode 100644
index f2b5f5d8d..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jcajce/provider/asymmetric/x509/X509CRLObject.java
+++ /dev/null
@@ -1,556 +0,0 @@
-package org.spongycastle.jcajce.provider.asymmetric.x509;
-
-import java.io.IOException;
-import java.math.BigInteger;
-import java.security.InvalidKeyException;
-import java.security.NoSuchAlgorithmException;
-import java.security.NoSuchProviderException;
-import java.security.Principal;
-import java.security.PublicKey;
-import java.security.Signature;
-import java.security.SignatureException;
-import java.security.cert.CRLException;
-import java.security.cert.Certificate;
-import java.security.cert.CertificateEncodingException;
-import java.security.cert.X509CRL;
-import java.security.cert.X509CRLEntry;
-import java.security.cert.X509Certificate;
-import java.util.Collections;
-import java.util.Date;
-import java.util.Enumeration;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Set;
-
-import org.spongycastle.asn1.ASN1Encodable;
-import org.spongycastle.asn1.ASN1Encoding;
-import org.spongycastle.asn1.ASN1InputStream;
-import org.spongycastle.asn1.ASN1ObjectIdentifier;
-import org.spongycastle.asn1.ASN1Integer;
-import org.spongycastle.asn1.util.ASN1Dump;
-import org.spongycastle.asn1.x500.X500Name;
-import org.spongycastle.asn1.x509.CRLDistPoint;
-import org.spongycastle.asn1.x509.CRLNumber;
-import org.spongycastle.asn1.x509.CertificateList;
-import org.spongycastle.asn1.x509.Extension;
-import org.spongycastle.asn1.x509.Extensions;
-import org.spongycastle.asn1.x509.GeneralNames;
-import org.spongycastle.asn1.x509.IssuingDistributionPoint;
-import org.spongycastle.asn1.x509.TBSCertList;
-import org.spongycastle.jce.X509Principal;
-import org.spongycastle.jce.provider.RFC3280CertPathUtilities;
-import org.spongycastle.jce.provider.BouncyCastleProvider;
-import org.spongycastle.util.encoders.Hex;
-import org.spongycastle.x509.extension.X509ExtensionUtil;
-
-/**
- * The following extensions are listed in RFC 2459 as relevant to CRLs
- *
- * Authority Key Identifier
- * Issuer Alternative Name
- * CRL Number
- * Delta CRL Indicator (critical)
- * Issuing Distribution Point (critical)
- */
-class X509CRLObject
- extends X509CRL
-{
- private CertificateList c;
- private String sigAlgName;
- private byte[] sigAlgParams;
- private boolean isIndirect;
-
- static boolean isIndirectCRL(X509CRL crl)
- throws CRLException
- {
- try
- {
- byte[] idp = crl.getExtensionValue(Extension.issuingDistributionPoint.getId());
- return idp != null
- && IssuingDistributionPoint.getInstance(X509ExtensionUtil.fromExtensionValue(idp)).isIndirectCRL();
- }
- catch (Exception e)
- {
- throw new ExtCRLException(
- "Exception reading IssuingDistributionPoint", e);
- }
- }
-
- public X509CRLObject(
- CertificateList c)
- throws CRLException
- {
- this.c = c;
-
- try
- {
- this.sigAlgName = X509SignatureUtil.getSignatureName(c.getSignatureAlgorithm());
-
- if (c.getSignatureAlgorithm().getParameters() != null)
- {
- this.sigAlgParams = ((ASN1Encodable)c.getSignatureAlgorithm().getParameters()).toASN1Primitive().getEncoded(ASN1Encoding.DER);
- }
- else
- {
- this.sigAlgParams = null;
- }
-
- this.isIndirect = isIndirectCRL(this);
- }
- catch (Exception e)
- {
- throw new CRLException("CRL contents invalid: " + e);
- }
- }
-
- /**
- * Will return true if any extensions are present and marked
- * as critical as we currently dont handle any extensions!
- */
- public boolean hasUnsupportedCriticalExtension()
- {
- Set extns = getCriticalExtensionOIDs();
-
- if (extns == null)
- {
- return false;
- }
-
- extns.remove(RFC3280CertPathUtilities.ISSUING_DISTRIBUTION_POINT);
- extns.remove(RFC3280CertPathUtilities.DELTA_CRL_INDICATOR);
-
- return !extns.isEmpty();
- }
-
- private Set getExtensionOIDs(boolean critical)
- {
- if (this.getVersion() == 2)
- {
- Extensions extensions = c.getTBSCertList().getExtensions();
-
- if (extensions != null)
- {
- Set set = new HashSet();
- Enumeration e = extensions.oids();
-
- while (e.hasMoreElements())
- {
- ASN1ObjectIdentifier oid = (ASN1ObjectIdentifier)e.nextElement();
- Extension ext = extensions.getExtension(oid);
-
- if (critical == ext.isCritical())
- {
- set.add(oid.getId());
- }
- }
-
- return set;
- }
- }
-
- return null;
- }
-
- public Set getCriticalExtensionOIDs()
- {
- return getExtensionOIDs(true);
- }
-
- public Set getNonCriticalExtensionOIDs()
- {
- return getExtensionOIDs(false);
- }
-
- public byte[] getExtensionValue(String oid)
- {
- Extensions exts = c.getTBSCertList().getExtensions();
-
- if (exts != null)
- {
- Extension ext = exts.getExtension(new ASN1ObjectIdentifier(oid));
-
- if (ext != null)
- {
- try
- {
- return ext.getExtnValue().getEncoded();
- }
- catch (Exception e)
- {
- throw new IllegalStateException("error parsing " + e.toString());
- }
- }
- }
-
- return null;
- }
-
- public byte[] getEncoded()
- throws CRLException
- {
- try
- {
- return c.getEncoded(ASN1Encoding.DER);
- }
- catch (IOException e)
- {
- throw new CRLException(e.toString());
- }
- }
-
- public void verify(PublicKey key)
- throws CRLException, NoSuchAlgorithmException,
- InvalidKeyException, NoSuchProviderException, SignatureException
- {
- verify(key, BouncyCastleProvider.PROVIDER_NAME);
- }
-
- public void verify(PublicKey key, String sigProvider)
- throws CRLException, NoSuchAlgorithmException,
- InvalidKeyException, NoSuchProviderException, SignatureException
- {
- if (!c.getSignatureAlgorithm().equals(c.getTBSCertList().getSignature()))
- {
- throw new CRLException("Signature algorithm on CertificateList does not match TBSCertList.");
- }
-
- Signature sig;
-
- if (sigProvider != null)
- {
- sig = Signature.getInstance(getSigAlgName(), sigProvider);
- }
- else
- {
- sig = Signature.getInstance(getSigAlgName());
- }
-
- sig.initVerify(key);
- sig.update(this.getTBSCertList());
-
- if (!sig.verify(this.getSignature()))
- {
- throw new SignatureException("CRL does not verify with supplied public key.");
- }
- }
-
- public int getVersion()
- {
- return c.getVersionNumber();
- }
-
- public Principal getIssuerDN()
- {
- return new X509Principal(X500Name.getInstance(c.getIssuer().toASN1Primitive()));
- }
-
- public Date getThisUpdate()
- {
- return c.getThisUpdate().getDate();
- }
-
- public Date getNextUpdate()
- {
- if (c.getNextUpdate() != null)
- {
- return c.getNextUpdate().getDate();
- }
-
- return null;
- }
-
- private Set loadCRLEntries()
- {
- Set entrySet = new HashSet();
- Enumeration certs = c.getRevokedCertificateEnumeration();
-
- X500Name previousCertificateIssuer = c.getIssuer();
- while (certs.hasMoreElements())
- {
- TBSCertList.CRLEntry entry = (TBSCertList.CRLEntry)certs.nextElement();
- X509CRLEntryObject crlEntry = new X509CRLEntryObject(entry, isIndirect, previousCertificateIssuer);
- entrySet.add(crlEntry);
- if (isIndirect && entry.hasExtensions())
- {
- Extension currentCaName = entry.getExtensions().getExtension(Extension.certificateIssuer);
-
- if (currentCaName != null)
- {
- previousCertificateIssuer = X500Name.getInstance(GeneralNames.getInstance(currentCaName.getParsedValue()).getNames()[0].getName());
- }
- }
- }
-
- return entrySet;
- }
-
- public X509CRLEntry getRevokedCertificate(BigInteger serialNumber)
- {
- Enumeration certs = c.getRevokedCertificateEnumeration();
-
- X500Name previousCertificateIssuer = c.getIssuer();
- while (certs.hasMoreElements())
- {
- TBSCertList.CRLEntry entry = (TBSCertList.CRLEntry)certs.nextElement();
-
- if (serialNumber.equals(entry.getUserCertificate().getValue()))
- {
- return new X509CRLEntryObject(entry, isIndirect, previousCertificateIssuer);
- }
-
- if (isIndirect && entry.hasExtensions())
- {
- Extension currentCaName = entry.getExtensions().getExtension(Extension.certificateIssuer);
-
- if (currentCaName != null)
- {
- previousCertificateIssuer = X500Name.getInstance(GeneralNames.getInstance(currentCaName.getParsedValue()).getNames()[0].getName());
- }
- }
- }
-
- return null;
- }
-
- public Set getRevokedCertificates()
- {
- Set entrySet = loadCRLEntries();
-
- if (!entrySet.isEmpty())
- {
- return Collections.unmodifiableSet(entrySet);
- }
-
- return null;
- }
-
- public byte[] getTBSCertList()
- throws CRLException
- {
- try
- {
- return c.getTBSCertList().getEncoded("DER");
- }
- catch (IOException e)
- {
- throw new CRLException(e.toString());
- }
- }
-
- public byte[] getSignature()
- {
- return c.getSignature().getBytes();
- }
-
- public String getSigAlgName()
- {
- return sigAlgName;
- }
-
- public String getSigAlgOID()
- {
- return c.getSignatureAlgorithm().getAlgorithm().getId();
- }
-
- public byte[] getSigAlgParams()
- {
- if (sigAlgParams != null)
- {
- byte[] tmp = new byte[sigAlgParams.length];
-
- System.arraycopy(sigAlgParams, 0, tmp, 0, tmp.length);
-
- return tmp;
- }
-
- return null;
- }
-
- /**
- * Returns a string representation of this CRL.
- *
- * @return a string representation of this CRL.
- */
- public String toString()
- {
- StringBuffer buf = new StringBuffer();
- String nl = System.getProperty("line.separator");
-
- buf.append(" Version: ").append(this.getVersion()).append(
- nl);
- buf.append(" IssuerDN: ").append(this.getIssuerDN())
- .append(nl);
- buf.append(" This update: ").append(this.getThisUpdate())
- .append(nl);
- buf.append(" Next update: ").append(this.getNextUpdate())
- .append(nl);
- buf.append(" Signature Algorithm: ").append(this.getSigAlgName())
- .append(nl);
-
- byte[] sig = this.getSignature();
-
- buf.append(" Signature: ").append(
- new String(Hex.encode(sig, 0, 20))).append(nl);
- for (int i = 20; i < sig.length; i += 20)
- {
- if (i < sig.length - 20)
- {
- buf.append(" ").append(
- new String(Hex.encode(sig, i, 20))).append(nl);
- }
- else
- {
- buf.append(" ").append(
- new String(Hex.encode(sig, i, sig.length - i))).append(nl);
- }
- }
-
- Extensions extensions = c.getTBSCertList().getExtensions();
-
- if (extensions != null)
- {
- Enumeration e = extensions.oids();
-
- if (e.hasMoreElements())
- {
- buf.append(" Extensions: ").append(nl);
- }
-
- while (e.hasMoreElements())
- {
- ASN1ObjectIdentifier oid = (ASN1ObjectIdentifier) e.nextElement();
- Extension ext = extensions.getExtension(oid);
-
- if (ext.getExtnValue() != null)
- {
- byte[] octs = ext.getExtnValue().getOctets();
- ASN1InputStream dIn = new ASN1InputStream(octs);
- buf.append(" critical(").append(
- ext.isCritical()).append(") ");
- try
- {
- if (oid.equals(Extension.cRLNumber))
- {
- buf.append(
- new CRLNumber(ASN1Integer.getInstance(
- dIn.readObject()).getPositiveValue()))
- .append(nl);
- }
- else if (oid.equals(Extension.deltaCRLIndicator))
- {
- buf.append(
- "Base CRL: "
- + new CRLNumber(ASN1Integer.getInstance(
- dIn.readObject()).getPositiveValue()))
- .append(nl);
- }
- else if (oid
- .equals(Extension.issuingDistributionPoint))
- {
- buf.append(
- IssuingDistributionPoint.getInstance(dIn.readObject())).append(nl);
- }
- else if (oid
- .equals(Extension.cRLDistributionPoints))
- {
- buf.append(
- CRLDistPoint.getInstance(dIn.readObject())).append(nl);
- }
- else if (oid.equals(Extension.freshestCRL))
- {
- buf.append(
- CRLDistPoint.getInstance(dIn.readObject())).append(nl);
- }
- else
- {
- buf.append(oid.getId());
- buf.append(" value = ").append(
- ASN1Dump.dumpAsString(dIn.readObject()))
- .append(nl);
- }
- }
- catch (Exception ex)
- {
- buf.append(oid.getId());
- buf.append(" value = ").append("*****").append(nl);
- }
- }
- else
- {
- buf.append(nl);
- }
- }
- }
- Set set = getRevokedCertificates();
- if (set != null)
- {
- Iterator it = set.iterator();
- while (it.hasNext())
- {
- buf.append(it.next());
- buf.append(nl);
- }
- }
- return buf.toString();
- }
-
- /**
- * Checks whether the given certificate is on this CRL.
- *
- * @param cert the certificate to check for.
- * @return true if the given certificate is on this CRL,
- * false otherwise.
- */
- public boolean isRevoked(Certificate cert)
- {
- if (!cert.getType().equals("X.509"))
- {
- throw new RuntimeException("X.509 CRL used with non X.509 Cert");
- }
-
- TBSCertList.CRLEntry[] certs = c.getRevokedCertificates();
-
- X500Name caName = c.getIssuer();
-
- if (certs != null)
- {
- BigInteger serial = ((X509Certificate)cert).getSerialNumber();
-
- for (int i = 0; i < certs.length; i++)
- {
- if (isIndirect && certs[i].hasExtensions())
- {
- Extension currentCaName = certs[i].getExtensions().getExtension(Extension.certificateIssuer);
-
- if (currentCaName != null)
- {
- caName = X500Name.getInstance(GeneralNames.getInstance(currentCaName.getParsedValue()).getNames()[0].getName());
- }
- }
-
- if (certs[i].getUserCertificate().getValue().equals(serial))
- {
- X500Name issuer;
-
- try
- {
- issuer = org.spongycastle.asn1.x509.Certificate.getInstance(cert.getEncoded()).getIssuer();
- }
- catch (CertificateEncodingException e)
- {
- throw new RuntimeException("Cannot process certificate");
- }
-
- if (!caName.equals(issuer))
- {
- return false;
- }
-
- return true;
- }
- }
- }
-
- return false;
- }
-}
diff --git a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jcajce/provider/asymmetric/x509/X509CertificateObject.java b/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jcajce/provider/asymmetric/x509/X509CertificateObject.java
deleted file mode 100644
index aa83e65de..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jcajce/provider/asymmetric/x509/X509CertificateObject.java
+++ /dev/null
@@ -1,858 +0,0 @@
-package org.spongycastle.jcajce.provider.asymmetric.x509;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.math.BigInteger;
-import java.net.InetAddress;
-import java.net.UnknownHostException;
-import java.security.InvalidKeyException;
-import java.security.NoSuchAlgorithmException;
-import java.security.NoSuchProviderException;
-import java.security.Principal;
-import java.security.Provider;
-import java.security.PublicKey;
-import java.security.Security;
-import java.security.Signature;
-import java.security.SignatureException;
-import java.security.cert.Certificate;
-import java.security.cert.CertificateEncodingException;
-import java.security.cert.CertificateException;
-import java.security.cert.CertificateExpiredException;
-import java.security.cert.CertificateNotYetValidException;
-import java.security.cert.CertificateParsingException;
-import java.security.cert.X509Certificate;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Date;
-import java.util.Enumeration;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-import org.spongycastle.asn1.ASN1Encodable;
-import org.spongycastle.asn1.ASN1Encoding;
-import org.spongycastle.asn1.ASN1InputStream;
-import org.spongycastle.asn1.ASN1ObjectIdentifier;
-import org.spongycastle.asn1.ASN1OutputStream;
-import org.spongycastle.asn1.ASN1Primitive;
-import org.spongycastle.asn1.ASN1Sequence;
-import org.spongycastle.asn1.ASN1String;
-import org.spongycastle.asn1.DERBitString;
-import org.spongycastle.asn1.DERIA5String;
-import org.spongycastle.asn1.DERNull;
-import org.spongycastle.asn1.DEROctetString;
-import org.spongycastle.asn1.misc.MiscObjectIdentifiers;
-import org.spongycastle.asn1.misc.NetscapeCertType;
-import org.spongycastle.asn1.misc.NetscapeRevocationURL;
-import org.spongycastle.asn1.misc.VerisignCzagExtension;
-import org.spongycastle.asn1.util.ASN1Dump;
-import org.spongycastle.asn1.x500.X500Name;
-import org.spongycastle.asn1.x500.style.RFC4519Style;
-import org.spongycastle.asn1.x509.AlgorithmIdentifier;
-import org.spongycastle.asn1.x509.BasicConstraints;
-import org.spongycastle.asn1.x509.Extension;
-import org.spongycastle.asn1.x509.Extensions;
-import org.spongycastle.asn1.x509.GeneralName;
-import org.spongycastle.asn1.x509.KeyUsage;
-import org.spongycastle.jcajce.provider.asymmetric.util.PKCS12BagAttributeCarrierImpl;
-import org.spongycastle.jce.X509Principal;
-import org.spongycastle.jce.provider.RFC3280CertPathUtilities;
-import org.spongycastle.jce.provider.BouncyCastleProvider;
-import org.spongycastle.jce.interfaces.PKCS12BagAttributeCarrier;
-import org.spongycastle.util.Arrays;
-import org.spongycastle.util.Integers;
-import org.spongycastle.util.encoders.Hex;
-
-class X509CertificateObject
- extends X509Certificate
- implements PKCS12BagAttributeCarrier
-{
- private org.spongycastle.asn1.x509.Certificate c;
- private BasicConstraints basicConstraints;
- private boolean[] keyUsage;
- private boolean hashValueSet;
- private int hashValue;
-
- private PKCS12BagAttributeCarrier attrCarrier = new PKCS12BagAttributeCarrierImpl();
-
- public X509CertificateObject(
- org.spongycastle.asn1.x509.Certificate c)
- throws CertificateParsingException
- {
- this.c = c;
-
- try
- {
- byte[] bytes = this.getExtensionBytes("2.5.29.19");
-
- if (bytes != null)
- {
- basicConstraints = BasicConstraints.getInstance(ASN1Primitive.fromByteArray(bytes));
- }
- }
- catch (Exception e)
- {
- throw new CertificateParsingException("cannot construct BasicConstraints: " + e);
- }
-
- try
- {
- byte[] bytes = this.getExtensionBytes("2.5.29.15");
- if (bytes != null)
- {
- DERBitString bits = DERBitString.getInstance(ASN1Primitive.fromByteArray(bytes));
-
- bytes = bits.getBytes();
- int length = (bytes.length * 8) - bits.getPadBits();
-
- keyUsage = new boolean[(length < 9) ? 9 : length];
-
- for (int i = 0; i != length; i++)
- {
- keyUsage[i] = (bytes[i / 8] & (0x80 >>> (i % 8))) != 0;
- }
- }
- else
- {
- keyUsage = null;
- }
- }
- catch (Exception e)
- {
- throw new CertificateParsingException("cannot construct KeyUsage: " + e);
- }
- }
-
- public void checkValidity()
- throws CertificateExpiredException, CertificateNotYetValidException
- {
- this.checkValidity(new Date());
- }
-
- public void checkValidity(
- Date date)
- throws CertificateExpiredException, CertificateNotYetValidException
- {
- if (date.getTime() > this.getNotAfter().getTime()) // for other VM compatibility
- {
- throw new CertificateExpiredException("certificate expired on " + c.getEndDate().getTime());
- }
-
- if (date.getTime() < this.getNotBefore().getTime())
- {
- throw new CertificateNotYetValidException("certificate not valid till " + c.getStartDate().getTime());
- }
- }
-
- public int getVersion()
- {
- return c.getVersionNumber();
- }
-
- public BigInteger getSerialNumber()
- {
- return c.getSerialNumber().getValue();
- }
-
- public Principal getIssuerDN()
- {
- try
- {
- return new X509Principal(X500Name.getInstance(c.getIssuer().getEncoded()));
- }
- catch (IOException e)
- {
- return null;
- }
- }
-
- public Principal getSubjectDN()
- {
- return new X509Principal(X500Name.getInstance(c.getSubject().toASN1Primitive()));
- }
-
- public Date getNotBefore()
- {
- return c.getStartDate().getDate();
- }
-
- public Date getNotAfter()
- {
- return c.getEndDate().getDate();
- }
-
- public byte[] getTBSCertificate()
- throws CertificateEncodingException
- {
- try
- {
- return c.getTBSCertificate().getEncoded(ASN1Encoding.DER);
- }
- catch (IOException e)
- {
- throw new CertificateEncodingException(e.toString());
- }
- }
-
- public byte[] getSignature()
- {
- return c.getSignature().getBytes();
- }
-
- /**
- * return a more "meaningful" representation for the signature algorithm used in
- * the certficate.
- */
- public String getSigAlgName()
- {
- Provider prov = Security.getProvider(BouncyCastleProvider.PROVIDER_NAME);
-
- if (prov != null)
- {
- String algName = prov.getProperty("Alg.Alias.Signature." + this.getSigAlgOID());
-
- if (algName != null)
- {
- return algName;
- }
- }
-
- Provider[] provs = Security.getProviders();
-
- //
- // search every provider looking for a real algorithm
- //
- for (int i = 0; i != provs.length; i++)
- {
- String algName = provs[i].getProperty("Alg.Alias.Signature." + this.getSigAlgOID());
- if (algName != null)
- {
- return algName;
- }
- }
-
- return this.getSigAlgOID();
- }
-
- /**
- * return the object identifier for the signature.
- */
- public String getSigAlgOID()
- {
- return c.getSignatureAlgorithm().getAlgorithm().getId();
- }
-
- /**
- * return the signature parameters, or null if there aren't any.
- */
- public byte[] getSigAlgParams()
- {
- if (c.getSignatureAlgorithm().getParameters() != null)
- {
- try
- {
- return c.getSignatureAlgorithm().getParameters().toASN1Primitive().getEncoded(ASN1Encoding.DER);
- }
- catch (IOException e)
- {
- return null;
- }
- }
- else
- {
- return null;
- }
- }
-
- public boolean[] getIssuerUniqueID()
- {
- DERBitString id = c.getTBSCertificate().getIssuerUniqueId();
-
- if (id != null)
- {
- byte[] bytes = id.getBytes();
- boolean[] boolId = new boolean[bytes.length * 8 - id.getPadBits()];
-
- for (int i = 0; i != boolId.length; i++)
- {
- boolId[i] = (bytes[i / 8] & (0x80 >>> (i % 8))) != 0;
- }
-
- return boolId;
- }
-
- return null;
- }
-
- public boolean[] getSubjectUniqueID()
- {
- DERBitString id = c.getTBSCertificate().getSubjectUniqueId();
-
- if (id != null)
- {
- byte[] bytes = id.getBytes();
- boolean[] boolId = new boolean[bytes.length * 8 - id.getPadBits()];
-
- for (int i = 0; i != boolId.length; i++)
- {
- boolId[i] = (bytes[i / 8] & (0x80 >>> (i % 8))) != 0;
- }
-
- return boolId;
- }
-
- return null;
- }
-
- public boolean[] getKeyUsage()
- {
- return keyUsage;
- }
-
- public List getExtendedKeyUsage()
- throws CertificateParsingException
- {
- byte[] bytes = this.getExtensionBytes("2.5.29.37");
-
- if (bytes != null)
- {
- try
- {
- ASN1InputStream dIn = new ASN1InputStream(bytes);
- ASN1Sequence seq = (ASN1Sequence)dIn.readObject();
- List list = new ArrayList();
-
- for (int i = 0; i != seq.size(); i++)
- {
- list.add(((ASN1ObjectIdentifier)seq.getObjectAt(i)).getId());
- }
-
- return Collections.unmodifiableList(list);
- }
- catch (Exception e)
- {
- throw new CertificateParsingException("error processing extended key usage extension");
- }
- }
-
- return null;
- }
-
- public int getBasicConstraints()
- {
- if (basicConstraints != null)
- {
- if (basicConstraints.isCA())
- {
- if (basicConstraints.getPathLenConstraint() == null)
- {
- return Integer.MAX_VALUE;
- }
- else
- {
- return basicConstraints.getPathLenConstraint().intValue();
- }
- }
- else
- {
- return -1;
- }
- }
-
- return -1;
- }
-
- public Collection getSubjectAlternativeNames()
- throws CertificateParsingException
- {
- return getAlternativeNames(getExtensionBytes(Extension.subjectAlternativeName.getId()));
- }
-
- public Collection getIssuerAlternativeNames()
- throws CertificateParsingException
- {
- return getAlternativeNames(getExtensionBytes(Extension.issuerAlternativeName.getId()));
- }
-
- public Set getCriticalExtensionOIDs()
- {
- if (this.getVersion() == 3)
- {
- Set set = new HashSet();
- Extensions extensions = c.getTBSCertificate().getExtensions();
-
- if (extensions != null)
- {
- Enumeration e = extensions.oids();
-
- while (e.hasMoreElements())
- {
- ASN1ObjectIdentifier oid = (ASN1ObjectIdentifier)e.nextElement();
- Extension ext = extensions.getExtension(oid);
-
- if (ext.isCritical())
- {
- set.add(oid.getId());
- }
- }
-
- return set;
- }
- }
-
- return null;
- }
-
- private byte[] getExtensionBytes(String oid)
- {
- Extensions exts = c.getTBSCertificate().getExtensions();
-
- if (exts != null)
- {
- Extension ext = exts.getExtension(new ASN1ObjectIdentifier(oid));
- if (ext != null)
- {
- return ext.getExtnValue().getOctets();
- }
- }
-
- return null;
- }
-
- public byte[] getExtensionValue(String oid)
- {
- Extensions exts = c.getTBSCertificate().getExtensions();
-
- if (exts != null)
- {
- Extension ext = exts.getExtension(new ASN1ObjectIdentifier(oid));
-
- if (ext != null)
- {
- try
- {
- return ext.getExtnValue().getEncoded();
- }
- catch (Exception e)
- {
- throw new IllegalStateException("error parsing " + e.toString());
- }
- }
- }
-
- return null;
- }
-
- public Set getNonCriticalExtensionOIDs()
- {
- if (this.getVersion() == 3)
- {
- Set set = new HashSet();
- Extensions extensions = c.getTBSCertificate().getExtensions();
-
- if (extensions != null)
- {
- Enumeration e = extensions.oids();
-
- while (e.hasMoreElements())
- {
- ASN1ObjectIdentifier oid = (ASN1ObjectIdentifier)e.nextElement();
- Extension ext = extensions.getExtension(oid);
-
- if (!ext.isCritical())
- {
- set.add(oid.getId());
- }
- }
-
- return set;
- }
- }
-
- return null;
- }
-
- public boolean hasUnsupportedCriticalExtension()
- {
- if (this.getVersion() == 3)
- {
- Extensions extensions = c.getTBSCertificate().getExtensions();
-
- if (extensions != null)
- {
- Enumeration e = extensions.oids();
-
- while (e.hasMoreElements())
- {
- ASN1ObjectIdentifier oid = (ASN1ObjectIdentifier)e.nextElement();
- String oidId = oid.getId();
-
- if (oidId.equals(RFC3280CertPathUtilities.KEY_USAGE)
- || oidId.equals(RFC3280CertPathUtilities.CERTIFICATE_POLICIES)
- || oidId.equals(RFC3280CertPathUtilities.POLICY_MAPPINGS)
- || oidId.equals(RFC3280CertPathUtilities.INHIBIT_ANY_POLICY)
- || oidId.equals(RFC3280CertPathUtilities.CRL_DISTRIBUTION_POINTS)
- || oidId.equals(RFC3280CertPathUtilities.ISSUING_DISTRIBUTION_POINT)
- || oidId.equals(RFC3280CertPathUtilities.DELTA_CRL_INDICATOR)
- || oidId.equals(RFC3280CertPathUtilities.POLICY_CONSTRAINTS)
- || oidId.equals(RFC3280CertPathUtilities.BASIC_CONSTRAINTS)
- || oidId.equals(RFC3280CertPathUtilities.SUBJECT_ALTERNATIVE_NAME)
- || oidId.equals(RFC3280CertPathUtilities.NAME_CONSTRAINTS))
- {
- continue;
- }
-
- Extension ext = extensions.getExtension(oid);
-
- if (ext.isCritical())
- {
- return true;
- }
- }
- }
- }
-
- return false;
- }
-
- public PublicKey getPublicKey()
- {
- try
- {
- return BouncyCastleProvider.getPublicKey(c.getSubjectPublicKeyInfo());
- }
- catch (IOException e)
- {
- return null; // should never happen...
- }
- }
-
- public byte[] getEncoded()
- throws CertificateEncodingException
- {
- try
- {
- return c.getEncoded(ASN1Encoding.DER);
- }
- catch (IOException e)
- {
- throw new CertificateEncodingException(e.toString());
- }
- }
-
- public boolean equals(
- Object o)
- {
- if (o == this)
- {
- return true;
- }
-
- if (!(o instanceof Certificate))
- {
- return false;
- }
-
- Certificate other = (Certificate)o;
-
- try
- {
- byte[] b1 = this.getEncoded();
- byte[] b2 = other.getEncoded();
-
- return Arrays.areEqual(b1, b2);
- }
- catch (CertificateEncodingException e)
- {
- return false;
- }
- }
-
- public synchronized int hashCode()
- {
- if (!hashValueSet)
- {
- hashValue = calculateHashCode();
- hashValueSet = true;
- }
-
- return hashValue;
- }
-
- private int calculateHashCode()
- {
- try
- {
- int hashCode = 0;
- byte[] certData = this.getEncoded();
- for (int i = 1; i < certData.length; i++)
- {
- hashCode += certData[i] * i;
- }
- return hashCode;
- }
- catch (CertificateEncodingException e)
- {
- return 0;
- }
- }
-
- public void setBagAttribute(
- ASN1ObjectIdentifier oid,
- ASN1Encodable attribute)
- {
- attrCarrier.setBagAttribute(oid, attribute);
- }
-
- public ASN1Encodable getBagAttribute(
- ASN1ObjectIdentifier oid)
- {
- return attrCarrier.getBagAttribute(oid);
- }
-
- public Enumeration getBagAttributeKeys()
- {
- return attrCarrier.getBagAttributeKeys();
- }
-
- public String toString()
- {
- StringBuffer buf = new StringBuffer();
- String nl = System.getProperty("line.separator");
-
- buf.append(" [0] Version: ").append(this.getVersion()).append(nl);
- buf.append(" SerialNumber: ").append(this.getSerialNumber()).append(nl);
- buf.append(" IssuerDN: ").append(this.getIssuerDN()).append(nl);
- buf.append(" Start Date: ").append(this.getNotBefore()).append(nl);
- buf.append(" Final Date: ").append(this.getNotAfter()).append(nl);
- buf.append(" SubjectDN: ").append(this.getSubjectDN()).append(nl);
- buf.append(" Public Key: ").append(this.getPublicKey()).append(nl);
- buf.append(" Signature Algorithm: ").append(this.getSigAlgName()).append(nl);
-
- byte[] sig = this.getSignature();
-
- buf.append(" Signature: ").append(new String(Hex.encode(sig, 0, 20))).append(nl);
- for (int i = 20; i < sig.length; i += 20)
- {
- if (i < sig.length - 20)
- {
- buf.append(" ").append(new String(Hex.encode(sig, i, 20))).append(nl);
- }
- else
- {
- buf.append(" ").append(new String(Hex.encode(sig, i, sig.length - i))).append(nl);
- }
- }
-
- Extensions extensions = c.getTBSCertificate().getExtensions();
-
- if (extensions != null)
- {
- Enumeration e = extensions.oids();
-
- if (e.hasMoreElements())
- {
- buf.append(" Extensions: \n");
- }
-
- while (e.hasMoreElements())
- {
- ASN1ObjectIdentifier oid = (ASN1ObjectIdentifier)e.nextElement();
- Extension ext = extensions.getExtension(oid);
-
- if (ext.getExtnValue() != null)
- {
- byte[] octs = ext.getExtnValue().getOctets();
- ASN1InputStream dIn = new ASN1InputStream(octs);
- buf.append(" critical(").append(ext.isCritical()).append(") ");
- try
- {
- if (oid.equals(Extension.basicConstraints))
- {
- buf.append(BasicConstraints.getInstance(dIn.readObject())).append(nl);
- }
- else if (oid.equals(Extension.keyUsage))
- {
- buf.append(KeyUsage.getInstance(dIn.readObject())).append(nl);
- }
- else if (oid.equals(MiscObjectIdentifiers.netscapeCertType))
- {
- buf.append(new NetscapeCertType((DERBitString)dIn.readObject())).append(nl);
- }
- else if (oid.equals(MiscObjectIdentifiers.netscapeRevocationURL))
- {
- buf.append(new NetscapeRevocationURL((DERIA5String)dIn.readObject())).append(nl);
- }
- else if (oid.equals(MiscObjectIdentifiers.verisignCzagExtension))
- {
- buf.append(new VerisignCzagExtension((DERIA5String)dIn.readObject())).append(nl);
- }
- else
- {
- buf.append(oid.getId());
- buf.append(" value = ").append(ASN1Dump.dumpAsString(dIn.readObject())).append(nl);
- //buf.append(" value = ").append("*****").append(nl);
- }
- }
- catch (Exception ex)
- {
- buf.append(oid.getId());
- // buf.append(" value = ").append(new String(Hex.encode(ext.getExtnValue().getOctets()))).append(nl);
- buf.append(" value = ").append("*****").append(nl);
- }
- }
- else
- {
- buf.append(nl);
- }
- }
- }
-
- return buf.toString();
- }
-
- public final void verify(
- PublicKey key)
- throws CertificateException, NoSuchAlgorithmException,
- InvalidKeyException, NoSuchProviderException, SignatureException
- {
- Signature signature;
- String sigName = X509SignatureUtil.getSignatureName(c.getSignatureAlgorithm());
-
- try
- {
- signature = Signature.getInstance(sigName, BouncyCastleProvider.PROVIDER_NAME);
- }
- catch (Exception e)
- {
- signature = Signature.getInstance(sigName);
- }
-
- checkSignature(key, signature);
- }
-
- public final void verify(
- PublicKey key,
- String sigProvider)
- throws CertificateException, NoSuchAlgorithmException,
- InvalidKeyException, NoSuchProviderException, SignatureException
- {
- String sigName = X509SignatureUtil.getSignatureName(c.getSignatureAlgorithm());
- Signature signature = Signature.getInstance(sigName, sigProvider);
-
- checkSignature(key, signature);
- }
-
- private void checkSignature(
- PublicKey key,
- Signature signature)
- throws CertificateException, NoSuchAlgorithmException,
- SignatureException, InvalidKeyException
- {
- if (!isAlgIdEqual(c.getSignatureAlgorithm(), c.getTBSCertificate().getSignature()))
- {
- throw new CertificateException("signature algorithm in TBS cert not same as outer cert");
- }
-
- ASN1Encodable params = c.getSignatureAlgorithm().getParameters();
-
- // TODO This should go after the initVerify?
- X509SignatureUtil.setSignatureParameters(signature, params);
-
- signature.initVerify(key);
-
- signature.update(this.getTBSCertificate());
-
- if (!signature.verify(this.getSignature()))
- {
- throw new SignatureException("certificate does not verify with supplied key");
- }
- }
-
- private boolean isAlgIdEqual(AlgorithmIdentifier id1, AlgorithmIdentifier id2)
- {
- if (!id1.getAlgorithm().equals(id2.getAlgorithm()))
- {
- return false;
- }
-
- if (id1.getParameters() == null)
- {
- if (id2.getParameters() != null && !id2.getParameters().equals(DERNull.INSTANCE))
- {
- return false;
- }
-
- return true;
- }
-
- if (id2.getParameters() == null)
- {
- if (id1.getParameters() != null && !id1.getParameters().equals(DERNull.INSTANCE))
- {
- return false;
- }
-
- return true;
- }
-
- return id1.getParameters().equals(id2.getParameters());
- }
-
- private static Collection getAlternativeNames(byte[] extVal)
- throws CertificateParsingException
- {
- if (extVal == null)
- {
- return null;
- }
- try
- {
- Collection temp = new ArrayList();
- Enumeration it = ASN1Sequence.getInstance(extVal).getObjects();
- while (it.hasMoreElements())
- {
- GeneralName genName = GeneralName.getInstance(it.nextElement());
- List list = new ArrayList();
- list.add(Integers.valueOf(genName.getTagNo()));
- switch (genName.getTagNo())
- {
- case GeneralName.ediPartyName:
- case GeneralName.x400Address:
- case GeneralName.otherName:
- list.add(genName.getEncoded());
- break;
- case GeneralName.directoryName:
- list.add(X500Name.getInstance(RFC4519Style.INSTANCE, genName.getName()).toString());
- break;
- case GeneralName.dNSName:
- case GeneralName.rfc822Name:
- case GeneralName.uniformResourceIdentifier:
- list.add(((ASN1String)genName.getName()).getString());
- break;
- case GeneralName.registeredID:
- list.add(ASN1ObjectIdentifier.getInstance(genName.getName()).getId());
- break;
- case GeneralName.iPAddress:
- byte[] addrBytes = DEROctetString.getInstance(genName.getName()).getOctets();
- list.add(addrBytes);
- break;
- default:
- throw new IOException("Bad tag number: " + genName.getTagNo());
- }
-
- temp.add(list);
- }
- if (temp.size() == 0)
- {
- return null;
- }
- return Collections.unmodifiableCollection(temp);
- }
- catch (Exception e)
- {
- throw new CertificateParsingException(e.getMessage());
- }
- }
-}
diff --git a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jcajce/provider/asymmetric/x509/X509SignatureUtil.java b/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jcajce/provider/asymmetric/x509/X509SignatureUtil.java
deleted file mode 100644
index e74ced7f5..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jcajce/provider/asymmetric/x509/X509SignatureUtil.java
+++ /dev/null
@@ -1,125 +0,0 @@
-package org.spongycastle.jcajce.provider.asymmetric.x509;
-
-import java.security.InvalidKeyException;
-import java.security.NoSuchAlgorithmException;
-import java.security.Signature;
-import java.security.SignatureException;
-
-import org.spongycastle.asn1.ASN1Encodable;
-import org.spongycastle.asn1.ASN1Null;
-import org.spongycastle.asn1.DERNull;
-import org.spongycastle.asn1.ASN1ObjectIdentifier;
-import org.spongycastle.asn1.cryptopro.CryptoProObjectIdentifiers;
-import org.spongycastle.asn1.nist.NISTObjectIdentifiers;
-import org.spongycastle.asn1.oiw.OIWObjectIdentifiers;
-import org.spongycastle.asn1.pkcs.PKCSObjectIdentifiers;
-import org.spongycastle.asn1.pkcs.RSASSAPSSparams;
-import org.spongycastle.asn1.teletrust.TeleTrusTObjectIdentifiers;
-import org.spongycastle.asn1.x509.AlgorithmIdentifier;
-
-class X509SignatureUtil
-{
- private static final ASN1Null derNull = new DERNull();
-
- static void setSignatureParameters(
- Signature signature,
- ASN1Encodable params)
- throws NoSuchAlgorithmException, SignatureException, InvalidKeyException
- {
- if (params != null && !derNull.equals(params))
- {
- /*
- AlgorithmParameters sigParams = AlgorithmParameters.getInstance(signature.getAlgorithm(), signature.getProvider());
-
- try
- {
- sigParams.init(params.getDERObject().getDEREncoded());
- }
- catch (IOException e)
- {
- throw new SignatureException("IOException decoding parameters: " + e.getMessage());
- }
-
- try
- {
- signature.setParameters(sigParams.getParameterSpec(PSSParameterSpec.class));
- }
- catch (GeneralSecurityException e)
- {
- throw new SignatureException("Exception extracting parameters: " + e.getMessage());
- }
- */
- }
- }
-
- static String getSignatureName(
- AlgorithmIdentifier sigAlgId)
- {
- ASN1Encodable params = sigAlgId.getParameters();
-
- if (params != null && !derNull.equals(params))
- {
- if (sigAlgId.getObjectId().equals(PKCSObjectIdentifiers.id_RSASSA_PSS))
- {
- RSASSAPSSparams rsaParams = RSASSAPSSparams.getInstance(params);
-
- return getDigestAlgName(rsaParams.getHashAlgorithm().getObjectId()) + "withRSAandMGF1";
- }
- }
-
- return sigAlgId.getObjectId().getId();
- }
-
- /**
- * Return the digest algorithm using one of the standard JCA string
- * representations rather the the algorithm identifier (if possible).
- */
- private static String getDigestAlgName(
- ASN1ObjectIdentifier digestAlgOID)
- {
- if (PKCSObjectIdentifiers.md5.equals(digestAlgOID))
- {
- return "MD5";
- }
- else if (OIWObjectIdentifiers.idSHA1.equals(digestAlgOID))
- {
- return "SHA1";
- }
- else if (NISTObjectIdentifiers.id_sha224.equals(digestAlgOID))
- {
- return "SHA224";
- }
- else if (NISTObjectIdentifiers.id_sha256.equals(digestAlgOID))
- {
- return "SHA256";
- }
- else if (NISTObjectIdentifiers.id_sha384.equals(digestAlgOID))
- {
- return "SHA384";
- }
- else if (NISTObjectIdentifiers.id_sha512.equals(digestAlgOID))
- {
- return "SHA512";
- }
- else if (TeleTrusTObjectIdentifiers.ripemd128.equals(digestAlgOID))
- {
- return "RIPEMD128";
- }
- else if (TeleTrusTObjectIdentifiers.ripemd160.equals(digestAlgOID))
- {
- return "RIPEMD160";
- }
- else if (TeleTrusTObjectIdentifiers.ripemd256.equals(digestAlgOID))
- {
- return "RIPEMD256";
- }
- else if (CryptoProObjectIdentifiers.gostR3411.equals(digestAlgOID))
- {
- return "GOST3411";
- }
- else
- {
- return digestAlgOID.getId();
- }
- }
-}
diff --git a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jcajce/provider/keystore/pkcs12/PKCS12KeyStoreSpi.java b/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jcajce/provider/keystore/pkcs12/PKCS12KeyStoreSpi.java
deleted file mode 100644
index 9875bd140..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jcajce/provider/keystore/pkcs12/PKCS12KeyStoreSpi.java
+++ /dev/null
@@ -1,1636 +0,0 @@
-package org.spongycastle.jcajce.provider.keystore.pkcs12;
-
-import java.io.BufferedInputStream;
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.security.Key;
-import java.security.KeyStore;
-import java.security.KeyStoreException;
-import java.security.KeyStoreSpi;
-import java.security.NoSuchAlgorithmException;
-import java.security.Principal;
-import java.security.PrivateKey;
-import java.security.Provider;
-import java.security.PublicKey;
-import java.security.SecureRandom;
-import java.security.UnrecoverableKeyException;
-import java.security.cert.Certificate;
-import java.security.cert.CertificateEncodingException;
-import java.security.cert.CertificateException;
-import java.security.cert.CertificateFactory;
-import java.security.cert.X509Certificate;
-import java.util.Date;
-import java.util.Enumeration;
-import java.util.Hashtable;
-import java.util.Vector;
-
-import javax.crypto.Cipher;
-import javax.crypto.Mac;
-import javax.crypto.SecretKey;
-import javax.crypto.SecretKeyFactory;
-import javax.crypto.spec.IvParameterSpec;
-import javax.crypto.spec.PBEKeySpec;
-import javax.crypto.spec.PBEParameterSpec;
-
-import org.spongycastle.asn1.ASN1Encodable;
-import org.spongycastle.asn1.ASN1EncodableVector;
-import org.spongycastle.asn1.ASN1Encoding;
-import org.spongycastle.asn1.ASN1InputStream;
-import org.spongycastle.asn1.ASN1ObjectIdentifier;
-import org.spongycastle.asn1.ASN1OctetString;
-import org.spongycastle.asn1.ASN1Primitive;
-import org.spongycastle.asn1.ASN1Sequence;
-import org.spongycastle.asn1.ASN1Set;
-import org.spongycastle.asn1.BEROctetString;
-import org.spongycastle.asn1.BEROutputStream;
-import org.spongycastle.asn1.DERBMPString;
-import org.spongycastle.asn1.DERNull;
-import org.spongycastle.asn1.DEROctetString;
-import org.spongycastle.asn1.DEROutputStream;
-import org.spongycastle.asn1.DERSequence;
-import org.spongycastle.asn1.DERSet;
-import org.spongycastle.asn1.pkcs.AuthenticatedSafe;
-import org.spongycastle.asn1.pkcs.CertBag;
-import org.spongycastle.asn1.pkcs.ContentInfo;
-import org.spongycastle.asn1.pkcs.EncryptedData;
-import org.spongycastle.asn1.pkcs.MacData;
-import org.spongycastle.asn1.pkcs.PBES2Parameters;
-import org.spongycastle.asn1.pkcs.PBKDF2Params;
-import org.spongycastle.asn1.pkcs.PKCS12PBEParams;
-import org.spongycastle.asn1.pkcs.PKCSObjectIdentifiers;
-import org.spongycastle.asn1.pkcs.Pfx;
-import org.spongycastle.asn1.pkcs.SafeBag;
-import org.spongycastle.asn1.util.ASN1Dump;
-import org.spongycastle.asn1.x509.AlgorithmIdentifier;
-import org.spongycastle.asn1.x509.AuthorityKeyIdentifier;
-import org.spongycastle.asn1.x509.DigestInfo;
-import org.spongycastle.asn1.x509.Extension;
-import org.spongycastle.asn1.x509.SubjectKeyIdentifier;
-import org.spongycastle.asn1.x509.SubjectPublicKeyInfo;
-import org.spongycastle.asn1.x509.X509ObjectIdentifiers;
-import org.spongycastle.crypto.Digest;
-import org.spongycastle.crypto.digests.SHA1Digest;
-import org.spongycastle.jcajce.provider.symmetric.util.BCPBEKey;
-import org.spongycastle.jcajce.provider.util.SecretKeyUtil;
-import org.spongycastle.jce.interfaces.BCKeyStore;
-import org.spongycastle.jce.interfaces.PKCS12BagAttributeCarrier;
-import org.spongycastle.jce.provider.BouncyCastleProvider;
-import org.spongycastle.util.Arrays;
-import org.spongycastle.util.Strings;
-import org.spongycastle.util.encoders.Hex;
-
-public class PKCS12KeyStoreSpi
- extends KeyStoreSpi
- implements PKCSObjectIdentifiers, X509ObjectIdentifiers, BCKeyStore
-{
- private static final int SALT_SIZE = 20;
- private static final int MIN_ITERATIONS = 1024;
-
- private static final Provider bcProvider = new BouncyCastleProvider();
-
- private IgnoresCaseHashtable keys = new IgnoresCaseHashtable();
- private Hashtable localIds = new Hashtable();
- private IgnoresCaseHashtable certs = new IgnoresCaseHashtable();
- private Hashtable chainCerts = new Hashtable();
- private Hashtable keyCerts = new Hashtable();
-
- //
- // generic object types
- //
- static final int NULL = 0;
- static final int CERTIFICATE = 1;
- static final int KEY = 2;
- static final int SECRET = 3;
- static final int SEALED = 4;
-
- //
- // key types
- //
- static final int KEY_PRIVATE = 0;
- static final int KEY_PUBLIC = 1;
- static final int KEY_SECRET = 2;
-
- protected SecureRandom random = new SecureRandom();
-
- // use of final causes problems with JDK 1.2 compiler
- private CertificateFactory certFact;
- private ASN1ObjectIdentifier keyAlgorithm;
- private ASN1ObjectIdentifier certAlgorithm;
-
- private class CertId
- {
- byte[] id;
-
- CertId(
- PublicKey key)
- {
- this.id = createSubjectKeyId(key).getKeyIdentifier();
- }
-
- CertId(
- byte[] id)
- {
- this.id = id;
- }
-
- public int hashCode()
- {
- return Arrays.hashCode(id);
- }
-
- public boolean equals(
- Object o)
- {
- if (o == this)
- {
- return true;
- }
-
- if (!(o instanceof CertId))
- {
- return false;
- }
-
- CertId cId = (CertId)o;
-
- return Arrays.areEqual(id, cId.id);
- }
- }
-
- public PKCS12KeyStoreSpi(
- Provider provider,
- ASN1ObjectIdentifier keyAlgorithm,
- ASN1ObjectIdentifier certAlgorithm)
- {
- this.keyAlgorithm = keyAlgorithm;
- this.certAlgorithm = certAlgorithm;
-
- try
- {
- if (provider != null)
- {
- certFact = CertificateFactory.getInstance("X.509", provider.getName());
- }
- else
- {
- certFact = CertificateFactory.getInstance("X.509");
- }
- }
- catch (Exception e)
- {
- throw new IllegalArgumentException("can't create cert factory - " + e.toString());
- }
- }
-
- private SubjectKeyIdentifier createSubjectKeyId(
- PublicKey pubKey)
- {
- try
- {
- SubjectPublicKeyInfo info = SubjectPublicKeyInfo.getInstance(pubKey.getEncoded());
-
- return new SubjectKeyIdentifier(getDigest(info));
- }
- catch (Exception e)
- {
- throw new RuntimeException("error creating key");
- }
- }
-
- private static byte[] getDigest(SubjectPublicKeyInfo spki)
- {
- Digest digest = new SHA1Digest();
- byte[] resBuf = new byte[digest.getDigestSize()];
-
- byte[] bytes = spki.getPublicKeyData().getBytes();
- digest.update(bytes, 0, bytes.length);
- digest.doFinal(resBuf, 0);
- return resBuf;
- }
-
- public void setRandom(
- SecureRandom rand)
- {
- this.random = rand;
- }
-
- public Enumeration engineAliases()
- {
- Hashtable tab = new Hashtable();
-
- Enumeration e = certs.keys();
- while (e.hasMoreElements())
- {
- tab.put(e.nextElement(), "cert");
- }
-
- e = keys.keys();
- while (e.hasMoreElements())
- {
- String a = (String)e.nextElement();
- if (tab.get(a) == null)
- {
- tab.put(a, "key");
- }
- }
-
- return tab.keys();
- }
-
- public boolean engineContainsAlias(
- String alias)
- {
- return (certs.get(alias) != null || keys.get(alias) != null);
- }
-
- /**
- * this is not quite complete - we should follow up on the chain, a bit
- * tricky if a certificate appears in more than one chain...
- */
- public void engineDeleteEntry(
- String alias)
- throws KeyStoreException
- {
- Key k = (Key)keys.remove(alias);
-
- Certificate c = (Certificate)certs.remove(alias);
-
- if (c != null)
- {
- chainCerts.remove(new CertId(c.getPublicKey()));
- }
-
- if (k != null)
- {
- String id = (String)localIds.remove(alias);
- if (id != null)
- {
- c = (Certificate)keyCerts.remove(id);
- }
- if (c != null)
- {
- chainCerts.remove(new CertId(c.getPublicKey()));
- }
- }
- }
-
- /**
- * simply return the cert for the private key
- */
- public Certificate engineGetCertificate(
- String alias)
- {
- if (alias == null)
- {
- throw new IllegalArgumentException("null alias passed to getCertificate.");
- }
-
- Certificate c = (Certificate)certs.get(alias);
-
- //
- // look up the key table - and try the local key id
- //
- if (c == null)
- {
- String id = (String)localIds.get(alias);
- if (id != null)
- {
- c = (Certificate)keyCerts.get(id);
- }
- else
- {
- c = (Certificate)keyCerts.get(alias);
- }
- }
-
- return c;
- }
-
- public String engineGetCertificateAlias(
- Certificate cert)
- {
- Enumeration c = certs.elements();
- Enumeration k = certs.keys();
-
- while (c.hasMoreElements())
- {
- Certificate tc = (Certificate)c.nextElement();
- String ta = (String)k.nextElement();
-
- if (tc.equals(cert))
- {
- return ta;
- }
- }
-
- c = keyCerts.elements();
- k = keyCerts.keys();
-
- while (c.hasMoreElements())
- {
- Certificate tc = (Certificate)c.nextElement();
- String ta = (String)k.nextElement();
-
- if (tc.equals(cert))
- {
- return ta;
- }
- }
-
- return null;
- }
-
- public Certificate[] engineGetCertificateChain(
- String alias)
- {
- if (alias == null)
- {
- throw new IllegalArgumentException("null alias passed to getCertificateChain.");
- }
-
- if (!engineIsKeyEntry(alias))
- {
- return null;
- }
-
- Certificate c = engineGetCertificate(alias);
-
- if (c != null)
- {
- Vector cs = new Vector();
-
- while (c != null)
- {
- X509Certificate x509c = (X509Certificate)c;
- Certificate nextC = null;
-
- byte[] bytes = x509c.getExtensionValue(Extension.authorityKeyIdentifier.getId());
- if (bytes != null)
- {
- try
- {
- ASN1InputStream aIn = new ASN1InputStream(bytes);
-
- byte[] authBytes = ((ASN1OctetString)aIn.readObject()).getOctets();
- aIn = new ASN1InputStream(authBytes);
-
- AuthorityKeyIdentifier id = AuthorityKeyIdentifier.getInstance(aIn.readObject());
- if (id.getKeyIdentifier() != null)
- {
- nextC = (Certificate)chainCerts.get(new CertId(id.getKeyIdentifier()));
- }
-
- }
- catch (IOException e)
- {
- throw new RuntimeException(e.toString());
- }
- }
-
- if (nextC == null)
- {
- //
- // no authority key id, try the Issuer DN
- //
- Principal i = x509c.getIssuerDN();
- Principal s = x509c.getSubjectDN();
-
- if (!i.equals(s))
- {
- Enumeration e = chainCerts.keys();
-
- while (e.hasMoreElements())
- {
- X509Certificate crt = (X509Certificate)chainCerts.get(e.nextElement());
- Principal sub = crt.getSubjectDN();
- if (sub.equals(i))
- {
- try
- {
- x509c.verify(crt.getPublicKey());
- nextC = crt;
- break;
- }
- catch (Exception ex)
- {
- // continue
- }
- }
- }
- }
- }
-
- cs.addElement(c);
- if (nextC != c) // self signed - end of the chain
- {
- c = nextC;
- }
- else
- {
- c = null;
- }
- }
-
- Certificate[] certChain = new Certificate[cs.size()];
-
- for (int i = 0; i != certChain.length; i++)
- {
- certChain[i] = (Certificate)cs.elementAt(i);
- }
-
- return certChain;
- }
-
- return null;
- }
-
- public Date engineGetCreationDate(String alias)
- {
- if (alias == null)
- {
- throw new NullPointerException("alias == null");
- }
- if (keys.get(alias) == null && certs.get(alias) == null)
- {
- return null;
- }
- return new Date();
- }
-
- public Key engineGetKey(
- String alias,
- char[] password)
- throws NoSuchAlgorithmException, UnrecoverableKeyException
- {
- if (alias == null)
- {
- throw new IllegalArgumentException("null alias passed to getKey.");
- }
-
- return (Key)keys.get(alias);
- }
-
- public boolean engineIsCertificateEntry(
- String alias)
- {
- return (certs.get(alias) != null && keys.get(alias) == null);
- }
-
- public boolean engineIsKeyEntry(
- String alias)
- {
- return (keys.get(alias) != null);
- }
-
- public void engineSetCertificateEntry(
- String alias,
- Certificate cert)
- throws KeyStoreException
- {
- if (keys.get(alias) != null)
- {
- throw new KeyStoreException("There is a key entry with the name " + alias + ".");
- }
-
- certs.put(alias, cert);
- chainCerts.put(new CertId(cert.getPublicKey()), cert);
- }
-
- public void engineSetKeyEntry(
- String alias,
- byte[] key,
- Certificate[] chain)
- throws KeyStoreException
- {
- throw new RuntimeException("operation not supported");
- }
-
- public void engineSetKeyEntry(
- String alias,
- Key key,
- char[] password,
- Certificate[] chain)
- throws KeyStoreException
- {
- if (!(key instanceof PrivateKey))
- {
- throw new KeyStoreException("PKCS12 does not support non-PrivateKeys");
- }
-
- if ((key instanceof PrivateKey) && (chain == null))
- {
- throw new KeyStoreException("no certificate chain for private key");
- }
-
- if (keys.get(alias) != null)
- {
- engineDeleteEntry(alias);
- }
-
- keys.put(alias, key);
- if (chain != null)
- {
- certs.put(alias, chain[0]);
-
- for (int i = 0; i != chain.length; i++)
- {
- chainCerts.put(new CertId(chain[i].getPublicKey()), chain[i]);
- }
- }
- }
-
- public int engineSize()
- {
- Hashtable tab = new Hashtable();
-
- Enumeration e = certs.keys();
- while (e.hasMoreElements())
- {
- tab.put(e.nextElement(), "cert");
- }
-
- e = keys.keys();
- while (e.hasMoreElements())
- {
- String a = (String)e.nextElement();
- if (tab.get(a) == null)
- {
- tab.put(a, "key");
- }
- }
-
- return tab.size();
- }
-
- protected PrivateKey unwrapKey(
- AlgorithmIdentifier algId,
- byte[] data,
- char[] password,
- boolean wrongPKCS12Zero)
- throws IOException
- {
- ASN1ObjectIdentifier algorithm = algId.getAlgorithm();
- try
- {
- if (algorithm.on(PKCSObjectIdentifiers.pkcs_12PbeIds))
- {
- PKCS12PBEParams pbeParams = PKCS12PBEParams.getInstance(algId.getParameters());
-
- PBEKeySpec pbeSpec = new PBEKeySpec(password);
- PrivateKey out;
-
- SecretKeyFactory keyFact = SecretKeyFactory.getInstance(
- algorithm.getId(), bcProvider);
- PBEParameterSpec defParams = new PBEParameterSpec(
- pbeParams.getIV(),
- pbeParams.getIterations().intValue());
-
- SecretKey k = keyFact.generateSecret(pbeSpec);
-
- ((BCPBEKey)k).setTryWrongPKCS12Zero(wrongPKCS12Zero);
-
- Cipher cipher = Cipher.getInstance(algorithm.getId(), bcProvider);
-
- cipher.init(Cipher.UNWRAP_MODE, k, defParams);
-
- // we pass "" as the key algorithm type as it is unknown at this point
- return (PrivateKey)cipher.unwrap(data, "", Cipher.PRIVATE_KEY);
- }
- else if (algorithm.equals(PKCSObjectIdentifiers.id_PBES2))
- {
- PBES2Parameters alg = PBES2Parameters.getInstance(algId.getParameters());
- PBKDF2Params func = PBKDF2Params.getInstance(alg.getKeyDerivationFunc().getParameters());
-
- SecretKeyFactory keyFact = SecretKeyFactory.getInstance(alg.getKeyDerivationFunc().getAlgorithm().getId(), bcProvider);
-
- SecretKey k = keyFact.generateSecret(new PBEKeySpec(password, func.getSalt(), func.getIterationCount().intValue(), SecretKeyUtil.getKeySize(alg.getEncryptionScheme().getAlgorithm())));
-
- Cipher cipher = Cipher.getInstance(alg.getEncryptionScheme().getAlgorithm().getId(), bcProvider);
-
- cipher.init(Cipher.UNWRAP_MODE, k, new IvParameterSpec(ASN1OctetString.getInstance(alg.getEncryptionScheme().getParameters()).getOctets()));
-
- // we pass "" as the key algorithm type as it is unknown at this point
- return (PrivateKey)cipher.unwrap(data, "", Cipher.PRIVATE_KEY);
- }
- }
- catch (Exception e)
- {
- throw new IOException("exception unwrapping private key - " + e.toString());
- }
-
- throw new IOException("exception unwrapping private key - cannot recognise: " + algorithm);
- }
-
- protected byte[] wrapKey(
- String algorithm,
- Key key,
- PKCS12PBEParams pbeParams,
- char[] password)
- throws IOException
- {
- PBEKeySpec pbeSpec = new PBEKeySpec(password);
- byte[] out;
-
- try
- {
- SecretKeyFactory keyFact = SecretKeyFactory.getInstance(
- algorithm, bcProvider);
- PBEParameterSpec defParams = new PBEParameterSpec(
- pbeParams.getIV(),
- pbeParams.getIterations().intValue());
-
- Cipher cipher = Cipher.getInstance(algorithm, bcProvider);
-
- cipher.init(Cipher.WRAP_MODE, keyFact.generateSecret(pbeSpec), defParams);
-
- out = cipher.wrap(key);
- }
- catch (Exception e)
- {
- throw new IOException("exception encrypting data - " + e.toString());
- }
-
- return out;
- }
-
- protected byte[] cryptData(
- boolean forEncryption,
- AlgorithmIdentifier algId,
- char[] password,
- boolean wrongPKCS12Zero,
- byte[] data)
- throws IOException
- {
- String algorithm = algId.getAlgorithm().getId();
- PKCS12PBEParams pbeParams = PKCS12PBEParams.getInstance(algId.getParameters());
- PBEKeySpec pbeSpec = new PBEKeySpec(password);
-
- try
- {
- SecretKeyFactory keyFact = SecretKeyFactory.getInstance(algorithm, bcProvider);
- PBEParameterSpec defParams = new PBEParameterSpec(
- pbeParams.getIV(),
- pbeParams.getIterations().intValue());
- BCPBEKey key = (BCPBEKey)keyFact.generateSecret(pbeSpec);
-
- key.setTryWrongPKCS12Zero(wrongPKCS12Zero);
-
- Cipher cipher = Cipher.getInstance(algorithm, bcProvider);
- int mode = forEncryption ? Cipher.ENCRYPT_MODE : Cipher.DECRYPT_MODE;
- cipher.init(mode, key, defParams);
- return cipher.doFinal(data);
- }
- catch (Exception e)
- {
- throw new IOException("exception decrypting data - " + e.toString());
- }
- }
-
- public void engineLoad(
- InputStream stream,
- char[] password)
- throws IOException
- {
- if (stream == null) // just initialising
- {
- return;
- }
-
- if (password == null)
- {
- throw new NullPointerException("No password supplied for PKCS#12 KeyStore.");
- }
-
- BufferedInputStream bufIn = new BufferedInputStream(stream);
-
- bufIn.mark(10);
-
- int head = bufIn.read();
-
- if (head != 0x30)
- {
- throw new IOException("stream does not represent a PKCS12 key store");
- }
-
- bufIn.reset();
-
- ASN1InputStream bIn = new ASN1InputStream(bufIn);
- ASN1Sequence obj = (ASN1Sequence)bIn.readObject();
- Pfx bag = Pfx.getInstance(obj);
- ContentInfo info = bag.getAuthSafe();
- Vector chain = new Vector();
- boolean unmarkedKey = false;
- boolean wrongPKCS12Zero = false;
-
- if (bag.getMacData() != null) // check the mac code
- {
- MacData mData = bag.getMacData();
- DigestInfo dInfo = mData.getMac();
- AlgorithmIdentifier algId = dInfo.getAlgorithmId();
- byte[] salt = mData.getSalt();
- int itCount = mData.getIterationCount().intValue();
-
- byte[] data = ((ASN1OctetString)info.getContent()).getOctets();
-
- try
- {
- byte[] res = calculatePbeMac(algId.getAlgorithm(), salt, itCount, password, false, data);
- byte[] dig = dInfo.getDigest();
-
- if (!Arrays.constantTimeAreEqual(res, dig))
- {
- if (password.length > 0)
- {
- throw new IOException("PKCS12 key store mac invalid - wrong password or corrupted file.");
- }
-
- // Try with incorrect zero length password
- res = calculatePbeMac(algId.getAlgorithm(), salt, itCount, password, true, data);
-
- if (!Arrays.constantTimeAreEqual(res, dig))
- {
- throw new IOException("PKCS12 key store mac invalid - wrong password or corrupted file.");
- }
-
- wrongPKCS12Zero = true;
- }
- }
- catch (IOException e)
- {
- throw e;
- }
- catch (Exception e)
- {
- throw new IOException("error constructing MAC: " + e.toString());
- }
- }
-
- keys = new IgnoresCaseHashtable();
- localIds = new Hashtable();
-
- if (info.getContentType().equals(data))
- {
- bIn = new ASN1InputStream(((ASN1OctetString)info.getContent()).getOctets());
-
- AuthenticatedSafe authSafe = AuthenticatedSafe.getInstance(bIn.readObject());
- ContentInfo[] c = authSafe.getContentInfo();
-
- for (int i = 0; i != c.length; i++)
- {
- if (c[i].getContentType().equals(data))
- {
- ASN1InputStream dIn = new ASN1InputStream(((ASN1OctetString)c[i].getContent()).getOctets());
- ASN1Sequence seq = (ASN1Sequence)dIn.readObject();
-
- for (int j = 0; j != seq.size(); j++)
- {
- SafeBag b = SafeBag.getInstance(seq.getObjectAt(j));
- if (b.getBagId().equals(pkcs8ShroudedKeyBag))
- {
- org.spongycastle.asn1.pkcs.EncryptedPrivateKeyInfo eIn = org.spongycastle.asn1.pkcs.EncryptedPrivateKeyInfo.getInstance(b.getBagValue());
- PrivateKey privKey = unwrapKey(eIn.getEncryptionAlgorithm(), eIn.getEncryptedData(), password, wrongPKCS12Zero);
-
- //
- // set the attributes on the key
- //
- PKCS12BagAttributeCarrier bagAttr = (PKCS12BagAttributeCarrier)privKey;
- String alias = null;
- ASN1OctetString localId = null;
-
- if (b.getBagAttributes() != null)
- {
- Enumeration e = b.getBagAttributes().getObjects();
- while (e.hasMoreElements())
- {
- ASN1Sequence sq = (ASN1Sequence)e.nextElement();
- ASN1ObjectIdentifier aOid = (ASN1ObjectIdentifier)sq.getObjectAt(0);
- ASN1Set attrSet = (ASN1Set)sq.getObjectAt(1);
- ASN1Primitive attr = null;
-
- if (attrSet.size() > 0)
- {
- attr = (ASN1Primitive)attrSet.getObjectAt(0);
-
- ASN1Encodable existing = bagAttr.getBagAttribute(aOid);
- if (existing != null)
- {
- // OK, but the value has to be the same
- if (!existing.toASN1Primitive().equals(attr))
- {
- throw new IOException(
- "attempt to add existing attribute with different value");
- }
- }
- else
- {
- bagAttr.setBagAttribute(aOid, attr);
- }
- }
-
- if (aOid.equals(pkcs_9_at_friendlyName))
- {
- alias = ((DERBMPString)attr).getString();
- keys.put(alias, privKey);
- }
- else if (aOid.equals(pkcs_9_at_localKeyId))
- {
- localId = (ASN1OctetString)attr;
- }
- }
- }
-
- if (localId != null)
- {
- String name = new String(Hex.encode(localId.getOctets()));
-
- if (alias == null)
- {
- keys.put(name, privKey);
- }
- else
- {
- localIds.put(alias, name);
- }
- }
- else
- {
- unmarkedKey = true;
- keys.put("unmarked", privKey);
- }
- }
- else if (b.getBagId().equals(certBag))
- {
- chain.addElement(b);
- }
- else
- {
- System.out.println("extra in data " + b.getBagId());
- System.out.println(ASN1Dump.dumpAsString(b));
- }
- }
- }
- else if (c[i].getContentType().equals(encryptedData))
- {
- EncryptedData d = EncryptedData.getInstance(c[i].getContent());
- byte[] octets = cryptData(false, d.getEncryptionAlgorithm(),
- password, wrongPKCS12Zero, d.getContent().getOctets());
- ASN1Sequence seq = (ASN1Sequence)ASN1Primitive.fromByteArray(octets);
-
- for (int j = 0; j != seq.size(); j++)
- {
- SafeBag b = SafeBag.getInstance(seq.getObjectAt(j));
-
- if (b.getBagId().equals(certBag))
- {
- chain.addElement(b);
- }
- else if (b.getBagId().equals(pkcs8ShroudedKeyBag))
- {
- org.spongycastle.asn1.pkcs.EncryptedPrivateKeyInfo eIn = org.spongycastle.asn1.pkcs.EncryptedPrivateKeyInfo.getInstance(b.getBagValue());
- PrivateKey privKey = unwrapKey(eIn.getEncryptionAlgorithm(), eIn.getEncryptedData(), password, wrongPKCS12Zero);
-
- //
- // set the attributes on the key
- //
- PKCS12BagAttributeCarrier bagAttr = (PKCS12BagAttributeCarrier)privKey;
- String alias = null;
- ASN1OctetString localId = null;
-
- Enumeration e = b.getBagAttributes().getObjects();
- while (e.hasMoreElements())
- {
- ASN1Sequence sq = (ASN1Sequence)e.nextElement();
- ASN1ObjectIdentifier aOid = (ASN1ObjectIdentifier)sq.getObjectAt(0);
- ASN1Set attrSet = (ASN1Set)sq.getObjectAt(1);
- ASN1Primitive attr = null;
-
- if (attrSet.size() > 0)
- {
- attr = (ASN1Primitive)attrSet.getObjectAt(0);
-
- ASN1Encodable existing = bagAttr.getBagAttribute(aOid);
- if (existing != null)
- {
- // OK, but the value has to be the same
- if (!existing.toASN1Primitive().equals(attr))
- {
- throw new IOException(
- "attempt to add existing attribute with different value");
- }
- }
- else
- {
- bagAttr.setBagAttribute(aOid, attr);
- }
- }
-
- if (aOid.equals(pkcs_9_at_friendlyName))
- {
- alias = ((DERBMPString)attr).getString();
- keys.put(alias, privKey);
- }
- else if (aOid.equals(pkcs_9_at_localKeyId))
- {
- localId = (ASN1OctetString)attr;
- }
- }
-
- String name = new String(Hex.encode(localId.getOctets()));
-
- if (alias == null)
- {
- keys.put(name, privKey);
- }
- else
- {
- localIds.put(alias, name);
- }
- }
- else if (b.getBagId().equals(keyBag))
- {
- org.spongycastle.asn1.pkcs.PrivateKeyInfo kInfo = org.spongycastle.asn1.pkcs.PrivateKeyInfo.getInstance(b.getBagValue());
- PrivateKey privKey = BouncyCastleProvider.getPrivateKey(kInfo);
-
- //
- // set the attributes on the key
- //
- PKCS12BagAttributeCarrier bagAttr = (PKCS12BagAttributeCarrier)privKey;
- String alias = null;
- ASN1OctetString localId = null;
-
- Enumeration e = b.getBagAttributes().getObjects();
- while (e.hasMoreElements())
- {
- ASN1Sequence sq = (ASN1Sequence)e.nextElement();
- ASN1ObjectIdentifier aOid = (ASN1ObjectIdentifier)sq.getObjectAt(0);
- ASN1Set attrSet = (ASN1Set)sq.getObjectAt(1);
- ASN1Primitive attr = null;
-
- if (attrSet.size() > 0)
- {
- attr = (ASN1Primitive)attrSet.getObjectAt(0);
-
- ASN1Encodable existing = bagAttr.getBagAttribute(aOid);
- if (existing != null)
- {
- // OK, but the value has to be the same
- if (!existing.toASN1Primitive().equals(attr))
- {
- throw new IOException(
- "attempt to add existing attribute with different value");
- }
- }
- else
- {
- bagAttr.setBagAttribute(aOid, attr);
- }
- }
-
- if (aOid.equals(pkcs_9_at_friendlyName))
- {
- alias = ((DERBMPString)attr).getString();
- keys.put(alias, privKey);
- }
- else if (aOid.equals(pkcs_9_at_localKeyId))
- {
- localId = (ASN1OctetString)attr;
- }
- }
-
- String name = new String(Hex.encode(localId.getOctets()));
-
- if (alias == null)
- {
- keys.put(name, privKey);
- }
- else
- {
- localIds.put(alias, name);
- }
- }
- else
- {
- System.out.println("extra in encryptedData " + b.getBagId());
- System.out.println(ASN1Dump.dumpAsString(b));
- }
- }
- }
- else
- {
- System.out.println("extra " + c[i].getContentType().getId());
- System.out.println("extra " + ASN1Dump.dumpAsString(c[i].getContent()));
- }
- }
- }
-
- certs = new IgnoresCaseHashtable();
- chainCerts = new Hashtable();
- keyCerts = new Hashtable();
-
- for (int i = 0; i != chain.size(); i++)
- {
- SafeBag b = (SafeBag)chain.elementAt(i);
- CertBag cb = CertBag.getInstance(b.getBagValue());
-
- if (!cb.getCertId().equals(x509Certificate))
- {
- throw new RuntimeException("Unsupported certificate type: " + cb.getCertId());
- }
-
- Certificate cert;
-
- try
- {
- ByteArrayInputStream cIn = new ByteArrayInputStream(
- ((ASN1OctetString)cb.getCertValue()).getOctets());
- cert = certFact.generateCertificate(cIn);
- }
- catch (Exception e)
- {
- throw new RuntimeException(e.toString());
- }
-
- //
- // set the attributes
- //
- ASN1OctetString localId = null;
- String alias = null;
-
- if (b.getBagAttributes() != null)
- {
- Enumeration e = b.getBagAttributes().getObjects();
- while (e.hasMoreElements())
- {
- ASN1Sequence sq = (ASN1Sequence)e.nextElement();
- ASN1ObjectIdentifier oid = (ASN1ObjectIdentifier)sq.getObjectAt(0);
- ASN1Primitive attr = (ASN1Primitive)((ASN1Set)sq.getObjectAt(1)).getObjectAt(0);
- PKCS12BagAttributeCarrier bagAttr = null;
-
- if (cert instanceof PKCS12BagAttributeCarrier)
- {
- bagAttr = (PKCS12BagAttributeCarrier)cert;
-
- ASN1Encodable existing = bagAttr.getBagAttribute(oid);
- if (existing != null)
- {
- // OK, but the value has to be the same
- if (!existing.toASN1Primitive().equals(attr))
- {
- throw new IOException(
- "attempt to add existing attribute with different value");
- }
- }
- else
- {
- bagAttr.setBagAttribute(oid, attr);
- }
- }
-
- if (oid.equals(pkcs_9_at_friendlyName))
- {
- alias = ((DERBMPString)attr).getString();
- }
- else if (oid.equals(pkcs_9_at_localKeyId))
- {
- localId = (ASN1OctetString)attr;
- }
- }
- }
-
- chainCerts.put(new CertId(cert.getPublicKey()), cert);
-
- if (unmarkedKey)
- {
- if (keyCerts.isEmpty())
- {
- String name = new String(Hex.encode(createSubjectKeyId(cert.getPublicKey()).getKeyIdentifier()));
-
- keyCerts.put(name, cert);
- keys.put(name, keys.remove("unmarked"));
- }
- }
- else
- {
- //
- // the local key id needs to override the friendly name
- //
- if (localId != null)
- {
- String name = new String(Hex.encode(localId.getOctets()));
-
- keyCerts.put(name, cert);
- }
- if (alias != null)
- {
- certs.put(alias, cert);
- }
- }
- }
- }
-
- public void engineStore(OutputStream stream, char[] password)
- throws IOException
- {
- doStore(stream, password, false);
- }
-
- private void doStore(OutputStream stream, char[] password, boolean useDEREncoding)
- throws IOException
- {
- if (password == null)
- {
- throw new NullPointerException("No password supplied for PKCS#12 KeyStore.");
- }
-
- //
- // handle the key
- //
- ASN1EncodableVector keyS = new ASN1EncodableVector();
-
-
- Enumeration ks = keys.keys();
-
- while (ks.hasMoreElements())
- {
- byte[] kSalt = new byte[SALT_SIZE];
-
- random.nextBytes(kSalt);
-
- String name = (String)ks.nextElement();
- PrivateKey privKey = (PrivateKey)keys.get(name);
- PKCS12PBEParams kParams = new PKCS12PBEParams(kSalt, MIN_ITERATIONS);
- byte[] kBytes = wrapKey(keyAlgorithm.getId(), privKey, kParams, password);
- AlgorithmIdentifier kAlgId = new AlgorithmIdentifier(keyAlgorithm, kParams.toASN1Primitive());
- org.spongycastle.asn1.pkcs.EncryptedPrivateKeyInfo kInfo = new org.spongycastle.asn1.pkcs.EncryptedPrivateKeyInfo(kAlgId, kBytes);
- boolean attrSet = false;
- ASN1EncodableVector kName = new ASN1EncodableVector();
-
- if (privKey instanceof PKCS12BagAttributeCarrier)
- {
- PKCS12BagAttributeCarrier bagAttrs = (PKCS12BagAttributeCarrier)privKey;
- //
- // make sure we are using the local alias on store
- //
- DERBMPString nm = (DERBMPString)bagAttrs.getBagAttribute(pkcs_9_at_friendlyName);
- if (nm == null || !nm.getString().equals(name))
- {
- bagAttrs.setBagAttribute(pkcs_9_at_friendlyName, new DERBMPString(name));
- }
-
- //
- // make sure we have a local key-id
- //
- if (bagAttrs.getBagAttribute(pkcs_9_at_localKeyId) == null)
- {
- Certificate ct = engineGetCertificate(name);
-
- bagAttrs.setBagAttribute(pkcs_9_at_localKeyId, createSubjectKeyId(ct.getPublicKey()));
- }
-
- Enumeration e = bagAttrs.getBagAttributeKeys();
-
- while (e.hasMoreElements())
- {
- ASN1ObjectIdentifier oid = (ASN1ObjectIdentifier)e.nextElement();
- ASN1EncodableVector kSeq = new ASN1EncodableVector();
-
- kSeq.add(oid);
- kSeq.add(new DERSet(bagAttrs.getBagAttribute(oid)));
-
- attrSet = true;
-
- kName.add(new DERSequence(kSeq));
- }
- }
-
- if (!attrSet)
- {
- //
- // set a default friendly name (from the key id) and local id
- //
- ASN1EncodableVector kSeq = new ASN1EncodableVector();
- Certificate ct = engineGetCertificate(name);
-
- kSeq.add(pkcs_9_at_localKeyId);
- kSeq.add(new DERSet(createSubjectKeyId(ct.getPublicKey())));
-
- kName.add(new DERSequence(kSeq));
-
- kSeq = new ASN1EncodableVector();
-
- kSeq.add(pkcs_9_at_friendlyName);
- kSeq.add(new DERSet(new DERBMPString(name)));
-
- kName.add(new DERSequence(kSeq));
- }
-
- SafeBag kBag = new SafeBag(pkcs8ShroudedKeyBag, kInfo.toASN1Primitive(), new DERSet(kName));
- keyS.add(kBag);
- }
-
- byte[] keySEncoded = new DERSequence(keyS).getEncoded(ASN1Encoding.DER);
- BEROctetString keyString = new BEROctetString(keySEncoded);
-
- //
- // certificate processing
- //
- byte[] cSalt = new byte[SALT_SIZE];
-
- random.nextBytes(cSalt);
-
- ASN1EncodableVector certSeq = new ASN1EncodableVector();
- PKCS12PBEParams cParams = new PKCS12PBEParams(cSalt, MIN_ITERATIONS);
- AlgorithmIdentifier cAlgId = new AlgorithmIdentifier(certAlgorithm, cParams.toASN1Primitive());
- Hashtable doneCerts = new Hashtable();
-
- Enumeration cs = keys.keys();
- while (cs.hasMoreElements())
- {
- try
- {
- String name = (String)cs.nextElement();
- Certificate cert = engineGetCertificate(name);
- boolean cAttrSet = false;
- CertBag cBag = new CertBag(
- x509Certificate,
- new DEROctetString(cert.getEncoded()));
- ASN1EncodableVector fName = new ASN1EncodableVector();
-
- if (cert instanceof PKCS12BagAttributeCarrier)
- {
- PKCS12BagAttributeCarrier bagAttrs = (PKCS12BagAttributeCarrier)cert;
- //
- // make sure we are using the local alias on store
- //
- DERBMPString nm = (DERBMPString)bagAttrs.getBagAttribute(pkcs_9_at_friendlyName);
- if (nm == null || !nm.getString().equals(name))
- {
- bagAttrs.setBagAttribute(pkcs_9_at_friendlyName, new DERBMPString(name));
- }
-
- //
- // make sure we have a local key-id
- //
- if (bagAttrs.getBagAttribute(pkcs_9_at_localKeyId) == null)
- {
- bagAttrs.setBagAttribute(pkcs_9_at_localKeyId, createSubjectKeyId(cert.getPublicKey()));
- }
-
- Enumeration e = bagAttrs.getBagAttributeKeys();
-
- while (e.hasMoreElements())
- {
- ASN1ObjectIdentifier oid = (ASN1ObjectIdentifier)e.nextElement();
- ASN1EncodableVector fSeq = new ASN1EncodableVector();
-
- fSeq.add(oid);
- fSeq.add(new DERSet(bagAttrs.getBagAttribute(oid)));
- fName.add(new DERSequence(fSeq));
-
- cAttrSet = true;
- }
- }
-
- if (!cAttrSet)
- {
- ASN1EncodableVector fSeq = new ASN1EncodableVector();
-
- fSeq.add(pkcs_9_at_localKeyId);
- fSeq.add(new DERSet(createSubjectKeyId(cert.getPublicKey())));
- fName.add(new DERSequence(fSeq));
-
- fSeq = new ASN1EncodableVector();
-
- fSeq.add(pkcs_9_at_friendlyName);
- fSeq.add(new DERSet(new DERBMPString(name)));
-
- fName.add(new DERSequence(fSeq));
- }
-
- SafeBag sBag = new SafeBag(certBag, cBag.toASN1Primitive(), new DERSet(fName));
-
- certSeq.add(sBag);
-
- doneCerts.put(cert, cert);
- }
- catch (CertificateEncodingException e)
- {
- throw new IOException("Error encoding certificate: " + e.toString());
- }
- }
-
- cs = certs.keys();
- while (cs.hasMoreElements())
- {
- try
- {
- String certId = (String)cs.nextElement();
- Certificate cert = (Certificate)certs.get(certId);
- boolean cAttrSet = false;
-
- if (keys.get(certId) != null)
- {
- continue;
- }
-
- CertBag cBag = new CertBag(
- x509Certificate,
- new DEROctetString(cert.getEncoded()));
- ASN1EncodableVector fName = new ASN1EncodableVector();
-
- if (cert instanceof PKCS12BagAttributeCarrier)
- {
- PKCS12BagAttributeCarrier bagAttrs = (PKCS12BagAttributeCarrier)cert;
- //
- // make sure we are using the local alias on store
- //
- DERBMPString nm = (DERBMPString)bagAttrs.getBagAttribute(pkcs_9_at_friendlyName);
- if (nm == null || !nm.getString().equals(certId))
- {
- bagAttrs.setBagAttribute(pkcs_9_at_friendlyName, new DERBMPString(certId));
- }
-
- Enumeration e = bagAttrs.getBagAttributeKeys();
-
- while (e.hasMoreElements())
- {
- ASN1ObjectIdentifier oid = (ASN1ObjectIdentifier)e.nextElement();
-
- // a certificate not immediately linked to a key doesn't require
- // a localKeyID and will confuse some PKCS12 implementations.
- //
- // If we find one, we'll prune it out.
- if (oid.equals(PKCSObjectIdentifiers.pkcs_9_at_localKeyId))
- {
- continue;
- }
-
- ASN1EncodableVector fSeq = new ASN1EncodableVector();
-
- fSeq.add(oid);
- fSeq.add(new DERSet(bagAttrs.getBagAttribute(oid)));
- fName.add(new DERSequence(fSeq));
-
- cAttrSet = true;
- }
- }
-
- if (!cAttrSet)
- {
- ASN1EncodableVector fSeq = new ASN1EncodableVector();
-
- fSeq.add(pkcs_9_at_friendlyName);
- fSeq.add(new DERSet(new DERBMPString(certId)));
-
- fName.add(new DERSequence(fSeq));
- }
-
- SafeBag sBag = new SafeBag(certBag, cBag.toASN1Primitive(), new DERSet(fName));
-
- certSeq.add(sBag);
-
- doneCerts.put(cert, cert);
- }
- catch (CertificateEncodingException e)
- {
- throw new IOException("Error encoding certificate: " + e.toString());
- }
- }
-
- cs = chainCerts.keys();
- while (cs.hasMoreElements())
- {
- try
- {
- CertId certId = (CertId)cs.nextElement();
- Certificate cert = (Certificate)chainCerts.get(certId);
-
- if (doneCerts.get(cert) != null)
- {
- continue;
- }
-
- CertBag cBag = new CertBag(
- x509Certificate,
- new DEROctetString(cert.getEncoded()));
- ASN1EncodableVector fName = new ASN1EncodableVector();
-
- if (cert instanceof PKCS12BagAttributeCarrier)
- {
- PKCS12BagAttributeCarrier bagAttrs = (PKCS12BagAttributeCarrier)cert;
- Enumeration e = bagAttrs.getBagAttributeKeys();
-
- while (e.hasMoreElements())
- {
- ASN1ObjectIdentifier oid = (ASN1ObjectIdentifier)e.nextElement();
-
- // a certificate not immediately linked to a key doesn't require
- // a localKeyID and will confuse some PKCS12 implementations.
- //
- // If we find one, we'll prune it out.
- if (oid.equals(PKCSObjectIdentifiers.pkcs_9_at_localKeyId))
- {
- continue;
- }
-
- ASN1EncodableVector fSeq = new ASN1EncodableVector();
-
- fSeq.add(oid);
- fSeq.add(new DERSet(bagAttrs.getBagAttribute(oid)));
- fName.add(new DERSequence(fSeq));
- }
- }
-
- SafeBag sBag = new SafeBag(certBag, cBag.toASN1Primitive(), new DERSet(fName));
-
- certSeq.add(sBag);
- }
- catch (CertificateEncodingException e)
- {
- throw new IOException("Error encoding certificate: " + e.toString());
- }
- }
-
- byte[] certSeqEncoded = new DERSequence(certSeq).getEncoded(ASN1Encoding.DER);
- byte[] certBytes = cryptData(true, cAlgId, password, false, certSeqEncoded);
- EncryptedData cInfo = new EncryptedData(data, cAlgId, new BEROctetString(certBytes));
-
- ContentInfo[] info = new ContentInfo[]
- {
- new ContentInfo(data, keyString),
- new ContentInfo(encryptedData, cInfo.toASN1Primitive())
- };
-
- AuthenticatedSafe auth = new AuthenticatedSafe(info);
-
- ByteArrayOutputStream bOut = new ByteArrayOutputStream();
- DEROutputStream asn1Out;
- if (useDEREncoding)
- {
- asn1Out = new DEROutputStream(bOut);
- }
- else
- {
- asn1Out = new BEROutputStream(bOut);
- }
-
- asn1Out.writeObject(auth);
-
- byte[] pkg = bOut.toByteArray();
-
- ContentInfo mainInfo = new ContentInfo(data, new BEROctetString(pkg));
-
- //
- // create the mac
- //
- byte[] mSalt = new byte[20];
- int itCount = MIN_ITERATIONS;
-
- random.nextBytes(mSalt);
-
- byte[] data = ((ASN1OctetString)mainInfo.getContent()).getOctets();
-
- MacData mData;
-
- try
- {
- byte[] res = calculatePbeMac(id_SHA1, mSalt, itCount, password, false, data);
-
- AlgorithmIdentifier algId = new AlgorithmIdentifier(id_SHA1, DERNull.INSTANCE);
- DigestInfo dInfo = new DigestInfo(algId, res);
-
- mData = new MacData(dInfo, mSalt, itCount);
- }
- catch (Exception e)
- {
- throw new IOException("error constructing MAC: " + e.toString());
- }
-
- //
- // output the Pfx
- //
- Pfx pfx = new Pfx(mainInfo, mData);
-
- if (useDEREncoding)
- {
- asn1Out = new DEROutputStream(stream);
- }
- else
- {
- asn1Out = new BEROutputStream(stream);
- }
-
- asn1Out.writeObject(pfx);
- }
-
- private static byte[] calculatePbeMac(
- ASN1ObjectIdentifier oid,
- byte[] salt,
- int itCount,
- char[] password,
- boolean wrongPkcs12Zero,
- byte[] data)
- throws Exception
- {
- SecretKeyFactory keyFact = SecretKeyFactory.getInstance(oid.getId(), bcProvider);
- PBEParameterSpec defParams = new PBEParameterSpec(salt, itCount);
- PBEKeySpec pbeSpec = new PBEKeySpec(password);
- BCPBEKey key = (BCPBEKey)keyFact.generateSecret(pbeSpec);
- key.setTryWrongPKCS12Zero(wrongPkcs12Zero);
-
- Mac mac = Mac.getInstance(oid.getId(), bcProvider);
- mac.init(key, defParams);
- mac.update(data);
- return mac.doFinal();
- }
-
- public static class BCPKCS12KeyStore
- extends PKCS12KeyStoreSpi
- {
- public BCPKCS12KeyStore()
- {
- super(bcProvider, pbeWithSHAAnd3_KeyTripleDES_CBC, pbeWithSHAAnd40BitRC2_CBC);
- }
- }
-
- public static class BCPKCS12KeyStore3DES
- extends PKCS12KeyStoreSpi
- {
- public BCPKCS12KeyStore3DES()
- {
- super(bcProvider, pbeWithSHAAnd3_KeyTripleDES_CBC, pbeWithSHAAnd3_KeyTripleDES_CBC);
- }
- }
-
- public static class DefPKCS12KeyStore
- extends PKCS12KeyStoreSpi
- {
- public DefPKCS12KeyStore()
- {
- super(null, pbeWithSHAAnd3_KeyTripleDES_CBC, pbeWithSHAAnd40BitRC2_CBC);
- }
- }
-
- public static class DefPKCS12KeyStore3DES
- extends PKCS12KeyStoreSpi
- {
- public DefPKCS12KeyStore3DES()
- {
- super(null, pbeWithSHAAnd3_KeyTripleDES_CBC, pbeWithSHAAnd3_KeyTripleDES_CBC);
- }
- }
-
- private static class IgnoresCaseHashtable
- {
- private Hashtable orig = new Hashtable();
- private Hashtable keys = new Hashtable();
-
- public void put(String key, Object value)
- {
- String lower = (key == null) ? null : Strings.toLowerCase(key);
- String k = (String)keys.get(lower);
- if (k != null)
- {
- orig.remove(k);
- }
-
- keys.put(lower, key);
- orig.put(key, value);
- }
-
- public Enumeration keys()
- {
- return orig.keys();
- }
-
- public Object remove(String alias)
- {
- String k = (String)keys.remove(alias == null ? null : Strings.toLowerCase(alias));
- if (k == null)
- {
- return null;
- }
-
- return orig.remove(k);
- }
-
- public Object get(String alias)
- {
- String k = (String)keys.get(alias == null ? null : Strings.toLowerCase(alias));
- if (k == null)
- {
- return null;
- }
-
- return orig.get(k);
- }
-
- public Enumeration elements()
- {
- return orig.elements();
- }
- }
-}
diff --git a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher.java b/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher.java
deleted file mode 100644
index d188bf696..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jcajce/provider/symmetric/util/BaseBlockCipher.java
+++ /dev/null
@@ -1,1031 +0,0 @@
-package org.spongycastle.jcajce.provider.symmetric.util;
-
-import java.lang.reflect.Method;
-import java.security.AlgorithmParameters;
-import java.security.InvalidAlgorithmParameterException;
-import java.security.InvalidKeyException;
-import java.security.InvalidParameterException;
-import java.security.Key;
-import java.security.NoSuchAlgorithmException;
-import java.security.SecureRandom;
-import java.security.spec.AlgorithmParameterSpec;
-
-import javax.crypto.BadPaddingException;
-import javax.crypto.Cipher;
-import javax.crypto.IllegalBlockSizeException;
-import javax.crypto.NoSuchPaddingException;
-import javax.crypto.SecretKey;
-import javax.crypto.ShortBufferException;
-import javax.crypto.spec.IvParameterSpec;
-import javax.crypto.spec.PBEParameterSpec;
-import javax.crypto.spec.RC2ParameterSpec;
-import javax.crypto.spec.RC5ParameterSpec;
-
-import org.spongycastle.asn1.cms.GCMParameters;
-import org.spongycastle.crypto.BlockCipher;
-import org.spongycastle.crypto.BufferedBlockCipher;
-import org.spongycastle.crypto.CipherParameters;
-import org.spongycastle.crypto.DataLengthException;
-import org.spongycastle.crypto.InvalidCipherTextException;
-import org.spongycastle.crypto.OutputLengthException;
-import org.spongycastle.crypto.modes.AEADBlockCipher;
-import org.spongycastle.crypto.modes.CBCBlockCipher;
-import org.spongycastle.crypto.modes.CCMBlockCipher;
-import org.spongycastle.crypto.modes.CFBBlockCipher;
-import org.spongycastle.crypto.modes.CTSBlockCipher;
-import org.spongycastle.crypto.modes.EAXBlockCipher;
-import org.spongycastle.crypto.modes.GCFBBlockCipher;
-import org.spongycastle.crypto.modes.GCMBlockCipher;
-import org.spongycastle.crypto.modes.GOFBBlockCipher;
-import org.spongycastle.crypto.modes.OCBBlockCipher;
-import org.spongycastle.crypto.modes.OFBBlockCipher;
-import org.spongycastle.crypto.modes.OpenPGPCFBBlockCipher;
-import org.spongycastle.crypto.modes.PGPCFBBlockCipher;
-import org.spongycastle.crypto.modes.SICBlockCipher;
-import org.spongycastle.crypto.paddings.BlockCipherPadding;
-import org.spongycastle.crypto.paddings.ISO10126d2Padding;
-import org.spongycastle.crypto.paddings.ISO7816d4Padding;
-import org.spongycastle.crypto.paddings.PaddedBufferedBlockCipher;
-import org.spongycastle.crypto.paddings.TBCPadding;
-import org.spongycastle.crypto.paddings.X923Padding;
-import org.spongycastle.crypto.paddings.ZeroBytePadding;
-import org.spongycastle.crypto.params.AEADParameters;
-import org.spongycastle.crypto.params.KeyParameter;
-import org.spongycastle.crypto.params.ParametersWithIV;
-import org.spongycastle.crypto.params.ParametersWithRandom;
-import org.spongycastle.crypto.params.ParametersWithSBox;
-import org.spongycastle.crypto.params.RC2Parameters;
-import org.spongycastle.crypto.params.RC5Parameters;
-import org.spongycastle.jcajce.spec.GOST28147ParameterSpec;
-import org.spongycastle.jcajce.spec.RepeatedSecretKeySpec;
-import org.spongycastle.jce.provider.BouncyCastleProvider;
-import org.spongycastle.util.Strings;
-
-public class BaseBlockCipher
- extends BaseWrapCipher
- implements PBE
-{
- private static final Class gcmSpecClass = lookup("javax.crypto.spec.GCMParameterSpec");
-
- //
- // specs we can handle.
- //
- private Class[] availableSpecs =
- {
- RC2ParameterSpec.class,
- RC5ParameterSpec.class,
- IvParameterSpec.class,
- PBEParameterSpec.class,
- GOST28147ParameterSpec.class,
- gcmSpecClass
- };
-
- private BlockCipher baseEngine;
- private BlockCipherProvider engineProvider;
- private GenericBlockCipher cipher;
- private ParametersWithIV ivParam;
- private AEADParameters aeadParams;
-
- private int ivLength = 0;
-
- private boolean padded;
-
- private PBEParameterSpec pbeSpec = null;
- private String pbeAlgorithm = null;
-
- private String modeName = null;
-
- private static Class lookup(String className)
- {
- try
- {
- Class def = BaseBlockCipher.class.getClassLoader().loadClass(className);
-
- return def;
- }
- catch (Exception e)
- {
- return null;
- }
- }
-
- protected BaseBlockCipher(
- BlockCipher engine)
- {
- baseEngine = engine;
-
- cipher = new BufferedGenericBlockCipher(engine);
- }
-
- protected BaseBlockCipher(
- BlockCipherProvider provider)
- {
- baseEngine = provider.get();
- engineProvider = provider;
-
- cipher = new BufferedGenericBlockCipher(provider.get());
- }
-
- protected BaseBlockCipher(
- AEADBlockCipher engine)
- {
- baseEngine = engine.getUnderlyingCipher();
- ivLength = baseEngine.getBlockSize();
- cipher = new AEADGenericBlockCipher(engine);
- }
-
- protected BaseBlockCipher(
- org.spongycastle.crypto.BlockCipher engine,
- int ivLength)
- {
- baseEngine = engine;
-
- this.cipher = new BufferedGenericBlockCipher(engine);
- this.ivLength = ivLength / 8;
- }
-
- protected BaseBlockCipher(
- BufferedBlockCipher engine,
- int ivLength)
- {
- baseEngine = engine.getUnderlyingCipher();
-
- this.cipher = new BufferedGenericBlockCipher(engine);
- this.ivLength = ivLength / 8;
- }
-
- protected int engineGetBlockSize()
- {
- return baseEngine.getBlockSize();
- }
-
- protected byte[] engineGetIV()
- {
- return (ivParam != null) ? ivParam.getIV() : null;
- }
-
- protected int engineGetKeySize(
- Key key)
- {
- return key.getEncoded().length * 8;
- }
-
- protected int engineGetOutputSize(
- int inputLen)
- {
- return cipher.getOutputSize(inputLen);
- }
-
- protected AlgorithmParameters engineGetParameters()
- {
- if (engineParams == null)
- {
- if (pbeSpec != null)
- {
- try
- {
- engineParams = AlgorithmParameters.getInstance(pbeAlgorithm, BouncyCastleProvider.PROVIDER_NAME);
- engineParams.init(pbeSpec);
- }
- catch (Exception e)
- {
- return null;
- }
- }
- else if (ivParam != null)
- {
- String name = cipher.getUnderlyingCipher().getAlgorithmName();
-
- if (name.indexOf('/') >= 0)
- {
- name = name.substring(0, name.indexOf('/'));
- }
-
- try
- {
- engineParams = AlgorithmParameters.getInstance(name, BouncyCastleProvider.PROVIDER_NAME);
- engineParams.init(ivParam.getIV());
- }
- catch (Exception e)
- {
- throw new RuntimeException(e.toString());
- }
- }
- else if (aeadParams != null)
- {
- try
- {
- engineParams = AlgorithmParameters.getInstance("GCM", BouncyCastleProvider.PROVIDER_NAME);
- engineParams.init(new GCMParameters(aeadParams.getNonce(), aeadParams.getMacSize()).getEncoded());
- }
- catch (Exception e)
- {
- throw new RuntimeException(e.toString());
- }
- }
- }
-
- return engineParams;
- }
-
- protected void engineSetMode(
- String mode)
- throws NoSuchAlgorithmException
- {
- modeName = Strings.toUpperCase(mode);
-
- if (modeName.equals("ECB"))
- {
- ivLength = 0;
- cipher = new BufferedGenericBlockCipher(baseEngine);
- }
- else if (modeName.equals("CBC"))
- {
- ivLength = baseEngine.getBlockSize();
- cipher = new BufferedGenericBlockCipher(
- new CBCBlockCipher(baseEngine));
- }
- else if (modeName.startsWith("OFB"))
- {
- ivLength = baseEngine.getBlockSize();
- if (modeName.length() != 3)
- {
- int wordSize = Integer.parseInt(modeName.substring(3));
-
- cipher = new BufferedGenericBlockCipher(
- new OFBBlockCipher(baseEngine, wordSize));
- }
- else
- {
- cipher = new BufferedGenericBlockCipher(
- new OFBBlockCipher(baseEngine, 8 * baseEngine.getBlockSize()));
- }
- }
- else if (modeName.startsWith("CFB"))
- {
- ivLength = baseEngine.getBlockSize();
- if (modeName.length() != 3)
- {
- int wordSize = Integer.parseInt(modeName.substring(3));
-
- cipher = new BufferedGenericBlockCipher(
- new CFBBlockCipher(baseEngine, wordSize));
- }
- else
- {
- cipher = new BufferedGenericBlockCipher(
- new CFBBlockCipher(baseEngine, 8 * baseEngine.getBlockSize()));
- }
- }
- else if (modeName.startsWith("PGP"))
- {
- boolean inlineIV = modeName.equalsIgnoreCase("PGPCFBwithIV");
-
- ivLength = baseEngine.getBlockSize();
- cipher = new BufferedGenericBlockCipher(
- new PGPCFBBlockCipher(baseEngine, inlineIV));
- }
- else if (modeName.equalsIgnoreCase("OpenPGPCFB"))
- {
- ivLength = 0;
- cipher = new BufferedGenericBlockCipher(
- new OpenPGPCFBBlockCipher(baseEngine));
- }
- else if (modeName.startsWith("SIC"))
- {
- ivLength = baseEngine.getBlockSize();
- if (ivLength < 16)
- {
- throw new IllegalArgumentException("Warning: SIC-Mode can become a twotime-pad if the blocksize of the cipher is too small. Use a cipher with a block size of at least 128 bits (e.g. AES)");
- }
- cipher = new BufferedGenericBlockCipher(new BufferedBlockCipher(
- new SICBlockCipher(baseEngine)));
- }
- else if (modeName.startsWith("CTR"))
- {
- ivLength = baseEngine.getBlockSize();
- cipher = new BufferedGenericBlockCipher(new BufferedBlockCipher(
- new SICBlockCipher(baseEngine)));
- }
- else if (modeName.startsWith("GOFB"))
- {
- ivLength = baseEngine.getBlockSize();
- cipher = new BufferedGenericBlockCipher(new BufferedBlockCipher(
- new GOFBBlockCipher(baseEngine)));
- }
- else if (modeName.startsWith("GCFB"))
- {
- ivLength = baseEngine.getBlockSize();
- cipher = new BufferedGenericBlockCipher(new BufferedBlockCipher(
- new GCFBBlockCipher(baseEngine)));
- }
- else if (modeName.startsWith("CTS"))
- {
- ivLength = baseEngine.getBlockSize();
- cipher = new BufferedGenericBlockCipher(new CTSBlockCipher(new CBCBlockCipher(baseEngine)));
- }
- else if (modeName.startsWith("CCM"))
- {
- ivLength = 13; // CCM nonce 7..13 bytes
- cipher = new AEADGenericBlockCipher(new CCMBlockCipher(baseEngine));
- }
- else if (modeName.startsWith("OCB"))
- {
- if (engineProvider != null)
- {
- /*
- * RFC 7253 4.2. Nonce is a string of no more than 120 bits
- */
- ivLength = 15;
- cipher = new AEADGenericBlockCipher(new OCBBlockCipher(baseEngine, engineProvider.get()));
- }
- else
- {
- throw new NoSuchAlgorithmException("can't support mode " + mode);
- }
- }
- else if (modeName.startsWith("EAX"))
- {
- ivLength = baseEngine.getBlockSize();
- cipher = new AEADGenericBlockCipher(new EAXBlockCipher(baseEngine));
- }
- else if (modeName.startsWith("GCM"))
- {
- ivLength = baseEngine.getBlockSize();
- cipher = new AEADGenericBlockCipher(new GCMBlockCipher(baseEngine));
- }
- else
- {
- throw new NoSuchAlgorithmException("can't support mode " + mode);
- }
- }
-
- protected void engineSetPadding(
- String padding)
- throws NoSuchPaddingException
- {
- String paddingName = Strings.toUpperCase(padding);
-
- if (paddingName.equals("NOPADDING"))
- {
- if (cipher.wrapOnNoPadding())
- {
- cipher = new BufferedGenericBlockCipher(new BufferedBlockCipher(cipher.getUnderlyingCipher()));
- }
- }
- else if (paddingName.equals("WITHCTS"))
- {
- cipher = new BufferedGenericBlockCipher(new CTSBlockCipher(cipher.getUnderlyingCipher()));
- }
- else
- {
- padded = true;
-
- if (isAEADModeName(modeName))
- {
- throw new NoSuchPaddingException("Only NoPadding can be used with AEAD modes.");
- }
- else if (paddingName.equals("PKCS5PADDING") || paddingName.equals("PKCS7PADDING"))
- {
- cipher = new BufferedGenericBlockCipher(cipher.getUnderlyingCipher());
- }
- else if (paddingName.equals("ZEROBYTEPADDING"))
- {
- cipher = new BufferedGenericBlockCipher(cipher.getUnderlyingCipher(), new ZeroBytePadding());
- }
- else if (paddingName.equals("ISO10126PADDING") || paddingName.equals("ISO10126-2PADDING"))
- {
- cipher = new BufferedGenericBlockCipher(cipher.getUnderlyingCipher(), new ISO10126d2Padding());
- }
- else if (paddingName.equals("X9.23PADDING") || paddingName.equals("X923PADDING"))
- {
- cipher = new BufferedGenericBlockCipher(cipher.getUnderlyingCipher(), new X923Padding());
- }
- else if (paddingName.equals("ISO7816-4PADDING") || paddingName.equals("ISO9797-1PADDING"))
- {
- cipher = new BufferedGenericBlockCipher(cipher.getUnderlyingCipher(), new ISO7816d4Padding());
- }
- else if (paddingName.equals("TBCPADDING"))
- {
- cipher = new BufferedGenericBlockCipher(cipher.getUnderlyingCipher(), new TBCPadding());
- }
- else
- {
- throw new NoSuchPaddingException("Padding " + padding + " unknown.");
- }
- }
- }
-
- protected void engineInit(
- int opmode,
- Key key,
- AlgorithmParameterSpec params,
- SecureRandom random)
- throws InvalidKeyException, InvalidAlgorithmParameterException
- {
- CipherParameters param;
-
- this.pbeSpec = null;
- this.pbeAlgorithm = null;
- this.engineParams = null;
- this.aeadParams = null;
-
- //
- // basic key check
- //
- if (!(key instanceof SecretKey))
- {
- throw new InvalidKeyException("Key for algorithm " + key.getAlgorithm() + " not suitable for symmetric enryption.");
- }
-
- //
- // for RC5-64 we must have some default parameters
- //
- if (params == null && baseEngine.getAlgorithmName().startsWith("RC5-64"))
- {
- throw new InvalidAlgorithmParameterException("RC5 requires an RC5ParametersSpec to be passed in.");
- }
-
- //
- // a note on iv's - if ivLength is zero the IV gets ignored (we don't use it).
- //
- if (key instanceof BCPBEKey)
- {
- BCPBEKey k = (BCPBEKey)key;
-
- if (k.getOID() != null)
- {
- pbeAlgorithm = k.getOID().getId();
- }
- else
- {
- pbeAlgorithm = k.getAlgorithm();
- }
-
- if (k.getParam() != null)
- {
- param = k.getParam();
- if (params instanceof IvParameterSpec)
- {
- IvParameterSpec iv = (IvParameterSpec)params;
-
- param = new ParametersWithIV(param, iv.getIV());
- }
- else if (params instanceof GOST28147ParameterSpec)
- {
- // need to pick up IV and SBox.
- GOST28147ParameterSpec gost28147Param = (GOST28147ParameterSpec)params;
-
- param = new ParametersWithSBox(param, gost28147Param.getSbox());
-
- if (gost28147Param.getIV() != null && ivLength != 0)
- {
- param = new ParametersWithIV(param, gost28147Param.getIV());
- }
- }
- }
- else if (params instanceof PBEParameterSpec)
- {
- pbeSpec = (PBEParameterSpec)params;
- param = PBE.Util.makePBEParameters(k, params, cipher.getUnderlyingCipher().getAlgorithmName());
- }
- else
- {
- throw new InvalidAlgorithmParameterException("PBE requires PBE parameters to be set.");
- }
-
- if (param instanceof ParametersWithIV)
- {
- ivParam = (ParametersWithIV)param;
- }
- }
- else if (params == null)
- {
- param = new KeyParameter(key.getEncoded());
- }
- else if (params instanceof IvParameterSpec)
- {
- if (ivLength != 0)
- {
- IvParameterSpec p = (IvParameterSpec)params;
-
- if (p.getIV().length != ivLength && !isAEADModeName(modeName))
- {
- throw new InvalidAlgorithmParameterException("IV must be " + ivLength + " bytes long.");
- }
-
- if (key instanceof RepeatedSecretKeySpec)
- {
- param = new ParametersWithIV(null, p.getIV());
- ivParam = (ParametersWithIV)param;
- }
- else
- {
- param = new ParametersWithIV(new KeyParameter(key.getEncoded()), p.getIV());
- ivParam = (ParametersWithIV)param;
- }
- }
- else
- {
- if (modeName != null && modeName.equals("ECB"))
- {
- throw new InvalidAlgorithmParameterException("ECB mode does not use an IV");
- }
-
- param = new KeyParameter(key.getEncoded());
- }
- }
- else if (params instanceof GOST28147ParameterSpec)
- {
- GOST28147ParameterSpec gost28147Param = (GOST28147ParameterSpec)params;
-
- param = new ParametersWithSBox(
- new KeyParameter(key.getEncoded()), ((GOST28147ParameterSpec)params).getSbox());
-
- if (gost28147Param.getIV() != null && ivLength != 0)
- {
- param = new ParametersWithIV(param, gost28147Param.getIV());
- ivParam = (ParametersWithIV)param;
- }
- }
- else if (params instanceof RC2ParameterSpec)
- {
- RC2ParameterSpec rc2Param = (RC2ParameterSpec)params;
-
- param = new RC2Parameters(key.getEncoded(), ((RC2ParameterSpec)params).getEffectiveKeyBits());
-
- if (rc2Param.getIV() != null && ivLength != 0)
- {
- param = new ParametersWithIV(param, rc2Param.getIV());
- ivParam = (ParametersWithIV)param;
- }
- }
- else if (params instanceof RC5ParameterSpec)
- {
- RC5ParameterSpec rc5Param = (RC5ParameterSpec)params;
-
- param = new RC5Parameters(key.getEncoded(), ((RC5ParameterSpec)params).getRounds());
- if (baseEngine.getAlgorithmName().startsWith("RC5"))
- {
- if (baseEngine.getAlgorithmName().equals("RC5-32"))
- {
- if (rc5Param.getWordSize() != 32)
- {
- throw new InvalidAlgorithmParameterException("RC5 already set up for a word size of 32 not " + rc5Param.getWordSize() + ".");
- }
- }
- else if (baseEngine.getAlgorithmName().equals("RC5-64"))
- {
- if (rc5Param.getWordSize() != 64)
- {
- throw new InvalidAlgorithmParameterException("RC5 already set up for a word size of 64 not " + rc5Param.getWordSize() + ".");
- }
- }
- }
- else
- {
- throw new InvalidAlgorithmParameterException("RC5 parameters passed to a cipher that is not RC5.");
- }
- if ((rc5Param.getIV() != null) && (ivLength != 0))
- {
- param = new ParametersWithIV(param, rc5Param.getIV());
- ivParam = (ParametersWithIV)param;
- }
- }
- else if (gcmSpecClass != null && gcmSpecClass.isInstance(params))
- {
- if (!isAEADModeName(modeName) && !(cipher instanceof AEADGenericBlockCipher))
- {
- throw new InvalidAlgorithmParameterException("GCMParameterSpec can only be used with AEAD modes.");
- }
-
- try
- {
- Method tLen = gcmSpecClass.getDeclaredMethod("getTLen", new Class[0]);
- Method iv= gcmSpecClass.getDeclaredMethod("getIV", new Class[0]);
-
- if (key instanceof RepeatedSecretKeySpec)
- {
- param = aeadParams = new AEADParameters(null, ((Integer)tLen.invoke(params, new Object[0])).intValue(), (byte[])iv.invoke(params, new Object[0]));
- }
- else
- {
- param = aeadParams = new AEADParameters(new KeyParameter(key.getEncoded()), ((Integer)tLen.invoke(params, new Object[0])).intValue(), (byte[])iv.invoke(params, new Object[0]));
- }
- }
- catch (Exception e)
- {
- throw new InvalidAlgorithmParameterException("Cannot process GCMParameterSpec.");
- }
- }
- else
- {
- throw new InvalidAlgorithmParameterException("unknown parameter type.");
- }
-
- if ((ivLength != 0) && !(param instanceof ParametersWithIV) && !(param instanceof AEADParameters))
- {
- SecureRandom ivRandom = random;
-
- if (ivRandom == null)
- {
- ivRandom = new SecureRandom();
- }
-
- if ((opmode == Cipher.ENCRYPT_MODE) || (opmode == Cipher.WRAP_MODE))
- {
- byte[] iv = new byte[ivLength];
-
- ivRandom.nextBytes(iv);
- param = new ParametersWithIV(param, iv);
- ivParam = (ParametersWithIV)param;
- }
- else if (cipher.getUnderlyingCipher().getAlgorithmName().indexOf("PGPCFB") < 0)
- {
- throw new InvalidAlgorithmParameterException("no IV set when one expected");
- }
- }
-
- if (random != null && padded)
- {
- param = new ParametersWithRandom(param, random);
- }
-
- try
- {
- switch (opmode)
- {
- case Cipher.ENCRYPT_MODE:
- case Cipher.WRAP_MODE:
- cipher.init(true, param);
- break;
- case Cipher.DECRYPT_MODE:
- case Cipher.UNWRAP_MODE:
- cipher.init(false, param);
- break;
- default:
- throw new InvalidParameterException("unknown opmode " + opmode + " passed");
- }
- }
- catch (Exception e)
- {
- throw new InvalidKeyException(e.getMessage());
- }
- }
-
- protected void engineInit(
- int opmode,
- Key key,
- AlgorithmParameters params,
- SecureRandom random)
- throws InvalidKeyException, InvalidAlgorithmParameterException
- {
- AlgorithmParameterSpec paramSpec = null;
-
- if (params != null)
- {
- for (int i = 0; i != availableSpecs.length; i++)
- {
- if (availableSpecs[i] == null)
- {
- continue;
- }
-
- try
- {
- paramSpec = params.getParameterSpec(availableSpecs[i]);
- break;
- }
- catch (Exception e)
- {
- // try again if possible
- }
- }
-
- if (paramSpec == null)
- {
- throw new InvalidAlgorithmParameterException("can't handle parameter " + params.toString());
- }
- }
-
- engineInit(opmode, key, paramSpec, random);
-
- engineParams = params;
- }
-
- protected void engineInit(
- int opmode,
- Key key,
- SecureRandom random)
- throws InvalidKeyException
- {
- try
- {
- engineInit(opmode, key, (AlgorithmParameterSpec)null, random);
- }
- catch (InvalidAlgorithmParameterException e)
- {
- throw new InvalidKeyException(e.getMessage());
- }
- }
-
- protected void engineUpdateAAD(byte[] input, int offset, int length)
- {
- cipher.updateAAD(input, offset, length);
- }
-
- protected byte[] engineUpdate(
- byte[] input,
- int inputOffset,
- int inputLen)
- {
- int length = cipher.getUpdateOutputSize(inputLen);
-
- if (length > 0)
- {
- byte[] out = new byte[length];
-
- int len = cipher.processBytes(input, inputOffset, inputLen, out, 0);
-
- if (len == 0)
- {
- return null;
- }
- else if (len != out.length)
- {
- byte[] tmp = new byte[len];
-
- System.arraycopy(out, 0, tmp, 0, len);
-
- return tmp;
- }
-
- return out;
- }
-
- cipher.processBytes(input, inputOffset, inputLen, null, 0);
-
- return null;
- }
-
- protected int engineUpdate(
- byte[] input,
- int inputOffset,
- int inputLen,
- byte[] output,
- int outputOffset)
- throws ShortBufferException
- {
- try
- {
- return cipher.processBytes(input, inputOffset, inputLen, output, outputOffset);
- }
- catch (DataLengthException e)
- {
- throw new ShortBufferException(e.getMessage());
- }
- }
-
- protected byte[] engineDoFinal(
- byte[] input,
- int inputOffset,
- int inputLen)
- throws IllegalBlockSizeException, BadPaddingException
- {
- int len = 0;
- byte[] tmp = new byte[engineGetOutputSize(inputLen)];
-
- if (inputLen != 0)
- {
- len = cipher.processBytes(input, inputOffset, inputLen, tmp, 0);
- }
-
- try
- {
- len += cipher.doFinal(tmp, len);
- }
- catch (DataLengthException e)
- {
- throw new IllegalBlockSizeException(e.getMessage());
- }
- catch (InvalidCipherTextException e)
- {
- throw new BadPaddingException(e.getMessage());
- }
-
- if (len == tmp.length)
- {
- return tmp;
- }
-
- byte[] out = new byte[len];
-
- System.arraycopy(tmp, 0, out, 0, len);
-
- return out;
- }
-
- protected int engineDoFinal(
- byte[] input,
- int inputOffset,
- int inputLen,
- byte[] output,
- int outputOffset)
- throws IllegalBlockSizeException, BadPaddingException, ShortBufferException
- {
- try
- {
- int len = 0;
-
- if (inputLen != 0)
- {
- len = cipher.processBytes(input, inputOffset, inputLen, output, outputOffset);
- }
-
- return (len + cipher.doFinal(output, outputOffset + len));
- }
- catch (OutputLengthException e)
- {
- throw new ShortBufferException(e.getMessage());
- }
- catch (DataLengthException e)
- {
- throw new IllegalBlockSizeException(e.getMessage());
- }
- catch (InvalidCipherTextException e)
- {
- throw new BadPaddingException(e.getMessage());
- }
- }
-
- private boolean isAEADModeName(
- String modeName)
- {
- return "CCM".equals(modeName) || "EAX".equals(modeName) || "GCM".equals(modeName) || "OCB".equals(modeName);
- }
-
- /*
- * The ciphers that inherit from us.
- */
-
- static private interface GenericBlockCipher
- {
- public void init(boolean forEncryption, CipherParameters params)
- throws IllegalArgumentException;
-
- public boolean wrapOnNoPadding();
-
- public String getAlgorithmName();
-
- public org.spongycastle.crypto.BlockCipher getUnderlyingCipher();
-
- public int getOutputSize(int len);
-
- public int getUpdateOutputSize(int len);
-
- public void updateAAD(byte[] input, int offset, int length);
-
- public int processByte(byte in, byte[] out, int outOff)
- throws DataLengthException;
-
- public int processBytes(byte[] in, int inOff, int len, byte[] out, int outOff)
- throws DataLengthException;
-
- public int doFinal(byte[] out, int outOff)
- throws IllegalStateException, InvalidCipherTextException;
- }
-
- private static class BufferedGenericBlockCipher
- implements GenericBlockCipher
- {
- private BufferedBlockCipher cipher;
-
- BufferedGenericBlockCipher(BufferedBlockCipher cipher)
- {
- this.cipher = cipher;
- }
-
- BufferedGenericBlockCipher(org.spongycastle.crypto.BlockCipher cipher)
- {
- this.cipher = new PaddedBufferedBlockCipher(cipher);
- }
-
- BufferedGenericBlockCipher(org.spongycastle.crypto.BlockCipher cipher, BlockCipherPadding padding)
- {
- this.cipher = new PaddedBufferedBlockCipher(cipher, padding);
- }
-
- public void init(boolean forEncryption, CipherParameters params)
- throws IllegalArgumentException
- {
- cipher.init(forEncryption, params);
- }
-
- public boolean wrapOnNoPadding()
- {
- return !(cipher instanceof CTSBlockCipher);
- }
-
- public String getAlgorithmName()
- {
- return cipher.getUnderlyingCipher().getAlgorithmName();
- }
-
- public org.spongycastle.crypto.BlockCipher getUnderlyingCipher()
- {
- return cipher.getUnderlyingCipher();
- }
-
- public int getOutputSize(int len)
- {
- return cipher.getOutputSize(len);
- }
-
- public int getUpdateOutputSize(int len)
- {
- return cipher.getUpdateOutputSize(len);
- }
-
- public void updateAAD(byte[] input, int offset, int length)
- {
- throw new UnsupportedOperationException("AAD is not supported in the current mode.");
- }
-
- public int processByte(byte in, byte[] out, int outOff) throws DataLengthException
- {
- return cipher.processByte(in, out, outOff);
- }
-
- public int processBytes(byte[] in, int inOff, int len, byte[] out, int outOff) throws DataLengthException
- {
- return cipher.processBytes(in, inOff, len, out, outOff);
- }
-
- public int doFinal(byte[] out, int outOff) throws IllegalStateException, InvalidCipherTextException
- {
- return cipher.doFinal(out, outOff);
- }
- }
-
- private static class AEADGenericBlockCipher
- implements GenericBlockCipher
- {
- private AEADBlockCipher cipher;
-
- AEADGenericBlockCipher(AEADBlockCipher cipher)
- {
- this.cipher = cipher;
- }
-
- public void init(boolean forEncryption, CipherParameters params)
- throws IllegalArgumentException
- {
- cipher.init(forEncryption, params);
- }
-
- public String getAlgorithmName()
- {
- return cipher.getUnderlyingCipher().getAlgorithmName();
- }
-
- public boolean wrapOnNoPadding()
- {
- return false;
- }
-
- public org.spongycastle.crypto.BlockCipher getUnderlyingCipher()
- {
- return cipher.getUnderlyingCipher();
- }
-
- public int getOutputSize(int len)
- {
- return cipher.getOutputSize(len);
- }
-
- public int getUpdateOutputSize(int len)
- {
- return cipher.getUpdateOutputSize(len);
- }
-
- public void updateAAD(byte[] input, int offset, int length)
- {
- cipher.processAADBytes(input, offset, length);
- }
-
- public int processByte(byte in, byte[] out, int outOff) throws DataLengthException
- {
- return cipher.processByte(in, out, outOff);
- }
-
- public int processBytes(byte[] in, int inOff, int len, byte[] out, int outOff) throws DataLengthException
- {
- return cipher.processBytes(in, inOff, len, out, outOff);
- }
-
- public int doFinal(byte[] out, int outOff) throws IllegalStateException, InvalidCipherTextException
- {
- return cipher.doFinal(out, outOff);
- }
- }
-}
diff --git a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jcajce/util/ProviderJcaJceHelper.java b/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jcajce/util/ProviderJcaJceHelper.java
deleted file mode 100644
index 5f211dbe2..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jcajce/util/ProviderJcaJceHelper.java
+++ /dev/null
@@ -1,106 +0,0 @@
-package org.spongycastle.jcajce.util;
-
-import java.security.AlgorithmParameterGenerator;
-import java.security.AlgorithmParameters;
-import java.security.KeyFactory;
-import java.security.KeyPairGenerator;
-import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
-import java.security.NoSuchProviderException;
-import java.security.Provider;
-import java.security.Signature;
-import java.security.cert.CertificateException;
-import java.security.cert.CertificateFactory;
-
-import javax.crypto.Cipher;
-import javax.crypto.KeyAgreement;
-import javax.crypto.KeyGenerator;
-import javax.crypto.Mac;
-import javax.crypto.NoSuchPaddingException;
-import javax.crypto.SecretKeyFactory;
-
-import org.spongycastle.jcajce.util.JcaJceHelper;
-
-public class ProviderJcaJceHelper
- implements JcaJceHelper
-{
- protected final Provider provider;
-
- public ProviderJcaJceHelper(Provider provider)
- {
- this.provider = provider;
- }
-
- public Cipher createCipher(
- String algorithm)
- throws NoSuchAlgorithmException, NoSuchPaddingException, NoSuchProviderException
- {
- return Cipher.getInstance(algorithm, provider.getName());
- }
-
- public Mac createMac(String algorithm)
- throws NoSuchAlgorithmException, NoSuchProviderException
- {
- return Mac.getInstance(algorithm, provider.getName());
- }
-
- public KeyAgreement createKeyAgreement(String algorithm)
- throws NoSuchAlgorithmException, NoSuchProviderException
- {
- return KeyAgreement.getInstance(algorithm, provider.getName());
- }
-
- public AlgorithmParameterGenerator createAlgorithmParameterGenerator(String algorithm)
- throws NoSuchAlgorithmException, NoSuchProviderException
- {
- return AlgorithmParameterGenerator.getInstance(algorithm, provider.getName());
- }
-
- public AlgorithmParameters createAlgorithmParameters(String algorithm)
- throws NoSuchAlgorithmException, NoSuchProviderException
- {
- return AlgorithmParameters.getInstance(algorithm, provider.getName());
- }
-
- public KeyGenerator createKeyGenerator(String algorithm)
- throws NoSuchAlgorithmException, NoSuchProviderException
- {
- return KeyGenerator.getInstance(algorithm, provider.getName());
- }
-
- public KeyFactory createKeyFactory(String algorithm)
- throws NoSuchAlgorithmException, NoSuchProviderException
- {
- return KeyFactory.getInstance(algorithm, provider.getName());
- }
-
- public SecretKeyFactory createSecretKeyFactory(String algorithm)
- throws NoSuchAlgorithmException, NoSuchProviderException
- {
- return SecretKeyFactory.getInstance(algorithm, provider.getName());
- }
-
- public KeyPairGenerator createKeyPairGenerator(String algorithm)
- throws NoSuchAlgorithmException, NoSuchProviderException
- {
- return KeyPairGenerator.getInstance(algorithm, provider.getName());
- }
-
- public MessageDigest createDigest(String algorithm)
- throws NoSuchAlgorithmException, NoSuchProviderException
- {
- return MessageDigest.getInstance(algorithm, provider.getName());
- }
-
- public Signature createSignature(String algorithm)
- throws NoSuchAlgorithmException, NoSuchProviderException
- {
- return Signature.getInstance(algorithm, provider.getName());
- }
-
- public CertificateFactory createCertificateFactory(String algorithm)
- throws NoSuchAlgorithmException, CertificateException, NoSuchProviderException
- {
- return CertificateFactory.getInstance(algorithm, provider.getName());
- }
-}
diff --git a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/ECKeyUtil.java b/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/ECKeyUtil.java
deleted file mode 100644
index c2343e109..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/ECKeyUtil.java
+++ /dev/null
@@ -1,229 +0,0 @@
-package org.spongycastle.jce;
-
-import java.io.UnsupportedEncodingException;
-import java.security.KeyFactory;
-import java.security.NoSuchAlgorithmException;
-import java.security.NoSuchProviderException;
-import java.security.PrivateKey;
-import java.security.Provider;
-import java.security.PublicKey;
-import java.security.Security;
-import java.security.spec.PKCS8EncodedKeySpec;
-import java.security.spec.X509EncodedKeySpec;
-
-import org.spongycastle.asn1.ASN1ObjectIdentifier;
-import org.spongycastle.asn1.ASN1Primitive;
-import org.spongycastle.asn1.cryptopro.CryptoProObjectIdentifiers;
-import org.spongycastle.asn1.pkcs.PrivateKeyInfo;
-import org.spongycastle.asn1.x509.AlgorithmIdentifier;
-import org.spongycastle.asn1.x509.SubjectPublicKeyInfo;
-import org.spongycastle.asn1.x9.X962Parameters;
-import org.spongycastle.asn1.x9.X9ECParameters;
-import org.spongycastle.asn1.x9.X9ObjectIdentifiers;
-import org.spongycastle.jcajce.provider.asymmetric.util.ECUtil;
-import org.spongycastle.jce.provider.BouncyCastleProvider;
-
-/**
- * Utility class to allow conversion of EC key parameters to explicit from named
- * curves and back (where possible).
- */
-public class ECKeyUtil
-{
- /**
- * Convert a passed in public EC key to have explicit parameters. If the key
- * is already using explicit parameters it is returned.
- *
- * @param key key to be converted
- * @param providerName provider name to be used.
- * @return the equivalent key with explicit curve parameters
- * @throws IllegalArgumentException
- * @throws NoSuchAlgorithmException
- * @throws NoSuchProviderException
- */
- public static PublicKey publicToExplicitParameters(PublicKey key, String providerName)
- throws IllegalArgumentException, NoSuchAlgorithmException, NoSuchProviderException
- {
- Provider provider = Security.getProvider(providerName);
-
- if (provider == null)
- {
- throw new NoSuchProviderException("cannot find provider: " + providerName);
- }
-
- return publicToExplicitParameters(key, provider);
- }
-
- /**
- * Convert a passed in public EC key to have explicit parameters. If the key
- * is already using explicit parameters it is returned.
- *
- * @param key key to be converted
- * @param provider provider to be used.
- * @return the equivalent key with explicit curve parameters
- * @throws IllegalArgumentException
- * @throws NoSuchAlgorithmException
- */
- public static PublicKey publicToExplicitParameters(PublicKey key, Provider provider)
- throws IllegalArgumentException, NoSuchAlgorithmException
- {
- try
- {
- SubjectPublicKeyInfo info = SubjectPublicKeyInfo.getInstance(ASN1Primitive.fromByteArray(key.getEncoded()));
-
- if (info.getAlgorithmId().getObjectId().equals(CryptoProObjectIdentifiers.gostR3410_2001))
- {
- throw new IllegalArgumentException("cannot convert GOST key to explicit parameters.");
- }
- else
- {
- X962Parameters params = X962Parameters.getInstance(info.getAlgorithmId().getParameters());
- X9ECParameters curveParams;
-
- if (params.isNamedCurve())
- {
- ASN1ObjectIdentifier oid = ASN1ObjectIdentifier.getInstance(params.getParameters());
-
- curveParams = ECUtil.getNamedCurveByOid(oid);
- // ignore seed value due to JDK bug
- curveParams = new X9ECParameters(curveParams.getCurve(), curveParams.getG(), curveParams.getN(), curveParams.getH());
- }
- else if (params.isImplicitlyCA())
- {
- curveParams = new X9ECParameters(BouncyCastleProvider.CONFIGURATION.getEcImplicitlyCa().getCurve(), BouncyCastleProvider.CONFIGURATION.getEcImplicitlyCa().getG(), BouncyCastleProvider.CONFIGURATION.getEcImplicitlyCa().getN(), BouncyCastleProvider.CONFIGURATION.getEcImplicitlyCa().getH());
- }
- else
- {
- return key; // already explicit
- }
-
- params = new X962Parameters(curveParams);
-
- info = new SubjectPublicKeyInfo(new AlgorithmIdentifier(X9ObjectIdentifiers.id_ecPublicKey, params), info.getPublicKeyData().getBytes());
-
- KeyFactory keyFact = KeyFactory.getInstance(key.getAlgorithm(), provider.getName());
-
- return keyFact.generatePublic(new X509EncodedKeySpec(info.getEncoded()));
- }
- }
- catch (IllegalArgumentException e)
- {
- throw e;
- }
- catch (NoSuchAlgorithmException e)
- {
- throw e;
- }
- catch (Exception e)
- { // shouldn't really happen...
- throw new UnexpectedException(e);
- }
- }
-
- /**
- * Convert a passed in private EC key to have explicit parameters. If the key
- * is already using explicit parameters it is returned.
- *
- * @param key key to be converted
- * @param providerName provider name to be used.
- * @return the equivalent key with explicit curve parameters
- * @throws IllegalArgumentException
- * @throws NoSuchAlgorithmException
- * @throws NoSuchProviderException
- */
- public static PrivateKey privateToExplicitParameters(PrivateKey key, String providerName)
- throws IllegalArgumentException, NoSuchAlgorithmException, NoSuchProviderException
- {
- Provider provider = Security.getProvider(providerName);
-
- if (provider == null)
- {
- throw new NoSuchProviderException("cannot find provider: " + providerName);
- }
-
- return privateToExplicitParameters(key, provider);
- }
-
- /**
- * Convert a passed in private EC key to have explicit parameters. If the key
- * is already using explicit parameters it is returned.
- *
- * @param key key to be converted
- * @param provider provider to be used.
- * @return the equivalent key with explicit curve parameters
- * @throws IllegalArgumentException
- * @throws NoSuchAlgorithmException
- */
- public static PrivateKey privateToExplicitParameters(PrivateKey key, Provider provider)
- throws IllegalArgumentException, NoSuchAlgorithmException
- {
- try
- {
- PrivateKeyInfo info = PrivateKeyInfo.getInstance(ASN1Primitive.fromByteArray(key.getEncoded()));
-
- if (info.getAlgorithmId().getObjectId().equals(CryptoProObjectIdentifiers.gostR3410_2001))
- {
- throw new UnsupportedEncodingException("cannot convert GOST key to explicit parameters.");
- }
- else
- {
- X962Parameters params = X962Parameters.getInstance(info.getAlgorithmId().getParameters());
- X9ECParameters curveParams;
-
- if (params.isNamedCurve())
- {
- ASN1ObjectIdentifier oid = ASN1ObjectIdentifier.getInstance(params.getParameters());
-
- curveParams = ECUtil.getNamedCurveByOid(oid);
- // ignore seed value due to JDK bug
- curveParams = new X9ECParameters(curveParams.getCurve(), curveParams.getG(), curveParams.getN(), curveParams.getH());
- }
- else if (params.isImplicitlyCA())
- {
- curveParams = new X9ECParameters(BouncyCastleProvider.CONFIGURATION.getEcImplicitlyCa().getCurve(), BouncyCastleProvider.CONFIGURATION.getEcImplicitlyCa().getG(), BouncyCastleProvider.CONFIGURATION.getEcImplicitlyCa().getN(), BouncyCastleProvider.CONFIGURATION.getEcImplicitlyCa().getH());
- }
- else
- {
- return key; // already explicit
- }
-
- params = new X962Parameters(curveParams);
-
- info = new PrivateKeyInfo(new AlgorithmIdentifier(X9ObjectIdentifiers.id_ecPublicKey, params), info.parsePrivateKey());
-
- KeyFactory keyFact = KeyFactory.getInstance(key.getAlgorithm(), provider.getName());
-
- return keyFact.generatePrivate(new PKCS8EncodedKeySpec(info.getEncoded()));
- }
- }
- catch (IllegalArgumentException e)
- {
- throw e;
- }
- catch (NoSuchAlgorithmException e)
- {
- throw e;
- }
- catch (Exception e)
- { // shouldn't really happen
- throw new UnexpectedException(e);
- }
- }
-
- private static class UnexpectedException
- extends RuntimeException
- {
- private Throwable cause;
-
- UnexpectedException(Throwable cause)
- {
- super(cause.toString());
-
- this.cause = cause;
- }
-
- public Throwable getCause()
- {
- return cause;
- }
- }
-}
diff --git a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/MultiCertStoreParameters.java b/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/MultiCertStoreParameters.java
deleted file mode 100644
index 42f46648f..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/MultiCertStoreParameters.java
+++ /dev/null
@@ -1,51 +0,0 @@
-package org.spongycastle.jce;
-
-import org.spongycastle.jce.cert.CertStoreParameters;
-import java.util.Collection;
-
-public class MultiCertStoreParameters
- implements CertStoreParameters
-{
- private Collection certStores;
- private boolean searchAllStores;
-
- /**
- * Create a parameters object which specifies searching of all the passed in stores.
- *
- * @param certStores CertStores making up the multi CertStore
- */
- public MultiCertStoreParameters(Collection certStores)
- {
- this(certStores, true);
- }
-
- /**
- * Create a parameters object which can be to used to make a multi store made up
- * of the passed in CertStores. If the searchAllStores parameter is false, any search on
- * the multi-store will terminate as soon as a search query produces a result.
- *
- * @param certStores CertStores making up the multi CertStore
- * @param searchAllStores true if all CertStores should be searched on request, false if a result
- * should be returned on the first successful CertStore query.
- */
- public MultiCertStoreParameters(Collection certStores, boolean searchAllStores)
- {
- this.certStores = certStores;
- this.searchAllStores = searchAllStores;
- }
-
- public Collection getCertStores()
- {
- return certStores;
- }
-
- public boolean getSearchAllStores()
- {
- return searchAllStores;
- }
-
- public Object clone()
- {
- return this;
- }
-}
diff --git a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/PKCS10CertificationRequest.java b/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/PKCS10CertificationRequest.java
deleted file mode 100644
index b9bc6e521..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/PKCS10CertificationRequest.java
+++ /dev/null
@@ -1,583 +0,0 @@
-package org.spongycastle.jce;
-
-import java.io.IOException;
-import java.security.AlgorithmParameters;
-import java.security.GeneralSecurityException;
-import java.security.InvalidKeyException;
-import java.security.KeyFactory;
-import java.security.NoSuchAlgorithmException;
-import java.security.NoSuchProviderException;
-import java.security.PrivateKey;
-import java.security.PublicKey;
-import java.security.Signature;
-import java.security.SignatureException;
-import java.security.spec.InvalidKeySpecException;
-import java.security.spec.X509EncodedKeySpec;
-import java.util.HashSet;
-import java.util.Hashtable;
-import java.util.Set;
-
-import org.spongycastle.asn1.ASN1Encodable;
-import org.spongycastle.asn1.ASN1Encoding;
-import org.spongycastle.asn1.ASN1InputStream;
-import org.spongycastle.asn1.ASN1Integer;
-import org.spongycastle.asn1.ASN1Primitive;
-import org.spongycastle.asn1.ASN1Sequence;
-import org.spongycastle.asn1.ASN1Set;
-import org.spongycastle.asn1.DERBitString;
-import org.spongycastle.asn1.DERNull;
-import org.spongycastle.asn1.ASN1ObjectIdentifier;
-import org.spongycastle.asn1.cryptopro.CryptoProObjectIdentifiers;
-import org.spongycastle.asn1.nist.NISTObjectIdentifiers;
-import org.spongycastle.asn1.oiw.OIWObjectIdentifiers;
-import org.spongycastle.asn1.pkcs.CertificationRequest;
-import org.spongycastle.asn1.pkcs.CertificationRequestInfo;
-import org.spongycastle.asn1.pkcs.PKCSObjectIdentifiers;
-import org.spongycastle.asn1.pkcs.RSASSAPSSparams;
-import org.spongycastle.asn1.teletrust.TeleTrusTObjectIdentifiers;
-import org.spongycastle.asn1.x509.AlgorithmIdentifier;
-import org.spongycastle.asn1.x509.SubjectPublicKeyInfo;
-import org.spongycastle.asn1.x509.X509Name;
-import org.spongycastle.asn1.x9.X9ObjectIdentifiers;
-import org.spongycastle.jce.provider.BouncyCastleProvider;
-import org.spongycastle.util.Strings;
-
-/**
- * A class for verifying and creating PKCS10 Certification requests.
- *
- * CertificationRequest ::= SEQUENCE {
- * certificationRequestInfo CertificationRequestInfo,
- * signatureAlgorithm AlgorithmIdentifier{{ SignatureAlgorithms }},
- * signature BIT STRING
- * }
- *
- * CertificationRequestInfo ::= SEQUENCE {
- * version INTEGER { v1(0) } (v1,...),
- * subject Name,
- * subjectPKInfo SubjectPublicKeyInfo{{ PKInfoAlgorithms }},
- * attributes [0] Attributes{{ CRIAttributes }}
- * }
- *
- * Attributes { ATTRIBUTE:IOSet } ::= SET OF Attribute{{ IOSet }}
- *
- * Attribute { ATTRIBUTE:IOSet } ::= SEQUENCE {
- * type ATTRIBUTE.&id({IOSet}),
- * values SET SIZE(1..MAX) OF ATTRIBUTE.&Type({IOSet}{\@type})
- * }
- *
- * @deprecated use classes in org.spongycastle.pkcs.
- */
-public class PKCS10CertificationRequest
- extends CertificationRequest
-{
- private static Hashtable algorithms = new Hashtable();
- private static Hashtable params = new Hashtable();
- private static Hashtable keyAlgorithms = new Hashtable();
- private static Hashtable oids = new Hashtable();
- private static Set noParams = new HashSet();
-
- static
- {
- algorithms.put("MD2WITHRSAENCRYPTION", new ASN1ObjectIdentifier("1.2.840.113549.1.1.2"));
- algorithms.put("MD2WITHRSA", new ASN1ObjectIdentifier("1.2.840.113549.1.1.2"));
- algorithms.put("MD5WITHRSAENCRYPTION", new ASN1ObjectIdentifier("1.2.840.113549.1.1.4"));
- algorithms.put("MD5WITHRSA", new ASN1ObjectIdentifier("1.2.840.113549.1.1.4"));
- algorithms.put("RSAWITHMD5", new ASN1ObjectIdentifier("1.2.840.113549.1.1.4"));
- algorithms.put("SHA1WITHRSAENCRYPTION", new ASN1ObjectIdentifier("1.2.840.113549.1.1.5"));
- algorithms.put("SHA1WITHRSA", new ASN1ObjectIdentifier("1.2.840.113549.1.1.5"));
- algorithms.put("SHA224WITHRSAENCRYPTION", PKCSObjectIdentifiers.sha224WithRSAEncryption);
- algorithms.put("SHA224WITHRSA", PKCSObjectIdentifiers.sha224WithRSAEncryption);
- algorithms.put("SHA256WITHRSAENCRYPTION", PKCSObjectIdentifiers.sha256WithRSAEncryption);
- algorithms.put("SHA256WITHRSA", PKCSObjectIdentifiers.sha256WithRSAEncryption);
- algorithms.put("SHA384WITHRSAENCRYPTION", PKCSObjectIdentifiers.sha384WithRSAEncryption);
- algorithms.put("SHA384WITHRSA", PKCSObjectIdentifiers.sha384WithRSAEncryption);
- algorithms.put("SHA512WITHRSAENCRYPTION", PKCSObjectIdentifiers.sha512WithRSAEncryption);
- algorithms.put("SHA512WITHRSA", PKCSObjectIdentifiers.sha512WithRSAEncryption);
- algorithms.put("SHA1WITHRSAANDMGF1", PKCSObjectIdentifiers.id_RSASSA_PSS);
- algorithms.put("SHA224WITHRSAANDMGF1", PKCSObjectIdentifiers.id_RSASSA_PSS);
- algorithms.put("SHA256WITHRSAANDMGF1", PKCSObjectIdentifiers.id_RSASSA_PSS);
- algorithms.put("SHA384WITHRSAANDMGF1", PKCSObjectIdentifiers.id_RSASSA_PSS);
- algorithms.put("SHA512WITHRSAANDMGF1", PKCSObjectIdentifiers.id_RSASSA_PSS);
- algorithms.put("RSAWITHSHA1", new ASN1ObjectIdentifier("1.2.840.113549.1.1.5"));
- algorithms.put("RIPEMD128WITHRSAENCRYPTION", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd128);
- algorithms.put("RIPEMD128WITHRSA", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd128);
- algorithms.put("RIPEMD160WITHRSAENCRYPTION", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd160);
- algorithms.put("RIPEMD160WITHRSA", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd160);
- algorithms.put("RIPEMD256WITHRSAENCRYPTION", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd256);
- algorithms.put("RIPEMD256WITHRSA", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd256);
- algorithms.put("SHA1WITHDSA", new ASN1ObjectIdentifier("1.2.840.10040.4.3"));
- algorithms.put("DSAWITHSHA1", new ASN1ObjectIdentifier("1.2.840.10040.4.3"));
- algorithms.put("SHA224WITHDSA", NISTObjectIdentifiers.dsa_with_sha224);
- algorithms.put("SHA256WITHDSA", NISTObjectIdentifiers.dsa_with_sha256);
- algorithms.put("SHA384WITHDSA", NISTObjectIdentifiers.dsa_with_sha384);
- algorithms.put("SHA512WITHDSA", NISTObjectIdentifiers.dsa_with_sha512);
- algorithms.put("SHA1WITHECDSA", X9ObjectIdentifiers.ecdsa_with_SHA1);
- algorithms.put("SHA224WITHECDSA", X9ObjectIdentifiers.ecdsa_with_SHA224);
- algorithms.put("SHA256WITHECDSA", X9ObjectIdentifiers.ecdsa_with_SHA256);
- algorithms.put("SHA384WITHECDSA", X9ObjectIdentifiers.ecdsa_with_SHA384);
- algorithms.put("SHA512WITHECDSA", X9ObjectIdentifiers.ecdsa_with_SHA512);
- algorithms.put("ECDSAWITHSHA1", X9ObjectIdentifiers.ecdsa_with_SHA1);
- algorithms.put("GOST3411WITHGOST3410", CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_94);
- algorithms.put("GOST3410WITHGOST3411", CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_94);
- algorithms.put("GOST3411WITHECGOST3410", CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_2001);
- algorithms.put("GOST3411WITHECGOST3410-2001", CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_2001);
- algorithms.put("GOST3411WITHGOST3410-2001", CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_2001);
-
- //
- // reverse mappings
- //
- oids.put(new ASN1ObjectIdentifier("1.2.840.113549.1.1.5"), "SHA1WITHRSA");
- oids.put(PKCSObjectIdentifiers.sha224WithRSAEncryption, "SHA224WITHRSA");
- oids.put(PKCSObjectIdentifiers.sha256WithRSAEncryption, "SHA256WITHRSA");
- oids.put(PKCSObjectIdentifiers.sha384WithRSAEncryption, "SHA384WITHRSA");
- oids.put(PKCSObjectIdentifiers.sha512WithRSAEncryption, "SHA512WITHRSA");
- oids.put(CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_94, "GOST3411WITHGOST3410");
- oids.put(CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_2001, "GOST3411WITHECGOST3410");
-
- oids.put(new ASN1ObjectIdentifier("1.2.840.113549.1.1.4"), "MD5WITHRSA");
- oids.put(new ASN1ObjectIdentifier("1.2.840.113549.1.1.2"), "MD2WITHRSA");
- oids.put(new ASN1ObjectIdentifier("1.2.840.10040.4.3"), "SHA1WITHDSA");
- oids.put(X9ObjectIdentifiers.ecdsa_with_SHA1, "SHA1WITHECDSA");
- oids.put(X9ObjectIdentifiers.ecdsa_with_SHA224, "SHA224WITHECDSA");
- oids.put(X9ObjectIdentifiers.ecdsa_with_SHA256, "SHA256WITHECDSA");
- oids.put(X9ObjectIdentifiers.ecdsa_with_SHA384, "SHA384WITHECDSA");
- oids.put(X9ObjectIdentifiers.ecdsa_with_SHA512, "SHA512WITHECDSA");
- oids.put(OIWObjectIdentifiers.sha1WithRSA, "SHA1WITHRSA");
- oids.put(OIWObjectIdentifiers.dsaWithSHA1, "SHA1WITHDSA");
- oids.put(NISTObjectIdentifiers.dsa_with_sha224, "SHA224WITHDSA");
- oids.put(NISTObjectIdentifiers.dsa_with_sha256, "SHA256WITHDSA");
-
- //
- // key types
- //
- keyAlgorithms.put(PKCSObjectIdentifiers.rsaEncryption, "RSA");
- keyAlgorithms.put(X9ObjectIdentifiers.id_dsa, "DSA");
-
- //
- // According to RFC 3279, the ASN.1 encoding SHALL (id-dsa-with-sha1) or MUST (ecdsa-with-SHA*) omit the parameters field.
- // The parameters field SHALL be NULL for RSA based signature algorithms.
- //
- noParams.add(X9ObjectIdentifiers.ecdsa_with_SHA1);
- noParams.add(X9ObjectIdentifiers.ecdsa_with_SHA224);
- noParams.add(X9ObjectIdentifiers.ecdsa_with_SHA256);
- noParams.add(X9ObjectIdentifiers.ecdsa_with_SHA384);
- noParams.add(X9ObjectIdentifiers.ecdsa_with_SHA512);
- noParams.add(X9ObjectIdentifiers.id_dsa_with_sha1);
- noParams.add(NISTObjectIdentifiers.dsa_with_sha224);
- noParams.add(NISTObjectIdentifiers.dsa_with_sha256);
-
- //
- // RFC 4491
- //
- noParams.add(CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_94);
- noParams.add(CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_2001);
- //
- // explicit params
- //
- AlgorithmIdentifier sha1AlgId = new AlgorithmIdentifier(OIWObjectIdentifiers.idSHA1, new DERNull());
- params.put("SHA1WITHRSAANDMGF1", creatPSSParams(sha1AlgId, 20));
-
- AlgorithmIdentifier sha224AlgId = new AlgorithmIdentifier(NISTObjectIdentifiers.id_sha224, new DERNull());
- params.put("SHA224WITHRSAANDMGF1", creatPSSParams(sha224AlgId, 28));
-
- AlgorithmIdentifier sha256AlgId = new AlgorithmIdentifier(NISTObjectIdentifiers.id_sha256, new DERNull());
- params.put("SHA256WITHRSAANDMGF1", creatPSSParams(sha256AlgId, 32));
-
- AlgorithmIdentifier sha384AlgId = new AlgorithmIdentifier(NISTObjectIdentifiers.id_sha384, new DERNull());
- params.put("SHA384WITHRSAANDMGF1", creatPSSParams(sha384AlgId, 48));
-
- AlgorithmIdentifier sha512AlgId = new AlgorithmIdentifier(NISTObjectIdentifiers.id_sha512, new DERNull());
- params.put("SHA512WITHRSAANDMGF1", creatPSSParams(sha512AlgId, 64));
- }
-
- private static RSASSAPSSparams creatPSSParams(AlgorithmIdentifier hashAlgId, int saltSize)
- {
- return new RSASSAPSSparams(
- hashAlgId,
- new AlgorithmIdentifier(PKCSObjectIdentifiers.id_mgf1, hashAlgId),
- new ASN1Integer(saltSize),
- new ASN1Integer(1));
- }
-
- private static ASN1Sequence toDERSequence(
- byte[] bytes)
- {
- try
- {
- ASN1InputStream dIn = new ASN1InputStream(bytes);
-
- return (ASN1Sequence)dIn.readObject();
- }
- catch (Exception e)
- {
- throw new IllegalArgumentException("badly encoded request");
- }
- }
-
- /**
- * construct a PKCS10 certification request from a DER encoded
- * byte stream.
- */
- public PKCS10CertificationRequest(
- byte[] bytes)
- {
- super(toDERSequence(bytes));
- }
-
- public PKCS10CertificationRequest(
- ASN1Sequence sequence)
- {
- super(sequence);
- }
-
- /**
- * create a PKCS10 certfication request using the BC provider.
- */
- public PKCS10CertificationRequest(
- String signatureAlgorithm,
- X509Name subject,
- PublicKey key,
- ASN1Set attributes,
- PrivateKey signingKey)
- throws NoSuchAlgorithmException, NoSuchProviderException,
- InvalidKeyException, SignatureException
- {
- this(signatureAlgorithm, subject, key, attributes, signingKey, BouncyCastleProvider.PROVIDER_NAME);
- }
-
-
- /**
- * create a PKCS10 certfication request using the named provider.
- */
- public PKCS10CertificationRequest(
- String signatureAlgorithm,
- X509Name subject,
- PublicKey key,
- ASN1Set attributes,
- PrivateKey signingKey,
- String provider)
- throws NoSuchAlgorithmException, NoSuchProviderException,
- InvalidKeyException, SignatureException
- {
- String algorithmName = Strings.toUpperCase(signatureAlgorithm);
- ASN1ObjectIdentifier sigOID = (ASN1ObjectIdentifier)algorithms.get(algorithmName);
-
- if (sigOID == null)
- {
- try
- {
- sigOID = new ASN1ObjectIdentifier(algorithmName);
- }
- catch (Exception e)
- {
- throw new IllegalArgumentException("Unknown signature type requested");
- }
- }
-
- if (subject == null)
- {
- throw new IllegalArgumentException("subject must not be null");
- }
-
- if (key == null)
- {
- throw new IllegalArgumentException("public key must not be null");
- }
-
- if (noParams.contains(sigOID))
- {
- this.sigAlgId = new AlgorithmIdentifier(sigOID);
- }
- else if (params.containsKey(algorithmName))
- {
- this.sigAlgId = new AlgorithmIdentifier(sigOID, (ASN1Encodable)params.get(algorithmName));
- }
- else
- {
- this.sigAlgId = new AlgorithmIdentifier(sigOID, DERNull.INSTANCE);
- }
-
- try
- {
- ASN1Sequence seq = (ASN1Sequence)ASN1Primitive.fromByteArray(key.getEncoded());
- this.reqInfo = new CertificationRequestInfo(subject, new SubjectPublicKeyInfo(seq), attributes);
- }
- catch (IOException e)
- {
- throw new IllegalArgumentException("can't encode public key");
- }
-
- Signature sig;
- if (provider == null)
- {
- sig = Signature.getInstance(signatureAlgorithm);
- }
- else
- {
- sig = Signature.getInstance(signatureAlgorithm, provider);
- }
-
- sig.initSign(signingKey);
-
- try
- {
- sig.update(reqInfo.getEncoded(ASN1Encoding.DER));
- }
- catch (Exception e)
- {
- throw new IllegalArgumentException("exception encoding TBS cert request - " + e);
- }
-
- this.sigBits = new DERBitString(sig.sign());
- }
-
- /**
- * return the public key associated with the certification request -
- * the public key is created using the BC provider.
- */
- public PublicKey getPublicKey()
- throws NoSuchAlgorithmException, NoSuchProviderException, InvalidKeyException
- {
- return getPublicKey(BouncyCastleProvider.PROVIDER_NAME);
- }
-
- public PublicKey getPublicKey(
- String provider)
- throws NoSuchAlgorithmException, NoSuchProviderException,
- InvalidKeyException
- {
- SubjectPublicKeyInfo subjectPKInfo = reqInfo.getSubjectPublicKeyInfo();
-
-
- try
- {
- X509EncodedKeySpec xspec = new X509EncodedKeySpec(new DERBitString(subjectPKInfo).getBytes());
- AlgorithmIdentifier keyAlg = subjectPKInfo.getAlgorithm();
- try
- {
- if (provider == null)
- {
- return KeyFactory.getInstance(keyAlg.getAlgorithm().getId()).generatePublic(xspec);
- }
- else
- {
- return KeyFactory.getInstance(keyAlg.getAlgorithm().getId(), provider).generatePublic(xspec);
- }
- }
- catch (NoSuchAlgorithmException e)
- {
- //
- // try an alternate
- //
- if (keyAlgorithms.get(keyAlg.getObjectId()) != null)
- {
- String keyAlgorithm = (String)keyAlgorithms.get(keyAlg.getObjectId());
-
- if (provider == null)
- {
- return KeyFactory.getInstance(keyAlgorithm).generatePublic(xspec);
- }
- else
- {
- return KeyFactory.getInstance(keyAlgorithm, provider).generatePublic(xspec);
- }
- }
-
- throw e;
- }
- }
- catch (InvalidKeySpecException e)
- {
- throw new InvalidKeyException("error decoding public key");
- }
- catch (IOException e)
- {
- throw new InvalidKeyException("error decoding public key");
- }
- }
-
- /**
- * verify the request using the BC provider.
- */
- public boolean verify()
- throws NoSuchAlgorithmException, NoSuchProviderException,
- InvalidKeyException, SignatureException
- {
- return verify(BouncyCastleProvider.PROVIDER_NAME);
- }
-
- /**
- * verify the request using the passed in provider.
- */
- public boolean verify(
- String provider)
- throws NoSuchAlgorithmException, NoSuchProviderException,
- InvalidKeyException, SignatureException
- {
- return verify(this.getPublicKey(provider), provider);
- }
-
- /**
- * verify the request using the passed in public key and the provider..
- */
- public boolean verify(
- PublicKey pubKey,
- String provider)
- throws NoSuchAlgorithmException, NoSuchProviderException,
- InvalidKeyException, SignatureException
- {
- Signature sig;
-
- try
- {
- if (provider == null)
- {
- sig = Signature.getInstance(getSignatureName(sigAlgId));
- }
- else
- {
- sig = Signature.getInstance(getSignatureName(sigAlgId), provider);
- }
- }
- catch (NoSuchAlgorithmException e)
- {
- //
- // try an alternate
- //
- if (oids.get(sigAlgId.getObjectId()) != null)
- {
- String signatureAlgorithm = (String)oids.get(sigAlgId.getObjectId());
-
- if (provider == null)
- {
- sig = Signature.getInstance(signatureAlgorithm);
- }
- else
- {
- sig = Signature.getInstance(signatureAlgorithm, provider);
- }
- }
- else
- {
- throw e;
- }
- }
-
- setSignatureParameters(sig, sigAlgId.getParameters(), provider);
-
- sig.initVerify(pubKey);
-
- try
- {
- sig.update(reqInfo.getEncoded(ASN1Encoding.DER));
- }
- catch (Exception e)
- {
- throw new SignatureException("exception encoding TBS cert request - " + e);
- }
-
- return sig.verify(sigBits.getBytes());
- }
-
- /**
- * return a DER encoded byte array representing this object
- */
- public byte[] getEncoded()
- {
- try
- {
- return this.getEncoded(ASN1Encoding.DER);
- }
- catch (IOException e)
- {
- throw new RuntimeException(e.toString());
- }
- }
-
- private void setSignatureParameters(
- Signature signature,
- ASN1Encodable params,
- String provider)
- throws NoSuchAlgorithmException, NoSuchProviderException, SignatureException, InvalidKeyException
- {
- if (params != null && !DERNull.INSTANCE.equals(params))
- {
- AlgorithmParameters sigParams = AlgorithmParameters.getInstance(signature.getAlgorithm(), provider);
-
- try
- {
- sigParams.init(params.toASN1Primitive().getEncoded(ASN1Encoding.DER));
- }
- catch (IOException e)
- {
- throw new SignatureException("IOException decoding parameters: " + e.getMessage());
- }
- }
- }
-
- static String getSignatureName(
- AlgorithmIdentifier sigAlgId)
- {
- ASN1Encodable params = sigAlgId.getParameters();
-
- if (params != null && !DERNull.INSTANCE.equals(params))
- {
- if (sigAlgId.getObjectId().equals(PKCSObjectIdentifiers.id_RSASSA_PSS))
- {
- RSASSAPSSparams rsaParams = RSASSAPSSparams.getInstance(params);
- return getDigestAlgName(rsaParams.getHashAlgorithm().getObjectId()) + "withRSAandMGF1";
- }
- }
-
- return sigAlgId.getObjectId().getId();
- }
-
- private static String getDigestAlgName(
- ASN1ObjectIdentifier digestAlgOID)
- {
- if (PKCSObjectIdentifiers.md5.equals(digestAlgOID))
- {
- return "MD5";
- }
- else if (OIWObjectIdentifiers.idSHA1.equals(digestAlgOID))
- {
- return "SHA1";
- }
- else if (NISTObjectIdentifiers.id_sha224.equals(digestAlgOID))
- {
- return "SHA224";
- }
- else if (NISTObjectIdentifiers.id_sha256.equals(digestAlgOID))
- {
- return "SHA256";
- }
- else if (NISTObjectIdentifiers.id_sha384.equals(digestAlgOID))
- {
- return "SHA384";
- }
- else if (NISTObjectIdentifiers.id_sha512.equals(digestAlgOID))
- {
- return "SHA512";
- }
- else if (TeleTrusTObjectIdentifiers.ripemd128.equals(digestAlgOID))
- {
- return "RIPEMD128";
- }
- else if (TeleTrusTObjectIdentifiers.ripemd160.equals(digestAlgOID))
- {
- return "RIPEMD160";
- }
- else if (TeleTrusTObjectIdentifiers.ripemd256.equals(digestAlgOID))
- {
- return "RIPEMD256";
- }
- else if (CryptoProObjectIdentifiers.gostR3411.equals(digestAlgOID))
- {
- return "GOST3411";
- }
- else
- {
- return digestAlgOID.getId();
- }
- }
-}
diff --git a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/CRLSelector.java b/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/CRLSelector.java
deleted file mode 100644
index 0cafff5c4..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/CRLSelector.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package org.spongycastle.jce.cert;
-
-import java.security.cert.CRL;
-
-/**
- * A selector that defines a set of criteria for selecting CRL
s.
- * Classes that implement this interface are often used to specify
- * which CRL
s should be retrieved from a CertStore
.
- *
- * Concurrent Access
- *
- * Unless otherwise specified, the methods defined in this interface are not
- * thread-safe. Multiple threads that need to access a single
- * object concurrently should synchronize amongst themselves and
- * provide the necessary locking. Multiple threads each manipulating
- * separate objects need not synchronize.
- *
- * @see CRL
- * @see CertStore
- * @see CertStore#getCRLs
- **/
-public interface CRLSelector extends Cloneable
-{
- /**
- * Decides whether a CRL
should be selected.
- *
- * @param crl the CRL
to be checked
- *
- * @return true
if the CRL
should be selected,
- * false
otherwise
- */
- public boolean match(CRL crl);
-
- /**
- * Makes a copy of this CRLSelector
. Changes to the
- * copy will not affect the original and vice versa.
- *
- * @return a copy of this CRLSelector
- */
- public Object clone();
-}
diff --git a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/CertPath.java b/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/CertPath.java
deleted file mode 100644
index 34f9c6282..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/CertPath.java
+++ /dev/null
@@ -1,296 +0,0 @@
-package org.spongycastle.jce.cert;
-
-import java.io.ByteArrayInputStream;
-import java.io.NotSerializableException;
-import java.io.ObjectStreamException;
-import java.io.Serializable;
-import java.security.cert.CertificateEncodingException;
-import java.security.cert.CertificateException;
-import java.util.Iterator;
-import java.util.List;
-import java.util.ListIterator;
-
-/**
- * An immutable sequence of certificates (a certification path).
- *
- * This is an abstract class that defines the methods common to all CertPaths.
- * Subclasses can handle different kinds of certificates (X.509, PGP, etc.).
- *
- * All CertPath objects have a type, a list of Certificates, and one or more
- * supported encodings. Because the CertPath class is immutable, a CertPath
- * cannot change in any externally visible way after being constructed. This
- * stipulation applies to all public fields and methods of this class and any
- * added or overridden by subclasses.
- *
- * The type is a String that identifies the type of Certificates in the
- * certification path. For each certificate cert in a certification path
- * certPath, cert.getType().equals(certPath.getType()) must be true.
- *
- * The list of Certificates is an ordered List of zero or more Certificates.
- * This List and all of the Certificates contained in it must be immutable.
- *
- * Each CertPath object must support one or more encodings so that the object
- * can be translated into a byte array for storage or transmission to other
- * parties. Preferably, these encodings should be well-documented standards
- * (such as PKCS#7). One of the encodings supported by a CertPath is considered
- * the default encoding. This encoding is used if no encoding is explicitly
- * requested (for the {@link #getEncoded()} method, for instance).
- *
- * All CertPath objects are also Serializable. CertPath objects are resolved
- * into an alternate {@link CertPathRep} object during serialization. This
- * allows a CertPath object to be serialized into an equivalent representation
- * regardless of its underlying implementation.
- *
- * CertPath objects can be created with a CertificateFactory or they can be
- * returned by other classes, such as a CertPathBuilder.
- *
- * By convention, X.509 CertPaths (consisting of X509Certificates), are ordered
- * starting with the target certificate and ending with a certificate issued by
- * the trust anchor. That is, the issuer of one certificate is the subject of
- * the following one. The certificate representing the
- * {@link TrustAnchor TrustAnchor} should not be included in the certification
- * path. Unvalidated X.509 CertPaths may not follow these conventions. PKIX
- * CertPathValidators will detect any departure from these conventions that
- * cause the certification path to be invalid and throw a
- * CertPathValidatorException.
- *
- * Concurrent Access
- *
- * All CertPath objects must be thread-safe. That is, multiple threads may
- * concurrently invoke the methods defined in this class on a single CertPath
- * object (or more than one) with no ill effects. This is also true for the List
- * returned by CertPath.getCertificates.
- *
- * Requiring CertPath objects to be immutable and thread-safe allows them to be
- * passed around to various pieces of code without worrying about coordinating
- * access. Providing this thread-safety is generally not difficult, since the
- * CertPath and List objects in question are immutable.
- *
- * @see CertificateFactory
- * @see CertPathBuilder
- */
-public abstract class CertPath extends Object implements Serializable
-{
- private String type;
-
- /**
- * Alternate CertPath
class for serialization.
- */
- protected static class CertPathRep implements Serializable
- {
- private String type;
-
- private byte[] data;
-
- /**
- * Creates a CertPathRep
with the specified type and
- * encoded form of a certification path.
- *
- * @param type
- * the standard name of a CertPath
- * @param typedata
- * the encoded form of the certification path
- */
- protected CertPathRep(String type, byte[] data)
- {
- this.type = type;
- this.data = data;
- }
-
- /**
- * Returns a CertPath constructed from the type and data.
- *
- * @return the resolved CertPath object
- * @exception ObjectStreamException
- * if a CertPath could not be constructed
- */
- protected Object readResolve() throws ObjectStreamException
- {
- try
- {
- ByteArrayInputStream inStream = new ByteArrayInputStream(data);
- CertificateFactory cf = CertificateFactory.getInstance(type);
- return cf.generateCertPath(inStream);
- }
- catch (CertificateException ce)
- {
- throw new NotSerializableException(
- " java.security.cert.CertPath: " + type);
- }
- }
- }
-
- /**
- * Creates a CertPath of the specified type. This constructor is protected
- * because most users should use a CertificateFactory to create CertPaths.
- *
- * @param type
- * the standard name of the type of Certificatesin this path
- */
- protected CertPath(String type)
- {
- this.type = type;
- }
-
- /**
- * Returns the type of Certificates in this certification path. This is the
- * same string that would be returned by
- * {@link java.security.cert.Certificate#getType()} for all Certificates in
- * the certification path.
- *
- * @return the type of Certificates in this certification path (never null)
- */
- public String getType()
- {
- return type;
- }
-
- /**
- * Returns an iteration of the encodings supported by this certification
- * path, with the default encoding first. Attempts to modify the returned
- * Iterator via its remove method result in an
- * UnsupportedOperationException.
- *
- * @return an Iterator over the names of the supported encodings (as
- * Strings)
- */
- public abstract Iterator getEncodings();
-
- /**
- * Compares this certification path for equality with the specified object.
- * Two CertPaths are equal if and only if their types are equal and their
- * certificate Lists (and by implication the Certificates in those Lists)
- * are equal. A CertPath is never equal to an object that is not a CertPath.
- *
- * This algorithm is implemented by this method. If it is overridden, the
- * behavior specified here must be maintained.
- *
- * @param other
- * the object to test for equality with this certification path
- *
- * @return true if the specified object is equal to this certification path,
- * false otherwise
- *
- * @see Object#hashCode() Object.hashCode()
- */
- public boolean equals(Object other)
- {
- if (!(other instanceof CertPath))
- {
- return false;
- }
-
- CertPath otherCertPath = (CertPath)other;
- if (!getType().equals(otherCertPath.getType()))
- {
- return false;
- }
- return getCertificates().equals(otherCertPath.getCertificates());
- }
-
- /**
- * Returns the hashcode for this certification path. The hash code of a
- * certification path is defined to be the result of the following
- * calculation:
- *
- *
- * hashCode = path.getType().hashCode();
- * hashCode = 31 * hashCode + path.getCertificates().hashCode();
- *
- *
- * This ensures that path1.equals(path2) implies that
- * path1.hashCode()==path2.hashCode() for any two certification paths, path1
- * and path2, as required by the general contract of Object.hashCode.
- *
- * @return The hashcode value for this certification path
- *
- * @see #equals(Object)
- */
- public int hashCode()
- {
- return getType().hashCode() * 31 + getCertificates().hashCode();
- }
-
- /**
- * Returns a string representation of this certification path. This calls
- * the toString method on each of the Certificates in the path.
- *
- * @return a string representation of this certification path
- */
- public String toString()
- {
- StringBuffer s = new StringBuffer();
- List certs = getCertificates();
- ListIterator iter = certs.listIterator();
- s.append('\n').append(getType()).append(" Cert Path: length = ").append(certs.size())
- .append("\n[\n");
- while (iter.hasNext())
- {
- s
- .append("=========================================================Certificate ")
- .append(iter.nextIndex()).append('\n');
- s.append(iter.next()).append('\n');
- s
- .append("========================================================Certificate end\n\n\n");
- }
- s.append("\n]");
- return s.toString();
- }
-
- /**
- * Returns the encoded form of this certification path, using the default
- * encoding.
- *
- * @return the encoded bytes
- *
- * @exception CertificateEncodingException
- * if an encoding error occurs
- */
- public abstract byte[] getEncoded() throws CertificateEncodingException;
-
- /**
- * Returns the encoded form of this certification path, using the specified
- * encoding.
- *
- * @param encoding
- * the name of the encoding to use
- *
- * @return the encoded bytes
- *
- * @exception CertificateEncodingException
- * if an encoding error occurs or the encoding requested is
- * not supported
- */
- public abstract byte[] getEncoded(String encoding)
- throws CertificateEncodingException;
-
- /**
- * Returns the list of certificates in this certification path. The List
- * returned must be immutable and thread-safe.
- *
- * @return an immutable List of Certificates (may be empty, but not null)
- */
- public abstract List getCertificates();
-
- /**
- * Replaces the CertPath to be serialized with a CertPathRep object.
- *
- * @return the CertPathRep to be serialized
- *
- * @exception ObjectStreamException
- * if a CertPathRep object representing this certification
- * path could not be created
- */
- protected Object writeReplace() throws ObjectStreamException
- {
- try
- {
- return new CertPathRep(getType(), getEncoded());
- }
- catch (CertificateException ce)
- {
- throw new NotSerializableException(" java.security.cert.CertPath: "
- + getType());
- }
- }
-}
diff --git a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/CertPathBuilder.java b/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/CertPathBuilder.java
deleted file mode 100644
index 54585689d..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/CertPathBuilder.java
+++ /dev/null
@@ -1,255 +0,0 @@
-package org.spongycastle.jce.cert;
-
-import java.security.InvalidAlgorithmParameterException;
-import java.security.NoSuchAlgorithmException;
-import java.security.NoSuchProviderException;
-import java.security.Provider;
-import java.security.Security;
-
-/**
- * A class for building certification paths (also known as certificate chains).
- *
- * This class uses a provider-based architecture, as described in the Java
- * Cryptography Architecture. To create a CertPathBuilder
, call
- * one of the static getInstance
methods, passing in the
- * algorithm name of the CertPathBuilder desired and optionally the name of the
- * provider desired.
- *
- * Once a CertPathBuilder
object has been created, certification
- * paths can be constructed by calling the {@link #build build} method and
- * passing it an algorithm-specific set of parameters. If successful, the result
- * (including the CertPath that was built) is returned in an object that
- * implements the CertPathBuilderResult
interface.
- *
- * Concurrent Access
- *
- * The static methods of this class are guaranteed to be thread-safe. Multiple
- * threads may concurrently invoke the static methods defined in this class with
- * no ill effects.
- *
- * However, this is not true for the non-static methods defined by this class.
- * Unless otherwise documented by a specific provider, threads that need to
- * access a single CertPathBuilder
instance concurrently should
- * synchronize amongst themselves and provide the necessary locking. Multiple
- * threads each manipulating a different CertPathBuilder
instance
- * need not synchronize.
- *
- */
-public class CertPathBuilder extends Object
-{
- private CertPathBuilderSpi builderSpi;
-
- private Provider provider;
-
- private String algorithm;
-
- /**
- * Creates a CertPathBuilder object of the given algorithm, and encapsulates
- * the given provider implementation (SPI object) in it.
- *
- * @param builderSpi
- * the provider implementation
- * @param provider
- * the provider
- * @param algorithm
- * the algorithm name
- */
- protected CertPathBuilder(
- CertPathBuilderSpi builderSpi,
- Provider provider,
- String algorithm)
- {
- this.builderSpi = builderSpi;
- this.provider = provider;
- this.algorithm = algorithm;
- }
-
- /**
- * Returns a CertPathBuilder object that implements the specified algorithm.
- *
- * If the default provider package provides an implementation of the
- * specified CertPathBuilder algorithm, an instance of CertPathBuilder
- * containing that implementation is returned. If the requested algorithm is
- * not available in the default package, other packages are searched.
- *
- *
- * @param algorithm
- * the name of the requested CertPathBuilder algorithm
- *
- * @return a CertPathBuilder object that implements the specified algorithm
- *
- * @exception NoSuchAlgorithmException
- * if the requested algorithm is not available in the default
- * provider package or any of the other provider packages
- * that were searched
- */
- public static CertPathBuilder getInstance(String algorithm)
- throws NoSuchAlgorithmException
- {
- try
- {
- CertUtil.Implementation imp = CertUtil.getImplementation(
- "CertPathBuilder", algorithm, (String)null);
- if (imp != null)
- {
- return new CertPathBuilder((CertPathBuilderSpi)imp.getEngine(),
- imp.getProvider(), algorithm);
- }
- }
- catch (NoSuchProviderException ex)
- {
- }
- throw new NoSuchAlgorithmException("can't find type " + algorithm);
- }
-
- /**
- * Returns a CertPathBuilder object that implements the specified algorithm,
- * as supplied by the specified provider.
- *
- * @param algorithm
- * the name of the requested CertPathBuilder algorithm
- * @param provider
- * the name of the provider
- *
- * @return a CertPathBuilder object that implements the specified algorithm,
- * as supplied by the specified provider
- *
- * @exception NoSuchAlgorithmException
- * if the requested algorithm is not available from the
- * specified provider
- * @exception NoSuchProviderException
- * if the provider has not been configured
- * @exception IllegalArgumentException
- * if the provider is null
- */
- public static CertPathBuilder getInstance(String algorithm, String provider)
- throws NoSuchAlgorithmException, NoSuchProviderException
- {
- if (provider == null)
- {
- throw new IllegalArgumentException("provider must be non-null");
- }
- CertUtil.Implementation imp = CertUtil.getImplementation(
- "CertPathBuilder", algorithm, provider);
-
- if (imp != null)
- {
- return new CertPathBuilder((CertPathBuilderSpi)imp.getEngine(), imp
- .getProvider(), algorithm);
- }
- throw new NoSuchAlgorithmException("can't find type " + algorithm);
- }
-
- /**
- * Returns a CertPathBuilder object that implements the specified algorithm,
- * as supplied by the specified provider. Note: the provider doesn't have to
- * be registered.
- *
- * @param algorithm
- * the name of the requested CertPathBuilder algorithm
- * @param provider
- * the provider
- * @return a CertPathBuilder object that implements the specified algorithm,
- * as supplied by the specified provider
- *
- * @exception NoSuchAlgorithmException
- * if the requested algorithm is not available from the
- * specified provider
- * @exception IllegalArgumentException
- * if the provider is null.
- */
- public static CertPathBuilder getInstance(String algorithm,
- Provider provider) throws NoSuchAlgorithmException
- {
- if (provider == null)
- {
- throw new IllegalArgumentException("provider must be non-null");
- }
- CertUtil.Implementation imp = CertUtil.getImplementation(
- "CertPathBuilder", algorithm, provider);
-
- if (imp != null)
- {
- return new CertPathBuilder((CertPathBuilderSpi)imp.getEngine(),
- provider, algorithm);
- }
- throw new NoSuchAlgorithmException("can't find type " + algorithm);
- }
-
- /**
- * Returns the provider of this CertPathBuilder
.
- *
- * @return the provider of this CertPathBuilder
- */
- public final Provider getProvider()
- {
- return provider;
- }
-
- /**
- * Returns the name of the algorithm of this CertPathBuilder
.
- *
- * @return the name of the algorithm of this CertPathBuilder
- */
- public final String getAlgorithm()
- {
- return algorithm;
- }
-
- /**
- * Attempts to build a certification path using the specified algorithm
- * parameter set.
- *
- * @param params
- * the algorithm parameters
- *
- * @return the result of the build algorithm
- *
- * @exception CertPathBuilderException
- * if the builder is unable to construct a certification path
- * that satisfies the specified parameters
- * @exception InvalidAlgorithmParameterException
- * if the specified parameters * are inappropriate for this
- * CertPathBuilder
- */
- public final CertPathBuilderResult build(CertPathParameters params)
- throws CertPathBuilderException, InvalidAlgorithmParameterException
- {
- return builderSpi.engineBuild(params);
- }
-
- /**
- * Returns the default CertPathBuilder
type as specified in
- * the Java security properties file, or the string "PKIX" if no
- * such property exists. The Java security properties file is located in the
- * file named <JAVA_HOME>/lib/security/java.security, where
- * <JAVA_HOME> refers to the directory where the SDK was installed.
- *
- * The default CertPathBuilder
type can be used by
- * applications that do not want to use a hard-coded type when calling one
- * of the getInstance
methods, and want to provide a default
- * type in case a user does not specify its own.
- *
- * The default CertPathBuilder
type can be changed by setting
- * the value of the "certpathbuilder.type" security property (in the Java
- * security properties file) to the desired type.
- *
- * @return the default CertPathBuilder
type as specified in
- * the Java security properties file, or the string "PKIX"
- * if no such property exists.
- */
- public static final String getDefaultType()
- {
- String defaulttype = null;
- defaulttype = Security.getProperty("certpathbuilder.type");
-
- if (defaulttype == null || defaulttype.length() <= 0)
- {
- return "PKIX";
- }
- else
- {
- return defaulttype;
- }
- }
-}
diff --git a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/CertPathBuilderException.java b/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/CertPathBuilderException.java
deleted file mode 100644
index 1dce8758f..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/CertPathBuilderException.java
+++ /dev/null
@@ -1,182 +0,0 @@
-package org.spongycastle.jce.cert;
-
-import java.io.PrintStream;
-import java.io.PrintWriter;
-import java.security.GeneralSecurityException;
-
-/**
- * An exception indicating one of a variety of problems encountered
- * when building a certification path with a
- * CertPathBuilder
.
- *
- * A CertPathBuilderException
provides support for
- * wrapping exceptions. The {@link #getCause() getCause} method
- * returns the throwable, if any, that caused this exception to be
- * thrown.
- *
- * Concurrent Access
- *
- * Unless otherwise specified, the methods defined in this class are
- * not thread-safe. Multiple threads that need to access a single
- * object concurrently should synchronize amongst themselves and
- * provide the necessary locking. Multiple threads each manipulating
- * separate objects need not synchronize.
- *
- * @see CertPathBuilder
- **/
-public class CertPathBuilderException extends GeneralSecurityException
-{
- private Throwable cause;
-
- /**
- * Creates a CertPathBuilderException
with null
- * as its detail message.
- */
- public CertPathBuilderException()
- {
- }
-
- /**
- * Creates a CertPathBuilderException
with the given detail
- * message. The detail message is a String
that describes
- * this particular exception in more detail.
- *
- * @param msg
- * the detail message
- */
- public CertPathBuilderException(String message)
- {
- super(message);
- }
-
- /**
- * Creates a CertPathBuilderException
that wraps the
- * specified throwable. This allows any exception to be converted into a
- * CertPathBuilderException
, while retaining information
- * about the wrapped exception, which may be useful for debugging. The
- * detail message is set to
- * (cause==null ? null : cause.toString())
(which typically
- * contains the class and detail message of cause).
- *
- * @param cause
- * the cause (which is saved for later retrieval by the
- * {@link #getCause()} method). (A null value is permitted, and
- * indicates that the cause is nonexistent or unknown.)
- */
- public CertPathBuilderException(String message, Throwable cause)
- {
- super(message);
- this.cause = cause;
- }
-
- /**
- * Creates a CertPathBuilderException
with the specified
- * detail message and cause.
- *
- * @param msg
- * the detail message
- * @param cause
- * the cause (which is saved for later retrieval by the
- * {@link #getCause()} method). (A null value is permitted, and
- * indicates that the cause is nonexistent or unknown.)
- */
- public CertPathBuilderException(Throwable cause)
- {
- this.cause = cause;
- }
-
- /**
- * Returns the internal (wrapped) cause, or null if the cause is nonexistent
- * or unknown.
- *
- * @return the cause of this throwable or null
if the cause
- * is nonexistent or unknown.
- */
- public Throwable getCause()
- {
- return cause;
- }
-
- /**
- * Returns the detail message for this CertPathBuilderException.
- *
- * @return the detail message, or null
if neither the message
- * nor internal cause were specified
- */
- public String getMessage()
- {
- String message = super.getMessage();
-
- if (message == null && cause == null)
- {
- return null;
- }
-
- if (cause != null)
- {
- return cause.getMessage();
- }
-
- return message;
- }
-
- /**
- * Returns a string describing this exception, including a description of
- * the internal (wrapped) cause if there is one.
- *
- * @return a string representation of this
- * CertPathBuilderException
- */
- public String toString()
- {
- String message = getMessage();
- if (message == null)
- {
- return "";
- }
-
- return message;
- }
-
- /**
- * Prints a stack trace to System.err
, including the
- * backtrace of the cause, if any.
- */
- public void printStackTrace()
- {
- printStackTrace(System.err);
- }
-
- /**
- * Prints a stack trace to a PrintStream
, including the
- * backtrace of the cause, if any.
- *
- * @param ps
- * the PrintStream
to use for output
- */
- public void printStackTrace(PrintStream ps)
- {
- super.printStackTrace(ps);
- if (getCause() != null)
- {
- getCause().printStackTrace(ps);
- }
- }
-
- /**
- * Prints a stack trace to a PrintWriter
, including the
- * backtrace of the cause, if any.
- *
- * @param ps
- * the PrintWriter
to use for output
- */
- public void printStackTrace(PrintWriter pw)
- {
- super.printStackTrace(pw);
- if (getCause() != null)
- {
- getCause().printStackTrace(pw);
- }
- }
-}
-
diff --git a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/CertPathBuilderResult.java b/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/CertPathBuilderResult.java
deleted file mode 100644
index a1518cba4..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/CertPathBuilderResult.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package org.spongycastle.jce.cert;
-
-/**
- * A specification of the result of a certification path builder algorithm.
- * All results returned by the {@link CertPathBuilder#build CertPathBuilder.build} method
- * must implement this interface.
- *
- * At a minimum, a CertPathBuilderResult contains the CertPath built by the
- * CertPathBuilder instance. Implementations of this interface may add methods
- * to return implementation or algorithm specific information, such as
- * debugging information or certification path validation results.
- *
- * Concurrent Access
- *
- * Unless otherwise specified, the methods defined in this interface are not
- * thread-safe. Multiple threads that need to access a single object
- * concurrently should synchronize amongst themselves and provide the
- * necessary locking. Multiple threads each manipulating separate objects
- * need not synchronize.
- **/
-public interface CertPathBuilderResult extends Cloneable
-{
- /**
- * Returns the built certification path.
- *
- * @return the certification path (never null
)
- */
- public CertPath getCertPath();
-
- /**
- * Makes a copy of this CertPathBuilderResult
.
- * Changes to the copy will not affect the original and vice
- * versa.
- *
- * @return a copy of this CertPathBuilderResult
- */
- public Object clone();
-}
diff --git a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/CertPathBuilderSpi.java b/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/CertPathBuilderSpi.java
deleted file mode 100644
index bb08d99a4..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/CertPathBuilderSpi.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package org.spongycastle.jce.cert;
-
-import java.security.InvalidAlgorithmParameterException;
-
-/**
- * The Service Provider Interface (SPI) for the CertPathBuilder
- * class. All CertPathBuilder implementations must include a class
- * (the SPI class) that extends this class (CertPathBuilderSpi) and
- * implements all of its methods. In general, instances of this class
- * should only be accessed through the CertPathBuilder class. For
- * details, see the Java Cryptography Architecture.
- *
- * Concurrent Access
- *
- * Instances of this class need not be protected against concurrent
- * access from multiple threads. Threads that need to access a single
- * CertPathBuilderSpi instance concurrently should synchronize amongst
- * themselves and provide the necessary locking before calling the
- * wrapping CertPathBuilder object.
- *
- * However, implementations of CertPathBuilderSpi may still encounter
- * concurrency issues, since multiple threads each manipulating a
- * different CertPathBuilderSpi instance need not synchronize.
- **/
-public abstract class CertPathBuilderSpi
- extends Object
-{
- /**
- * The default constructor.
- */
- public CertPathBuilderSpi() {}
-
- /**
- * Attempts to build a certification path using the specified
- * algorithm parameter set.
- *
- * @param params the algorithm parameters
- *
- * @return the result of the build algorithm
- *
- * @exception CertPathBuilderException if the builder is unable
- * to construct a certification path that satisfies the
- * specified
- * @exception parametersInvalidAlgorithmParameterException if the
- * specified parameters are inappropriate for this CertPathBuilder
- */
- public abstract CertPathBuilderResult engineBuild(CertPathParameters params)
- throws CertPathBuilderException,
- InvalidAlgorithmParameterException;
-}
diff --git a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/CertPathParameters.java b/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/CertPathParameters.java
deleted file mode 100644
index 96978bd75..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/CertPathParameters.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package org.spongycastle.jce.cert;
-
-/**
- * A specification of certification path algorithm parameters. The purpose
- * of this interface is to group (and provide type safety for) all CertPath
- * parameter specifications. All CertPath
parameter specifications must
- * implement this interface.
- **/
-public interface CertPathParameters extends Cloneable
-{
- /**
- * Makes a copy of this CertPathParameters
. Changes to the
- * copy will not affect the original and vice versa.
- *
- * @return a copy of this CertPathParameters
- **/
- public Object clone();
-}
diff --git a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/CertPathValidator.java b/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/CertPathValidator.java
deleted file mode 100644
index d2e599312..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/CertPathValidator.java
+++ /dev/null
@@ -1,276 +0,0 @@
-package org.spongycastle.jce.cert;
-
-import java.security.InvalidAlgorithmParameterException;
-import java.security.NoSuchAlgorithmException;
-import java.security.NoSuchProviderException;
-import java.security.Provider;
-import java.security.Security;
-
-/**
- * A class for validating certification paths (also known as certificate
- * chains).
- *
- * This class uses a provider-based architecture, as described in the Java
- * Cryptography Architecture. To create a CertPathValidator
,
- * call one of the static getInstance
methods, passing in the
- * algorithm name of the CertPathValidator
desired and
- * optionally the name of the provider desired.
- *
- * Once a CertPathValidator
object has been created, it can
- * be used to validate certification paths by calling the {@link #validate
- * validate} method and passing it the CertPath
to be validated
- * and an algorithm-specific set of parameters. If successful, the result is
- * returned in an object that implements the
- * CertPathValidatorResult
interface.
- *
- * Concurrent Access
- *
- * The static methods of this class are guaranteed to be thread-safe.
- * Multiple threads may concurrently invoke the static methods defined in
- * this class with no ill effects.
- *
- * However, this is not true for the non-static methods defined by this class.
- * Unless otherwise documented by a specific provider, threads that need to
- * access a single CertPathValidator
instance concurrently should
- * synchronize amongst themselves and provide the necessary locking. Multiple
- * threads each manipulating a different CertPathValidator
- * instance need not synchronize.
- *
- * @see CertPath
- **/
-public class CertPathValidator extends Object
-{
- private CertPathValidatorSpi validatorSpi;
-
- private Provider provider;
-
- private String algorithm;
-
- /**
- * Creates a CertPathValidator
object of the given algorithm,
- * and encapsulates the given provider implementation (SPI object) in it.
- *
- * @param validatorSpi
- * the provider implementation
- * @param provider
- * the provider
- * @param algorithm
- * the algorithm name
- */
- protected CertPathValidator(
- CertPathValidatorSpi validatorSpi,
- Provider provider,
- String algorithm)
- {
- this.validatorSpi = validatorSpi;
- this.provider = provider;
- this.algorithm = algorithm;
- }
-
- /**
- * Returns a CertPathValidator
object that implements the
- * specified algorithm.
- *
- * If the default provider package provides an implementation of the
- * specified CertPathValidator
algorithm, an instance of
- * CertPathValidator
containing that implementation is
- * returned. If the requested algorithm is not available in the default
- * package, other packages are searched.
- *
- * @param algorithm
- * the name of the requested CertPathValidator
- * algorithm
- *
- * @return a CertPathValidator
object that implements the
- * specified algorithm
- *
- * @exception NoSuchAlgorithmException
- * if the requested algorithm is not available in the default
- * provider package or any of the other provider packages
- * that were searched
- */
- public static CertPathValidator getInstance(String algorithm)
- throws NoSuchAlgorithmException
- {
- try
- {
- CertUtil.Implementation imp = CertUtil.getImplementation(
- "CertPathValidator", algorithm, (String)null);
- if (imp != null)
- {
- return new CertPathValidator((CertPathValidatorSpi)imp
- .getEngine(), imp.getProvider(), algorithm);
- }
- }
- catch (NoSuchProviderException ex)
- {
- }
- throw new NoSuchAlgorithmException("can't find algorithm " + algorithm);
- }
-
- /**
- * Returns a CertPathValidator
object that implements the
- * specified algorithm, as supplied by the specified provider.
- *
- * @param algorithm
- * the name of the requested CertPathValidator
- * algorithm
- * @param provider
- * the name of the provider
- *
- * @return a CertPathValidator
object that implements the
- * specified algorithm, as supplied by the specified provider
- *
- * @exception NoSuchAlgorithmException
- * if the requested algorithm is not available from the
- * specified provider
- * @exception NoSuchProviderException
- * if the provider has not been configured
- * @exception IllegalArgumentException
- * if the provider
is null
- */
- public static CertPathValidator getInstance(String algorithm,
- String provider) throws NoSuchAlgorithmException,
- NoSuchProviderException
- {
- if (provider == null)
- {
- throw new IllegalArgumentException("provider must be non-null");
- }
-
- CertUtil.Implementation imp = CertUtil.getImplementation(
- "CertPathValidator", algorithm, provider);
- if (imp != null)
- {
- return new CertPathValidator((CertPathValidatorSpi)imp.getEngine(),
- imp.getProvider(), algorithm);
- }
- throw new NoSuchAlgorithmException("can't find algorithm " + algorithm);
- }
-
- /**
- * Returns a CertPathValidator
object that implements the
- * specified algorithm, as supplied by the specified provider. Note: the
- * provider
doesn't have to be registered.
- *
- * @param algorithm
- * the name of the requested CertPathValidator
- * algorithm
- * @param provider
- * the provider
- *
- * @return a CertPathValidator
object that implements the
- * specified algorithm, as supplied by the specified provider
- *
- * @exception NoSuchAlgorithmException
- * if the requested algorithm is not available from the
- * specified provider
- * @exception IllegalArgumentException
- * if the provider
is null
- */
- public static CertPathValidator getInstance(String algorithm,
- Provider provider) throws NoSuchAlgorithmException
- {
- if (provider == null)
- {
- throw new IllegalArgumentException("provider must be non-null");
- }
-
- CertUtil.Implementation imp = CertUtil.getImplementation(
- "CertPathValidator", algorithm, provider);
- if (imp != null)
- {
- return new CertPathValidator((CertPathValidatorSpi)imp.getEngine(),
- provider, algorithm);
- }
- throw new NoSuchAlgorithmException("can't find algorithm " + algorithm);
- }
-
- /**
- * Returns the Provider
of this
- * CertPathValidator
.
- *
- * @return the Provider
of this
- * CertPathValidator
- */
- public final Provider getProvider()
- {
- return provider;
- }
-
- /**
- * Returns the algorithm name of this CertPathValidator
.
- *
- * @return the algorithm name of this CertPathValidator
- */
- public final String getAlgorithm()
- {
- return algorithm;
- }
-
- /**
- * Validates the specified certification path using the specified algorithm
- * parameter set.
- *
- * The CertPath
specified must be of a type that is supported
- * by the validation algorithm, otherwise an
- * InvalidAlgorithmParameterException
will be thrown. For
- * example, a CertPathValidator
that implements the PKIX
- * algorithm validates CertPath
objects of type X.509.
- *
- * @param certPath
- * the CertPath
to be validated
- * @param params
- * the algorithm parameters
- *
- * @return the result of the validation algorithm
- *
- * @exception CertPathValidatorException
- * if the CertPath
does not validate
- * @exception InvalidAlgorithmParameterException
- * if the specified parameters or the type of the specified
- * CertPath
are inappropriate for this
- * CertPathValidator
- */
- public final CertPathValidatorResult validate(CertPath certPath,
- CertPathParameters params) throws CertPathValidatorException,
- InvalidAlgorithmParameterException
- {
- return validatorSpi.engineValidate(certPath, params);
- }
-
- /**
- * Returns the default CertPathValidator
type as specified in
- * the Java security properties file, or the string "PKIX" if no
- * such property exists. The Java security properties file is located in the
- * file named <JAVA_HOME>/lib/security/java.security, where
- * <JAVA_HOME> refers to the directory where the SDK was installed.
- *
- * The default CertPathValidator
type can be used by
- * applications that do not want to use a hard-coded type when calling one
- * of the getInstance
methods, and want to provide a default
- * type in case a user does not specify its own.
- *
- * The default CertPathValidator
type can be changed by
- * setting the value of the "certpathvalidator.type" security property (in
- * the Java security properties file) to the desired type.
- *
- * @return the default CertPathValidator
type as specified in
- * the Java security properties file, or the string "PKIX"
- * if no such property exists.
- */
- public static final String getDefaultType()
- {
- String defaulttype = null;
- defaulttype = Security.getProperty("certpathvalidator.type");
-
- if (defaulttype == null || defaulttype.length() <= 0)
- {
- return "PKIX";
- }
- else
- {
- return defaulttype;
- }
- }
-}
diff --git a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/CertPathValidatorException.java b/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/CertPathValidatorException.java
deleted file mode 100644
index bcd67a4a7..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/CertPathValidatorException.java
+++ /dev/null
@@ -1,271 +0,0 @@
-package org.spongycastle.jce.cert;
-
-import java.io.PrintStream;
-import java.io.PrintWriter;
-import java.security.GeneralSecurityException;
-
-/**
- * An exception indicating one of a variety of problems encountered when
- * validating a certification path.
- *
- * A CertPathValidatorException
provides support for wrapping
- * exceptions. The {@link #getCause getCause} method returns the throwable,
- * if any, that caused this exception to be thrown.
- *
- * A CertPathValidatorException
may also include the
- * certification path that was being validated when the exception was thrown
- * and the index of the certificate in the certification path that caused the
- * exception to be thrown. Use the {@link #getCertPath getCertPath} and
- * {@link #getIndex getIndex} methods to retrieve this information.
- *
- * Concurrent Access
- *
- * Unless otherwise specified, the methods defined in this class are not
- * thread-safe. Multiple threads that need to access a single
- * object concurrently should synchronize amongst themselves and
- * provide the necessary locking. Multiple threads each manipulating
- * separate objects need not synchronize.
- *
- * @see CertPathValidator
- **/
-public class CertPathValidatorException extends GeneralSecurityException
-{
- private Throwable cause;
- private CertPath certPath;
- private int index = -1;
-
- /**
- * Creates a CertPathValidatorException
with no detail
- * message.
- */
- public CertPathValidatorException()
- {
- super();
- }
-
- /**
- * Creates a CertPathValidatorException
with the given detail
- * message. A detail message is a String
that describes this
- * particular exception.
- *
- * @param messag
- * the detail message
- */
- public CertPathValidatorException(String message)
- {
- super(message);
- }
-
- /**
- * Creates a CertPathValidatorException
with the specified
- * detail message and cause.
- *
- * @param msg
- * the detail message
- * @param cause
- * the cause (which is saved for later retrieval by the
- * {@link #getCause getCause()} method). (A null
- * value is permitted, and indicates that the cause is
- * nonexistent or unknown.)
- */
- public CertPathValidatorException(String message, Throwable cause)
- {
- super(message);
- this.cause = cause;
- }
-
- /**
- * Creates a CertPathValidatorException
with the specified
- * detail message, cause, certification path, and index.
- *
- * @param msg
- * the detail message (or null
if none)
- * @param cause
- * the cause (or null
if none)
- * @param certPath
- * the certification path that was in the process of being
- * validated when the error was encountered
- * @param index
- * the index of the certificate in the certification path that
- * caused the error (or -1 if not applicable). Note that the list
- * of certificates in a CertPath
is zero based.
- *
- * @exception IndexOutOfBoundsException
- * if the index is out of range
- * (index < -1 || (certPath != null && index >=
- * certPath.getCertificates().size())
- * @exception IllegalArgumentException
- * if certPath
is null
and
- * index
is not -1
- */
- public CertPathValidatorException(
- String message,
- Throwable cause,
- CertPath certPath,
- int index)
- {
- super(message);
-
- if (certPath == null && index != -1)
- {
- throw new IllegalArgumentException(
- "certPath = null and index != -1");
- }
- if (index < -1
- || (certPath != null && index >= certPath.getCertificates()
- .size()))
- {
- throw new IndexOutOfBoundsException(
- " index < -1 or out of bound of certPath.getCertificates()");
- }
-
- this.cause = cause;
- this.certPath = certPath;
- this.index = index;
- }
-
- /**
- * Creates a CertPathValidatorException
that wraps the
- * specified throwable. This allows any exception to be converted into a
- * CertPathValidatorException
, while retaining information
- * about the wrapped exception, which may be useful for debugging. The
- * detail message is set to (cause==null ? null : cause.toString()
- *
)
- * (which typically contains the class and detail message of cause).
- *
- * @param cause
- * the cause (which is saved for later retrieval by the
- * {@link #getCause getCause()} method). (A null
- * value is permitted, and indicates that the cause is
- * nonexistent or unknown.)
- */
- public CertPathValidatorException(Throwable cause)
- {
- this.cause = cause;
- }
-
- /**
- * Returns the detail message for this
- * CertPathValidatorException
.
- *
- * @return the detail message, or null
if neither the message
- * nor cause were specified
- */
- public String getMessage()
- {
- String message = super.getMessage();
-
- if (message != null)
- {
- return message;
- }
-
- if (cause != null)
- {
- return cause.getMessage();
- }
-
- return null;
- }
-
- /**
- * Returns the certification path that was being validated when the
- * exception was thrown.
- *
- * @return the CertPath
that was being validated when the
- * exception was thrown (or null
if not specified)
- */
- public CertPath getCertPath()
- {
- return certPath;
- }
-
- /**
- * Returns the index of the certificate in the certification path that
- * caused the exception to be thrown. Note that the list of certificates in
- * a CertPath
is zero based. If no index has been set, -1 is
- * returned.
- *
- * @return the index that has been set, or -1 if none has been set
- */
- public int getIndex()
- {
- return index;
- }
-
- /**
- * Returns the cause of this CertPathValidatorException
or
- * null
if the cause is nonexistent or unknown.
- *
- * @return the cause of this throwable or null
if the cause
- * is nonexistent or unknown.
- */
- public Throwable getCause()
- {
- return cause;
- }
-
- /**
- * Returns a string describing this exception, including a description of
- * the internal (wrapped) cause if there is one.
- *
- * @return a string representation of this
- * CertPathValidatorException
- */
- public String toString()
- {
- StringBuffer sb = new StringBuffer();
- String s = getMessage();
- if (s != null)
- {
- sb.append(s);
- }
- if (getIndex() >= 0)
- {
- sb.append("index in certpath: ").append(getIndex()).append('\n');
- sb.append(getCertPath());
- }
- return sb.toString();
- }
-
- /**
- * Prints a stack trace to System.err
, including the
- * backtrace of the cause, if any.
- */
- public void printStackTrace()
- {
- printStackTrace(System.err);
- }
-
- /**
- * Prints a stack trace to a PrintStream
, including the
- * backtrace of the cause, if any.
- *
- * @param ps
- * the PrintStream
to use for output
- */
- public void printStackTrace(PrintStream ps)
- {
- super.printStackTrace(ps);
- if (getCause() != null)
- {
- getCause().printStackTrace(ps);
- }
- }
-
- /**
- * Prints a stack trace to a PrintWriter
, including the
- * backtrace of the cause, if any.
- *
- * @param pw
- * the PrintWriter
to use for output
- */
- public void printStackTrace(PrintWriter pw)
- {
- super.printStackTrace(pw);
- if (getCause() != null)
- {
- getCause().printStackTrace(pw);
- }
- }
-}
diff --git a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/CertPathValidatorResult.java b/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/CertPathValidatorResult.java
deleted file mode 100644
index e31b23f29..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/CertPathValidatorResult.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package org.spongycastle.jce.cert;
-
-/**
- * A specification of the result of a certification path validator algorithm.
- *
- * The purpose of this interface is to group (and provide type safety
- * for) all certification path validator results. All results returned
- * by the {@link CertPathValidator#validate CertPathValidator.validate}
- * method must implement this interface.
- *
- * @see CertPathValidator
- **/
-public interface CertPathValidatorResult extends Cloneable
-{
- /**
- * Makes a copy of this CertPathValidatorResult
. Changes to the
- * copy will not affect the original and vice versa.
- *
- * @return a copy of this CertPathValidatorResult
- */
- public Object clone();
-}
diff --git a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/CertPathValidatorSpi.java b/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/CertPathValidatorSpi.java
deleted file mode 100644
index 39f706d21..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/CertPathValidatorSpi.java
+++ /dev/null
@@ -1,59 +0,0 @@
-package org.spongycastle.jce.cert;
-
-import java.security.InvalidAlgorithmParameterException;
-
-/**
- *
- * The Service Provider Interface (SPI)
- * for the {@link CertPathValidator CertPathValidator} class. All
- * CertPathValidator
implementations must include a class (the
- * SPI class) that extends this class (CertPathValidatorSpi
)
- * and implements all of its methods. In general, instances of this class
- * should only be accessed through the CertPathValidator
class.
- * For details, see the Java Cryptography Architecture.
- *
- * Concurrent Access
- *
- * Instances of this class need not be protected against concurrent
- * access from multiple threads. Threads that need to access a single
- * CertPathValidatorSpi
instance concurrently should synchronize
- * amongst themselves and provide the necessary locking before calling the
- * wrapping CertPathValidator
object.
- *
- * However, implementations of CertPathValidatorSpi
may still
- * encounter concurrency issues, since multiple threads each
- * manipulating a different CertPathValidatorSpi
instance need not
- * synchronize.
- **/
-public abstract class CertPathValidatorSpi extends Object
-{
- /**
- * The default constructor.
- */
- public CertPathValidatorSpi() {}
-
- /**
- * Validates the specified certification path using the specified
- * algorithm parameter set.
- *
- * The CertPath
specified must be of a type that is
- * supported by the validation algorithm, otherwise an
- * InvalidAlgorithmParameterException
will be thrown. For
- * example, a CertPathValidator
that implements the PKIX
- * algorithm validates CertPath
objects of type X.509.
- *
- * @param certPath the CertPath
to be validated
- * @param params the algorithm parameters
- *
- * @return the result of the validation algorithm
- *
- * @exception CertPathValidatorException if the CertPath
- * does not validate
- * @exception InvalidAlgorithmParameterException if the specified
- * parameters or the type of the specified CertPath
are
- * inappropriate for this CertPathValidator
- */
- public abstract CertPathValidatorResult engineValidate(CertPath certPath, CertPathParameters params)
- throws CertPathValidatorException,
- InvalidAlgorithmParameterException;
-}
diff --git a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/CertSelector.java b/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/CertSelector.java
deleted file mode 100644
index 2f2b0b468..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/CertSelector.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package org.spongycastle.jce.cert;
-
-import java.security.cert.Certificate;
-
-/**
- * A selector that defines a set of criteria for selecting
- * Certificate
s. Classes that implement this interface
- * are often used to specify which Certificate
s should
- * be retrieved from a CertStore
.
- *
- * Concurrent Access
- *
- * Unless otherwise specified, the methods defined in this interface are not
- * thread-safe. Multiple threads that need to access a single
- * object concurrently should synchronize amongst themselves and
- * provide the necessary locking. Multiple threads each manipulating
- * separate objects need not synchronize.
- *
- * @see Certificate
- * @see CertStore
- * @see CertStore#getCertificates
- */
-public interface CertSelector extends Cloneable
-{
- /**
- * Decides whether a Certificate
should be selected.
- *
- * @param cert the Certificate
to be checked
- * @return true
if the Certificate
- * should be selected, false
otherwise
- */
- public boolean match(Certificate cert);
-
- /**
- * Makes a copy of this CertSelector
. Changes to the
- * copy will not affect the original and vice versa.
- *
- * @return a copy of this CertSelector
- */
- public Object clone();
-}
diff --git a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/CertStore.java b/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/CertStore.java
deleted file mode 100644
index 8a284262a..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/CertStore.java
+++ /dev/null
@@ -1,382 +0,0 @@
-package org.spongycastle.jce.cert;
-
-import java.security.InvalidAlgorithmParameterException;
-import java.security.NoSuchAlgorithmException;
-import java.security.NoSuchProviderException;
-import java.security.Provider;
-import java.security.Security;
-import java.util.Collection;
-
-/**
- * A class for retrieving Certificate
s and CRL
s
- * from a repository.
- *
- * This class uses a provider-based architecture, as described in the
- * Java Cryptography Architecture.
- * To create a CertStore
, call one of the static
- * getInstance
methods, passing in the type of
- * CertStore
desired, any applicable initialization parameters
- * and optionally the name of the provider desired.
- *
- * Once the CertStore
has been created, it can be used to
- * retrieve Certificate
s and CRL
s by calling its
- * {@link #getCertificates(CertSelector selector) getCertificates} and
- * {@link #getCRLs(CRLSelector selector) getCRLs} methods.
- *
- * Unlike a {@link java.security.KeyStore KeyStore}, which provides access
- * to a cache of private keys and trusted certificates, a
- * CertStore
is designed to provide access to a potentially
- * vast repository of untrusted certificates and CRLs. For example, an LDAP
- * implementation of CertStore
provides access to certificates
- * and CRLs stored in one or more directories using the LDAP protocol and the
- * schema as defined in the RFC service attribute. See Appendix A in the
- * Java Certification Path API Programmer's Guide for more information about
- * standard CertStore
types.
- *
- * Concurrent Access
- *
- * All public methods of CertStore
objects must be thread-safe.
- * That is, multiple threads may concurrently invoke these methods on a
- * single CertStore
object (or more than one) with no
- * ill effects. This allows a CertPathBuilder
to search for a
- * CRL while simultaneously searching for further certificates, for instance.
- *
- * The static methods of this class are also guaranteed to be thread-safe.
- * Multiple threads may concurrently invoke the static methods defined in
- * this class with no ill effects.
- *
- **/
-public class CertStore extends Object
-{
- private CertStoreSpi storeSpi;
-
- private Provider provider;
-
- private String type;
-
- private CertStoreParameters params;
-
- /**
- * Creates a CertStore
object of the given type, and
- * encapsulates the given provider implementation (SPI object) in it.
- *
- * @param storeSpi
- * the provider implementation
- * @param provider
- * the provider
- * @param type
- * the type
- * @param params
- * the initialization parameters (may be null
)
- */
- protected CertStore(
- CertStoreSpi storeSpi,
- Provider provider,
- String type,
- CertStoreParameters params)
- {
- this.storeSpi = storeSpi;
- this.provider = provider;
- this.type = type;
- this.params = params;
- }
-
- /**
- * Returns a Collection
of Certificate
s that
- * match the specified selector. If no Certificate
s match
- * the selector, an empty Collection
will be returned.
- *
- * For some CertStore
types, the resulting
- * Collection
may not contain all of the
- * Certificate
s that match the selector. For instance, an
- * LDAP CertStore
may not search all entries in the
- * directory. Instead, it may just search entries that are likely to contain
- * the Certificate
s it is looking for.
- *
- * Some CertStore
implementations (especially LDAP
- * CertStore
s) may throw a CertStoreException
- * unless a non-null CertSelector
is provided that includes
- * specific criteria that can be used to find the certificates. Issuer
- * and/or subject names are especially useful criteria.
- *
- * @param selector
- * A CertSelector
used to select which
- * Certificate
s should be returned. Specify
- * null
to return all Certificate
s
- * (if supported).
- *
- * @return A Collection
of Certificate
s that
- * match the specified selector (never null
)
- * @exception CertStoreException
- * if an exception occurs
- */
- public final Collection getCertificates(CertSelector selector)
- throws CertStoreException
- {
- return storeSpi.engineGetCertificates(selector);
- }
-
- /**
- * Returns a Collection
of CRL
s that match
- * the specified selector. If no CRL
s match the selector, an
- * empty Collection
will be returned.
- *
- * For some CertStore
types, the resulting
- * Collection
may not contain all of the
- * CRL
s that match the selector. For instance, an LDAP
- * CertStore
may not search all entries in the directory.
- * Instead, it may just search entries that are likely to contain the
- * CRL
s it is looking for.
- *
- * Some CertStore
implementations (especially LDAP
- * CertStore
s) may throw a CertStoreException
- * unless a non-null CRLSelector
is provided that includes
- * specific criteria that can be used to find the CRLs. Issuer names and/or
- * the certificate to be checked are especially useful.
- *
- * @param selector
- * A CRLSelector
used to select which
- * CRL
s should be returned. Specify
- * null
to return all CRL
s (if
- * supported).
- *
- * @return A Collection
of CRL
s that match
- * the specified selector (never null
)
- *
- * @exception CertStoreException
- * if an exception occurs
- */
- public final Collection getCRLs(CRLSelector selector)
- throws CertStoreException
- {
- return storeSpi.engineGetCRLs(selector);
- }
-
- /**
- * Returns a CertStore
object that implements the specified
- * CertStore
type and is initialized with the specified
- * parameters.
- *
- * If the default provider package provides an implementation of the
- * specified CertStore
type, an instance of
- * CertStore
containing that implementation is returned. If
- * the requested type is not available in the default package, other
- * packages are searched.
- *
- * The CertStore
that is returned is initialized with the
- * specified CertStoreParameters
. The type of parameters
- * needed may vary between different types of CertStore
s.
- * Note that the specified CertStoreParameters
object is
- * cloned.
- *
- * @param type
- * the name of the requested CertStore
type
- * @param params
- * the initialization parameters (may be null
)
- *
- * @return a CertStore
object that implements the specified
- * CertStore
type
- *
- * @exception NoSuchAlgorithmException
- * if the requested type is not available in the default
- * provider package or any of the other provider packages
- * that were searched
- * @exception InvalidAlgorithmParameterException
- * if the specified initialization parameters are
- * inappropriate for this CertStore
- */
- public static CertStore getInstance(String type, CertStoreParameters params)
- throws InvalidAlgorithmParameterException, NoSuchAlgorithmException
- {
- try
- {
- CertUtil.Implementation imp = CertUtil.getImplementation(
- "CertStore", type, (String)null,
- new Class[] { CertStoreParameters.class },
- new Object[] { params });
- if (imp != null)
- {
- return new CertStore((CertStoreSpi)imp.getEngine(), imp
- .getProvider(), type, params);
- }
- }
- catch (NoSuchProviderException ex)
- {
- }
- throw new NoSuchAlgorithmException("can't find type " + type);
- }
-
- /**
- * Returns a CertStore
object that implements the specified
- * CertStore
type, as supplied by the specified provider and
- * initialized with the specified parameters.
- *
- * The CertStore
that is returned is initialized with the
- * specified CertStoreParameters
. The type of parameters
- * needed may vary between different types of CertStore
s.
- * Note that the specified CertStoreParameters
object is
- * cloned.
- *
- * @param type
- * the requested CertStore
type
- * @param params
- * the initialization parameters (may be null
)
- * @param provider
- * the name of the provider
- *
- * @return a CertStore
object that implements the specified
- * type, as supplied by the specified provider
- *
- * @exception NoSuchAlgorithmException
- * if the requested type is not available from the specified
- * provider
- * @exception InvalidAlgorithmParameterException
- * if the specified initialization parameters are
- * inappropriate for this CertStore
- * @exception NoSuchProviderException
- * if the provider has not been configured
- * @exception IllegalArgumentException
- * if the provider
is null
- */
- public static CertStore getInstance(String type,
- CertStoreParameters params, String provider)
- throws InvalidAlgorithmParameterException,
- NoSuchAlgorithmException, NoSuchProviderException,
- IllegalArgumentException
- {
- if (provider == null)
- {
- throw new IllegalArgumentException("provider must be non-null");
- }
-
- CertUtil.Implementation imp = CertUtil.getImplementation("CertStore",
- type, provider, new Class[] { CertStoreParameters.class },
- new Object[] { params });
- if (imp != null)
- {
- return new CertStore((CertStoreSpi)imp.getEngine(), imp
- .getProvider(), type, params);
- }
- throw new NoSuchAlgorithmException("can't find type " + type);
- }
-
- /**
- * Returns a CertStore
object that implements the specified
- * CertStore
type, as supplied by the specified provider and
- * initialized with the specified parameters. Note: the
- * provider
doesn't have to be registered.
- *
- * The CertStore
that is returned is initialized with the
- * specified CertStoreParameters
. The type of parameters
- * needed may vary between different types of CertStore
s.
- * Note that the specified CertStoreParameters
object is
- * cloned.
- *
- * @param type
- * the requested CertStore
type
- * @param params
- * the initialization parameters (may be null
)
- * @param provider
- * the provider
- *
- * @return a CertStore
object that implements the specified
- * type, as supplied by the specified provider
- *
- * @exception NoSuchAlgorithmException
- * if the requested type is not available from the specified
- * provider
- * @exception InvalidAlgorithmParameterException
- * if the specified initialization parameters are
- * inappropriate for this CertStore
- * @exception IllegalArgumentException
- * if the provider
is null
- */
- public static CertStore getInstance(String type,
- CertStoreParameters params, Provider provider)
- throws NoSuchAlgorithmException,
- InvalidAlgorithmParameterException, IllegalArgumentException
- {
- if (provider == null)
- {
- throw new IllegalArgumentException("provider must be non-null");
- }
- CertUtil.Implementation imp = CertUtil.getImplementation("CertStore",
- type, provider, new Class[] { CertStoreParameters.class },
- new Object[] { params });
- if (imp != null)
- {
- return new CertStore((CertStoreSpi)imp.getEngine(), provider, type,
- params);
- }
- throw new NoSuchAlgorithmException("can't find type " + type);
- }
-
- /**
- * Returns the parameters used to initialize this CertStore
.
- * Note that the CertStoreParameters
object is cloned before
- * it is returned.
- *
- * @return the parameters used to initialize this CertStore
- * (may be null
)
- */
- public final CertStoreParameters getCertStoreParameters()
- {
- return params;
- }
-
- /**
- * Returns the type of this CertStore
.
- *
- * @return the type of this CertStore
- */
- public final String getType()
- {
- return type;
- }
-
- /**
- * Returns the provider of this CertStore
.
- *
- * @return the provider of this CertStore
- */
- public final Provider getProvider()
- {
- return provider;
- }
-
- /**
- * Returns the default CertStore
type as specified in the
- * Java security properties file, or the string "LDAP" if no such
- * property exists. The Java security properties file is located in the file
- * named <JAVA_HOME>/lib/security/java.security, where
- * <JAVA_HOME> refers to the directory where the SDK was installed.
- *
- * The default CertStore
type can be used by applications
- * that do not want to use a hard-coded type when calling one of the
- * getInstance
methods, and want to provide a default
- * CertStore
type in case a user does not specify its own.
- *
- * The default CertStore
type can be changed by setting the
- * value of the "certstore.type" security property (in the Java security
- * properties file) to the desired type.
- *
- * @return the default CertStore
type as specified in the
- * Java security properties file, or the string "LDAP" if
- * no such property exists.
- */
- public static final String getDefaultType()
- {
- String defaulttype = null;
- defaulttype = Security.getProperty("certstore.type");
-
- if (defaulttype == null || defaulttype.length() <= 0)
- {
- return "LDAP";
- }
- else
- {
- return defaulttype;
- }
- }
-}
-
diff --git a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/CertStoreException.java b/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/CertStoreException.java
deleted file mode 100644
index 56c9fcfd2..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/CertStoreException.java
+++ /dev/null
@@ -1,187 +0,0 @@
-package org.spongycastle.jce.cert;
-
-import java.io.PrintStream;
-import java.io.PrintWriter;
-import java.security.GeneralSecurityException;
-
-/**
- * An exception indicating one of a variety of problems retrieving
- * certificates and CRLs from a CertStore
.
- *
- * A CertStoreException
provides support for wrapping
- * exceptions. The {@link #getCause getCause} method returns the throwable,
- * if any, that caused this exception to be thrown.
- *
- * Concurrent Access
- *
- * Unless otherwise specified, the methods defined in this class are not
- * thread-safe. Multiple threads that need to access a single
- * object concurrently should synchronize amongst themselves and
- * provide the necessary locking. Multiple threads each manipulating
- * separate objects need not synchronize.
- *
- * @see CertStore
- **/
-public class CertStoreException extends GeneralSecurityException
-{
- private Throwable cause;
-
- /**
- * Creates a CertStoreException
with null
as
- * its detail message.
- */
- public CertStoreException()
- {
- super();
- }
-
- /**
- * Creates a CertStoreException
with the given detail
- * message. A detail message is a String
that describes this
- * particular exception.
- *
- * @param messag
- * the detail message
- */
- public CertStoreException(String message)
- {
- super(message);
- }
-
- /**
- * Creates a CertStoreException
with the specified detail
- * message and cause.
- *
- * @param messag
- * the detail message
- * @param cause
- * the cause (which is saved for later retrieval by the
- * {@link #getCause getCause()} method). (A null
- * value is permitted, and indicates that the cause is
- * nonexistent or unknown.)
- */
- public CertStoreException(String message, Throwable cause)
- {
- super(message);
- this.cause = cause;
- }
-
- /**
- * Creates a CertStoreException
that wraps the specified
- * throwable. This allows any exception to be converted into a
- * CertStoreException
, while retaining information about the
- * cause, which may be useful for debugging. The detail message is set to (cause==null ? null : cause.toString()
)
- * (which typically contains the class and detail message of cause).
- *
- * @param cause
- * the cause (which is saved for later retrieval by the
- * {@link #getCause getCause()} method). (A null
- * value is permitted, and indicates that the cause is
- * nonexistent or unknown.)
- */
- public CertStoreException(Throwable cause)
- {
- this.cause = cause;
- }
-
- /**
- * Returns the detail message for this CertStoreException
.
- *
- * @return the detail message, or null
if neither the message
- * nor cause were specified
- */
- public String getMessage()
- {
- String message = super.getMessage();
-
- if (message == null && cause == null)
- {
- return null;
- }
-
- StringBuffer s = new StringBuffer();
- if (message != null)
- {
- s.append(message).append('\n');
- }
- if (cause != null)
- {
- s.append("Cause:\n").append(cause.getMessage());
- }
- return s.toString();
- }
-
- /**
- * Returns the cause of this CertStoreException
or
- * null
if the cause is nonexistent or unknown.
- *
- * @return the cause of this throwable or null
if the cause
- * is nonexistent or unknown.
- */
- public Throwable getCause()
- {
- return cause;
- }
-
- /**
- * Returns a string describing this exception, including a description of
- * the internal (wrapped) cause if there is one.
- *
- * @return a string representation of this CertStoreException
- */
- public String toString()
- {
- String message = getMessage();
- if (message == null)
- {
- return "";
- }
-
- return message;
- }
-
- /**
- * Prints a stack trace to System.err
, including the
- * backtrace of the cause, if any.
- */
- public void printStackTrace()
- {
- printStackTrace(System.err);
- }
-
- /**
- * Prints a stack trace to a PrintStream
, including the
- * backtrace of the cause, if any.
- *
- * @param ps
- * the PrintStream
to use for output
- */
- public void printStackTrace(PrintStream ps)
- {
- super.printStackTrace(ps);
- if (cause != null)
- {
- cause.printStackTrace(ps);
- }
- }
-
- /**
- * Prints a stack trace to a PrintWriter
, including the
- * backtrace of the cause, if any.
- *
- * @param pw
- * the PrintWriter
to use for output
- */
- public void printStackTrace(PrintWriter pw)
- {
- if (cause != null)
- {
- cause.printStackTrace(pw);
- }
- super.printStackTrace(pw);
- if (cause != null)
- {
- cause.printStackTrace(pw);
- }
- }
-}
diff --git a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/CertStoreParameters.java b/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/CertStoreParameters.java
deleted file mode 100644
index 0ec14ede3..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/CertStoreParameters.java
+++ /dev/null
@@ -1,52 +0,0 @@
-package org.spongycastle.jce.cert;
-
-/**
- * A specification of CertStore
parameters.
- *
- * The purpose of this interface is to group (and provide type safety for)
- * all CertStore
parameter specifications. All
- * CertStore
parameter specifications must implement this
- * interface.
- *
- * Typically, a CertStoreParameters
object is passed as a parameter
- * to one of the {@link CertStore#getInstance CertStore.getInstance} methods.
- * The getInstance
method returns a CertStore
that
- * is used for retrieving Certificate
s and CRL
s. The
- * CertStore
that is returned is initialized with the specified
- * parameters. The type of parameters needed may vary between different types
- * of CertStore
s.
- *
- * @see CertStore#getInstance
- **/
-public interface CertStoreParameters extends Cloneable
-{
- /**
- * Makes a copy of this CertStoreParameters
.
- *
- * The precise meaning of "copy" may depend on the class of
- * the CertStoreParameters
object. A typical implementation
- * performs a "deep copy" of this object, but this is not an absolute
- * requirement. Some implementations may perform a "shallow copy" of some
- * or all of the fields of this object.
- *
- * Note that the CertStore.getInstance
methods make a copy
- * of the specified CertStoreParameters
. A deep copy
- * implementation of clone
is safer and more robust, as it
- * prevents the caller from corrupting a shared CertStore
by
- * subsequently modifying the contents of its initialization parameters.
- * However, a shallow copy implementation of clone
is more
- * appropriate for applications that need to hold a reference to a
- * parameter contained in the CertStoreParameters
. For example,
- * a shallow copy clone allows an application to release the resources of
- * a particular CertStore
initialization parameter immediately,
- * rather than waiting for the garbage collection mechanism. This should
- * be done with the utmost care, since the CertStore
may still
- * be in use by other threads.
- *
- * Each subclass should state the precise behavior of this method so
- * that users and developers know what to expect.
- *
- * @return a copy of this CertStoreParameters
- */
- public Object clone();
-}
diff --git a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/CertStoreSpi.java b/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/CertStoreSpi.java
deleted file mode 100644
index fd9fe6a36..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/CertStoreSpi.java
+++ /dev/null
@@ -1,104 +0,0 @@
-package org.spongycastle.jce.cert;
-
-import java.security.InvalidAlgorithmParameterException;
-import java.util.Collection;
-
-/**
- * The Service Provider Interface (SPI)
- * for the {@link CertStore CertStore} class. All CertStore
- * implementations must include a class (the SPI class) that extends
- * this class (CertStoreSpi
), provides a constructor with
- * a single argument of type CertStoreParameters
, and implements
- * all of its methods. In general, instances of this class should only be
- * accessed through the CertStore
class.
- * For details, see the Java Cryptography Architecture.
- *
- * Concurrent Access
- *
- * The public methods of all CertStoreSpi
objects must be
- * thread-safe. That is, multiple threads may concurrently invoke these
- * methods on a single CertStoreSpi
object (or more than one)
- * with no ill effects. This allows a CertPathBuilder
to search
- * for a CRL while simultaneously searching for further certificates, for
- * instance.
- *
- * Simple CertStoreSpi
implementations will probably ensure
- * thread safety by adding a synchronized
keyword to their
- * engineGetCertificates
and engineGetCRLs
methods.
- * More sophisticated ones may allow truly concurrent access.
- **/
-public abstract class CertStoreSpi
- extends Object
-{
-
- /**
- * The sole constructor.
- *
- * @param params the initialization parameters (may be null
)
- * @exception InvalidAlgorithmParameterException if the initialization
- * parameters are inappropriate for this CertStoreSpi
- */
- public CertStoreSpi(CertStoreParameters params)
- throws InvalidAlgorithmParameterException {}
-
- /**
- * Returns a Collection
of Certificate
s that
- * match the specified selector. If no Certificate
s
- * match the selector, an empty Collection
will be returned.
- *
- * For some CertStore
types, the resulting
- * Collection
may not contain all of the
- * Certificate
s that match the selector. For instance,
- * an LDAP CertStore
may not search all entries in the
- * directory. Instead, it may just search entries that are likely to
- * contain the Certificate
s it is looking for.
- *
- * Some CertStore
implementations (especially LDAP
- * CertStore
s) may throw a CertStoreException
- * unless a non-null CertSelector
is provided that includes
- * specific criteria that can be used to find the certificates. Issuer
- * and/or subject names are especially useful criteria.
- *
- * @param selector A CertSelector
used to select which
- * Certificate
s should be returned. Specify null
- * to return all Certificate
s (if supported).
- *
- * @return A Collection
of Certificate
s that
- * match the specified selector (never null
)
- *
- * @exception CertStoreException if an exception occurs
- */
- public abstract Collection engineGetCertificates(CertSelector selector)
- throws CertStoreException;
-
- /**
- * Returns a Collection
of CRL
s that
- * match the specified selector. If no CRL
s
- * match the selector, an empty Collection
will be returned.
- *
- * For some CertStore
types, the resulting
- * Collection
may not contain all of the
- * CRL
s that match the selector. For instance,
- * an LDAP CertStore
may not search all entries in the
- * directory. Instead, it may just search entries that are likely to
- * contain the CRL
s it is looking for.
- *
- * Some CertStore
implementations (especially LDAP
- * CertStore
s) may throw a CertStoreException
- * unless a non-null CRLSelector
is provided that includes
- * specific criteria that can be used to find the CRLs. Issuer names
- * and/or the certificate to be checked are especially useful.
- *
- * @param selector A CRLSelector
used to select which
- * CRL
s should be returned. Specify null
- * to return all CRL
s (if supported).
- *
- * @return A Collection
of CRL
s that
- * match the specified selector (never null
)
- *
- * @exception CertStoreException if an exception occurs
- */
- public abstract Collection engineGetCRLs(CRLSelector selector)
- throws CertStoreException;
-}
-
diff --git a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/CertUtil.java b/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/CertUtil.java
deleted file mode 100644
index 60c5e8b08..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/CertUtil.java
+++ /dev/null
@@ -1,556 +0,0 @@
-package org.spongycastle.jce.cert;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.security.InvalidAlgorithmParameterException;
-import java.security.NoSuchProviderException;
-import java.security.Provider;
-import java.security.Security;
-
-import org.spongycastle.asn1.ASN1Object;
-import org.spongycastle.asn1.ASN1ObjectIdentifier;
-import org.spongycastle.asn1.DERIA5String;
-import org.spongycastle.asn1.DEROutputStream;
-import org.spongycastle.asn1.OIDTokenizer;
-import org.spongycastle.asn1.x509.X509Name;
-import org.spongycastle.util.Strings;
-
-class CertUtil
-{
- static class Implementation
- {
- Object engine;
- Provider provider;
-
- Implementation(
- Object engine,
- Provider provider)
- {
- this.engine = engine;
- this.provider = provider;
- }
-
- Object getEngine()
- {
- return engine;
- }
-
- Provider getProvider()
- {
- return provider;
- }
- }
-
- /**
- * see if we can find an algorithm (or its alias and what it represents) in
- * the property table for the given provider.
- *
- * @return null if no algorithm found, an Implementation if it is.
- */
- static Implementation getImplementation(
- String baseName,
- String algorithm,
- Provider prov)
- {
- if (prov == null)
- {
- Provider[] provider = Security.getProviders();
-
- //
- // search every provider looking for the algorithm we want.
- //
- for (int i = 0; i != provider.length; i++)
- {
- Implementation imp = getImplementation(baseName, algorithm, provider[i]);
- if (imp != null)
- {
- return imp;
- }
- }
-
- return null;
- }
-
- String alias;
-
- while ((alias = prov.getProperty("Alg.Alias." + baseName + "." + algorithm)) != null)
- {
- algorithm = alias;
- }
-
- String className = prov.getProperty(baseName + "." + algorithm);
-
- if (className != null)
- {
- try
- {
- return new Implementation(Class.forName(className).newInstance(), prov);
- }
- catch (ClassNotFoundException e)
- {
- throw new IllegalStateException(
- "algorithm " + algorithm + " in provider " + prov.getName() + " but no class found!");
- }
- catch (Exception e)
- {
- throw new IllegalStateException(
- "algorithm " + algorithm + " in provider " + prov.getName() + " but class inaccessible: " + e.toString());
- }
- }
-
- return null;
- }
-
- /**
- * return an implementation for a given algorithm/provider.
- * If the provider is null, we grab the first avalaible who has the required algorithm.
- *
- * @return null if no algorithm found, an Implementation if it is.
- * @exception NoSuchProviderException if a provider is specified and not found.
- */
- static Implementation getImplementation(
- String baseName,
- String algorithm,
- String provider)
- throws NoSuchProviderException
- {
- if (provider == null)
- {
- Provider[] prov = Security.getProviders();
-
- //
- // search every provider looking for the algorithm we want.
- //
- for (int i = 0; i != prov.length; i++)
- {
- Implementation imp = getImplementation(baseName, algorithm, prov[i]);
- if (imp != null)
- {
- return imp;
- }
- }
- }
- else
- {
- Provider prov = Security.getProvider(provider);
-
- if (prov == null)
- {
- throw new NoSuchProviderException("Provider " + provider + " not found");
- }
-
- return getImplementation(baseName, algorithm, prov);
- }
-
- return null;
- }
-
- /**
- * see if we can find an algorithm (or its alias and what it represents) in
- * the property table for the given provider.
- *
- * @return null if no algorithm found, an Implementation if it is.
- */
- static Implementation getImplementation(String baseName, String algorithm,
- Provider prov, Class[] ctorparamtype, Object[] ctorparam)
- throws InvalidAlgorithmParameterException
- {
- String alias;
-
- while ((alias = prov.getProperty("Alg.Alias." + baseName + "."
- + algorithm)) != null)
- {
- algorithm = alias;
- }
-
- String className = prov.getProperty(baseName + "." + algorithm);
-
- if (className != null)
- {
- try
- {
- return new Implementation(Class.forName(className)
- .getConstructor(ctorparamtype).newInstance(ctorparam),
- prov);
- }
- catch (ClassNotFoundException e)
- {
- throw new IllegalStateException("algorithm " + algorithm
- + " in provider " + prov.getName()
- + " but no class found!");
- }
- catch (Exception e)
- {
- if (e instanceof InvalidAlgorithmParameterException)
- {
- throw (InvalidAlgorithmParameterException)e;
- }
-
- throw new IllegalStateException("algorithm " + algorithm
- + " in provider " + prov.getName()
- + " but class inaccessible!");
- }
- }
-
- return null;
- }
-
- /**
- * return an implementation for a given algorithm/provider. If the provider
- * is null, we grab the first avalaible who has the required algorithm.
- *
- * @return null if no algorithm found, an Implementation if it is.
- *
- * @exception NoSuchProviderException
- * if a provider is specified and not found.
- */
- static Implementation getImplementation(String baseName, String algorithm,
- String provider, Class[] ctorparamtype, Object[] ctorparam)
- throws NoSuchProviderException, InvalidAlgorithmParameterException
- {
- if (provider == null)
- {
- Provider[] prov = Security.getProviders();
-
- //
- // search every provider looking for the algorithm we want.
- //
- for (int i = 0; i != prov.length; i++)
- {
- Implementation imp = getImplementation(baseName, algorithm,
- prov[i], ctorparamtype, ctorparam);
- if (imp != null)
- {
- return imp;
- }
- }
- }
- else
- {
- Provider prov = Security.getProvider(provider);
-
- if (prov == null)
- {
- throw new NoSuchProviderException("Provider " + provider
- + " not found");
- }
-
- return getImplementation(baseName, algorithm, prov, ctorparamtype,
- ctorparam);
- }
-
- return null;
- }
-
- static byte[] parseGeneralName(int type, String data) throws IOException
- {
- byte[] encoded = null;
-
- switch (type)
- {
- case 0:
- throw new IOException(
- "unable to parse OtherName String representation");
- case 1:
- encoded = parseRfc822(data.trim());
- break;
- case 2:
- encoded = parseDNSName(data.trim());
- break;
- case 3:
- throw new IOException(
- "unable to parse ORAddress String representation");
- case 4:
- encoded = parseX509Name(data.trim());
- break;
- case 5:
- throw new IOException(
- "unable to parse EDIPartyName String representation");
- case 6:
- encoded = parseURI(data.trim());
- break;
- case 7:
- encoded = parseIP(data.trim());
- break;
- case 8:
- encoded = parseOID(data.trim());
- break;
- default:
- throw new IOException(
- "unable to parse unkown type String representation");
- }
- return encoded;
- }
-
- /**
- * Check the format of an OID.
- * Throw an IOException if the first component is not 0, 1 or 2 or the
- * second component is greater than 39.
- *
- * User {@link org.spongycastle.asn1.OIDTokenizer OIDTokenizer}
- *
- * @param the
- * OID to be checked.
- *
- * @exception IOException
- * if the first component is not 0, 1 or 2 or the second
- * component is greater than 39.
- */
- static byte[] parseOID(String oid) throws IOException
- {
- OIDTokenizer tokenizer = new OIDTokenizer(oid);
- String token;
- if (!tokenizer.hasMoreTokens())
- {
- throw new IOException("OID contains no tokens");
- }
- token = tokenizer.nextToken();
- if (token == null)
- {
- throw new IOException("OID contains no tokens");
- }
- try
- {
- int test = (Integer.valueOf(token)).intValue();
- if (test < 0 || test > 2)
- {
- throw new IOException("first token is not >= 0 and <=2");
- }
- if (!tokenizer.hasMoreTokens())
- {
- throw new IOException("OID contains only one token");
- }
- token = tokenizer.nextToken();
- if (token == null)
- {
- throw new IOException("OID contains only one token");
- }
- test = (Integer.valueOf(token)).intValue();
- if (test < 0 || test > 39)
- {
- throw new IOException("secon token is not >= 0 and <=39");
- }
- }
- catch (NumberFormatException ex)
- {
- throw new IOException("token: " + token + ": " + ex.toString());
- }
- ASN1Object derData = new ASN1ObjectIdentifier(oid);
- ByteArrayOutputStream outStream = new ByteArrayOutputStream();
- DEROutputStream derOutStream = new DEROutputStream(outStream);
- derOutStream.writeObject(derData);
- derOutStream.close();
- return outStream.toByteArray();
- }
-
- /**
- * Parse the given IPv4 or IPv6 into DER encoded byte array representation.
- *
- * @param the
- * IP in well known String format
- *
- * @return the IP as byte array
- *
- * @exception IOException
- * if the String could not be parsed
- */
- private static byte[] parseIP(String data) throws IOException
- {
- byte[] encoded = parseIPv4(data);
-
- if (encoded == null)
- {
- encoded = parseIPv6(data);
- }
-
- if (encoded == null)
- {
- throw new IOException(
- "unable to parse IP to DER encoded byte array");
- }
-
- return encoded;
- }
-
- /**
- * Parse the given IPv4 into DER encoded byte array representation.
- *
- * @param the
- * IP in well known String format
- *
- * @return the IP as byte array or null
if not parseable
- */
- private static byte[] parseIPv4(String data)
- {
- if (data.length() == 0)
- {
- return null;
- }
-
- int octet;
- int octets = 0;
- byte[] dst = new byte[4];
-
- int pos = 0;
- int start = 0;
- while (start < data.length()
- && (pos = data.indexOf('.', start)) > start && pos - start > 3)
- {
- try
- {
- octet = (Integer.valueOf(data.substring(start, pos - start)))
- .intValue();
- }
- catch (NumberFormatException ex)
- {
- return null;
- }
- if (octet < 0 || octet > 255)
- {
- return null;
- }
- dst[octets++] = (byte)(octet & 0xff);
-
- start = pos + 1;
- }
-
- if (octets < 4)
- {
- return null;
- }
-
- return dst;
- }
-
- /**
- * Parse the given IPv6 into DER encoded byte array representation.
- *
- * TODO: implement this
- *
- * @param the
- * IP in well known String format
- *
- * @return the IP as byte array or null
if not parseable
- */
- private static byte[] parseIPv6(String data)
- {
- return null;
- }
-
- /**
- * Parse the given URI into DER encoded byte array representation.
- *
- * @param the
- * URI in well known String format
- *
- * @return the URI as byte array
- *
- * @exception IOException
- * if the String could not be parsed
- */
- private static byte[] parseURI(String data) throws IOException
- {
- // TODO do parsing test
- ASN1Object derData = new DERIA5String(data);
- ByteArrayOutputStream outStream = new ByteArrayOutputStream();
- DEROutputStream derOutStream = new DEROutputStream(outStream);
- derOutStream.writeObject(derData);
- derOutStream.close();
- return outStream.toByteArray();
- }
-
- /**
- * Parse the given rfc822 addr-spec into DER encoded byte array
- * representation.
- *
- * @param the
- * rfc822 addr-spec in well known String format
- *
- * @return the rfc822 addr-spec as byte array
- *
- * @exception IOException
- * if the String could not be parsed
- */
- private static byte[] parseRfc822(String data) throws IOException
- {
- int tmpInt = data.indexOf('@');
- if (tmpInt < 0 || tmpInt >= data.length() - 1)
- {
- throw new IOException("wrong format of rfc822Name:" + data);
- }
- // TODO more test for illegal charateers
- ASN1Object derData = new DERIA5String(data);
- ByteArrayOutputStream outStream = new ByteArrayOutputStream();
- DEROutputStream derOutStream = new DEROutputStream(outStream);
- derOutStream.writeObject(derData);
- derOutStream.close();
- return outStream.toByteArray();
- }
-
- /**
- * Parse the given DNS name into DER encoded byte array representation. The
- * String must be in den preffered name syntax as defined in RFC 1034.
- *
- * @param the
- * DNS name in well known String format
- *
- * @return the DNS name as byte array
- *
- * @exception IOException
- * if the String could not be parsed
- */
- private static byte[] parseDNSName(String data) throws IOException
- {
- // TODO more test for illegal charateers
- ASN1Object derData = new DERIA5String(data);
- ByteArrayOutputStream outStream = new ByteArrayOutputStream();
- DEROutputStream derOutStream = new DEROutputStream(outStream);
- derOutStream.writeObject(derData);
- derOutStream.close();
- return outStream.toByteArray();
- }
-
- /**
- * Parse the given X.509 name into DER encoded byte array representation.
- *
- * @param the
- * X.509 name in well known String format
- *
- * @return the X.509 name as byte array
- *
- * @exception IOException
- * if the String could not be parsed
- */
- private static byte[] parseX509Name(String data) throws IOException
- {
- // TODO more test for illegal charateers
- ByteArrayOutputStream outStream = new ByteArrayOutputStream();
- DEROutputStream derOutStream = new DEROutputStream(outStream);
- derOutStream.writeObject(new X509Name(trimX509Name(data)));
- derOutStream.close();
- return outStream.toByteArray();
- }
-
- /**
- * Returns the given name converted to upper case and all multi spaces squezed
- * to one space.
- **/
- static String trimX509Name(String name)
- {
- String data = Strings.toUpperCase(name.trim());
- int pos;
- while ((pos = data.indexOf(" ")) >= 0)
- {
- data = data.substring(0, pos) + data.substring(pos + 1);
- }
- while ((pos = data.indexOf(" =")) >= 0)
- {
- data = data.substring(0, pos) + data.substring(pos + 1);
- }
- while ((pos = data.indexOf("= ")) >= 0)
- {
- data = data.substring(0, pos + 1) + data.substring(pos + 2);
- }
- return data;
- }
-}
\ No newline at end of file
diff --git a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/CertificateFactory.java b/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/CertificateFactory.java
deleted file mode 100644
index a1ead1a63..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/CertificateFactory.java
+++ /dev/null
@@ -1,183 +0,0 @@
-package org.spongycastle.jce.cert;
-
-import java.io.InputStream;
-import java.security.NoSuchProviderException;
-import java.security.Provider;
-import java.security.cert.CRL;
-import java.security.cert.CRLException;
-import java.security.cert.Certificate;
-import java.security.cert.CertificateException;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.List;
-
-/**
- **/
-public class CertificateFactory
-{
- private CertificateFactorySpi certFacSpi;
- private Provider provider;
- private String type;
-
- protected CertificateFactory(
- CertificateFactorySpi certFacSpi,
- Provider provider,
- String type)
- {
- this.certFacSpi = certFacSpi;
- this.provider = provider;
- this.type = type;
- }
-
- public final CRL generateCRL(InputStream inStream)
- throws CRLException
- {
- return certFacSpi.engineGenerateCRL(inStream);
- }
-
- public final Collection generateCRLs(InputStream inStream)
- throws CRLException
- {
- return certFacSpi.engineGenerateCRLs(inStream);
- }
-
- public final Certificate generateCertificate(InputStream inStream)
- throws CertificateException
- {
- return certFacSpi.engineGenerateCertificate(inStream);
- }
-
- public final /*Sk13 Vector*/ Collection generateCertificates(InputStream inStream)
- throws CertificateException
- {
- return certFacSpi.engineGenerateCertificates(inStream);
- }
-
- /**
- * Returns an iteration of the CertPath
encodings supported
- * by this certificate factory, with the default encoding first. See
- * Appendix A in the
- * Java Certification Path API Programmer's Guide for information about
- * standard encoding names and their formats.
- *
- * Attempts to modify the returned Iterator
via its
- * remove
method result in an
- * UnsupportedOperationException
.
- *
- * @return an Iterator
over the names of the supported
- * CertPath
encodings (as String
s)
- */
- public final Iterator getCertPathEncodings()
- {
- return certFacSpi.engineGetCertPathEncodings();
- }
-
- /**
- * Generates a CertPath
object and initializes it with
- * the data read from the InputStream
inStream. The data
- * is assumed to be in the default encoding. The name of the default
- * encoding is the first element of the Iterator
returned by
- * the {@link #getCertPathEncodings getCertPathEncodings} method.
- *
- * @param inStream an InputStream
containing the data
- *
- * @return a CertPath
initialized with the data from the
- * InputStream
- *
- * @exception CertificateException if an exception occurs while decoding
- */
- public final CertPath generateCertPath(InputStream inStream)
- throws CertificateException
- {
- return certFacSpi.engineGenerateCertPath(inStream);
- }
-
- /**
- * Generates a CertPath
object and initializes it with
- * the data read from the InputStream
inStream. The data
- * is assumed to be in the specified encoding. See Appendix A in the
- *
- * Java Certification Path API Programmer's Guide
- * for information about standard encoding names and their formats.
- *
- * @param inStream an InputStream
containing the data
- * @param encoding the encoding used for the data
- *
- * @return a CertPath
initialized with the data from the
- * InputStream
- *
- * @exception CertificateException if an exception occurs while decoding or
- * the encoding requested is not supported
- */
- public final CertPath generateCertPath(InputStream inStream, String encoding)
- throws CertificateException
- {
- return certFacSpi.engineGenerateCertPath(inStream, encoding);
- }
-
- /**
- * Generates a CertPath
object and initializes it with
- * a List
of Certificate
s.
- *
- * The certificates supplied must be of a type supported by the
- * CertificateFactory
. They will be copied out of the supplied
- * List
object.
- *
- * @param certificates a List
of Certificate
s
- *
- * @return a CertPath
initialized with the supplied list of
- * certificates
- *
- * @exception CertificateException if an exception occurs
- */
- public final CertPath generateCertPath(List certificates)
- throws CertificateException
- {
- return certFacSpi.engineGenerateCertPath(certificates);
- }
-
- public static final CertificateFactory getInstance(String type)
- throws CertificateException
- {
- try
- {
- CertUtil.Implementation imp = CertUtil.getImplementation("CertificateFactory", type, (String)null);
-
- if (imp != null)
- {
- return new CertificateFactory((CertificateFactorySpi)imp.getEngine(), imp.getProvider(), type);
- }
-
- throw new CertificateException("can't find type " + type);
- }
- catch (NoSuchProviderException e)
- {
- throw new CertificateException(type + " not found");
- }
- }
-
- public static final CertificateFactory getInstance(
- String type,
- String provider)
- throws CertificateException, NoSuchProviderException
- {
- CertUtil.Implementation imp = CertUtil.getImplementation("CertificateFactory", type, provider);
-
- if (imp != null)
- {
- return new CertificateFactory((CertificateFactorySpi)imp.getEngine(), imp.getProvider(), type);
- }
-
- throw new CertificateException("can't find type " + type);
- }
-
- public final Provider getProvider()
- {
- return provider;
- }
-
- public final String getType()
- {
- return type;
- }
-}
diff --git a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/CertificateFactorySpi.java b/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/CertificateFactorySpi.java
deleted file mode 100644
index 1bed77211..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/CertificateFactorySpi.java
+++ /dev/null
@@ -1,99 +0,0 @@
-package org.spongycastle.jce.cert;
-
-import java.io.InputStream;
-import java.security.cert.CertificateException;
-import java.util.Iterator;
-import java.util.List;
-
-public abstract class CertificateFactorySpi
- extends java.security.cert.CertificateFactorySpi
-{
- public CertificateFactorySpi()
- {
- }
-
- /**
- * Returns an iteration of the CertPath
encodings supported
- * by this certificate factory, with the default encoding first. See
- * Appendix A in the
- * Java Certification Path API Programmer's Guide
- * for information about standard encoding names.
- *
- * Attempts to modify the returned Iterator
via its
- * remove
method result in an
- * UnsupportedOperationException
.
- *
- * This method was added to version 1.4 of the Java 2 Platform
- * Standard Edition. In order to maintain backwards compatibility with
- * existing service providers, this method cannot be abstract
- * and by default throws an UnsupportedOperationException
.
- *
- * @return an Iterator
over the names of the supported
- * CertPath
encodings (as String
s)
- *
- * @exception UnsupportedOperationException if the method is not supported
- */
- public abstract Iterator engineGetCertPathEncodings();
-
- /**
- * Generates a CertPath
object and initializes it with
- * the data read from the InputStream
inStream. The data
- * is assumed to be in the default encoding.
- *
- * @param inStream an InputStream
containing the data
- *
- * @return a CertPath
initialized with the data from the
- * InputStream
- *
- * @exception CertificateException if an exception occurs while decoding
- */
- public abstract CertPath engineGenerateCertPath(InputStream inStream)
- throws CertificateException;
-
- /**
- * Generates a CertPath
object and initializes it with
- * the data read from the InputStream
inStream. The data
- * is assumed to be in the specified encoding.
- *
- * This method was added to version 1.4 of the Java 2 Platform
- * Standard Edition. In order to maintain backwards compatibility with
- * existing service providers, this method cannot be abstract
- * and by default throws an UnsupportedOperationException
.
- *
- * @param inStream an InputStream
containing the data
- * @param encoding the encoding used for the data
- *
- * @return a CertPath
initialized with the data from the
- * InputStream
- *
- * @exception CertificateException if an exception occurs while decoding or
- * the encoding requested is not supported
- * @exception UnsupportedOperationException if the method is not supported
- */
- public abstract CertPath engineGenerateCertPath(InputStream inStream, String encoding)
- throws CertificateException;
-
- /**
- * Generates a CertPath
object and initializes it with
- * a List
of Certificate
s.
- *
- * The certificates supplied must be of a type supported by the
- * CertificateFactory
. They will be copied out of the supplied
- * List
object.
- *
- * This method was added to version 1.4 of the Java 2 Platform
- * Standard Edition. In order to maintain backwards compatibility with
- * existing service providers, this method cannot be abstract
- * and by default throws an UnsupportedOperationException
.
- *
- * @param certificates a List
of Certificate
s
- *
- * @return a CertPath
initialized with the supplied list of
- * certificates
- *
- * @exception CertificateException if an exception occurs
- * @exception UnsupportedOperationException if the method is not supported
- */
- public abstract CertPath engineGenerateCertPath(List certificates)
- throws CertificateException;
-}
diff --git a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/CollectionCertStoreParameters.java b/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/CollectionCertStoreParameters.java
deleted file mode 100644
index 1692fefa8..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/CollectionCertStoreParameters.java
+++ /dev/null
@@ -1,124 +0,0 @@
-package org.spongycastle.jce.cert;
-
-import java.util.ArrayList;
-import java.util.Collection;
-
-/**
- * Parameters used as input for the Collection CertStore
- * algorithm.
- *
- * This class is used to provide necessary configuration parameters
- * to implementations of the Collection CertStore
- * algorithm. The only parameter included in this class is the
- * Collection
from which the CertStore
will
- * retrieve certificates and CRLs.
- *
- * Concurrent Access
- *
- * Unless otherwise specified, the methods defined in this class are not
- * thread-safe. Multiple threads that need to access a single
- * object concurrently should synchronize amongst themselves and
- * provide the necessary locking. Multiple threads each manipulating
- * separate objects need not synchronize.
- *
- * @see java.util.Collection
- * @see CertStore
- **/
-public class CollectionCertStoreParameters implements CertStoreParameters
-{
- private Collection collection;
-
- /**
- * Creates an instance of CollectionCertStoreParameters
which
- * will allow certificates and CRLs to be retrieved from the specified
- * Collection
. If the specified Collection
- * contains an object that is not a Certificate
or
- * CRL
, that object will be ignored by the Collection
- * CertStore
.
- *
- * The Collection
is not copied. Instead, a reference
- * is used. This allows the caller to subsequently add or remove
- * Certificates
or CRL
s from the
- * Collection
, thus changing the set of
- * Certificates
or CRL
s available to the
- * Collection CertStore
. The Collection
- * CertStore
will not modify the contents of the
- * Collection
.
- *
- * If the Collection
will be modified by one thread while
- * another thread is calling a method of a Collection CertStore
- * that has been initialized with this Collection
, the
- * Collection
must have fail-fast iterators.
- *
- * @param collection
- * a Collection
of Certificate
s
- * and CRL
s
- *
- * @exception NullPointerException
- * if collection
is null
- */
- public CollectionCertStoreParameters(Collection collection)
- {
- if (collection == null)
- {
- throw new NullPointerException("collection must be non-null");
- }
- this.collection = collection;
- }
-
- /**
- * Creates an instance of CollectionCertStoreParameters
with
- * the an empty Collection.
- */
- public CollectionCertStoreParameters()
- {
- collection = new ArrayList();
- }
-
- /**
- * Returns the Collection
from which Certificate
s
- * and CRL
s are retrieved. This is not a copy of the
- * Collection
, it is a reference. This allows the caller to
- * subsequently add or remove Certificates
or
- * CRL
s from the Collection
.
- *
- * @return the Collection
(never null)
- */
- public Collection getCollection()
- {
- return collection;
- }
-
- /**
- * Returns a copy of this object. Note that only a reference to the
- * Collection
is copied, and not the contents.
- *
- * @return the copy
- */
- public Object clone()
- {
- try
- {
- return super.clone();
- }
- catch (CloneNotSupportedException e)
- {
- /* Cannot happen */
- throw new InternalError(e.toString());
- }
- }
-
- /**
- * Returns a formatted string describing the parameters.
- *
- * @return a formatted string describing the parameters
- */
- public String toString()
- {
- StringBuffer s = new StringBuffer();
- s.append("CollectionCertStoreParameters: [\n collections:\n");
- s.append(getCollection());
- s.append("\n]");
- return s.toString();
- }
-}
diff --git a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/LDAPCertStoreParameters.java b/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/LDAPCertStoreParameters.java
deleted file mode 100644
index 306c66610..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/LDAPCertStoreParameters.java
+++ /dev/null
@@ -1,138 +0,0 @@
-package org.spongycastle.jce.cert;
-
-/**
- * Parameters used as input for the LDAP CertStore
algorithm.
- *
- * This class is used to provide necessary configuration parameters (server
- * name and port number) to implementations of the LDAP CertStore
- * algorithm.
- *
- * Concurrent Access
- *
- * Unless otherwise specified, the methods defined in this class are not
- * thread-safe. Multiple threads that need to access a single
- * object concurrently should synchronize amongst themselves and
- * provide the necessary locking. Multiple threads each manipulating
- * separate objects need not synchronize.
- *
- * @see CertStore
- **/
-public class LDAPCertStoreParameters implements CertStoreParameters
-{
- private static final int LDAP_DEFAULT_PORT = 389;
-
- /**
- * the port number of the LDAP server
- */
- private String serverName;
-
- /**
- * the DNS name of the LDAP server
- */
- private int port;
-
- /**
- * Creates an instance of LDAPCertStoreParameters
with the
- * default parameter values (server name "localhost", port 389).
- */
- public LDAPCertStoreParameters()
- {
- this("localhost", LDAP_DEFAULT_PORT);
- }
-
- /**
- * Creates an instance of LDAPCertStoreParameters
with the
- * specified server name and a default port of 389.
- *
- * @param serverName
- * the DNS name of the LDAP server
- *
- * @exception NullPointerException
- * if serverName
is null
- */
- public LDAPCertStoreParameters(String serverName)
- {
- this(serverName, LDAP_DEFAULT_PORT);
- }
-
- /**
- * Creates an instance of LDAPCertStoreParameters
with the
- * specified parameter values.
- *
- * @param serverName
- * the DNS name of the LDAP server
- * @param port
- * the port number of the LDAP server
- *
- * @exception NullPointerException
- * if serverName
is null
- */
- public LDAPCertStoreParameters(String serverName, int port)
- {
- if (serverName == null)
- {
- throw new NullPointerException("serverName must be non-null");
- }
- this.serverName = serverName;
- this.port = port;
- }
-
- /**
- * Returns the DNS name of the LDAP server.
- *
- * @return the name (not null
)
- */
- public String getServerName()
- {
- return serverName;
- }
-
- /**
- * Returns the port number of the LDAP server.
- *
- * @return the port number
- */
- public int getPort()
- {
- return port;
- }
-
- /**
- * Returns a copy of this object. Changes to the copy will not affect the
- * original and vice versa.
- *
- * Note: this method currently performs a shallow copy of the object (simply
- * calls Object.clone()
). This may be changed in a future
- * revision to perform a deep copy if new parameters are added that should
- * not be shared.
- *
- * @return the copy
- */
- public Object clone()
- {
- try
- {
- return super.clone();
- }
- catch (CloneNotSupportedException e)
- {
- /* Cannot happen */
- throw new InternalError(e.toString());
- }
- }
-
- /**
- * Returns a formatted string describing the parameters.
- *
- * @return a formatted string describing the parameters
- */
- public String toString()
- {
- StringBuffer sb = new StringBuffer();
- sb.append("LDAPCertStoreParameters: [\n");
- sb.append(" serverName: ").append(serverName).append('\n');
- sb.append(" port: ").append(port).append('\n');
- sb.append(']');
- return sb.toString();
- }
-}
diff --git a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/PKIXBuilderParameters.java b/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/PKIXBuilderParameters.java
deleted file mode 100644
index 79136ad39..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/PKIXBuilderParameters.java
+++ /dev/null
@@ -1,190 +0,0 @@
-package org.spongycastle.jce.cert;
-
-import java.security.InvalidAlgorithmParameterException;
-import java.security.InvalidParameterException;
-import java.security.KeyStore;
-import java.security.KeyStoreException;
-import java.util.Set;
-
-/**
- * Parameters used as input for the PKIX CertPathBuilder
- * algorithm.
- *
- * A PKIX CertPathBuilder
uses these parameters to {@link
- * CertPathBuilder#build build} a CertPath
which has been
- * validated according to the PKIX certification path validation algorithm.
- *
- * To instantiate a PKIXBuilderParameters
object, an
- * application must specify one or more most-trusted CAs as defined by
- * the PKIX certification path validation algorithm. The most-trusted CA
- * can be specified using one of two constructors. An application
- * can call {@link #PKIXBuilderParameters(Set, CertSelector)
- * PKIXBuilderParameters(Set, CertSelector)}, specifying a
- * Set
of TrustAnchor
objects, each of which
- * identifies a most-trusted CA. Alternatively, an application can call
- * {@link #PKIXBuilderParameters(KeyStore, CertSelector)
- * PKIXBuilderParameters(KeyStore, CertSelector)}, specifying a
- * KeyStore
instance containing trusted certificate entries, each
- * of which will be considered as a most-trusted CA.
- *
- * In addition, an application must specify constraints on the target
- * certificate that the CertPathBuilder
will attempt
- * to build a path to. The constraints are specified as a
- * CertSelector
object. These constraints should provide the
- * CertPathBuilder
with enough search criteria to find the target
- * certificate. Minimal criteria for an X509Certificate
usually
- * include the subject name and/or one or more subject alternative names.
- * If enough criteria is not specified, the CertPathBuilder
- * may throw a CertPathBuilderException
.
- *
- * Concurrent Access
- *
- * Unless otherwise specified, the methods defined in this class are not
- * thread-safe. Multiple threads that need to access a single
- * object concurrently should synchronize amongst themselves and
- * provide the necessary locking. Multiple threads each manipulating
- * separate objects need not synchronize.
- *
- * @see CertPathBuilder
- **/
-public class PKIXBuilderParameters extends PKIXParameters
-{
- private int maxPathLength = 5;
-
- /**
- * Creates an instance of PKIXBuilderParameters
with the
- * specified Set
of most-trusted CAs. Each element of the set
- * is a {@link TrustAnchor TrustAnchor}.
- *
- * Note that the Set
is copied to protect against subsequent
- * modifications.
- *
- * @param trustAnchors
- * a Set
of TrustAnchor
s
- * @param targetConstraints
- * a CertSelector
specifying the constraints on
- * the target certificate
- *
- * @exception InvalidAlgorithmParameterException
- * if trustAnchors
is empty
- * (trustAnchors.isEmpty() == true)
- * @exception NullPointerException
- * if trustAnchors
is null
- * @exception ClassCastException
- * if any of the elements of trustAnchors
are
- * not of type java.security.cert.TrustAnchor
- */
- public PKIXBuilderParameters(
- Set trustAnchors,
- CertSelector targetConstraints)
- throws InvalidAlgorithmParameterException
- {
- super(trustAnchors);
- setTargetCertConstraints(targetConstraints);
- }
-
- /**
- * Creates an instance of PKIXBuilderParameters
that
- * populates the set of most-trusted CAs from the trusted certificate
- * entries contained in the specified KeyStore
. Only
- * keystore entries that contain trusted X509Certificate
s
- * are considered; all other certificate types are ignored.
- *
- * @param keystore
- * a KeyStore
from which the set of most-trusted
- * CAs will be populated
- * @param targetConstraints
- * a CertSelector
specifying the constraints on
- * the target certificate
- *
- * @exception KeyStoreException
- * if keystore
has not been initialized
- * @exception InvalidAlgorithmParameterException
- * if keystore
does not contain at least one
- * trusted certificate entry
- * @exception NullPointerException
- * if keystore
is null
- */
- public PKIXBuilderParameters(
- KeyStore keystore,
- CertSelector targetConstraints) throws KeyStoreException,
- InvalidAlgorithmParameterException
- {
- super(keystore);
- setTargetCertConstraints(targetConstraints);
- }
-
- /**
- * Sets the value of the maximum number of non-self-issued intermediate
- * certificates that may exist in a certification path. A certificate is
- * self-issued if the DNs that appear in the subject and issuer fields are
- * identical and are not empty. Note that the last certificate in a
- * certification path is not an intermediate certificate, and is not
- * included in this limit. Usually the last certificate is an end entity
- * certificate, but it can be a CA certificate. A PKIX
- * CertPathBuilder
instance must not build paths longer than
- * the length specified.
- *
- * A value of 0 implies that the path can only contain a single certificate.
- * A value of -1 implies that the path length is unconstrained (i.e. there
- * is no maximum). The default maximum path length, if not specified, is 5.
- * Setting a value less than -1 will cause an exception to be thrown.
- *
- * If any of the CA certificates contain the
- * BasicConstraintsExtension
, the value of the
- * pathLenConstraint
field of the extension overrides the
- * maximum path length parameter whenever the result is a certification path
- * of smaller length.
- *
- * @param maxPathLength
- * the maximum number of non-self-issued intermediate
- * certificates that may exist in a certification path
- *
- * @exception InvalidParameterException
- * if maxPathLength
is set to a value less
- * than -1
- *
- * @see #getMaxPathLength
- */
- public void setMaxPathLength(int maxPathLength)
- {
- if (maxPathLength < -1)
- {
- throw new InvalidParameterException(
- "the maximum path length parameter can not be less than -1");
- }
- this.maxPathLength = maxPathLength;
- }
-
- /**
- * Returns the value of the maximum number of intermediate non-self-issued
- * certificates that may exist in a certification path. See the
- * {@link #setMaxPathLength} method for more details.
- *
- * @return the maximum number of non-self-issued intermediate certificates
- * that may exist in a certification path, or -1 if there is no
- * limit
- *
- * @see #setMaxPathLength
- */
- public int getMaxPathLength()
- {
- return maxPathLength;
- }
-
- /**
- * Returns a formatted string describing the parameters.
- *
- * @return a formatted string describing the parameters
- */
- public String toString()
- {
- StringBuffer s = new StringBuffer();
- s.append("PKIXBuilderParameters [\n");
- s.append(super.toString());
- s.append(" Maximum Path Length: ");
- s.append(getMaxPathLength());
- s.append("\n]\n");
- return s.toString();
- }
-}
diff --git a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/PKIXCertPathBuilderResult.java b/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/PKIXCertPathBuilderResult.java
deleted file mode 100644
index 0288b8506..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/PKIXCertPathBuilderResult.java
+++ /dev/null
@@ -1,103 +0,0 @@
-package org.spongycastle.jce.cert;
-
-import java.security.PublicKey;
-
-/**
- * This class represents the successful result of the PKIX certification
- * path builder algorithm. All certification paths that are built and
- * returned using this algorithm are also validated according to the PKIX
- * certification path validation algorithm.
- *
- * Instances of PKIXCertPathBuilderResult
are returned by
- * the build
method of CertPathBuilder
- * objects implementing the PKIX algorithm.
- *
- * All PKIXCertPathBuilderResult
objects contain the
- * certification path constructed by the build algorithm, the
- * valid policy tree and subject public key resulting from the build
- * algorithm, and a TrustAnchor
describing the certification
- * authority (CA) that served as a trust anchor for the certification path.
- *
- * Concurrent Access
- *
- * Unless otherwise specified, the methods defined in this class are not
- * thread-safe. Multiple threads that need to access a single
- * object concurrently should synchronize amongst themselves and
- * provide the necessary locking. Multiple threads each manipulating
- * separate objects need not synchronize.
- *
- * @see CertPathBuilderResult
- *
- **/
-public class PKIXCertPathBuilderResult extends PKIXCertPathValidatorResult
- implements CertPathBuilderResult
-{
- private CertPath certPath;
-
- /**
- * Creates an instance of PKIXCertPathBuilderResult
- * containing the specified parameters.
- *
- * @param certPath
- * the validated CertPath
- * @param trustAnchor
- * a TrustAnchor
describing the CA that served as
- * a trust anchor for the certification path
- * @param policyTree
- * the immutable valid policy tree, or null
if
- * there are no valid policies
- * @param subjectPublicKey
- * the public key of the subject
- *
- * @exception NullPointerException
- * if the certPath
, trustAnchor
- * or subjectPublicKey
parameters are
- * null
- */
- public PKIXCertPathBuilderResult(
- CertPath certPath,
- TrustAnchor trustAnchor,
- PolicyNode policyTree,
- PublicKey subjectPublicKey)
- {
- super(trustAnchor, policyTree, subjectPublicKey);
- if (certPath == null)
- {
- throw new NullPointerException("certPath must be non-null");
- }
- this.certPath = certPath;
- }
-
- /**
- * Returns the built and validated certification path. The
- * CertPath
object does not include the trust anchor.
- * Instead, use the {@link #getTrustAnchor() getTrustAnchor()} method to
- * obtain the TrustAnchor
that served as the trust anchor for
- * the certification path.
- *
- * @return the built and validated CertPath
(never
- * null
)
- */
- public CertPath getCertPath()
- {
- return certPath;
- }
-
- /**
- * Return a printable representation of this
- * PKIXCertPathBuilderResult
.
- *
- * @return a String
describing the contents of this
- * PKIXCertPathBuilderResult
- */
- public String toString()
- {
- StringBuffer s = new StringBuffer();
- s.append("PKIXCertPathBuilderResult: [\n");
- s.append(" Certification Path: ").append(getCertPath()).append('\n');
- s.append(" Trust Anchor: ").append(getTrustAnchor()).append('\n');
- s.append(" Policy Tree: ").append(getPolicyTree()).append('\n');
- s.append(" Subject Public Key: ").append(getPublicKey()).append("\n]");
- return s.toString();
- }
-}
diff --git a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/PKIXCertPathChecker.java b/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/PKIXCertPathChecker.java
deleted file mode 100644
index 07c71ca27..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/PKIXCertPathChecker.java
+++ /dev/null
@@ -1,163 +0,0 @@
-package org.spongycastle.jce.cert;
-
-import java.security.cert.Certificate;
-import java.util.Collection;
-import java.util.Set;
-
-/**
- * An abstract class that performs one or more checks on an
- * X509Certificate
.
- *
- * A concrete implementation of the PKIXCertPathChecker
class
- * can be created to extend the PKIX certification path validation algorithm.
- * For example, an implementation may check for and process a critical private
- * extension of each certificate in a certification path.
- *
- * Instances of PKIXCertPathChecker
are passed as parameters
- * using the {@link PKIXParameters#setCertPathCheckers setCertPathCheckers}
- * or {@link PKIXParameters#addCertPathChecker addCertPathChecker} methods
- * of the PKIXParameters
and PKIXBuilderParameters
- * class. Each of the PKIXCertPathChecker
s {@link #check check}
- * methods will be called, in turn, for each certificate processed by a PKIX
- * CertPathValidator
or CertPathBuilder
- * implementation.
- *
- * A PKIXCertPathChecker
may be called multiple times on
- * successive certificates in a certification path. Concrete subclasses
- * are expected to maintain any internal state that may be necessary to
- * check successive certificates. The {@link #init init} method is used
- * to initialize the internal state of the checker so that the certificates
- * of a new certification path may be checked. A stateful implementation
- * must override the {@link #clone clone} method if necessary in
- * order to allow a PKIX CertPathBuilder
to efficiently
- * backtrack and try other paths. In these situations, the
- * CertPathBuilder
is able to restore prior path validation
- * states by restoring the cloned PKIXCertPathChecker
s.
- *
- * The order in which the certificates are presented to the
- * PKIXCertPathChecker
may be either in the forward direction
- * (from target to most-trusted CA) or in the reverse direction (from
- * most-trusted CA to target). A PKIXCertPathChecker
implementation
- * must support reverse checking (the ability to perform its checks when
- * it is presented with certificates in the reverse direction) and may
- * support forward checking (the ability to perform its checks when it is
- * presented with certificates in the forward direction). The
- * {@link #isForwardCheckingSupported isForwardCheckingSupported} method
- * indicates whether forward checking is supported.
- *
- * Additional input parameters required for executing the check may be
- * specified through constructors of concrete implementations of this class.
- *
- * Concurrent Access
- *
- * Unless otherwise specified, the methods defined in this class are not
- * thread-safe. Multiple threads that need to access a single
- * object concurrently should synchronize amongst themselves and
- * provide the necessary locking. Multiple threads each manipulating
- * separate objects need not synchronize.
- *
- * @see PKIXParameters
- * @see PKIXBuilderParameters
- **/
-public abstract class PKIXCertPathChecker implements Cloneable
-{
-
- /**
- * Default constructor.
- */
- protected PKIXCertPathChecker()
- {
- }
-
- /**
- * Initializes the internal state of this PKIXCertPathChecker
.
- * forward
flag specifies the order that certificates
- * will be passed to the {@link #check check} method (forward or reverse). A
- * PKIXCertPathChecker
must support reverse checking
- * and may support forward checking.
- *
- * @param forward
- * the order that certificates are presented to the
- * check
method. If true
,
- * certificates are presented from target to most-trusted CA
- * (forward); if false
, from most-trusted CA to
- * target (reverse).
- * @exception CertPathValidatorException
- * if this PKIXCertPathChecker
is unable to
- * check certificates in the specified order; it should never
- * be thrown if the forward flag is false since reverse
- * checking must be supported
- */
- public abstract void init(boolean forward)
- throws CertPathValidatorException;
-
- /**
- * Indicates if forward checking is supported. Forward checking refers to
- * the ability of the PKIXCertPathChecker
to perform its
- * checks when certificates are presented to the check
method
- * in the forward direction (from target to most-trusted CA).
- *
- * @return true
if forward checking is supported,
- * false
otherwise
- */
- public abstract boolean isForwardCheckingSupported();
-
- /**
- * Returns an immutable Set
of X.509 certificate extensions
- * that this PKIXCertPathChecker
supports (i.e. recognizes,
- * is able to process), or null
if no extensions are
- * supported.
- * String
representing the
- * Object Identifier (OID) of the X.509 extension that is supported. The OID
- * is represented by a set of nonnegative integers separated by periods.
- * PKIXCertPathChecker
- * might possibly be able to process should be included in the set.
- *
- * @return an immutable Set
of X.509 extension OIDs (in
- * String
format) supported by this
- * PKIXCertPathChecker
, or null
if no
- * extensions are supported
- */
- public abstract Set getSupportedExtensions();
-
- /**
- * Performs the check(s) on the specified certificate using its internal
- * state and removes any critical extensions that it processes from the
- * specified collection of OID strings that represent the unresolved
- * critical extensions. The certificates are presented in the order
- * specified by the init
method.
- *
- * @param cert
- * the Certificate
to be checked
- * @param unresolvedCritExts
- * a Collection
of OID strings representing the
- * current set of unresolved critical extensions
- * @exception CertPathValidatorException
- * if the specified certificate does not pass the check
- */
- public abstract void check(Certificate cert, Collection unresolvedCritExts)
- throws CertPathValidatorException;
-
- /**
- * Returns a clone of this object. Calls the Object.clone()
- * method. All subclasses which maintain state must support and override
- * this method, if necessary.
- *
- * @return a copy of this PKIXCertPathChecker
- */
- public Object clone()
- {
- try
- {
- return super.clone();
- }
- catch (CloneNotSupportedException ex)
- {
- /* Cannot happen */
- throw new InternalError(ex.toString());
- }
- }
-}
diff --git a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/PKIXCertPathValidatorResult.java b/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/PKIXCertPathValidatorResult.java
deleted file mode 100644
index aa9b530f4..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/PKIXCertPathValidatorResult.java
+++ /dev/null
@@ -1,150 +0,0 @@
-package org.spongycastle.jce.cert;
-
-import java.security.PublicKey;
-
-/**
- * This class represents the successful result of the PKIX certification path
- * validation algorithm.
- *
- * Instances of PKIXCertPathValidatorResult
are returned by the
- * {@link CertPathValidator#validate validate} method of
- * CertPathValidator
objects implementing the PKIX algorithm.
- *
- * All PKIXCertPathValidatorResult
objects contain the valid
- * policy tree and subject public key resulting from the validation algorithm,
- * as well as a TrustAnchor
describing the certification
- * authority (CA) that served as a trust anchor for the certification path.
- *
- * Concurrent Access
- *
- * Unless otherwise specified, the methods defined in this class are not
- * thread-safe. Multiple threads that need to access a single object
- * concurrently should synchronize amongst themselves and provide the necessary
- * locking. Multiple threads each manipulating separate objects need not
- * synchronize.
- *
- * @see CertPathValidatorResult
- */
-public class PKIXCertPathValidatorResult implements CertPathValidatorResult
-{
- private TrustAnchor trustAnchor;
-
- private PolicyNode policyTree;
-
- private PublicKey subjectPublicKey;
-
- /**
- * Creates an instance of PKIXCertPathValidatorResult
- * containing the specified parameters.
- *
- * @param trustAnchor
- * a TrustAnchor
describing the CA that served as
- * a trust anchor for the certification path
- * @param policyTree
- * the immutable valid policy tree, or null
if
- * there are no valid policies
- * @param subjectPublicKey
- * the public key of the subject
- *
- * @exception NullPointerException
- * if the subjectPublicKey
or
- * trustAnchor
parameters are
- * null
- */
- public PKIXCertPathValidatorResult(
- TrustAnchor trustAnchor,
- PolicyNode policyTree,
- PublicKey subjectPublicKey)
- {
- if (subjectPublicKey == null)
- {
- throw new NullPointerException("subjectPublicKey must be non-null");
- }
- if (trustAnchor == null)
- {
- throw new NullPointerException("trustAnchor must be non-null");
- }
-
- this.trustAnchor = trustAnchor;
- this.policyTree = policyTree;
- this.subjectPublicKey = subjectPublicKey;
- }
-
- /**
- * Returns the TrustAnchor
describing the CA that served as a
- * trust anchor for the certification path.
- *
- * @return the TrustAnchor
(never null
)
- */
- public TrustAnchor getTrustAnchor()
- {
- return trustAnchor;
- }
-
- /**
- * Returns the root node of the valid policy tree resulting from the PKIX
- * certification path validation algorithm. The PolicyNode
- * object that is returned and any objects that it returns through public
- * methods are immutable.
- *
- * Most applications will not need to examine the valid policy tree. They
- * can achieve their policy processing goals by setting the policy-related
- * parameters in PKIXParameters
. However, more sophisticated
- * applications, especially those that process policy qualifiers, may need
- * to traverse the valid policy tree using the
- * {@link PolicyNode#getParent PolicyNode.getParent} and
- * {@link PolicyNode#getChildren PolicyNode.getChildren} methods.
- *
- * @return the root node of the valid policy tree, or null
if
- * there are no valid policies
- */
- public PolicyNode getPolicyTree()
- {
- return policyTree;
- }
-
- /**
- * Returns the public key of the subject (target) of the certification path,
- * including any inherited public key parameters if applicable.
- *
- * @return the public key of the subject (never null
)
- */
- public PublicKey getPublicKey()
- {
- return subjectPublicKey;
- }
-
- /**
- * Returns a copy of this object.
- *
- * @return the copy
- */
- public Object clone()
- {
- try
- {
- return super.clone();
- }
- catch (CloneNotSupportedException ex)
- {
- throw new InternalError(ex.toString());
- }
- }
-
- /**
- * Return a printable representation of this
- * PKIXCertPathValidatorResult
.
- *
- * @return a String
describing the contents of this
- * PKIXCertPathValidatorResult
- */
- public String toString()
- {
- StringBuffer s = new StringBuffer();
- s.append("PKIXCertPathValidatorResult: [ \n");
- s.append(" Trust Anchor: ").append(getTrustAnchor()).append('\n');
- s.append(" Policy Tree: ").append(getPolicyTree()).append('\n');
- s.append(" Subject Public Key: ").append(getPublicKey()).append("\n]");
- return s.toString();
- }
-}
diff --git a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/PKIXParameters.java b/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/PKIXParameters.java
deleted file mode 100644
index a9d2d3835..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/PKIXParameters.java
+++ /dev/null
@@ -1,844 +0,0 @@
-package org.spongycastle.jce.cert;
-
-import java.security.InvalidAlgorithmParameterException;
-import java.security.KeyStore;
-import java.security.KeyStoreException;
-import java.security.cert.Certificate;
-import java.security.cert.X509Certificate;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Date;
-import java.util.Enumeration;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-
-/**
- * Parameters used as input for the PKIX CertPathValidator algorithm.
- *
- * A PKIX CertPathValidator
uses these parameters to validate a
- * CertPath
according to the PKIX certification path validation
- * algorithm.
- *
- * To instantiate a PKIXParameters
object, an application must
- * specify one or more most-trusted CAs as defined by the PKIX
- * certification path validation algorithm. The most-trusted CAs can be
- * specified using one of two constructors. An application can call
- * {@link #PKIXParameters(Set)}, specifying a Set of TrustAnchor
- * objects, each of which identify a most-trusted CA. Alternatively, an
- * application can call {@link #PKIXParameters(KeyStore)}, specifying a
- * KeyStore
instance containing trusted certificate entries, each
- * of which will be considered as a most-trusted CA.
- *
- * Once a PKIXParameters
object has been created, other
- * parameters can be specified (by calling {@link #setInitialPolicies} or
- * {@link #setDate}, for instance) and then the PKIXParameters
- * is passed along with the CertPath
to be validated to
- * {@link CertPathValidator#validate}.
- *
- * Any parameter that is not set (or is set to null) will be set to the default
- * value for that parameter. The default value for the date parameter is null,
- * which indicates the current time when the path is validated. The default for
- * the remaining parameters is the least constrained.
- *
- * Concurrent Access
- *
- * Unless otherwise specified, the methods defined in this class are not
- * thread-safe. Multiple threads that need to access a single object
- * concurrently should synchronize amongst themselves and provide the necessary
- * locking. Multiple threads each manipulating separate objects need not
- * synchronize.
- *
- * @see CertPathValidator
- */
-public class PKIXParameters implements CertPathParameters
-{
- private Set trustAnchors;
-
- private Set initialPolicies = new HashSet();
-
- private List certStores = new ArrayList();
-
- private CertSelector certSelector;
-
- private List certPathCheckers = new ArrayList();
-
- private boolean revocationEnabled = true;
-
- private boolean explicitPolicyRequired = false;
-
- private boolean policyMappingInhibited = false;
-
- private boolean anyPolicyInhibited = false;
-
- private boolean policyQualifiersRejected = true;
-
- private Date date;
-
- private String sigProvider;
-
- /**
- * Creates an instance of PKIXParameters with the specified Set of
- * most-trusted CAs. Each element of the set is a TrustAnchor.
- *
- * Note that the Set is copied to protect against subsequent modifications.
- *
- * @param trustAnchors
- * a Set of TrustAnchors
- *
- * @exception InvalidAlgorithmParameterException
- * if the specified Set is empty
- * (trustAnchors.isEmpty() == true)
- * @exception NullPointerException
- * if the specified Set is null
- * @exception ClassCastException
- * if any of the elements in the Set are not of type
- * java.security.cert.TrustAnchor
- */
- public PKIXParameters(Set trustAnchors)
- throws InvalidAlgorithmParameterException
- {
- setTrustAnchors(trustAnchors);
- }
-
- /**
- * Creates an instance of PKIXParameters that populates the set of
- * most-trusted CAs from the trusted certificate entries contained in the
- * specified KeyStore. Only keystore entries that contain trusted
- * X509Certificates are considered; all other certificate types are ignored.
- *
- * @param keystore
- * a KeyStore from which the set of most-trusted CAs will be
- * populated
- *
- * @exception KeyStoreException
- * if the keystore has not been initialized
- * @exception InvalidAlgorithmParameterException
- * if the keystore does not contain at least one trusted
- * certificate entry
- * @exception NullPointerException
- * if the keystore is null
- */
- public PKIXParameters(KeyStore keystore) throws KeyStoreException,
- InvalidAlgorithmParameterException
- {
- if (keystore == null)
- {
- throw new NullPointerException(
- "the keystore parameter must be non-null");
- }
-
- Set trustAnchors = new HashSet();
- String alias;
- Certificate cert;
- Enumeration enum = keystore.aliases();
- while (enum.hasMoreElements())
- {
- alias = (String)enum.nextElement();
- if (keystore.isCertificateEntry(alias))
- {
- cert = keystore.getCertificate(alias);
- if (cert instanceof X509Certificate)
- {
- trustAnchors.add(new TrustAnchor((X509Certificate)cert,
- null));
- }
- }
- }
- setTrustAnchors(trustAnchors);
- }
-
- /**
- * Returns an immutable Set of the most-trusted CAs.
- *
- * @return an immutable Set
of TrustAnchors
- * (never null
)
- *
- * @see #setTrustAnchors
- */
- public Set getTrustAnchors()
- {
- return Collections.unmodifiableSet(trustAnchors);
- }
-
- /**
- * Sets the Set of most-trusted CAs.
- *
- * Note that the Set is copied to protect against subsequent modifications.
- *
- *
- * @param trustAnchors
- * a Set of TrustAnchors
- *
- * @exception InvalidAlgorithmParameterException
- * if the specified Set is empty
- * (trustAnchors.isEmpty() == true)
- * @exception NullPointerException
- * if the specified Set is null
- * @exception ClassCastException
- * if any of the elements in the set are not of type
- * java.security.cert.TrustAnchor
- *
- * @see #getTrustAnchors
- */
- public void setTrustAnchors(Set trustAnchors)
- throws InvalidAlgorithmParameterException
- {
- if (trustAnchors == null)
- {
- throw new NullPointerException(
- "the trustAnchors parameter must be non-null");
- }
- if (trustAnchors.isEmpty())
- {
- throw new InvalidAlgorithmParameterException(
- "the trustAnchors parameter must be non-empty");
- }
-
- Iterator iter = trustAnchors.iterator();
- TrustAnchor obj;
- this.trustAnchors = new HashSet();
- while (iter.hasNext())
- {
- obj = (TrustAnchor)iter.next();
- if (obj != null)
- {
- this.trustAnchors.add(obj);
- }
- }
- }
-
- /**
- * Returns an immutable Set of initial policy identifiers (OID strings),
- * indicating that any one of these policies would be acceptable to the
- * certificate user for the purposes of certification path processing. The
- * default return value is an empty Set
, which is
- * interpreted as meaning that any policy would be acceptable.
- *
- * @return an immutable Set
of initial policy OIDs in String
- * format, or an empty Set
(implying any policy is
- * acceptable). Never returns null
.
- *
- * @see #setInitialPolicies(java.util.Set)
- */
- public Set getInitialPolicies()
- {
- Set returnSet = initialPolicies;
- if (initialPolicies == null)
- {
- returnSet = new HashSet();
- }
-
- return Collections.unmodifiableSet(returnSet);
- }
-
- /**
- * Sets the Set
of initial policy identifiers (OID strings),
- * indicating that any one of these policies would be acceptable to the
- * certificate user for the purposes of certification path processing. By
- * default, any policy is acceptable (i.e. all policies), so a user that
- * wants to allow any policy as acceptable does not need to call this
- * method, or can call it with an empty Set
(or
- * null
).
- *
- * Note that the Set is copied to protect against subsequent modifications.
- *
- *
- * @param initialPolicies
- * a Set of initial policy OIDs in String format (or
- * null
)
- *
- * @exception ClassCastException
- * if any of the elements in the set are not of type String
- *
- * @see #getInitialPolicies()
- */
- public void setInitialPolicies(Set initialPolicies)
- {
- if (initialPolicies == null || initialPolicies.isEmpty())
- {
- this.initialPolicies = null;
- }
- else
- {
- Iterator iter = initialPolicies.iterator();
- this.initialPolicies = new HashSet();
- String obj;
- while (iter.hasNext())
- {
- obj = (String)iter.next();
- if (obj != null)
- {
- this.initialPolicies.add(obj);
- }
- }
- }
- }
-
- /**
- * Sets the list of CertStores to be used in finding certificates and CRLs.
- * May be null, in which case no CertStores will be used. The first
- * CertStores in the list may be preferred to those that appear later.
- *
- * Note that the List is copied to protect against subsequent modifications.
- *
- *
- * @param stores
- * a List of CertStores (or null
)
- *
- * @exception ClassCastException
- * if any of the elements in the list are not of type
- * java.security.cert.CertStore
- *
- * @see #getCertStores()
- */
- public void setCertStores(List stores)
- {
- certStores = new ArrayList();
- if (stores != null && !stores.isEmpty())
- {
- Iterator iter = stores.iterator();
- CertStore obj;
- while (iter.hasNext())
- {
- obj = (CertStore)iter.next();
- if (obj != null)
- {
- certStores.add(obj);
- }
- }
- }
- }
-
- /**
- * Adds a CertStore to the end of the list of CertStores used in finding
- * certificates and CRLs.
- *
- * @param store
- * the CertStore
to add. If
- * null
null)
- *
- * @see #setCertStores(java.util.List)
- */
- public List getCertStores()
- {
- return Collections.unmodifiableList(certStores);
- }
-
- /**
- * Sets the RevocationEnabled flag. If this flag is true, the default
- * revocation checking mechanism of the underlying PKIX service provider
- * will be used. If this flag is false, the default revocation checking
- * mechanism will be disabled (not used).
- *
- * When a PKIXParameters
object is created, this flag is set
- * to true. This setting reflects the most common strategy for checking
- * revocation, since each service provider must support revocation checking
- * to be PKIX compliant. Sophisticated applications should set this flag to
- * false when it is not practical to use a PKIX service provider's default
- * revocation checking mechanism or when an alternative revocation checking
- * mechanism is to be substituted (by also calling the
- * {@link #addCertPathChecker addCertPathChecker} or {@link
- * #setCertPathCheckers setCertPathCheckers} methods).
- *
- * @param val
- * the new value of the RevocationEnabled flag
- */
- public void setRevocationEnabled(boolean val)
- {
- revocationEnabled = val;
- }
-
- /**
- * Checks the RevocationEnabled flag. If this flag is true, the default
- * revocation checking mechanism of the underlying PKIX service provider
- * will be used. If this flag is false, the default revocation checking
- * mechanism will be disabled (not used). See the setRevocationEnabled
- * method for more details on setting the value of this flag.
- *
- * @return the current value of the RevocationEnabled flag
- */
- public boolean isRevocationEnabled()
- {
- return revocationEnabled;
- }
-
- /**
- * Sets the ExplicitPolicyRequired flag. If this flag is true, an acceptable
- * policy needs to be explicitly identified in every certificate. By
- * default, the ExplicitPolicyRequired flag is false.
- *
- * @param val
- * true if explicit policy is to be required, false otherwise
- */
- public void setExplicitPolicyRequired(boolean val)
- {
- explicitPolicyRequired = val;
- }
-
- /**
- * Checks if explicit policy is required. If this flag is true, an
- * acceptable policy needs to be explicitly identified in every certificate.
- * By default, the ExplicitPolicyRequired flag is false.
- *
- * @return true if explicit policy is required, false otherwise
- */
- public boolean isExplicitPolicyRequired()
- {
- return explicitPolicyRequired;
- }
-
- /**
- * Sets the PolicyMappingInhibited flag. If this flag is true, policy
- * mapping is inhibited. By default, policy mapping is not inhibited (the
- * flag is false).
- *
- * @param val
- * true if policy mapping is to be inhibited, false otherwise
- */
- public void setPolicyMappingInhibited(boolean val)
- {
- policyMappingInhibited = val;
- }
-
- /**
- * Checks if policy mapping is inhibited. If this flag is true, policy
- * mapping is inhibited. By default, policy mapping is not inhibited (the
- * flag is false).
- *
- * @return true if policy mapping is inhibited, false otherwise
- */
- public boolean isPolicyMappingInhibited()
- {
- return policyMappingInhibited;
- }
-
- /**
- * Sets state to determine if the any policy OID should be processed if it
- * is included in a certificate. By default, the any policy OID is not
- * inhibited ({@link #isAnyPolicyInhibited()} returns false).
- *
- * @return val - true
if the any policy OID is to be
- * inhibited, false
otherwise
- */
- public void setAnyPolicyInhibited(boolean val)
- {
- anyPolicyInhibited = val;
- }
-
- /**
- * Checks whether the any policy OID should be processed if it is included
- * in a certificate.
- *
- * @return true
if the any policy OID is inhibited,
- * false
otherwise
- */
- public boolean isAnyPolicyInhibited()
- {
- return anyPolicyInhibited;
- }
-
- /**
- * Sets the PolicyQualifiersRejected flag. If this flag is true,
- * certificates that include policy qualifiers in a certificate policies
- * extension that is marked critical are rejected. If the flag is false,
- * certificates are not rejected on this basis.
- *
- * When a PKIXParameters
object is created, this flag is set
- * to true. This setting reflects the most common (and simplest) strategy
- * for processing policy qualifiers. Applications that want to use a more
- * sophisticated policy must set this flag to false.
- *
- * Note that the PKIX certification path validation algorithm specifies that
- * any policy qualifier in a certificate policies extension that is marked
- * critical must be processed and validated. Otherwise the certification
- * path must be rejected. If the policyQualifiersRejected flag is set to
- * false, it is up to the application to validate all policy qualifiers in
- * this manner in order to be PKIX compliant.
- *
- * @param qualifiersRejected
- * the new value of the PolicyQualifiersRejected flag
- *
- * @see #getPolicyQualifiersRejected()
- * @see PolicyQualifierInfo
- */
- public void setPolicyQualifiersRejected(boolean qualifiersRejected)
- {
- policyQualifiersRejected = qualifiersRejected;
- }
-
- /**
- * Gets the PolicyQualifiersRejected flag. If this flag is true,
- * certificates that include policy qualifiers in a certificate policies
- * extension that is marked critical are rejected. If the flag is false,
- * certificates are not rejected on this basis.
- *
- * When a PKIXParameters object is created, this flag is set to true. This
- * setting reflects the most common (and simplest) strategy for processing
- * policy qualifiers. Applications that want to use a more sophisticated
- * policy must set this flag to false.
- *
- * @return the current value of the PolicyQualifiersRejected flag
- *
- * @see #setPolicyQualifiersRejected(boolean)
- */
- public boolean getPolicyQualifiersRejected()
- {
- return policyQualifiersRejected;
- }
-
- /**
- * Returns the time for which the validity of the certification path should
- * be determined. If null, the current time is used.
- *
- * Note that the Date returned is copied to protect against subsequent
- * modifications.
- *
- * @return the Date, or null
if not set
- *
- * @see #setDate(java.util.Date)
- */
- public Date getDate()
- {
- if (date == null)
- {
- return null;
- }
-
- return new Date(date.getTime());
- }
-
- /**
- * Sets the time for which the validity of the certification path should be
- * determined. If null, the current time is used.
- *
- * Note that the Date supplied here is copied to protect against subsequent
- * modifications.
- *
- * @param date
- * the Date, or null
for the current time
- *
- * @see #getDate()
- */
- public void setDate(Date date)
- {
- if (date == null)
- {
- this.date = null;
- }
- else
- {
- this.date = new Date(date.getTime());
- }
- }
-
- /**
- * Sets a List
of additional certification path checkers. If
- * the specified List contains an object that is not a PKIXCertPathChecker,
- * it is ignored.
- *
- * Each PKIXCertPathChecker
specified implements additional
- * checks on a certificate. Typically, these are checks to process and
- * verify private extensions contained in certificates. Each
- * PKIXCertPathChecker
should be instantiated with any
- * initialization parameters needed to execute the check.
- *
- * This method allows sophisticated applications to extend a PKIX
- * CertPathValidator
or CertPathBuilder
. Each
- * of the specified PKIXCertPathCheckers will be called, in turn, by a PKIX
- * CertPathValidator
or CertPathBuilder
for
- * each certificate processed or validated.
- *
- * Regardless of whether these additional PKIXCertPathCheckers are set, a
- * PKIX CertPathValidator
or CertPathBuilder
- * must perform all of the required PKIX checks on each certificate. The one
- * exception to this rule is if the RevocationEnabled flag is set to false
- * (see the {@link #setRevocationEnabled(boolean) setRevocationEnabled}
- * method).
- *
- * Note that the List supplied here is copied and each PKIXCertPathChecker
- * in the list is cloned to protect against subsequent modifications.
- *
- * @param checkers
- * a List of PKIXCertPathCheckers. May be null, in which case no
- * additional checkers will be used.
- * @exception ClassCastException
- * if any of the elements in the list are not of type
- * java.security.cert.PKIXCertPathChecker
- * @see #getCertPathCheckers()
- */
- public void setCertPathCheckers(List checkers)
- {
- certPathCheckers = new ArrayList();
- if (checkers == null)
- {
- return;
- }
- Iterator iter = checkers.iterator();
- while (iter.hasNext())
- {
- certPathCheckers
- .add((PKIXCertPathChecker)((PKIXCertPathChecker)iter.next())
- .clone());
- }
- }
-
- /**
- * Returns the List of certification path checkers. The returned List is
- * immutable, and each PKIXCertPathChecker in the List is cloned to protect
- * against subsequent modifications.
- *
- * @return an immutable List of PKIXCertPathCheckers (may be empty, but not
- * null
)
- *
- * @see #setCertPathCheckers(java.util.List)
- */
- public List getCertPathCheckers()
- {
- List checkers = new ArrayList();
- Iterator iter = certPathCheckers.iterator();
- while (iter.hasNext())
- {
- checkers
- .add((PKIXCertPathChecker)((PKIXCertPathChecker)iter.next())
- .clone());
- }
- return Collections.unmodifiableList(checkers);
- }
-
- /**
- * Adds a PKIXCertPathChecker to the list of certification path checkers.
- * See the {@link #setCertPathCheckers} method for more details.
- *
- * Note that the PKIXCertPathChecker
is cloned to protect
- * against subsequent modifications.
- *
- * @param checker
- * a PKIXCertPathChecker
to add to the list of
- * checks. If null
, the checker is ignored (not
- * added to list).
- */
- public void addCertPathChecker(PKIXCertPathChecker checker)
- {
- if (checker != null)
- {
- certPathCheckers.add(checker.clone());
- }
- }
-
- /**
- * Returns the signature provider's name, or null
if not set.
- *
- * @return the signature provider's name (or null
)
- *
- * @see #setSigProvider(java.lang.String)
- */
- public String getSigProvider()
- {
- return sigProvider;
- }
-
- /**
- * Sets the signature provider's name. The specified provider will be
- * preferred when creating Signature objects. If null or not set, the first
- * provider found supporting the algorithm will be used.
- *
- * @param sigProvider
- * the signature provider's name (or null
)
- *
- * @see #getSigProvider()
- */
- public void setSigProvider(String sigProvider)
- {
- this.sigProvider = sigProvider;
- }
-
- /**
- * Returns the required constraints on the target certificate. The
- * constraints are returned as an instance of CertSelector. If
- * null
, no constraints are defined.
- *
- * Note that the CertSelector returned is cloned to protect against
- * subsequent modifications.
- *
- * @return a CertSelector specifying the constraints on the target
- * certificate (or null
)
- *
- * @see #setTargetCertConstraints(CertSelector)
- */
- public CertSelector getTargetCertConstraints()
- {
- if (certSelector == null)
- {
- return null;
- }
-
- return (CertSelector)certSelector.clone();
- }
-
- /**
- * Sets the required constraints on the target certificate. The constraints
- * are specified as an instance of CertSelector. If null, no constraints are
- * defined.
- *
- * Note that the CertSelector specified is cloned to protect against
- * subsequent modifications.
- *
- * @param selector
- * a CertSelector specifying the constraints on the target
- * certificate (or null
)
- *
- * @see #getTargetCertConstraints()
- */
- public void setTargetCertConstraints(CertSelector selector)
- {
- if (selector == null)
- {
- certSelector = null;
- }
- else
- {
- certSelector = (CertSelector)selector.clone();
- }
- }
-
- /**
- * Makes a copy of this PKIXParameters object. Changes to the copy will not
- * affect the original and vice versa.
- *
- * @return a copy of this PKIXParameters
object
- */
- public Object clone()
- {
- try
- {
- PKIXParameters obj = (PKIXParameters)super.clone();
- obj.certStores = new ArrayList(certStores);
- Iterator iter = certPathCheckers.iterator();
- obj.certPathCheckers = new ArrayList();
- while (iter.hasNext())
- {
- obj.certPathCheckers.add(((PKIXCertPathChecker)iter.next())
- .clone());
- }
- if (initialPolicies != null)
- {
- obj.initialPolicies = new HashSet(initialPolicies);
- }
- if (trustAnchors != null)
- {
- obj.trustAnchors = new HashSet(trustAnchors);
- }
- if (certSelector != null)
- {
- obj.certSelector = (CertSelector)certSelector.clone();
- }
- return obj;
- }
- catch (CloneNotSupportedException ex)
- {
- throw new InternalError();
- }
- }
-
- /**
- * Returns a formatted string describing the parameters.
- *
- * @return a formatted string describing the parameters.
- */
- public String toString()
- {
- StringBuffer s = new StringBuffer();
- s.append("[\n");
- if (trustAnchors != null)
- {
- s.append(" Trust Anchors: ").append(trustAnchors).append('\n');
- }
- if (initialPolicies != null)
- {
- if (initialPolicies.isEmpty())
- {
- s.append(" Initial Policy OIDs: any\n");
- }
- else
- {
- s.append(" Initial Policy OIDs: [")
- .append(initialPolicies).append("]\n");
- }
- }
- s.append(" Validity Date: ");
- if (date != null)
- {
- s.append(date);
- }
- else
- {
- s.append("null");
- }
- s.append('\n');
-
- s.append(" Signature Provider: ");
- if (sigProvider != null)
- {
- s.append(sigProvider);
- }
- else
- {
- s.append("null");
- }
- s.append('\n');
-
- s.append(" Default Revocation Enabled: ");
- s.append(revocationEnabled);
- s.append('\n');
-
- s.append(" Explicit Policy Required: ");
- s.append(explicitPolicyRequired);
- s.append('\n');
-
- s.append(" Policy Mapping Inhibited: ");
- s.append(policyMappingInhibited);
- s.append('\n');
-
- s.append(" Any Policy Inhibited: ");
- s.append(anyPolicyInhibited);
- s.append('\n');
-
- s.append(" Policy Qualifiers Rejected: ");
- s.append(policyQualifiersRejected);
- s.append('\n');
-
- s.append(" Target Cert Constraints: ");
- s.append(certSelector);
- s.append('\n');
-
- s.append(" Certification Path Checkers: [");
- s.append(certPathCheckers);
- s.append("}\n");
-
- s.append(" CertStores: [");
- s.append(certStores);
- s.append("}\n");
-
- s.append("]\n");
-
- return s.toString();
- }
-}
diff --git a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/PolicyNode.java b/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/PolicyNode.java
deleted file mode 100644
index ae9199b37..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/PolicyNode.java
+++ /dev/null
@@ -1,107 +0,0 @@
-package org.spongycastle.jce.cert;
-
-import java.util.Iterator;
-import java.util.Set;
-
-/**
- * An immutable valid policy tree node as defined by the PKIX certification
- * path validation algorithm.
- *
- * One of the outputs of the PKIX certification path validation
- * algorithm is a valid policy tree, which includes the policies that
- * were determined to be valid, how this determination was reached,
- * and any policy qualifiers encountered. This tree is of depth
- * n, where n is the length of the certification
- * path that has been validated.
- *
- * Most applications will not need to examine the valid policy tree.
- * They can achieve their policy processing goals by setting the
- * policy-related parameters in PKIXParameters
. However,
- * the valid policy tree is available for more sophisticated applications,
- * especially those that process policy qualifiers.
- *
- * {@link PKIXCertPathValidatorResult#getPolicyTree()
- * PKIXCertPathValidatorResult.getPolicyTree} returns the root node of the
- * valid policy tree. The tree can be traversed using the
- * {@link #getChildren getChildren} and {@link #getParent getParent} methods.
- * Data about a particular node can be retrieved using other methods of
- * PolicyNode
.
- *
- * Concurrent Access
- *
- * All PolicyNode
objects must be immutable and
- * thread-safe. Multiple threads may concurrently invoke the methods defined
- * in this class on a single PolicyNode
object (or more than one)
- * with no ill effects. This stipulation applies to all public fields and
- * methods of this class and any added or overridden by subclasses.
- **/
-public interface PolicyNode
-{
-
- /**
- * Returns the parent of this node, or null
if this is the
- * root node.
- *
- * @return the parent of this node, or null
if this is the
- * root node
- */
- public PolicyNode getParent();
-
- /**
- * Returns an iterator over the children of this node. Any attempts to
- * modify the children of this node through the
- * Iterator
's remove method must throw an
- * UnsupportedOperationException
.
- *
- * @return an iterator over the children of this node
- */
- public Iterator getChildren();
-
- /**
- * Returns the depth of this node in the valid policy tree.
- *
- * @return the depth of this node (0 for the root node, 1 for its
- * children, and so on)
- */
- public int getDepth();
-
- /**
- * Returns the valid policy represented by this node.
- *
- * @return the String
OID of the valid policy
- * represented by this node, or the special value "any-policy". For
- * the root node, this method always returns the special value "any-policy".
- */
- public String getValidPolicy();
-
- /**
- * Returns the set of policy qualifiers associated with the
- * valid policy represented by this node.
- *
- * @return an immutable Set
of
- * PolicyQualifierInfo
s. For the root node, this
- * is always an empty Set
.
- */
- public Set getPolicyQualifiers();
-
- /**
- * Returns the set of expected policies that would satisfy this
- * node's valid policy in the next certificate to be processed.
- *
- * @return an immutable Set
of expected policy
- * String
OIDs, or an immutable Set
with
- * the single special value "any-policy". For the root node, this method
- * always returns a Set
with the single value "any-policy".
- */
- public Set getExpectedPolicies();
-
- /**
- * Returns the criticality indicator of the certificate policy extension
- * in the most recently processed certificate.
- *
- * @return true
if extension marked critical,
- * false
otherwise. For the root node, false
- * is always returned.
- */
- public boolean isCritical();
-}
diff --git a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/PolicyQualifierInfo.java b/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/PolicyQualifierInfo.java
deleted file mode 100644
index 97e9c5faa..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/PolicyQualifierInfo.java
+++ /dev/null
@@ -1,196 +0,0 @@
-package org.spongycastle.jce.cert;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-
-import org.spongycastle.asn1.ASN1InputStream;
-import org.spongycastle.asn1.ASN1Object;
-import org.spongycastle.asn1.ASN1ObjectIdentifier;
-import org.spongycastle.asn1.ASN1Sequence;
-import org.spongycastle.asn1.DEROutputStream;
-import org.spongycastle.asn1.util.ASN1Dump;
-
-/**
- * An immutable policy qualifier represented by the ASN.1 PolicyQualifierInfo
- * structure.
- *
- * The ASN.1 definition is as follows:
- *
- *
- *
- * PolicyQualifierInfo ::= SEQUENCE {
- * policyQualifierId PolicyQualifierId,
- * qualifier ANY DEFINED BY policyQualifierId }
- *
- *
- *
- *
- * A certificate policies extension, if present in an X.509 version 3
- * certificate, contains a sequence of one or more policy information terms,
- * each of which consists of an object identifier (OID) and optional qualifiers.
- * In an end-entity certificate, these policy information terms indicate the
- * policy under which the certificate has been issued and the purposes for which
- * the certificate may be used. In a CA certificate, these policy information
- * terms limit the set of policies for certification paths which include this
- * certificate.
- *
- * A Set
of PolicyQualifierInfo
objects are
- * returned by the
- * {@link PolicyNode#getPolicyQualifiers PolicyNode.getPolicyQualifiers} method.
- * This allows applications with specific policy requirements to process and
- * validate each policy qualifier. Applications that need to process policy
- * qualifiers should explicitly set the policyQualifiersRejected
- * flag to false (by calling the
- * {@link PKIXParameters#setPolicyQualifiersRejected
- * PKIXParameters.setPolicyQualifiersRejected} method) before validating a
- * certification path.
- *
- * Note that the PKIX certification path validation algorithm specifies that any
- * policy qualifier in a certificate policies extension that is marked critical
- * must be processed and validated. Otherwise the certification path must be
- * rejected. If the policyQualifiersRejected
flag is set to
- * false, it is up to the application to validate all policy qualifiers in this
- * manner in order to be PKIX compliant.
- *
- * Concurrent Access
- *
- * All PolicyQualifierInfo
objects must be immutable and
- * thread-safe. That is, multiple threads may concurrently invoke the methods
- * defined in this class on a single PolicyQualifierInfo
object
- * (or more than one) with no ill effects. Requiring
- * PolicyQualifierInfo
objects to be immutable and thread-safe
- * allows them to be passed around to various pieces of code without worrying
- * about coordinating access.
- *
- * Uses {@link org.spongycastle.asn1.ASN1InputStream ASN1InputStream},
- * {@link org.spongycastle.asn1.ASN1Sequence ASN1Sequence},
- * {@link org.spongycastle.asn1.ASN1ObjectIdentifier ASN1ObjectIdentifier},
- * {@link org.spongycastle.asn1.DEROutputStream DEROutputStream},
- * {@link org.spongycastle.asn1.ASN1Object ASN1Object}
- */
-public final class PolicyQualifierInfo
-{
- private String id;
-
- private byte[] encoded;
-
- private byte[] qualifier;
-
- /**
- * Creates an instance of PolicyQualifierInfo
from the
- * encoded bytes. The encoded byte array is copied on construction.
- *
- * Uses {@link org.spongycastle.asn1.ASN1InputStream ASN1InputStream},
- * {@link org.spongycastle.asn1.ASN1Sequence ASN1Sequence},
- * {@link org.spongycastle.asn1.ASN1ObjectIdentifier ASN1ObjectIdentifier} and
- * {@link org.spongycastle.asn1.DEROutputStream DEROutputStream}
- *
- * @param encoded
- * a byte array containing the qualifier in DER encoding
- *
- * @exception IOException
- * thrown if the byte array does not represent a valid and
- * parsable policy qualifier
- */
- public PolicyQualifierInfo(byte[] encoded) throws IOException
- {
- this.encoded = (byte[])encoded.clone();
- try
- {
- ByteArrayInputStream inStream = new ByteArrayInputStream(
- this.encoded);
- ASN1InputStream derInStream = new ASN1InputStream(inStream);
- ASN1Sequence obj = (ASN1Sequence)derInStream.readObject();
- id = ((ASN1ObjectIdentifier)obj.getObjectAt(0)).getId();
- ByteArrayOutputStream outStream = new ByteArrayOutputStream();
- DEROutputStream derOutStream = new DEROutputStream(outStream);
-
- derOutStream.writeObject(obj.getObjectAt(1));
- derOutStream.close();
-
- qualifier = outStream.toByteArray();
- }
- catch (Exception ex)
- {
- throw new IOException("parsing exception : " + ex.toString());
- }
- }
-
- /**
- * Returns the policyQualifierId
field of this
- * PolicyQualifierInfo
. The policyQualifierId
- * is an Object Identifier (OID) represented by a set of nonnegative
- * integers separated by periods.
- *
- * @return the OID (never null
)
- */
- public String getPolicyQualifierId()
- {
- return id;
- }
-
- /**
- * Returns the ASN.1 DER encoded form of this
- * PolicyQualifierInfo
.
- *
- * @return the ASN.1 DER encoded bytes (never null
). Note
- * that a copy is returned, so the data is cloned each time this
- * method is called.
- */
- public byte[] getEncoded()
- {
- return (byte[])encoded.clone();
- }
-
- /**
- * Returns the ASN.1 DER encoded form of the qualifier
field
- * of this PolicyQualifierInfo
.
- *
- * @return the ASN.1 DER encoded bytes of the qualifier
- * field. Note that a copy is returned, so the data is cloned each
- * time this method is called.
- */
- public byte[] getPolicyQualifier()
- {
- if (qualifier == null)
- {
- return null;
- }
-
- return (byte[])qualifier.clone();
- }
-
- /**
- * Return a printable representation of this
- * PolicyQualifierInfo
.
- *
- * Uses {@link org.spongycastle.asn1.ASN1InputStream ASN1InputStream},
- * {@link org.spongycastle.asn1.ASN1Object ASN1Object}
- *
- * @return a String
describing the contents of this
- * PolicyQualifierInfo
- */
- public String toString()
- {
- StringBuffer s = new StringBuffer();
- s.append("PolicyQualifierInfo: [\n");
- s.append("qualifierID: ").append(id).append('\n');
- try
- {
- ByteArrayInputStream inStream = new ByteArrayInputStream(qualifier);
- ASN1InputStream derInStream = new ASN1InputStream(inStream);
- ASN1Object derObject = derInStream.readObject();
- s
- .append(" qualifier:\n").append(ASN1Dump.dumpAsString(derObject))
- .append('\n');
- }
- catch (IOException ex)
- {
- s.append(ex.getMessage());
- }
- s.append("qualifier: ").append(id).append('\n');
- s.append(']');
- return s.toString();
- }
-}
\ No newline at end of file
diff --git a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/TrustAnchor.java b/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/TrustAnchor.java
deleted file mode 100644
index 68a9abf3d..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/TrustAnchor.java
+++ /dev/null
@@ -1,293 +0,0 @@
-package org.spongycastle.jce.cert;
-
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.security.PublicKey;
-import java.security.cert.X509Certificate;
-
-import org.spongycastle.asn1.ASN1InputStream;
-import org.spongycastle.asn1.ASN1Object;
-import org.spongycastle.asn1.ASN1Sequence;
-
-/**
- * A trust anchor or most-trusted Certification Authority (CA).
- *
- * This class represents a "most-trusted CA", which is used as a trust anchor
- * for validating X.509 certification paths. A most-trusted CA includes the
- * public key of the CA, the CA's name, and any constraints upon the set of
- * paths which may be validated using this key. These parameters can be
- * specified in the form of a trusted X509Certificate or as individual
- * parameters.
- *
- * Concurrent Access
- *
- * All TrustAnchor objects must be immutable and thread-safe. That is, multiple
- * threads may concurrently invoke the methods defined in this class on a
- * single TrustAnchor object (or more than one) with no ill effects. Requiring
- * TrustAnchor objects to be immutable and thread-safe allows them to be passed
- * around to various pieces of code without worrying about coordinating access.
- * This stipulation applies to all public fields and methods of this class and
- * any added or overridden by subclasses.
- *
- * TODO: implement better nameConstraints testing.
- **/
-public class TrustAnchor
-{
- private X509Certificate trustCert = null;
-
- private PublicKey trustPublicKey = null;
-
- private String trustName = null;
-
- private byte[] nameConstraints = null;
-
- /**
- * Creates an instance of TrustAnchor with the specified X509Certificate and
- * optional name constraints, which are intended to be used as additional
- * constraints when validating an X.509 certification path.
- *
- * The name constraints are specified as a byte array. This byte array
- * should contain the DER encoded form of the name constraints, as they
- * would appear in the NameConstraints structure defined in RFC 2459 and
- * X.509. The ASN.1 definition of this structure appears below.
- *
- *
- *
- * NameConstraints ::= SEQUENCE {
- * permittedSubtrees [0] GeneralSubtrees OPTIONAL,
- * excludedSubtrees [1] GeneralSubtrees OPTIONAL }
- *
- * GeneralSubtrees ::= SEQUENCE SIZE (1..MAX) OF GeneralSubtree
- *
- * GeneralSubtree ::= SEQUENCE {
- * base GeneralName,
- * minimum [0] BaseDistance DEFAULT 0,
- * maximum [1] BaseDistance OPTIONAL }
- *
- * BaseDistance ::= INTEGER (0..MAX)
- *
- * GeneralName ::= CHOICE {
- * otherName [0] OtherName,
- * rfc822Name [1] IA5String,
- * dNSName [2] IA5String,
- * x400Address [3] ORAddress,
- * directoryName [4] Name,
- * ediPartyName [5] EDIPartyName,
- * uniformResourceIdentifier [6] IA5String,
- * iPAddress [7] OCTET STRING,
- * registeredID [8] OBJECT IDENTIFIER}
- *
- *
- *
- *
- * Note that the name constraints byte array supplied is cloned to protect
- * against subsequent modifications.
- *
- * @param trustedCert
- * a trusted X509Certificate
- * @param nameConstraints
- * a byte array containing the ASN.1 DER encoding of a
- * NameConstraints extension to be used for checking name
- * constraints. Only the value of the extension is included, not
- * the OID or criticality flag. Specify null to omit the
- * parameter.
- *
- * @exception IllegalArgumentException
- * if the name constraints cannot be decoded
- * @exception NullPointerException
- * if the specified X509Certificate is null
- */
- public TrustAnchor(X509Certificate trustedCert, byte[] nameConstraints)
- {
- if (trustedCert == null)
- {
- throw new NullPointerException("trustedCert must be non-null");
- }
-
- this.trustCert = trustedCert;
- if (nameConstraints != null)
- {
- this.nameConstraints = (byte[])nameConstraints.clone();
- checkNameConstraints(this.nameConstraints);
- }
- }
-
- /**
- * Creates an instance of TrustAnchor
where the most-trusted
- * CA is specified as a distinguished name and public key. Name constraints
- * are an optional parameter, and are intended to be used as additional
- * constraints when validating an X.509 certification path.
- *
- * The name constraints are specified as a byte array. This byte array
- * contains the DER encoded form of the name constraints, as they would
- * appear in the NameConstraints structure defined in RFC 2459 and X.509.
- * The ASN.1 notation for this structure is supplied in the documentation
- * for {@link #TrustAnchor(X509Certificate trustedCert, byte[]
- * nameConstraints) TrustAnchor(X509Certificate trustedCert, byte[]
- * nameConstraints) }.
- *
- * Note that the name constraints byte array supplied here is cloned to
- * protect against subsequent modifications.
- *
- * @param caName
- * the X.500 distinguished name of the most-trusted CA in RFC
- * 2253 String format
- * @param pubKey
- * the public key of the most-trusted CA
- * @param nameConstraints
- * a byte array containing the ASN.1 DER encoding of a
- * NameConstraints extension to be used for checking name
- * constraints. Only the value of the extension is included, not
- * the OID or criticality flag. Specify null to omit the
- * parameter.
- *
- * @exception IllegalArgumentException
- * if the specified caName parameter is empty (caName.length() == 0
)
- * or incorrectly formatted or the name constraints cannot be
- * decoded
- * @exception NullPointerException
- * if the specified caName or pubKey parameter is null
- */
- public TrustAnchor(String caName, PublicKey pubKey, byte[] nameConstraints)
- {
- if (caName == null)
- {
- throw new NullPointerException("caName must be non-null");
- }
- if (pubKey == null)
- {
- throw new NullPointerException("pubKey must be non-null");
- }
- if (caName.length() == 0)
- {
- throw new IllegalArgumentException(
- "caName can not be an empty string");
- }
-
- this.trustName = caName;
- this.trustPublicKey = pubKey;
- if (nameConstraints != null)
- {
- this.nameConstraints = (byte[])nameConstraints.clone();
- checkNameConstraints(this.nameConstraints);
- }
- }
-
- /**
- * Returns the most-trusted CA certificate.
- *
- * @return a trusted X509Certificate
or null
- * if the trust anchor was not specified as a trusted certificate
- */
- public final X509Certificate getTrustedCert()
- {
- return trustCert;
- }
-
- /**
- * Returns the name of the most-trusted CA in RFC 2253 String format.
- *
- * @return the X.500 distinguished name of the most-trusted CA, or
- * null
if the trust anchor was not specified as a
- * trusted public key and name pair
- */
- public final String getCAName()
- {
- return trustName;
- }
-
- /**
- * Returns the public key of the most-trusted CA.
- *
- * @return the public key of the most-trusted CA, or null if the trust
- * anchor was not specified as a trusted public key and name pair
- */
- public final PublicKey getCAPublicKey()
- {
- return trustPublicKey;
- }
-
- /**
- * Returns the name constraints parameter. The specified name constraints
- * are associated with this trust anchor and are intended to be used as
- * additional constraints when validating an X.509 certification path.
- *
- * The name constraints are returned as a byte array. This byte array
- * contains the DER encoded form of the name constraints, as they would
- * appear in the NameConstraints structure defined in RFC 2459 and X.509.
- * The ASN.1 notation for this structure is supplied in the documentation
- * for TrustAnchor(X509Certificate trustedCert, byte[]
- * nameConstraints)
.
- *
- * Note that the byte array returned is cloned to protect against subsequent
- * modifications.
- *
- * @return a byte array containing the ASN.1 DER encoding of a
- * NameConstraints extension used for checking name constraints, or
- * null
if not set.
- */
- public final byte[] getNameConstraints()
- {
- return (byte[])nameConstraints.clone();
- }
-
- /**
- * Returns a formatted string describing the TrustAnchor
.
- *
- * @return a formatted string describing the TrustAnchor
- */
- public String toString()
- {
- StringBuffer sb = new StringBuffer();
- sb.append("[\n");
- if (getCAPublicKey() != null)
- {
- sb.append(" Trusted CA Public Key: ").append(getCAPublicKey()).append('\n');
- sb.append(" Trusted CA Issuer Name: ").append(getCAName()).append('\n');
- }
- else
- {
- sb.append(" Trusted CA cert: ").append(getTrustedCert()).append('\n');
- }
- if (nameConstraints != null)
- {
- sb.append(" Name Constraints: ").append(nameConstraints).append('\n');
- }
- return sb.toString();
- }
-
- /**
- * Check given DER encoded nameConstraints for correct decoding. Currently
- * only basic DER decoding test.
- *
- * TODO: implement more testing.
- *
- * @param data
- * the DER encoded nameConstrains to be checked or
- * null
- * @exception IllegalArgumentException
- * if the check failed.
- */
- private void checkNameConstraints(byte[] data)
- {
- if (data != null)
- {
- try
- {
- ByteArrayInputStream inStream = new ByteArrayInputStream(data);
- ASN1InputStream derInStream = new ASN1InputStream(inStream);
- ASN1Object derObject = derInStream.readObject();
- if (!(derObject instanceof ASN1Sequence))
- {
- throw new IllegalArgumentException(
- "nameConstraints parameter decoding error");
- }
- }
- catch (IOException ex)
- {
- throw new IllegalArgumentException(
- "nameConstraints parameter decoding error: " + ex);
- }
- }
- }
-}
\ No newline at end of file
diff --git a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/X509CRLSelector.java b/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/X509CRLSelector.java
deleted file mode 100644
index 4a377ed36..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/X509CRLSelector.java
+++ /dev/null
@@ -1,717 +0,0 @@
-package org.spongycastle.jce.cert;
-
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.math.BigInteger;
-import java.security.cert.CRL;
-import java.security.cert.X509CRL;
-import java.security.cert.X509Certificate;
-import java.util.Collection;
-import java.util.Date;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Set;
-
-import org.spongycastle.asn1.ASN1InputStream;
-import org.spongycastle.asn1.ASN1Object;
-import org.spongycastle.asn1.ASN1OctetString;
-import org.spongycastle.asn1.ASN1Sequence;
-import org.spongycastle.asn1.ASN1Integer;
-import org.spongycastle.asn1.x509.X509Extensions;
-import org.spongycastle.asn1.x509.X509Name;
-import org.spongycastle.jce.PrincipalUtil;
-
-/**
- * A CRLSelector
that selects X509CRLs
that match
- * all specified criteria. This class is particularly useful when selecting CRLs
- * from a CertStore
to check revocation status of a particular
- * certificate.
- *
- * When first constructed, an X509CRLSelector
has no criteria
- * enabled and each of the get
methods return a default value (null
).
- * Therefore, the {@link #match match} method would return true
- * for any X509CRL
. Typically, several criteria are enabled (by
- * calling {@link #setIssuerNames setIssuerNames} or
- * {@link #setDateAndTime setDateAndTime}, for instance) and then the
- * X509CRLSelector
is passed to
- * {@link CertStore#getCRLs CertStore.getCRLs} or some similar method.
- *
- * Please refer to RFC 2459 for definitions of the X.509 CRL fields and
- * extensions mentioned below.
- *
- * Concurrent Access
- *
- * Unless otherwise specified, the methods defined in this class are not
- * thread-safe. Multiple threads that need to access a single object
- * concurrently should synchronize amongst themselves and provide the necessary
- * locking. Multiple threads each manipulating separate objects need not
- * synchronize.
- *
- * Uses {@link org.spongycastle.asn1.ASN1InputStream ASN1InputStream},
- * {@link org.spongycastle.asn1.ASN1Sequence ASN1Sequence},
- * {@link org.spongycastle.asn1.ASN1ObjectIdentifier ASN1ObjectIdentifier},
- * {@link org.spongycastle.asn1.DEROutputStream DEROutputStream},
- * {@link org.spongycastle.asn1.ASN1Object ASN1Object},
- * {@link org.spongycastle.asn1.x509.X509Name X509Name}
- *
- * @see CRLSelector
- * @see X509CRL
- */
-public class X509CRLSelector implements CRLSelector
-{
- private Set issuerNames = null;
-
- private Set issuerNamesX509 = null;
-
- private BigInteger minCRL = null;
-
- private BigInteger maxCRL = null;
-
- private Date dateAndTime = null;
-
- private X509Certificate certChecking = null;
-
- /**
- * Creates an X509CRLSelector
. Initially, no criteria are
- * set so any X509CRL
will match.
- */
- public X509CRLSelector()
- {
- }
-
- /**
- * Sets the issuerNames criterion. The issuer distinguished name in the
- * X509CRL
must match at least one of the specified
- * distinguished names. If null
, any issuer distinguished
- * name will do.
- *
- * This method allows the caller to specify, with a single method call, the
- * complete set of issuer names which X509CRLs
may contain.
- * The specified value replaces the previous value for the issuerNames
- * criterion.
- *
- * The names
parameter (if not null
) is a
- * Collection
of names. Each name is a String
- * or a byte array representing a distinguished name (in RFC 2253 or ASN.1
- * DER encoded form, respectively). If null
is supplied as
- * the value for this argument, no issuerNames check will be performed.
- *
- * Note that the names
parameter can contain duplicate
- * distinguished names, but they may be removed from the
- * Collection
of names returned by the
- * {@link #getIssuerNames getIssuerNames} method.
- *
- * If a name is specified as a byte array, it should contain a single DER
- * encoded distinguished name, as defined in X.501. The ASN.1 notation for
- * this structure is as follows.
- *
- *
- *
- *
- * Name ::= CHOICE {
- * RDNSequence }
- *
- * RDNSequence ::= SEQUENCE OF RDN
- *
- * RDN ::=
- * SET SIZE (1 .. MAX) OF AttributeTypeAndValue
- *
- * AttributeTypeAndValue ::= SEQUENCE {
- * type AttributeType,
- * value AttributeValue }
- *
- * AttributeType ::= OBJECT IDENTIFIER
- *
- * AttributeValue ::= ANY DEFINED BY AttributeType
- * ....
- * DirectoryString ::= CHOICE {
- * teletexString TeletexString (SIZE (1..MAX)),
- * printableString PrintableString (SIZE (1..MAX)),
- * universalString UniversalString (SIZE (1..MAX)),
- * utf8String UTF8String (SIZE (1.. MAX)),
- * bmpString BMPString (SIZE (1..MAX)) }
- *
- *
- * Note that a deep copy is performed on the Collection
to
- * protect against subsequent modifications.
- *
- * @param names
- * a Collection
of names (or null
)
- *
- * @exception IOException
- * if a parsing error occurs
- *
- * @see #getIssuerNames
- */
- public void setIssuerNames(Collection names) throws IOException
- {
- if (names == null || names.isEmpty())
- {
- issuerNames = null;
- issuerNamesX509 = null;
- }
- else
- {
- Object item;
- Iterator iter = names.iterator();
- while (iter.hasNext())
- {
- item = iter.next();
- if (item instanceof String)
- {
- addIssuerName((String)item);
- }
- else if (item instanceof byte[])
- {
- addIssuerName((byte[])item);
- }
- else
- {
- throw new IOException("name not byte[]or String: "
- + item.toString());
- }
- }
- }
- }
-
- /**
- * Adds a name to the issuerNames criterion. The issuer distinguished name
- * in the X509CRL
must match at least one of the specified
- * distinguished names.
- *
- * This method allows the caller to add a name to the set of issuer names
- * which X509CRLs
may contain. The specified name is added to
- * any previous value for the issuerNames criterion. If the specified name
- * is a duplicate, it may be ignored.
- *
- * Uses {@link org.spongycastle.asn1.x509.X509Name X509Name} for parsing the
- * name
- *
- * @param name
- * the name in RFC 2253 form
- *
- * @exception IOException
- * if a parsing error occurs
- */
- public void addIssuerName(String name) throws IOException
- {
- if (issuerNames == null)
- {
- issuerNames = new HashSet();
- issuerNamesX509 = new HashSet();
- }
- X509Name nameX509;
- try
- {
- nameX509 = new X509Name(name);
- }
- catch (IllegalArgumentException ex)
- {
- throw new IOException(ex.getMessage());
- }
- issuerNamesX509.add(nameX509);
- issuerNames.add(name);
- }
-
- /**
- * Adds a name to the issuerNames criterion. The issuer distinguished name
- * in the X509CRL
must match at least one of the specified
- * distinguished names.
- *
- * This method allows the caller to add a name to the set of issuer names
- * which X509CRLs
may contain. The specified name is added to
- * any previous value for the issuerNames criterion. If the specified name
- * is a duplicate, it may be ignored. If a name is specified as a byte
- * array, it should contain a single DER encoded distinguished name, as
- * defined in X.501. The ASN.1 notation for this structure is as follows.
- *
- * The name is provided as a byte array. This byte array should contain a
- * single DER encoded distinguished name, as defined in X.501. The ASN.1
- * notation for this structure appears in the documentation for
- * {@link #setIssuerNames setIssuerNames(Collection names)}.
- *
- * Note that the byte array supplied here is cloned to protect against
- * subsequent modifications.
- *
- * Uses {@link org.spongycastle.asn1.x509.X509Name X509Name} for parsing the
- * name, {@link org.spongycastle.asn1.ASN1InputStream ASN1InputStream},
- * {@link org.spongycastle.asn1.ASN1Object ASN1Object} and
- * {@link org.spongycastle.asn1.ASN1Sequence ASN1Sequence}
- *
- * @param name
- * a byte array containing the name in ASN.1 DER encoded form
- *
- * @exception IOException
- * if a parsing error occurs
- */
- public void addIssuerName(byte[] name) throws IOException
- {
- if (issuerNames == null)
- {
- issuerNames = new HashSet();
- issuerNamesX509 = new HashSet();
- }
-
- ByteArrayInputStream inStream = new ByteArrayInputStream(name);
- ASN1InputStream derInStream = new ASN1InputStream(inStream);
- ASN1Object obj = derInStream.readObject();
- if (obj instanceof ASN1Sequence)
- {
- issuerNamesX509.add(new X509Name((ASN1Sequence)obj));
- }
- else
- {
- throw new IOException("parsing error");
- }
- issuerNames.add(name.clone());
- }
-
- /**
- * Sets the minCRLNumber criterion. The X509CRL
must have a
- * CRL number extension whose value is greater than or equal to the
- * specified value. If null
, no minCRLNumber check will be
- * done.
- *
- * @param minCRL
- * the minimum CRL number accepted (or null
)
- */
- public void setMinCRLNumber(BigInteger minCRL)
- {
- this.minCRL = minCRL;
- }
-
- /**
- * Sets the maxCRLNumber criterion. The X509CRL
must have a
- * CRL number extension whose value is less than or equal to the specified
- * value. If null
, no maxCRLNumber check will be done.
- *
- * @param maxCRL
- * the maximum CRL number accepted (or null
)
- */
- public void setMaxCRLNumber(BigInteger maxCRL)
- {
- this.maxCRL = maxCRL;
- }
-
- /**
- * Sets the dateAndTime criterion. The specified date must be equal to or
- * later than the value of the thisUpdate component of the
- * X509CRL
and earlier than the value of the nextUpdate
- * component. There is no match if the X509CRL
does not
- * contain a nextUpdate component. If null
, no dateAndTime
- * check will be done.
- *
- * Note that the Date
supplied here is cloned to protect
- * against subsequent modifications.
- *
- * @param dateAndTime
- * the Date
to match against (or null
)
- *
- * @see #getDateAndTime
- */
- public void setDateAndTime(Date dateAndTime)
- {
- if (dateAndTime == null)
- {
- this.dateAndTime = null;
- }
- else
- {
- this.dateAndTime = new Date(dateAndTime.getTime());
- }
- }
-
- /**
- * Sets the certificate being checked. This is not a criterion. Rather, it
- * is optional information that may help a CertStore
find
- * CRLs that would be relevant when checking revocation for the specified
- * certificate. If null
is specified, then no such optional
- * information is provided.
- *
- * @param cert
- * the X509Certificate
being checked (or
- * null
)
- *
- * @see #getCertificateChecking
- */
- public void setCertificateChecking(X509Certificate cert)
- {
- certChecking = cert;
- }
-
- /**
- * Returns a copy of the issuerNames criterion. The issuer distinguished
- * name in the X509CRL
must match at least one of the
- * specified distinguished names. If the value returned is null
,
- * any issuer distinguished name will do.
- *
- * If the value returned is not null
, it is a
- * Collection
of names. Each name is a String
- * or a byte array representing a distinguished name (in RFC 2253 or ASN.1
- * DER encoded form, respectively). Note that the Collection
- * returned may contain duplicate names.
- *
- * If a name is specified as a byte array, it should contain a single DER
- * encoded distinguished name, as defined in X.501. The ASN.1 notation for
- * this structure is given in the documentation for
- * {@link #setIssuerNames setIssuerNames(Collection names)}.
- *
- * Note that a deep copy is performed on the Collection
to
- * protect against subsequent modifications.
- *
- * @return a Collection
of names (or null
)
- * @see #setIssuerNames
- */
- public Collection getIssuerNames()
- {
- if (issuerNames == null)
- {
- return null;
- }
-
- Collection set = new HashSet();
- Iterator iter = issuerNames.iterator();
- Object item;
- while (iter.hasNext())
- {
- item = iter.next();
- if (item instanceof String)
- {
- set.add(new String((String)item));
- }
- else if (item instanceof byte[])
- {
- set.add(((byte[])item).clone());
- }
- }
- return set;
- }
-
- /**
- * Returns the minCRLNumber criterion. The X509CRL
must have
- * a CRL number extension whose value is greater than or equal to the
- * specified value. If null
, no minCRLNumber check will be
- * done.
- *
- * @return the minimum CRL number accepted (or null
)
- */
- public BigInteger getMinCRL()
- {
- return minCRL;
- }
-
- /**
- * Returns the maxCRLNumber criterion. The X509CRL
must have
- * a CRL number extension whose value is less than or equal to the specified
- * value. If null
, no maxCRLNumber check will be done.
- *
- * @return the maximum CRL number accepted (or null
)
- */
- public BigInteger getMaxCRL()
- {
- return maxCRL;
- }
-
- /**
- * Returns the dateAndTime criterion. The specified date must be equal to or
- * later than the value of the thisUpdate component of the
- * X509CRL
and earlier than the value of the nextUpdate
- * component. There is no match if the X509CRL
does not
- * contain a nextUpdate component. If null
, no dateAndTime
- * check will be done.
- *
- * Note that the Date
returned is cloned to protect against
- * subsequent modifications.
- *
- * @return the Date
to match against (or null
)
- *
- * @see #setDateAndTime
- */
- public Date getDateAndTime()
- {
- if (dateAndTime == null)
- {
- return null;
- }
-
- return new Date(dateAndTime.getTime());
- }
-
- /**
- * Returns the certificate being checked. This is not a criterion. Rather,
- * it is optional information that may help a CertStore
find
- * CRLs that would be relevant when checking revocation for the specified
- * certificate. If the value returned is null
, then no such
- * optional information is provided.
- *
- * @return the certificate being checked (or null
)
- *
- * @see #setCertificateChecking
- */
- public X509Certificate getCertificateChecking()
- {
- return certChecking;
- }
-
- /**
- * Returns a printable representation of the X509CRLSelector
.
- *
- * Uses
- * {@link org.spongycastle.asn1.x509.X509Name#toString X509Name.toString} to
- * format the output
- *
- * @return a String
describing the contents of the
- * X509CRLSelector
.
- */
- public String toString()
- {
- StringBuffer s = new StringBuffer();
- s.append("X509CRLSelector: [\n");
- if (issuerNamesX509 != null)
- {
- s.append(" IssuerNames:\n");
- Iterator iter = issuerNamesX509.iterator();
- while (iter.hasNext())
- {
- s.append(" ").append(iter.next()).append('\n');
- }
- }
- if (minCRL != null)
- {
- s.append(" minCRLNumber: ").append(minCRL).append('\n');
- }
- if (maxCRL != null)
- {
- s.append(" maxCRLNumber: ").append(maxCRL).append('\n');
- }
- if (dateAndTime != null)
- {
- s.append(" dateAndTime: ").append(dateAndTime).append('\n');
- }
- if (certChecking != null)
- {
- s.append(" Certificate being checked: ").append(certChecking).append('\n');
- }
- s.append(']');
- return s.toString();
- }
-
- /**
- * Decides whether a CRL
should be selected.
- *
- * Uses
- * {@link org.spongycastle.asn1.x509.X509Name#toString X509Name.toString} to
- * parse and to compare the crl parameter issuer and
- * {@link org.spongycastle.asn1.x509.X509Extensions#CRLNumber CRLNumber} to
- * access the CRL number extension.
- *
- * @param crl
- * the CRL
to be checked
- *
- * @return true
if the CRL
should be selected,
- * false
otherwise
- */
- public boolean match(CRL crl)
- {
- if (!(crl instanceof X509CRL))
- {
- return false;
- }
-
- X509CRL crlX509 = (X509CRL)crl;
- boolean test;
-
- if (issuerNamesX509 != null)
- {
- Iterator iter = issuerNamesX509.iterator();
- test = false;
- X509Name crlIssuer = null;
- try
- {
- crlIssuer = PrincipalUtil.getIssuerX509Principal(crlX509);
- }
- catch (Exception ex)
- {
-
- return false;
- }
-
- while (iter.hasNext())
- {
- if (crlIssuer.equals(iter.next(), true))
- {
- test = true;
- break;
- }
- }
- if (!test)
- {
- return false;
- }
- }
-
- byte[] data = crlX509.getExtensionValue(X509Extensions.CRLNumber
- .getId());
- if (data != null)
- {
- try
- {
- ByteArrayInputStream inStream = new ByteArrayInputStream(data);
- ASN1InputStream derInputStream = new ASN1InputStream(inStream);
- inStream = new ByteArrayInputStream(
- ((ASN1OctetString)derInputStream.readObject())
- .getOctets());
- derInputStream = new ASN1InputStream(inStream);
- BigInteger crlNumber = ((ASN1Integer)derInputStream.readObject())
- .getPositiveValue();
- if (minCRL != null && minCRL.compareTo(crlNumber) > 0)
- {
- return false;
- }
- if (maxCRL != null && maxCRL.compareTo(crlNumber) < 0)
- {
- return false;
- }
- }
- catch (IOException ex)
- {
- return false;
- }
- }
- else if (minCRL != null || maxCRL != null)
- {
- return false;
- }
-
- if (dateAndTime != null)
- {
- Date check = crlX509.getThisUpdate();
- if (check == null)
- {
- return false;
- }
- else if (dateAndTime.before(check))
- {
- return false;
- }
-
- check = crlX509.getNextUpdate();
- if (check == null)
- {
- return false;
- }
- else if (!dateAndTime.before(check))
- {
- return false;
- }
- }
-
- return true;
- }
-
- /**
- * Returns a copy of this object.
- *
- * @return the copy
- */
- public Object clone()
- {
- try
- {
- X509CRLSelector copy = (X509CRLSelector)super.clone();
- if (issuerNames != null)
- {
- copy.issuerNames = new HashSet();
- Iterator iter = issuerNames.iterator();
- Object obj;
- while (iter.hasNext())
- {
- obj = iter.next();
- if (obj instanceof byte[])
- {
- copy.issuerNames.add(((byte[])obj).clone());
- }
- else
- {
- copy.issuerNames.add(obj);
- }
- }
- copy.issuerNamesX509 = new HashSet(issuerNamesX509);
- }
- return copy;
- }
- catch (CloneNotSupportedException e)
- {
- /* Cannot happen */
- throw new InternalError(e.toString());
- }
- }
-
- /**
- * Decides whether a CRL
should be selected.
- *
- * @param crl
- * the CRL
to be checked
- *
- * @return true
if the CRL
should be selected,
- * false
otherwise
- */
- public boolean equals(Object obj)
- {
- if (!(obj instanceof X509CRLSelector))
- {
- return false;
- }
-
- X509CRLSelector equalsCRL = (X509CRLSelector)obj;
-
- if (!equals(dateAndTime, equalsCRL.dateAndTime))
- {
- return false;
- }
-
- if (!equals(minCRL, equalsCRL.minCRL))
- {
- return false;
- }
-
- if (!equals(maxCRL, equalsCRL.maxCRL))
- {
- return false;
- }
-
- if (!equals(issuerNamesX509, equalsCRL.issuerNamesX509))
- {
- return false;
- }
-
- if (!equals(certChecking, equalsCRL.certChecking))
- {
- return false;
- }
-
- return true;
- }
-
- /**
- * Return true
if two Objects are unequal.
- * This means that one is null
and the other is
- * not or obj1.equals(obj2)
returns
- * false
.
- **/
- private boolean equals(Object obj1, Object obj2)
- {
- if (obj1 == null)
- {
- if (obj2 != null)
- {
- return true;
- }
- }
- else if (!obj1.equals(obj2))
- {
- return true;
- }
- return false;
- }
-}
\ No newline at end of file
diff --git a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/X509CertSelector.java b/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/X509CertSelector.java
deleted file mode 100644
index 0b288faa4..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/X509CertSelector.java
+++ /dev/null
@@ -1,2469 +0,0 @@
-package org.spongycastle.jce.cert;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.math.BigInteger;
-import java.security.PublicKey;
-import java.security.cert.Certificate;
-import java.security.cert.X509Certificate;
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Date;
-import java.util.Enumeration;
-import java.util.HashSet;
-import java.util.Hashtable;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-
-import org.spongycastle.asn1.ASN1InputStream;
-import org.spongycastle.asn1.ASN1Object;
-import org.spongycastle.asn1.ASN1ObjectIdentifier;
-import org.spongycastle.asn1.ASN1OctetString;
-import org.spongycastle.asn1.ASN1Sequence;
-import org.spongycastle.asn1.ASN1TaggedObject;
-import org.spongycastle.asn1.DERGeneralizedTime;
-import org.spongycastle.asn1.ASN1GeneralizedTime;
-import org.spongycastle.asn1.DEROutputStream;
-import org.spongycastle.asn1.util.ASN1Dump;
-import org.spongycastle.asn1.x509.AlgorithmIdentifier;
-import org.spongycastle.asn1.x509.ExtendedKeyUsage;
-import org.spongycastle.asn1.x509.KeyPurposeId;
-import org.spongycastle.asn1.x509.SubjectPublicKeyInfo;
-import org.spongycastle.asn1.x509.X509Extensions;
-import org.spongycastle.asn1.x509.X509Name;
-import org.spongycastle.jce.PrincipalUtil;
-import org.spongycastle.util.Integers;
-
-/**
- * A CertSelector
that selects
- * X509Certificates that match all
- * specified criteria. This class is particularly useful when
- * selecting certificates from a CertStore to build a PKIX-compliant
- * certification path.
- *
- * When first constructed, an X509CertSelector
has no criteria enabled
- * and each of the get methods return a default value (null
, or -1 for
- * the {@link #getBasicConstraints} method). Therefore, the {@link #match} method would
- * return true for any X509Certificate
. Typically, several criteria
- * are enabled (by calling {@link #setIssuer} or {@link #setKeyUsage}, for instance) and
- * then the X509CertSelector
is passed to {@link CertStore#getCertificates} or
- * some similar method.
- *
- * Several criteria can be enabled (by calling {@link #setIssuer} and
- * {@link #setSerialNumber}, for example) such that the match method usually
- * uniquely matches a single X509Certificate
. We say usually, since it
- * is possible for two issuing CAs to have the same distinguished name
- * and each issue a certificate with the same serial number. Other
- * unique combinations include the issuer, subject,
- * subjectKeyIdentifier and/or the subjectPublicKey criteria.
- *
- * Please refer to RFC 2459 for definitions of the X.509 certificate
- * extensions mentioned below.
- *
- * Concurrent Access
- *
- * Unless otherwise specified, the methods defined in this class are
- * not thread-safe. Multiple threads that need to access a single
- * object concurrently should synchronize amongst themselves and
- * provide the necessary locking. Multiple threads each manipulating
- * separate objects need not synchronize.
- *
- * TODO: implement name constraints
- * TODO: implement match check for path to names
- *
- * Uses {@link org.spongycastle.asn1.ASN1InputStream ASN1InputStream},
- * {@link org.spongycastle.asn1.ASN1Sequence ASN1Sequence},
- * {@link org.spongycastle.asn1.ASN1ObjectIdentifier ASN1ObjectIdentifier},
- * {@link org.spongycastle.asn1.DEROutputStream DEROutputStream},
- * {@link org.spongycastle.asn1.ASN1Object ASN1Object},
- * {@link org.spongycastle.asn1.OIDTokenizer OIDTokenizer},
- * {@link org.spongycastle.asn1.x509.X509Name X509Name},
- * {@link org.spongycastle.asn1.x509.X509Extensions X509Extensions},
- * {@link org.spongycastle.asn1.x509.ExtendedKeyUsage ExtendedKeyUsage},
- * {@link org.spongycastle.asn1.x509.KeyPurposeId KeyPurposeId},
- * {@link org.spongycastle.asn1.x509.SubjectPublicKeyInfo SubjectPublicKeyInfo},
- * {@link org.spongycastle.asn1.x509.AlgorithmIdentifier AlgorithmIdentifier}
- */
-public class X509CertSelector implements CertSelector
-{
- private static final Hashtable keyPurposeIdMap = new Hashtable();
- static
- {
- keyPurposeIdMap.put(KeyPurposeId.id_kp_serverAuth.getId(),
- KeyPurposeId.id_kp_serverAuth);
- keyPurposeIdMap.put(KeyPurposeId.id_kp_clientAuth.getId(),
- KeyPurposeId.id_kp_clientAuth);
- keyPurposeIdMap.put(KeyPurposeId.id_kp_codeSigning.getId(),
- KeyPurposeId.id_kp_codeSigning);
- keyPurposeIdMap.put(KeyPurposeId.id_kp_emailProtection.getId(),
- KeyPurposeId.id_kp_emailProtection);
- keyPurposeIdMap.put(KeyPurposeId.id_kp_ipsecEndSystem.getId(),
- KeyPurposeId.id_kp_ipsecEndSystem);
- keyPurposeIdMap.put(KeyPurposeId.id_kp_ipsecTunnel.getId(),
- KeyPurposeId.id_kp_ipsecTunnel);
- keyPurposeIdMap.put(KeyPurposeId.id_kp_ipsecUser.getId(),
- KeyPurposeId.id_kp_ipsecUser);
- keyPurposeIdMap.put(KeyPurposeId.id_kp_timeStamping.getId(),
- KeyPurposeId.id_kp_timeStamping);
- }
-
- private X509Certificate x509Cert = null;
-
- private BigInteger serialNumber = null;
-
- private Object issuerDN = null;
-
- private X509Name issuerDNX509 = null;
-
- private Object subjectDN = null;
-
- private X509Name subjectDNX509 = null;
-
- private byte[] subjectKeyID = null;
-
- private byte[] authorityKeyID = null;
-
- private Date certValid = null;
-
- private Date privateKeyValid = null;
-
- private ASN1ObjectIdentifier subjectKeyAlgID = null;
-
- private PublicKey subjectPublicKey = null;
-
- private byte[] subjectPublicKeyByte = null;
-
- private boolean[] keyUsage = null;
-
- private Set keyPurposeSet = null;
-
- private boolean matchAllSubjectAltNames = true;
-
- private Set subjectAltNames = null;
-
- private Set subjectAltNamesByte = null;
-
- private int minMaxPathLen = -1;
-
- private Set policy = null;
-
- private Set policyOID = null;
-
- private Set pathToNames = null;
-
- private Set pathToNamesByte = null;
-
- /**
- * Creates an X509CertSelector
. Initially, no criteria are
- * set so any X509Certificate
will match.
- */
- public X509CertSelector()
- {
- }
-
- /**
- * Sets the certificateEquals criterion. The specified
- * X509Certificate
must be equal to the
- * X509Certificate
passed to the match method. If
- * null
, then this check is not applied.
- *
- * This method is particularly useful when it is necessary to match a single
- * certificate. Although other criteria can be specified in conjunction with
- * the certificateEquals criterion, it is usually not practical or
- * necessary.
- *
- * @param cert
- * the X509Certificate to match (or null
)
- *
- * @see #getCertificate()
- */
- public void setCertificate(X509Certificate cert)
- {
- x509Cert = cert;
- }
-
- /**
- * Sets the serialNumber criterion. The specified serial number must match
- * the certificate serial number in the X509Certificate
. If
- * null
, any certificate serial number will do.
- *
- * @param serial
- * the certificate serial number to match (or null
)
- *
- * @see #getSerialNumber()
- */
- public void setSerialNumber(BigInteger serial)
- {
- serialNumber = serial;
- }
-
- /**
- * Sets the issuer criterion. The specified distinguished name must match
- * the issuer distinguished name in the X509Certificate
. If
- * null
, any issuer distinguished name will do.
- *
- * If issuerDN
is not null
, it should contain
- * a distinguished name, in RFC 2253 format.
- *
- * Uses {@link org.spongycastle.asn1.x509.X509Name X509Name} for parsing the
- * issuerDN.
- *
- * @param issuerDN
- * a distinguished name in RFC 2253 format (or null
)
- *
- * @exception IOException
- * if a parsing error occurs (incorrect form for DN)
- */
- public void setIssuer(String issuerDN) throws IOException
- {
- if (issuerDN == null)
- {
- this.issuerDN = null;
- this.issuerDNX509 = null;
- }
- else
- {
- X509Name nameX509;
- try
- {
- nameX509 = new X509Name(issuerDN);
- }
- catch (IllegalArgumentException ex)
- {
- throw new IOException(ex.getMessage());
- }
- this.issuerDNX509 = nameX509;
- this.issuerDN = issuerDN;
- }
- }
-
- /**
- * Sets the issuer criterion. The specified distinguished name must match
- * the issuer distinguished name in the X509Certificate
. If
- * null is specified, the issuer criterion is disabled and any issuer
- * distinguished name will do.
- *
- * If issuerDN
is not null
, it should contain
- * a single DER encoded distinguished name, as defined in X.501. The ASN.1
- * notation for this structure is as follows.
- *
- *
- *
- * Name ::= CHOICE {
- * RDNSequence }
- *
- * RDNSequence ::= SEQUENCE OF RDN
- *
- * RDN ::=
- * SET SIZE (1 .. MAX) OF AttributeTypeAndValue
- *
- * AttributeTypeAndValue ::= SEQUENCE {
- * type AttributeType,
- * value AttributeValue }
- *
- * AttributeType ::= OBJECT IDENTIFIER
- *
- * AttributeValue ::= ANY DEFINED BY AttributeType
- * ....
- * DirectoryString ::= CHOICE {
- * teletexString TeletexString (SIZE (1..MAX)),
- * printableString PrintableString (SIZE (1..MAX)),
- * universalString UniversalString (SIZE (1..MAX)),
- * utf8String UTF8String (SIZE (1.. MAX)),
- * bmpString BMPString (SIZE (1..MAX)) }
- *
- *
- *
- *
- * Note that the byte array specified here is cloned to protect against
- * subsequent modifications.
- *
- * Uses {@link org.spongycastle.asn1.ASN1InputStream ASN1InputStream},
- * {@link org.spongycastle.asn1.ASN1Object ASN1Object},
- * {@link org.spongycastle.asn1.ASN1Sequence ASN1Sequence},
- * {@link org.spongycastle.asn1.x509.X509Name X509Name}
- *
- * @param issuerDN -
- * a byte array containing the distinguished name in ASN.1 DER
- * encoded form (or null
)
- *
- * @exception IOException
- * if an encoding error occurs (incorrect form for DN)
- */
- public void setIssuer(byte[] issuerDN) throws IOException
- {
- if (issuerDN == null)
- {
- this.issuerDN = null;
- this.issuerDNX509 = null;
- }
- else
- {
- ByteArrayInputStream inStream = new ByteArrayInputStream(issuerDN);
- ASN1InputStream derInStream = new ASN1InputStream(inStream);
- ASN1Object obj = derInStream.readObject();
- if (obj instanceof ASN1Sequence)
- {
- this.issuerDNX509 = new X509Name((ASN1Sequence)obj);
- }
- else
- {
- throw new IOException("parsing error");
- }
- this.issuerDN = (byte[])issuerDN.clone();
- }
- }
-
- /**
- * Sets the subject criterion. The specified distinguished name must match
- * the subject distinguished name in the X509Certificate
. If
- * null, any subject distinguished name will do.
- *
- * If subjectDN
is not null
, it should
- * contain a distinguished name, in RFC 2253 format.
- *
- * Uses {@link org.spongycastle.asn1.x509.X509Name X509Name} for parsing the
- * subjectDN.
- *
- * @param subjectDN
- * a distinguished name in RFC 2253 format (or null
)
- *
- * @exception IOException
- * if a parsing error occurs (incorrect form for DN)
- */
- public void setSubject(String subjectDN) throws IOException
- {
- if (subjectDN == null)
- {
- this.subjectDN = null;
- this.subjectDNX509 = null;
- }
- else
- {
- X509Name nameX509;
- try
- {
- nameX509 = new X509Name(subjectDN);
- }
- catch (IllegalArgumentException ex)
- {
- throw new IOException(ex.getMessage());
- }
-
- this.subjectDNX509 = nameX509;
- this.subjectDN = subjectDN;
- }
- }
-
- /**
- * Sets the subject criterion. The specified distinguished name must match
- * the subject distinguished name in the X509Certificate
. If
- * null, any subject distinguished name will do.
- *
- * If subjectDN
is not null
, it should
- * contain a single DER encoded distinguished name, as defined in X.501. For
- * the ASN.1 notation for this structure, see
- * {@link #setIssuer(byte []) setIssuer(byte [] issuerDN)}.
- *
- * Uses {@link org.spongycastle.asn1.ASN1InputStream ASN1InputStream},
- * {@link org.spongycastle.asn1.ASN1Object ASN1Object},
- * {@link org.spongycastle.asn1.ASN1Sequence ASN1Sequence},
- * {@link org.spongycastle.asn1.x509.X509Name X509Name}
- *
- * @param subjectDN
- * a byte array containing the distinguished name in ASN.1 DER
- * format (or null
)
- *
- * @exception IOException
- * if an encoding error occurs (incorrect form for DN)
- */
- public void setSubject(byte[] subjectDN) throws IOException
- {
- if (subjectDN == null)
- {
- this.subjectDN = null;
- this.subjectDNX509 = null;
- }
- else
- {
- ByteArrayInputStream inStream = new ByteArrayInputStream(subjectDN);
- ASN1InputStream derInStream = new ASN1InputStream(inStream);
- ASN1Object obj = derInStream.readObject();
-
- if (obj instanceof ASN1Sequence)
- {
- this.subjectDNX509 = new X509Name((ASN1Sequence)obj);
- }
- else
- {
- throw new IOException("parsing error");
- }
- this.subjectDN = (byte[])subjectDN.clone();
- }
- }
-
- /**
- * Sets the subjectKeyIdentifier criterion. The X509Certificate
- * must contain a SubjectKeyIdentifier extension for which the contents of
- * the extension matches the specified criterion value. If the criterion
- * value is null, no subjectKeyIdentifier check will be done.
- *
- * If subjectKeyID
is not null
, it should
- * contain a single DER encoded value corresponding to the contents of the
- * extension value (not including the object identifier, criticality
- * setting, and encapsulating OCTET STRING) for a SubjectKeyIdentifier
- * extension. The ASN.1 notation for this structure follows.
- *
- *
- *
- * SubjectKeyIdentifier ::= KeyIdentifier
- *
- * KeyIdentifier ::= OCTET STRING
- *
- *
- *
- *
- * Since the format of subject key identifiers is not mandated by any
- * standard, subject key identifiers are not parsed by the
- * X509CertSelector
. Instead, the values are compared using
- * a byte-by-byte comparison.
- *
- * Note that the byte array supplied here is cloned to protect against
- * subsequent modifications.
- *
- * @param subjectKeyID -
- * the subject key identifier (or null
)
- *
- * @see #getSubjectKeyIdentifier()
- */
- public void setSubjectKeyIdentifier(byte[] subjectKeyID)
- {
- if (subjectKeyID == null)
- {
- this.subjectKeyID = null;
- }
- else
- {
- this.subjectKeyID = (byte[])subjectKeyID.clone();
- }
- }
-
- /**
- * Sets the authorityKeyIdentifier criterion. The
- * X509Certificate
must contain an AuthorityKeyIdentifier
- * extension for which the contents of the extension value matches the
- * specified criterion value. If the criterion value is null
,
- * no authorityKeyIdentifier check will be done.
- *
- * If authorityKeyID
is not null
, it should
- * contain a single DER encoded value corresponding to the contents of the
- * extension value (not including the object identifier, criticality
- * setting, and encapsulating OCTET STRING) for an AuthorityKeyIdentifier
- * extension. The ASN.1 notation for this structure follows.
- *
- *
- *
- * AuthorityKeyIdentifier ::= SEQUENCE {
- * keyIdentifier [0] KeyIdentifier OPTIONAL,
- * authorityCertIssuer [1] GeneralNames OPTIONAL,
- * authorityCertSerialNumber [2] CertificateSerialNumber OPTIONAL }
- *
- * KeyIdentifier ::= OCTET STRING
- *
- *
- *
- *
- * Authority key identifiers are not parsed by the
- * X509CertSelector
. Instead, the values are compared using
- * a byte-by-byte comparison.
- *
- * When the keyIdentifier
field of
- * AuthorityKeyIdentifier
is populated, the value is usually
- * taken from the SubjectKeyIdentifier extension in the issuer's
- * certificate. Note, however, that the result of
- * X509Certificate.getExtensionValue(
- *
- * Note also that the byte array supplied here is cloned to protect against
- * subsequent modifications.
- *
- * @param authorityKeyID
- * the authority key identifier (or null
)
- *
- * @see #getAuthorityKeyIdentifier()
- */
- public void setAuthorityKeyIdentifier(byte[] authorityKeyID)
- {
- if (authorityKeyID == null)
- {
- this.authorityKeyID = null;
- }
- else
- {
- this.authorityKeyID = (byte[])authorityKeyID.clone();
- }
- }
-
- /**
- * Sets the certificateValid criterion. The specified date must fall within
- * the certificate validity period for the X509Certificate. If
- * null
, no certificateValid check will be done.
- *
- * Note that the Date supplied here is cloned to protect against subsequent
- * modifications.
- *
- * @param certValid
- * the Date to check (or null
)
- *
- * @see #getCertificateValid()
- */
- public void setCertificateValid(Date certValid)
- {
- if (certValid == null)
- {
- this.certValid = null;
- }
- else
- {
- this.certValid = new Date(certValid.getTime());
- }
- }
-
- /**
- * Sets the privateKeyValid criterion. The specified date must fall within
- * the private key validity period for the X509Certificate. If
- * null
, no privateKeyValid check will be done.
- *
- * Note that the Date supplied here is cloned to protect against subsequent
- * modifications.
- *
- * @param privateKeyValid
- * the Date to check (or null
)
- *
- * @see #getPrivateKeyValid()
- */
- public void setPrivateKeyValid(Date privateKeyValid)
- {
- if (privateKeyValid == null)
- {
- this.privateKeyValid = null;
- }
- else
- {
- this.privateKeyValid = new Date(privateKeyValid.getTime());
- }
- }
-
- /**
- * Sets the subjectPublicKeyAlgID criterion. The X509Certificate must
- * contain a subject public key with the specified algorithm. If
- * null
, no subjectPublicKeyAlgID check will be done.
- *
- * @param oid
- * The object identifier (OID) of the algorithm to check for (or
- * null
). An OID is represented by a set of
- * nonnegative integers separated by periods.
- *
- * @exception IOException
- * if the OID is invalid, such as the first component being
- * not 0, 1 or 2 or the second component being greater than
- * 39.
- *
- * @see #getSubjectPublicKeyAlgID()
- */
- public void setSubjectPublicKeyAlgID(String oid) throws IOException
- {
- if (oid != null)
- {
- CertUtil.parseOID(oid);
- subjectKeyAlgID = new ASN1ObjectIdentifier(oid);
- }
- else
- {
- subjectKeyAlgID = null;
- }
- }
-
- /**
- * Sets the subjectPublicKey criterion. The X509Certificate must contain the
- * specified subject public key. If null, no subjectPublicKey check will be
- * done.
- *
- * @param key
- * the subject public key to check for (or null)
- *
- * @see #getSubjectPublicKey()
- */
- public void setSubjectPublicKey(PublicKey key)
- {
- if (key == null)
- {
- subjectPublicKey = null;
- subjectPublicKeyByte = null;
- }
- else
- {
- subjectPublicKey = key;
- subjectPublicKeyByte = key.getEncoded();
- }
- }
-
- /**
- * Sets the subjectPublicKey criterion. The X509Certificate
- * must contain the specified subject public key. If null
,
- * no subjectPublicKey check will be done.
- *
- * Because this method allows the public key to be specified as a byte
- * array, it may be used for unknown key types.
- *
- * If key is not null
, it should contain a single DER
- * encoded SubjectPublicKeyInfo structure, as defined in X.509. The ASN.1
- * notation for this structure is as follows.
- *
- *
- *
- * SubjectPublicKeyInfo ::= SEQUENCE {
- * algorithm AlgorithmIdentifier,
- * subjectPublicKey BIT STRING }
- *
- * AlgorithmIdentifier ::= SEQUENCE {
- * algorithm OBJECT IDENTIFIER,
- * parameters ANY DEFINED BY algorithm OPTIONAL }
- * -- contains a value of the type
- * -- registered for use with the
- * -- algorithm object identifier value
- *
- *
- *
- *
- * Note that the byte array supplied here is cloned to protect against
- * subsequent modifications.
- *
- * @param key
- * a byte array containing the subject public key in ASN.1 DER
- * form (or null
)
- *
- * @exception IOException
- * if an encoding error occurs (incorrect form for subject
- * public key)
- *
- * @see #getSubjectPublicKey()
- */
- public void setSubjectPublicKey(byte[] key) throws IOException
- {
- if (key == null)
- {
- subjectPublicKey = null;
- subjectPublicKeyByte = null;
- }
- else
- {
- subjectPublicKey = null;
- subjectPublicKeyByte = (byte[])key.clone();
- // TODO
- // try to generyte PublicKey Object from subjectPublicKeyByte
- }
- }
-
- /**
- * Sets the keyUsage criterion. The X509Certificate must allow the specified
- * keyUsage values. If null, no keyUsage check will be done. Note that an
- * X509Certificate that has no keyUsage extension implicitly allows all
- * keyUsage values.
- *
- * Note that the boolean array supplied here is cloned to protect against
- * subsequent modifications.
- *
- * @param keyUsage
- * a boolean array in the same format as the boolean array
- * returned by X509Certificate.getKeyUsage(). Or
- * null
.
- *
- * @see #getKeyUsage()
- */
- public void setKeyUsage(boolean[] keyUsage)
- {
- if (keyUsage == null)
- {
- this.keyUsage = null;
- }
- else
- {
- this.keyUsage = (boolean[])keyUsage.clone();
- }
- }
-
- /**
- * Sets the extendedKeyUsage criterion. The X509Certificate
- * must allow the specified key purposes in its extended key usage
- * extension. If keyPurposeSet
is empty or null
,
- * no extendedKeyUsage check will be done. Note that an
- * X509Certificate
that has no extendedKeyUsage extension
- * implicitly allows all key purposes.
- *
- * Note that the Set is cloned to protect against subsequent modifications.
- *
- * Uses {@link org.spongycastle.asn1.x509.KeyPurposeId KeyPurposeId}
- *
- * @param keyPurposeSet
- * a Set
of key purpose OIDs in string format (or
- * null
). Each OID is represented by a set of
- * nonnegative integers separated by periods.
- *
- * @exception IOException
- * if the OID is invalid, such as the first component being
- * not 0, 1 or 2 or the second component being greater than
- * 39.
- *
- * @see #getExtendedKeyUsage()
- */
- public void setExtendedKeyUsage(Set keyPurposeSet) throws IOException
- {
- if (keyPurposeSet == null || keyPurposeSet.isEmpty())
- {
- this.keyPurposeSet = keyPurposeSet;
- }
- else
- {
- this.keyPurposeSet = new HashSet();
- Iterator iter = keyPurposeSet.iterator();
- Object obj;
- KeyPurposeId purposeID;
- while (iter.hasNext())
- {
- obj = iter.next();
- if (obj instanceof String)
- {
- purposeID = (KeyPurposeId)keyPurposeIdMap.get((String)obj);
- if (purposeID == null)
- {
- throw new IOException("unknown purposeID "
- + (String)obj);
- }
- this.keyPurposeSet.add(purposeID);
- }
- }
- }
- }
-
- /**
- * Enables/disables matching all of the subjectAlternativeNames specified in
- * the {@link #setSubjectAlternativeNames setSubjectAlternativeNames} or
- * {@link #addSubjectAlternativeName addSubjectAlternativeName} methods. If
- * enabled, the X509Certificate
must contain all of the
- * specified subject alternative names. If disabled, the X509Certificate
- * must contain at least one of the specified subject alternative names.
- *
- * The matchAllNames flag is true
by default.
- *
- * @param matchAllNames
- * if true
, the flag is enabled; if
- * false
, the flag is disabled.
- *
- * @see #getMatchAllSubjectAltNames()
- */
- public void setMatchAllSubjectAltNames(boolean matchAllNames)
- {
- matchAllSubjectAltNames = matchAllNames;
- }
-
- /**
- * Sets the subjectAlternativeNames criterion. The
- * X509Certificate
must contain all or at least one of the
- * specified subjectAlternativeNames, depending on the value of the
- * matchAllNames flag (see {@link #setMatchAllSubjectAltNames}).
- *
- * This method allows the caller to specify, with a single method call, the
- * complete set of subject alternative names for the subjectAlternativeNames
- * criterion. The specified value replaces the previous value for the
- * subjectAlternativeNames criterion.
- *
- * The names
parameter (if not null
) is a
- * Collection
with one entry for each name to be included in
- * the subject alternative name criterion. Each entry is a List
- * whose first entry is an Integer
(the name type, 0-8) and
- * whose second entry is a String
or a byte array (the name,
- * in string or ASN.1 DER encoded form, respectively). There can be multiple
- * names of the same type. If null
is supplied as the value
- * for this argument, no subjectAlternativeNames check will be performed.
- *
- * Each subject alternative name in the Collection
may be
- * specified either as a String
or as an ASN.1 encoded byte
- * array. For more details about the formats used, see
- * {@link #addSubjectAlternativeName(int, String) addSubjectAlternativeName(int type, String name)}
- * and
- * {@link #addSubjectAlternativeName(int, byte[]) addSubjectAlternativeName(int type, byte [] name}).
- *
- * Note that the names
parameter can contain duplicate names
- * (same name and name type), but they may be removed from the
- * Collection
of names returned by the
- * {@link #getSubjectAlternativeNames} method.
- *
- * Note that a deep copy is performed on the Collection to protect against
- * subsequent modifications.
- *
- * @param names -
- * a Collection of names (or null)
- *
- * @exception IOException
- * if a parsing error occurs
- *
- * @see #getSubjectAlternativeNames()
- */
- public void setSubjectAlternativeNames(Collection names) throws IOException
- {
- try
- {
- if (names == null || names.isEmpty())
- {
- subjectAltNames = null;
- subjectAltNamesByte = null;
- }
- else
- {
- subjectAltNames = new HashSet();
- subjectAltNamesByte = new HashSet();
- Iterator iter = names.iterator();
- List item;
- int type;
- Object data;
- while (iter.hasNext())
- {
- item = (List)iter.next();
- type = ((Integer)item.get(0)).intValue();
- data = item.get(1);
- if (data instanceof String)
- {
- addSubjectAlternativeName(type, (String)data);
- }
- else if (data instanceof byte[])
- {
- addSubjectAlternativeName(type, (byte[])data);
- }
- else
- {
- throw new IOException(
- "parsing error: unknown data type");
- }
- }
- }
- }
- catch (Exception ex)
- {
- throw new IOException("parsing exception:\n" + ex.toString());
- }
- }
-
- /**
- * Adds a name to the subjectAlternativeNames criterion. The
- * X509Certificate
must contain all or at least one of the
- * specified subjectAlternativeNames, depending on the value of the
- * matchAllNames flag (see {@link #setMatchAllSubjectAltNames}).
- *
- * This method allows the caller to add a name to the set of subject
- * alternative names. The specified name is added to any previous value for
- * the subjectAlternativeNames criterion. If the specified name is a
- * duplicate, it may be ignored.
- *
- * The name is provided in string format. RFC 822, DNS, and URI names use
- * the well-established string formats for those types (subject to the
- * restrictions included in RFC 2459). IPv4 address names are supplied using
- * dotted quad notation. OID address names are represented as a series of
- * nonnegative integers separated by periods. And directory names
- * (distinguished names) are supplied in RFC 2253 format. No standard string
- * format is defined for otherNames, X.400 names, EDI party names, IPv6
- * address names, or any other type of names. They should be specified using
- * the
- * {@link #addSubjectAlternativeName(int, byte[]) addSubjectAlternativeName(int type, byte [] name)}
- * method.
- *
- * @param type
- * the name type (0-8, as specified in RFC 2459, section 4.2.1.7)
- * @param name -
- * the name in string form (not null)
- *
- * @exception IOException
- * if a parsing error occurs
- */
- public void addSubjectAlternativeName(int type, String name)
- throws IOException
- {
- // TODO full implementation of CertUtil.parseGeneralName
- byte[] encoded = CertUtil.parseGeneralName(type, name);
- List tmpList = new ArrayList();
- tmpList.add(Integers.valueOf(type));
- tmpList.add(name);
- subjectAltNames.add(tmpList);
- tmpList.set(1, encoded);
- subjectAltNamesByte.add(tmpList);
- }
-
- /**
- * Adds a name to the subjectAlternativeNames criterion. The
- * X509Certificate
must contain all or at least one of the
- * specified subjectAlternativeNames, depending on the value of the
- * matchAllNames flag (see {@link #setMatchAllSubjectAltNames}).
- *
- * This method allows the caller to add a name to the set of subject
- * alternative names. The specified name is added to any previous value for
- * the subjectAlternativeNames criterion. If the specified name is a
- * duplicate, it may be ignored.
- *
- * The name is provided as a byte array. This byte array should contain the
- * DER encoded name, as it would appear in the GeneralName structure defined
- * in RFC 2459 and X.509. The encoded byte array should only contain the
- * encoded value of the name, and should not include the tag associated with
- * the name in the GeneralName structure. The ASN.1 definition of this
- * structure appears below.
- *
- *
- *
- * GeneralName ::= CHOICE {
- * otherName [0] OtherName,
- * rfc822Name [1] IA5String,
- * dNSName [2] IA5String,
- * x400Address [3] ORAddress,
- * directoryName [4] Name,
- * ediPartyName [5] EDIPartyName,
- * uniformResourceIdentifier [6] IA5String,
- * iPAddress [7] OCTET STRING,
- * registeredID [8] OBJECT IDENTIFIER}
- *
- *
- *
- *
- * Note that the byte array supplied here is cloned to protect against
- * subsequent modifications.
- *
- * TODO: check encoded format
- *
- * @param type
- * the name type (0-8, as listed above)
- * @param name
- * a byte array containing the name in ASN.1 DER encoded form
- *
- * @exception IOException
- * if a parsing error occurs
- */
- public void addSubjectAlternativeName(int type, byte[] name)
- throws IOException
- {
- // TODO check encoded format
- List tmpList = new ArrayList();
- tmpList.add(Integers.valueOf(type));
- tmpList.add(name.clone());
- subjectAltNames.add(tmpList);
- subjectAltNamesByte.add(tmpList);
- }
-
- /**
- * Sets the name constraints criterion. The X509Certificate
- * must have subject and subject alternative names that meet the specified
- * name constraints.
- *
- * The name constraints are specified as a byte array. This byte array
- * should contain the DER encoded form of the name constraints, as they
- * would appear in the NameConstraints structure defined in RFC 2459 and
- * X.509. The ASN.1 definition of this structure appears below.
- *
- *
- *
- * NameConstraints ::= SEQUENCE {
- * permittedSubtrees [0] GeneralSubtrees OPTIONAL,
- * excludedSubtrees [1] GeneralSubtrees OPTIONAL }
- *
- * GeneralSubtrees ::= SEQUENCE SIZE (1..MAX) OF GeneralSubtree
- *
- * GeneralSubtree ::= SEQUENCE {
- * base GeneralName,
- * minimum [0] BaseDistance DEFAULT 0,
- * maximum [1] BaseDistance OPTIONAL }
- *
- * BaseDistance ::= INTEGER (0..MAX)
- *
- * GeneralName ::= CHOICE {
- * otherName [0] OtherName,
- * rfc822Name [1] IA5String,
- * dNSName [2] IA5String,
- * x400Address [3] ORAddress,
- * directoryName [4] Name,
- * ediPartyName [5] EDIPartyName,
- * uniformResourceIdentifier [6] IA5String,
- * iPAddress [7] OCTET STRING,
- * registeredID [8] OBJECT IDENTIFIER}
- *
- *
- *
- *
- * Note that the byte array supplied here is cloned to protect against
- * subsequent modifications.
- *
- * TODO: implement this
- *
- * @param bytes
- * a byte array containing the ASN.1 DER encoding of a
- * NameConstraints extension to be used for checking name
- * constraints. Only the value of the extension is included, not
- * the OID or criticality flag. Can be null
, in
- * which case no name constraints check will be performed
- *
- * @exception IOException
- * if a parsing error occurs
- * @exception UnsupportedOperationException
- * because this method is not supported
- * @see #getNameConstraints()
- */
- public void setNameConstraints(byte[] bytes) throws IOException
- {
- throw new UnsupportedOperationException();
- }
-
- /**
- * Sets the basic constraints constraint. If the value is greater than or
- * equal to zero, X509Certificates
must include a
- * basicConstraints extension with a pathLen of at least this value. If the
- * value is -2, only end-entity certificates are accepted. If the value is
- * -1, no check is done.
- *
- * This constraint is useful when building a certification path forward
- * (from the target toward the trust anchor. If a partial path has been
- * built, any candidate certificate must have a maxPathLen value greater
- * than or equal to the number of certificates in the partial path.
- *
- * @param minMaxPathLen
- * the value for the basic constraints constraint
- *
- * @exception IllegalArgumentException
- * if the value is less than -2
- *
- * @see #getBasicConstraints()
- */
- public void setBasicConstraints(int minMaxPathLen)
- {
- if (minMaxPathLen < -2)
- {
- throw new IllegalArgumentException("minMaxPathLen must be >= -2");
- }
-
- this.minMaxPathLen = minMaxPathLen;
- }
-
- /**
- * Sets the policy constraint. The X509Certificate must include at least one
- * of the specified policies in its certificate policies extension. If
- * certPolicySet is empty, then the X509Certificate must include at least
- * some specified policy in its certificate policies extension. If
- * certPolicySet is null, no policy check will be performed.
- *
- * Note that the Set is cloned to protect against subsequent modifications.
- *
- * TODO: implement match check for this
- *
- * @param certPolicySet
- * a Set of certificate policy OIDs in string format (or null).
- * Each OID is represented by a set of nonnegative integers
- * separated by periods.
- *
- * @exception IOException
- * if a parsing error occurs on the OID such as the first
- * component is not 0, 1 or 2 or the second component is
- * greater than 39.
- *
- * @see #getPolicy()
- */
- public void setPolicy(Set certPolicySet) throws IOException
- {
- if (certPolicySet == null)
- {
- policy = null;
- policyOID = null;
- }
- else
- {
- policyOID = new HashSet();
- Iterator iter = certPolicySet.iterator();
- Object item;
- while (iter.hasNext())
- {
- item = iter.next();
- if (item instanceof String)
- {
- CertUtil.parseOID((String)item);
- policyOID.add(new ASN1ObjectIdentifier((String)item));
- }
- else
- {
- throw new IOException(
- "certPolicySet contains null values or non String objects");
- }
- }
- policy = new HashSet(certPolicySet);
- }
- }
-
- /**
- * Sets the pathToNames criterion. The X509Certificate
must
- * not include name constraints that would prohibit building a path to the
- * specified names.
- *
- * This method allows the caller to specify, with a single method call, the
- * complete set of names which the X509Certificates
's name
- * constraints must permit. The specified value replaces the previous value
- * for the pathToNames criterion.
- *
- * This constraint is useful when building a certification path forward
- * (from the target toward the trust anchor. If a partial path has been
- * built, any candidate certificate must not include name constraints that
- * would prohibit building a path to any of the names in the partial path.
- *
- * The names parameter (if not null
) is a
- * Collection
with one entry for each name to be included in
- * the pathToNames criterion. Each entry is a List
whose
- * first entry is an Integer (the name type, 0-8) and whose second entry is
- * a String
or a byte array (the name, in string or ASN.1 DER
- * encoded form, respectively). There can be multiple names of the same
- * type. If null
is supplied as the value for this argument,
- * no pathToNames check will be performed.
- *
- * Each name in the Collection may be specified either as a String or as an
- * ASN.1 encoded byte array. For more details about the formats used, see
- * {@link #addPathToName(int, String) addPathToName(int type, String name)}
- * and
- * {@link #addPathToName(int, byte[]) addPathToName(int type, byte [] name)}.
- *
- * Note that the names parameter can contain duplicate names (same name and
- * name type), but they may be removed from the Collection of names returned
- * by the {@link #getPathToNames} method.
- *
- * Note that a deep copy is performed on the Collection to protect against
- * subsequent modifications.
- *
- * TODO: implement this match check for this
- *
- * @param names
- * a Collection with one entry per name (or null
)
- *
- * @exception IOException
- * if a parsing error occurs
- * @exception UnsupportedOperationException
- * because this method is not supported
- *
- * @see #getPathToNames()
- */
- public void setPathToNames(Collection names) throws IOException
- {
- try
- {
- if (names == null || names.isEmpty())
- {
- pathToNames = null;
- pathToNamesByte = null;
- }
- else
- {
- pathToNames = new HashSet();
- pathToNamesByte = new HashSet();
- Iterator iter = names.iterator();
- List item;
- int type;
- Object data;
-
- while (iter.hasNext())
- {
- item = (List)iter.next();
- type = ((Integer)item.get(0)).intValue();
- data = item.get(1);
- if (data instanceof String)
- {
- addPathToName(type, (String)data);
- }
- else if (data instanceof byte[])
- {
- addPathToName(type, (byte[])data);
- }
- else
- {
- throw new IOException(
- "parsing error: unknown data type");
- }
- }
- }
- }
- catch (Exception ex)
- {
- throw new IOException("parsing exception:\n" + ex.toString());
- }
- }
-
- /**
- * Adds a name to the pathToNames criterion. The
- * X509Certificate
must not include name constraints that
- * would prohibit building a path to the specified name.
- *
- * This method allows the caller to add a name to the set of names which the
- * X509Certificates
's name constraints must permit. The
- * specified name is added to any previous value for the pathToNames
- * criterion. If the name is a duplicate, it may be ignored.
- *
- * The name is provided in string format. RFC 822, DNS, and URI names use
- * the well-established string formats for those types (subject to the
- * restrictions included in RFC 2459). IPv4 address names are supplied using
- * dotted quad notation. OID address names are represented as a series of
- * nonnegative integers separated by periods. And directory names
- * (distinguished names) are supplied in RFC 2253 format. No standard string
- * format is defined for otherNames, X.400 names, EDI party names, IPv6
- * address names, or any other type of names. They should be specified using
- * the
- * {@link #addPathToName(int, byte[]) addPathToName(int type, byte [] name)}
- * method.
- *
- * TODO: implement this match check for this
- *
- * @param type
- * the name type (0-8, as specified in RFC 2459, section 4.2.1.7)
- * @param name
- * the name in string form
- *
- * @exceptrion IOException if a parsing error occurs
- */
- public void addPathToName(int type, String name) throws IOException
- {
- // TODO full implementation of CertUtil.parseGeneralName
- byte[] encoded = CertUtil.parseGeneralName(type, name);
- List tmpList = new ArrayList();
- tmpList.add(Integers.valueOf(type));
- tmpList.add(name);
- pathToNames.add(tmpList);
- tmpList.set(1, encoded);
- pathToNamesByte.add(tmpList);
- throw new UnsupportedOperationException();
- }
-
- /**
- * Adds a name to the pathToNames criterion. The
- * X509Certificate
must not include name constraints that
- * would prohibit building a path to the specified name.
- *
- * This method allows the caller to add a name to the set of names which the
- * X509Certificates
's name constraints must permit. The
- * specified name is added to any previous value for the pathToNames
- * criterion. If the name is a duplicate, it may be ignored.
- *
- * The name is provided as a byte array. This byte array should contain the
- * DER encoded name, as it would appear in the GeneralName structure defined
- * in RFC 2459 and X.509. The ASN.1 definition of this structure appears in
- * the documentation for
- * {@link #addSubjectAlternativeName(int,byte[]) addSubjectAlternativeName(int type, byte[] name)}.
- *
- * Note that the byte array supplied here is cloned to protect against
- * subsequent modifications.
- *
- * TODO: implement this match check for this
- *
- * @param type
- * the name type (0-8, as specified in RFC 2459, section 4.2.1.7)
- * @param name
- * a byte array containing the name in ASN.1 DER encoded form
- *
- * @exception IOException
- * if a parsing error occurs
- */
- public void addPathToName(int type, byte[] name) throws IOException
- {
- // TODO check encoded format
- List tmpList = new ArrayList();
- tmpList.add(Integers.valueOf(type));
- tmpList.add(name.clone());
- pathToNames.add(tmpList);
- pathToNamesByte.add(tmpList);
- }
-
- /**
- * Returns the certificateEquals criterion. The specified
- * X509Certificate
must be equal to the
- * X509Certificate
passed to the match method. If
- * null
, this check is not applied.
- *
- * @retrun the X509Certificate
to match (or null
)
- *
- * @see #setCertificate(java.security.cert.X509Certificate)
- */
- public X509Certificate getCertificate()
- {
- return x509Cert;
- }
-
- /**
- * Returns the serialNumber criterion. The specified serial number must
- * match the certificate serial number in the X509Certificate
.
- * If null
, any certificate serial number will do.
- *
- * @return the certificate serial number to match (or null
)
- *
- * @see #setSerialNumber(java.math.BigInteger)
- */
- public BigInteger getSerialNumber()
- {
- return serialNumber;
- }
-
- /**
- * Returns the issuer criterion as a String. This distinguished name must
- * match the issuer distinguished name in the X509Certificate
.
- * If null
, the issuer criterion is disabled and any issuer
- * distinguished name will do.
- *
- * If the value returned is not null
, it is a distinguished
- * name, in RFC 2253 format.
- *
- * Uses {@link org.spongycastle.asn1.x509.X509Name X509Name} for formatiing
- * byte[] issuerDN to String.
- *
- * @return the required issuer distinguished name in RFC 2253 format (or
- * null
)
- */
- public String getIssuerAsString()
- {
- if (issuerDN instanceof String)
- {
- return new String((String)issuerDN);
- }
- else if (issuerDNX509 != null)
- {
- return issuerDNX509.toString();
- }
-
- return null;
- }
-
- /**
- * Returns the issuer criterion as a byte array. This distinguished name
- * must match the issuer distinguished name in the
- * X509Certificate
. If null
, the issuer
- * criterion is disabled and any issuer distinguished name will do.
- *
- * If the value returned is not null
, it is a byte array
- * containing a single DER encoded distinguished name, as defined in X.501.
- * The ASN.1 notation for this structure is supplied in the documentation
- * for {@link #setIssuer(byte[]) setIssuer(byte [] issuerDN)}.
- *
- * Note that the byte array returned is cloned to protect against subsequent
- * modifications.
- *
- * Uses {@link org.spongycastle.asn1.DEROutputStream DEROutputStream},
- * {@link org.spongycastle.asn1.x509.X509Name X509Name} to gnerate byte[]
- * output for String issuerDN.
- *
- * @return a byte array containing the required issuer distinguished name in
- * ASN.1 DER format (or null
)
- *
- * @exception IOException
- * if an encoding error occurs
- */
- public byte[] getIssuerAsBytes() throws IOException
- {
- if (issuerDN instanceof byte[])
- {
- return (byte[])((byte[])issuerDN).clone();
- }
- else if (issuerDNX509 != null)
- {
- ByteArrayOutputStream outStream = new ByteArrayOutputStream();
- DEROutputStream derOutStream = new DEROutputStream(outStream);
-
- derOutStream.writeObject(issuerDNX509.toASN1Primitive());
- derOutStream.close();
-
- return outStream.toByteArray();
- }
-
- return null;
- }
-
- /**
- * Returns the subject criterion as a String. This distinguished name must
- * match the subject distinguished name in the X509Certificate
.
- * If null
, the subject criterion is disabled and any
- * subject distinguished name will do.
- *
- * If the value returned is not null
, it is a distinguished
- * name, in RFC 2253 format.
- *
- * Uses {@link org.spongycastle.asn1.x509.X509Name X509Name} for formatiing
- * byte[] subjectDN to String.
- *
- * @return the required subject distinguished name in RFC 2253 format (or
- * null
)
- */
- public String getSubjectAsString()
- {
- if (subjectDN instanceof String)
- {
- return new String((String)subjectDN);
- }
- else if (subjectDNX509 != null)
- {
- return subjectDNX509.toString();
- }
-
- return null;
- }
-
- /**
- * Returns the subject criterion as a byte array. This distinguished name
- * must match the subject distinguished name in the
- * X509Certificate
. If null
, the subject
- * criterion is disabled and any subject distinguished name will do.
- *
- * If the value returned is not null
, it is a byte array
- * containing a single DER encoded distinguished name, as defined in X.501.
- * The ASN.1 notation for this structure is supplied in the documentation
- * for {@link #setSubject(byte [] subjectDN) setSubject(byte [] subjectDN)}.
- *
- * Note that the byte array returned is cloned to protect against subsequent
- * modifications.
- *
- * Uses {@link org.spongycastle.asn1.DEROutputStream DEROutputStream},
- * {@link org.spongycastle.asn1.x509.X509Name X509Name} to gnerate byte[]
- * output for String subjectDN.
- *
- * @return a byte array containing the required subject distinguished name
- * in ASN.1 DER format (or null
)
- *
- * @exception IOException
- * if an encoding error occurs
- */
- public byte[] getSubjectAsBytes() throws IOException
- {
- if (subjectDN instanceof byte[])
- {
- return (byte[])((byte[])subjectDN).clone();
- }
- else if (subjectDNX509 != null)
- {
- ByteArrayOutputStream outStream = new ByteArrayOutputStream();
- DEROutputStream derOutStream = new DEROutputStream(outStream);
-
- derOutStream.writeObject(subjectDNX509.toASN1Primitive());
- derOutStream.close();
-
- return outStream.toByteArray();
- }
-
- return null;
- }
-
- /**
- * Returns the subjectKeyIdentifier criterion. The
- * X509Certificate
must contain a SubjectKeyIdentifier
- * extension with the specified value. If null
, no
- * subjectKeyIdentifier check will be done.
- *
- * Note that the byte array returned is cloned to protect against subsequent
- * modifications.
- *
- * @return the key identifier (or null
)
- *
- * @see #setSubjectKeyIdentifier
- */
- public byte[] getSubjectKeyIdentifier()
- {
- if (subjectKeyID != null)
- {
- return (byte[])subjectKeyID.clone();
- }
-
- return null;
- }
-
- /**
- * Returns the authorityKeyIdentifier criterion. The
- * X509Certificate
must contain a AuthorityKeyIdentifier
- * extension with the specified value. If null
, no
- * authorityKeyIdentifier check will be done.
- *
- * Note that the byte array returned is cloned to protect against subsequent
- * modifications.
- *
- * @return the key identifier (or null
)
- *
- * @see #setAuthorityKeyIdentifier
- */
- public byte[] getAuthorityKeyIdentifier()
- {
- if (authorityKeyID != null)
- {
- return (byte[])authorityKeyID.clone();
- }
-
- return null;
- }
-
- /**
- * Returns the certificateValid criterion. The specified date must fall
- * within the certificate validity period for the
- * X509Certificate
. If null
, no
- * certificateValid check will be done.
- *
- * Note that the Date
returned is cloned to protect against
- * subsequent modifications.
- *
- * @return the Date
to check (or null
)
- *
- * @see #setCertificateValid
- */
- public Date getCertificateValid()
- {
- if (certValid != null)
- {
- return new Date(certValid.getTime());
- }
-
- return null;
- }
-
- /**
- * Returns the privateKeyValid criterion. The specified date must fall
- * within the private key validity period for the
- * X509Certificate
. If null
, no
- * privateKeyValid check will be done.
- *
- * Note that the Date
returned is cloned to protect against
- * subsequent modifications.
- *
- * @return the Date
to check (or null
)
- *
- * @see #setPrivateKeyValid
- */
- public Date getPrivateKeyValid()
- {
- if (privateKeyValid != null)
- {
- return new Date(privateKeyValid.getTime());
- }
-
- return null;
- }
-
- /**
- * Returns the subjectPublicKeyAlgID criterion. The
- * X509Certificate
must contain a subject public key with the
- * specified algorithm. If null
, no subjectPublicKeyAlgID
- * check will be done.
- *
- * @return the object identifier (OID) of the signature algorithm to check
- * for (or null
). An OID is represented by a set of
- * nonnegative integers separated by periods.
- *
- * @see #setSubjectPublicKeyAlgID
- */
- public String getSubjectPublicKeyAlgID()
- {
- if (subjectKeyAlgID != null)
- {
- return subjectKeyAlgID.toString();
- }
-
- return null;
- }
-
- /**
- * Returns the subjectPublicKey criterion. The X509Certificate
- * must contain the specified subject public key. If null
,
- * no subjectPublicKey check will be done.
- *
- * @return the subject public key to check for (or null
)
- *
- * @see #setSubjectPublicKey
- */
- public PublicKey getSubjectPublicKey()
- {
- return subjectPublicKey;
- }
-
- /**
- * Returns the keyUsage criterion. The X509Certificate
must
- * allow the specified keyUsage values. If null, no keyUsage check will be
- * done.
- *
- * Note that the boolean array returned is cloned to protect against
- * subsequent modifications.
- *
- * @return a boolean array in the same format as the boolean array returned
- * by
- * {@link X509Certificate#getKeyUsage() X509Certificate.getKeyUsage()}.
- * Or null
.
- *
- * @see #setKeyUsage
- */
- public boolean[] getKeyUsage()
- {
- if (keyUsage != null)
- {
- return (boolean[])keyUsage.clone();
- }
-
- return null;
- }
-
- /**
- * Returns the extendedKeyUsage criterion. The X509Certificate
- * must allow the specified key purposes in its extended key usage
- * extension. If the keyPurposeSet
returned is empty or
- * null
, no extendedKeyUsage check will be done. Note that
- * an X509Certificate
that has no extendedKeyUsage extension
- * implicitly allows all key purposes.
- *
- * @return an immutable Set
of key purpose OIDs in string
- * format (or null
)
- * @see #setExtendedKeyUsage
- */
- public Set getExtendedKeyUsage()
- {
- if (keyPurposeSet == null || keyPurposeSet.isEmpty())
- {
- return keyPurposeSet;
- }
-
- Set returnSet = new HashSet();
- Iterator iter = keyPurposeSet.iterator();
- while (iter.hasNext())
- {
- returnSet.add(iter.next().toString());
- }
-
- return Collections.unmodifiableSet(returnSet);
- }
-
- /**
- * Indicates if the X509Certificate
must contain all or at
- * least one of the subjectAlternativeNames specified in the
- * {@link #setSubjectAlternativeNames setSubjectAlternativeNames} or
- * {@link #addSubjectAlternativeName addSubjectAlternativeName} methods. If
- * true
, the X509Certificate
must contain all
- * of the specified subject alternative names. If false
, the
- * X509Certificate
must contain at least one of the specified
- * subject alternative names.
- *
- * @return true
if the flag is enabled; false
- * if the flag is disabled. The flag is true
by
- * default.
- *
- * @see #setMatchAllSubjectAltNames
- */
- public boolean getMatchAllSubjectAltNames()
- {
- return matchAllSubjectAltNames;
- }
-
- /**
- * Returns a copy of the subjectAlternativeNames criterion. The
- * X509Certificate
must contain all or at least one of the
- * specified subjectAlternativeNames, depending on the value of the
- * matchAllNames flag (see {@link #getMatchAllSubjectAltNames
- * getMatchAllSubjectAltNames}). If the value returned is null
,
- * no subjectAlternativeNames check will be performed.
- *
- * If the value returned is not null
, it is a
- * Collection
with one entry for each name to be included in
- * the subject alternative name criterion. Each entry is a List
- * whose first entry is an Integer
(the name type, 0-8) and
- * whose second entry is a String
or a byte array (the name,
- * in string or ASN.1 DER encoded form, respectively). There can be multiple
- * names of the same type. Note that the Collection
returned
- * may contain duplicate names (same name and name type).
- *
- * Each subject alternative name in the Collection
may be
- * specified either as a String
or as an ASN.1 encoded byte
- * array. For more details about the formats used, see
- * {@link #addSubjectAlternativeName(int type, String name)
- * addSubjectAlternativeName(int type, String name)} and
- * {@link #addSubjectAlternativeName(int type, byte [] name)
- * addSubjectAlternativeName(int type, byte [] name)}.
- *
- * Note that a deep copy is performed on the Collection
to
- * protect against subsequent modifications.
- *
- * @return a Collection
of names (or null
)
- *
- * @see #setSubjectAlternativeNames
- */
- public Collection getSubjectAlternativeNames()
- {
- if (subjectAltNames != null)
- {
- return null;
- }
-
- Set returnAltNames = new HashSet();
- List returnList;
- Iterator iter = subjectAltNames.iterator();
- List obj;
- while (iter.hasNext())
- {
- obj = (List)iter.next();
- returnList = new ArrayList();
- returnList.add(obj.get(0));
- if (obj.get(1) instanceof byte[])
- {
- returnList.add(((byte[])obj.get(1)).clone());
- }
- else
- {
- returnList.add(obj.get(1));
- }
- returnAltNames.add(returnList);
- }
-
- return returnAltNames;
- }
-
- /**
- * Returns the name constraints criterion. The X509Certificate
- * must have subject and subject alternative names that meet the specified
- * name constraints.
- *
- * The name constraints are returned as a byte array. This byte array
- * contains the DER encoded form of the name constraints, as they would
- * appear in the NameConstraints structure defined in RFC 2459 and X.509.
- * The ASN.1 notation for this structure is supplied in the documentation
- * for
- * {@link #setNameConstraints(byte [] bytes) setNameConstraints(byte [] bytes)}.
- *
- * Note that the byte array returned is cloned to protect against subsequent
- * modifications.
- *
- * TODO: implement this
- *
- * @return a byte array containing the ASN.1 DER encoding of a
- * NameConstraints extension used for checking name constraints.
- * null
if no name constraints check will be
- * performed.
- *
- * @exception UnsupportedOperationException
- * because this method is not supported
- *
- * @see #setNameConstraints
- */
- public byte[] getNameConstraints()
- {
- throw new UnsupportedOperationException();
- }
-
- /**
- * Returns the basic constraints constraint. If the value is greater than or
- * equal to zero, the X509Certificates
must include a
- * basicConstraints extension with a pathLen of at least this value. If the
- * value is -2, only end-entity certificates are accepted. If the value is
- * -1, no basicConstraints check is done.
- *
- * @return the value for the basic constraints constraint
- *
- * @see #setBasicConstraints
- */
- public int getBasicConstraints()
- {
- return minMaxPathLen;
- }
-
- /**
- * Returns the policy criterion. The X509Certificate
must
- * include at least one of the specified policies in its certificate
- * policies extension. If the Set
returned is empty, then the
- * X509Certificate
must include at least some specified
- * policy in its certificate policies extension. If the Set
- * returned is null
, no policy check will be performed.
- *
- * @return an immutable Set
of certificate policy OIDs in
- * string format (or null
)
- *
- * @see #setPolicy
- */
- public Set getPolicy()
- {
- if (policy == null)
- {
- return null;
- }
-
- return Collections.unmodifiableSet(policy);
- }
-
- /**
- * Returns a copy of the pathToNames criterion. The
- * X509Certificate
must not include name constraints that
- * would prohibit building a path to the specified names. If the value
- * returned is null
, no pathToNames check will be performed.
- *
- * If the value returned is not null
, it is a
- * Collection
with one entry for each name to be included in
- * the pathToNames criterion. Each entry is a List
whose
- * first entry is an Integer
(the name type, 0-8) and whose
- * second entry is a String
or a byte array (the name, in
- * string or ASN.1 DER encoded form, respectively). There can be multiple
- * names of the same type. Note that the Collection
returned
- * may contain duplicate names (same name and name type).
- *
- * Each name in the Collection
may be specified either as a
- * String
or as an ASN.1 encoded byte array. For more details
- * about the formats used, see {@link #addPathToName(int type, String name)
- * addPathToName(int type, String name)} and
- * {@link #addPathToName(int type, byte [] name) addPathToName(int type,
- * byte [] name)}.
- *
- * Note that a deep copy is performed on the Collection
to
- * protect against subsequent modifications.
- *
- * @return a Collection
of names (or null
)
- *
- * @see #setPathToNames
- */
- public Collection getPathToNames()
- {
- if (pathToNames == null)
- {
- return null;
- }
-
- Set returnPathToNames = new HashSet();
- List returnList;
- Iterator iter = pathToNames.iterator();
- List obj;
-
- while (iter.hasNext())
- {
- obj = (List)iter.next();
- returnList = new ArrayList();
- returnList.add(obj.get(0));
- if (obj.get(1) instanceof byte[])
- {
- returnList.add(((byte[])obj.get(1)).clone());
- }
- else
- {
- returnList.add(obj.get(1));
- }
- returnPathToNames.add(returnList);
- }
-
- return returnPathToNames;
- }
-
- /**
- * Return a printable representation of the CertSelector
.
- *
- * TODO: implement output for currently unsupported options(name
- * constraints)
- *
- * Uses {@link org.spongycastle.asn1.ASN1InputStream ASN1InputStream},
- * {@link org.spongycastle.asn1.ASN1Object ASN1Object},
- * {@link org.spongycastle.asn1.x509.KeyPurposeId KeyPurposeId}
- *
- * @return a String
describing the contents of the
- * CertSelector
- */
- public String toString()
- {
- StringBuffer sb = new StringBuffer();
- sb.append("X509CertSelector: [\n");
- if (x509Cert != null)
- {
- sb.append(" Certificate: ").append(x509Cert).append('\n');
- }
- if (serialNumber != null)
- {
- sb.append(" Serial Number: ").append(serialNumber).append('\n');
- }
- if (issuerDN != null)
- {
- sb.append(" Issuer: ").append(getIssuerAsString()).append('\n');
- }
- if (subjectDN != null)
- {
- sb.append(" Subject: ").append(getSubjectAsString()).append('\n');
- }
- try
- {
- if (subjectKeyID != null)
- {
- ByteArrayInputStream inStream = new ByteArrayInputStream(
- subjectKeyID);
- ASN1InputStream derInStream = new ASN1InputStream(inStream);
- ASN1Object derObject = derInStream.readObject();
- sb.append(" Subject Key Identifier: ")
- .append(ASN1Dump.dumpAsString(derObject)).append('\n');
- }
- if (authorityKeyID != null)
- {
- ByteArrayInputStream inStream = new ByteArrayInputStream(
- authorityKeyID);
- ASN1InputStream derInStream = new ASN1InputStream(inStream);
- ASN1Object derObject = derInStream.readObject();
- sb.append(" Authority Key Identifier: ")
- .append(ASN1Dump.dumpAsString(derObject)).append('\n');
- }
- }
- catch (IOException ex)
- {
- sb.append(ex.getMessage()).append('\n');
- }
- if (certValid != null)
- {
- sb.append(" Certificate Valid: ").append(certValid).append('\n');
- }
- if (privateKeyValid != null)
- {
- sb.append(" Private Key Valid: ").append(privateKeyValid)
- .append('\n');
- }
- if (subjectKeyAlgID != null)
- {
- sb.append(" Subject Public Key AlgID: ")
- .append(subjectKeyAlgID).append('\n');
- }
- if (subjectPublicKey != null)
- {
- sb.append(" Subject Public Key: ").append(subjectPublicKey)
- .append('\n');
- }
- if (keyUsage != null)
- {
- sb.append(" Key Usage: ").append(keyUsage).append('\n');
- }
- if (keyPurposeSet != null)
- {
- sb.append(" Extended Key Usage: ").append(keyPurposeSet)
- .append('\n');
- }
- if (policy != null)
- {
- sb.append(" Policy: ").append(policy).append('\n');
- }
- sb.append(" matchAllSubjectAltNames flag: ")
- .append(matchAllSubjectAltNames).append('\n');
- if (subjectAltNamesByte != null)
- {
- sb.append(" SubjectAlternativNames: \n[");
- Iterator iter = subjectAltNamesByte.iterator();
- List obj;
- try
- {
- while (iter.hasNext())
- {
- obj = (List)iter.next();
- ByteArrayInputStream inStream = new ByteArrayInputStream(
- (byte[])obj.get(1));
- ASN1InputStream derInStream = new ASN1InputStream(inStream);
- ASN1Object derObject = derInStream.readObject();
- sb.append(" Type: ").append(obj.get(0)).append(" Data: ")
- .append(ASN1Dump.dumpAsString(derObject)).append('\n');
- }
- }
- catch (IOException ex)
- {
- sb.append(ex.getMessage()).append('\n');
- }
- sb.append("]\n");
- }
- if (pathToNamesByte != null)
- {
- sb.append(" PathToNamesNames: \n[");
- Iterator iter = pathToNamesByte.iterator();
- List obj;
- try
- {
- while (iter.hasNext())
- {
- obj = (List)iter.next();
- ByteArrayInputStream inStream = new ByteArrayInputStream(
- (byte[])obj.get(1));
- ASN1InputStream derInStream = new ASN1InputStream(inStream);
- ASN1Object derObject = derInStream.readObject();
- sb.append(" Type: ").append(obj.get(0)).append(" Data: ")
- .append(ASN1Dump.dumpAsString(derObject)).append('\n');
- }
- }
- catch (IOException ex)
- {
- sb.append(ex.getMessage()).append('\n');
- }
- sb.append("]\n");
- }
- sb.append(']');
- return sb.toString();
- }
-
- /**
- * Decides whether a Certificate
should be selected.
- *
- * TODO: implement missing tests (name constraints and path to names)
- *
- * Uses {@link org.spongycastle.asn1.ASN1InputStream ASN1InputStream},
- * {@link org.spongycastle.asn1.ASN1Sequence ASN1Sequence},
- * {@link org.spongycastle.asn1.ASN1ObjectIdentifier ASN1ObjectIdentifier},
- * {@link org.spongycastle.asn1.ASN1Object ASN1Object},
- * {@link org.spongycastle.asn1.DERGeneralizedTime DERGeneralizedTime},
- * {@link org.spongycastle.asn1.x509.X509Name X509Name},
- * {@link org.spongycastle.asn1.x509.X509Extensions X509Extensions},
- * {@link org.spongycastle.asn1.x509.ExtendedKeyUsage ExtendedKeyUsage},
- * {@link org.spongycastle.asn1.x509.KeyPurposeId KeyPurposeId},
- * {@link org.spongycastle.asn1.x509.SubjectPublicKeyInfo SubjectPublicKeyInfo},
- * {@link org.spongycastle.asn1.x509.AlgorithmIdentifier AlgorithmIdentifier}
- * to access X509 extensions
- *
- * @param cert
- * the Certificate
to be checked
- *
- * @return true
if the Certificate
should be
- * selected, false
otherwise
- */
- public boolean match(Certificate cert)
- {
- boolean[] booleanArray;
- List tempList;
- Iterator tempIter;
-
- if (!(cert instanceof X509Certificate))
- {
- return false;
- }
- X509Certificate certX509 = (X509Certificate)cert;
-
- if (x509Cert != null && !x509Cert.equals(certX509))
- {
- return false;
- }
- if (serialNumber != null
- && !serialNumber.equals(certX509.getSerialNumber()))
- {
- return false;
- }
- try
- {
- if (issuerDNX509 != null)
- {
- if (!issuerDNX509.equals(PrincipalUtil
- .getIssuerX509Principal(certX509), true))
- {
- return false;
- }
- }
- if (subjectDNX509 != null)
- {
- if (!subjectDNX509.equals(PrincipalUtil
- .getSubjectX509Principal(certX509), true))
- {
- return false;
- }
- }
- }
- catch (Exception ex)
- {
- return false;
- }
- if (subjectKeyID != null)
- {
- byte[] data = certX509
- .getExtensionValue(X509Extensions.SubjectKeyIdentifier
- .getId());
- if (data == null)
- {
- return false;
- }
- try
- {
- ByteArrayInputStream inStream = new ByteArrayInputStream(data);
- ASN1InputStream derInputStream = new ASN1InputStream(inStream);
- byte[] testData = ((ASN1OctetString)derInputStream.readObject())
- .getOctets();
- if (!Arrays.equals(subjectKeyID, testData))
- {
- return false;
- }
- }
- catch (IOException ex)
- {
- return false;
- }
- }
- if (authorityKeyID != null)
- {
- byte[] data = certX509
- .getExtensionValue(X509Extensions.AuthorityKeyIdentifier
- .getId());
- if (data == null)
- {
- return false;
- }
- try
- {
- ByteArrayInputStream inStream = new ByteArrayInputStream(data);
- ASN1InputStream derInputStream = new ASN1InputStream(inStream);
- byte[] testData = ((ASN1OctetString)derInputStream.readObject())
- .getOctets();
- if (!Arrays.equals(authorityKeyID, testData))
- {
- return false;
- }
- }
- catch (IOException ex)
- {
- return false;
- }
- }
- if (certValid != null)
- {
- if (certX509.getNotAfter() != null
- && certValid.after(certX509.getNotAfter()))
- {
- return false;
- }
- if (certX509.getNotBefore() != null
- && certValid.before(certX509.getNotBefore()))
- {
- return false;
- }
- }
- if (privateKeyValid != null)
- {
- try
- {
- byte[] data = certX509
- .getExtensionValue(X509Extensions.PrivateKeyUsagePeriod
- .getId());
- if (data != null)
- {
- ByteArrayInputStream inStream = new ByteArrayInputStream(
- data);
- ASN1InputStream derInputStream = new ASN1InputStream(inStream);
- inStream = new ByteArrayInputStream(
- ((ASN1OctetString)derInputStream.readObject())
- .getOctets());
- derInputStream = new ASN1InputStream(inStream);
- // TODO fix this, Sequence contains tagged objects
- ASN1Sequence derObject = (ASN1Sequence)derInputStream
- .readObject();
- ASN1GeneralizedTime derDate = ASN1GeneralizedTime
- .getInstance(derObject.getObjectAt(0));
- SimpleDateFormat dateF = new SimpleDateFormat(
- "yyyyMMddHHmmssZ");
- if (privateKeyValid.before(dateF.parse(derDate.getTime())))
- {
- return false;
- }
- derDate = ASN1GeneralizedTime.getInstance(derObject
- .getObjectAt(1));
- if (privateKeyValid.after(dateF.parse(derDate.getTime())))
- {
- return false;
- }
- }
- }
- catch (Exception ex)
- {
- return false;
- }
- }
- if (subjectKeyAlgID != null)
- {
- try
- {
- ByteArrayInputStream inStream = new ByteArrayInputStream(
- certX509.getPublicKey().getEncoded());
- ASN1InputStream derInputStream = new ASN1InputStream(inStream);
- SubjectPublicKeyInfo publicKeyInfo = new SubjectPublicKeyInfo(
- (ASN1Sequence)derInputStream.readObject());
- AlgorithmIdentifier algInfo = publicKeyInfo.getAlgorithmId();
- if (!algInfo.getObjectId().equals(subjectKeyAlgID))
- {
- return false;
- }
- }
- catch (Exception ex)
- {
- return false;
- }
- }
- if (subjectPublicKeyByte != null)
- {
- if (!Arrays.equals(subjectPublicKeyByte, certX509.getPublicKey()
- .getEncoded()))
- {
- return false;
- }
- }
- if (subjectPublicKey != null)
- {
- if (!subjectPublicKey.equals(certX509.getPublicKey()))
- {
- return false;
- }
- }
- if (keyUsage != null)
- {
- booleanArray = certX509.getKeyUsage();
- if (booleanArray != null)
- {
- for (int i = 0; i < keyUsage.length; i++)
- {
- if (keyUsage[i]
- && (booleanArray.length <= i || !booleanArray[i]))
- {
- return false;
- }
- }
- }
- }
- if (keyPurposeSet != null && !keyPurposeSet.isEmpty())
- {
- try
- {
- byte[] data = certX509
- .getExtensionValue(X509Extensions.ExtendedKeyUsage
- .getId());
- if (data != null)
- {
- ByteArrayInputStream inStream = new ByteArrayInputStream(
- data);
- ASN1InputStream derInputStream = new ASN1InputStream(inStream);
- ExtendedKeyUsage extendedKeyUsage = ExtendedKeyUsage.getInstance(
- derInputStream.readObject());
- tempIter = keyPurposeSet.iterator();
- while (tempIter.hasNext())
- {
- if (!extendedKeyUsage
- .hasKeyPurposeId((KeyPurposeId)tempIter.next()))
- {
- return false;
- }
- }
- }
- }
- catch (Exception ex)
- {
- return false;
- }
- }
- if (minMaxPathLen != -1)
- {
- if (minMaxPathLen == -2 && certX509.getBasicConstraints() != -1)
- {
- return false;
- }
- if (minMaxPathLen >= 0
- && certX509.getBasicConstraints() < minMaxPathLen)
- {
- return false;
- }
- }
- if (policyOID != null)
- {
- try
- {
- byte[] data = certX509
- .getExtensionValue(X509Extensions.CertificatePolicies
- .getId());
- if (data == null)
- {
- return false;
- }
- if (!policyOID.isEmpty())
- {
- ByteArrayInputStream inStream = new ByteArrayInputStream(
- data);
- ASN1InputStream derInputStream = new ASN1InputStream(inStream);
- inStream = new ByteArrayInputStream(
- ((ASN1OctetString)derInputStream.readObject())
- .getOctets());
- derInputStream = new ASN1InputStream(inStream);
- Enumeration policySequence = ((ASN1Sequence)derInputStream
- .readObject()).getObjects();
- ASN1Sequence policyObject;
- boolean test = false;
- while (policySequence.hasMoreElements() && !test)
- {
- policyObject = (ASN1Sequence)policySequence
- .nextElement();
- if (policyOID.contains(policyObject.getObjectAt(0)))
- {
- test = true;
- }
- }
- if (!test)
- {
- return false;
- }
- }
- }
- catch (Exception ex)
- {
- ex.printStackTrace();
- return false;
- }
- }
- if (subjectAltNamesByte != null)
- {
- try
- {
- byte[] data = certX509
- .getExtensionValue(X509Extensions.SubjectAlternativeName
- .getId());
- if (data == null)
- {
- return false;
- }
- ByteArrayInputStream inStream = new ByteArrayInputStream(data);
- ASN1InputStream derInputStream = new ASN1InputStream(inStream);
- inStream = new ByteArrayInputStream(
- ((ASN1OctetString)derInputStream.readObject())
- .getOctets());
- derInputStream = new ASN1InputStream(inStream);
- Enumeration altNamesSequence = ((ASN1Sequence)derInputStream
- .readObject()).getObjects();
- ASN1TaggedObject altNameObject;
- boolean test = false;
- Set testSet = new HashSet(subjectAltNamesByte);
- List testList;
- ASN1Object derData;
- ByteArrayOutputStream outStream;
- DEROutputStream derOutStream;
- while (altNamesSequence.hasMoreElements() && !test)
- {
- altNameObject = (ASN1TaggedObject)altNamesSequence
- .nextElement();
- testList = new ArrayList(2);
- testList.add(Integers.valueOf(altNameObject.getTagNo()));
- derData = altNameObject.getObject();
- outStream = new ByteArrayOutputStream();
- derOutStream = new DEROutputStream(outStream);
- derOutStream.writeObject(derData);
- derOutStream.close();
- testList.add(outStream.toByteArray());
-
- if (testSet.remove(testList))
- {
- test = true;
- }
-
- if (matchAllSubjectAltNames && !testSet.isEmpty())
- {
- test = false;
- }
- }
- if (!test)
- {
- return false;
- }
- }
- catch (Exception ex)
- {
- ex.printStackTrace();
- return false;
- }
- }
-
- return true;
- }
-
- /**
- * Returns a copy of this object.
- *
- * @return the copy
- */
- public Object clone()
- {
- try
- {
- X509CertSelector copy = (X509CertSelector)super.clone();
- if (issuerDN instanceof byte[])
- {
- copy.issuerDN = ((byte[])issuerDN).clone();
- }
- if (subjectDN instanceof byte[])
- {
- copy.subjectDN = ((byte[])subjectDN).clone();
- }
- if (subjectKeyID != null)
- {
- copy.subjectKeyID = (byte[])subjectKeyID.clone();
- }
- if (authorityKeyID != null)
- {
- copy.authorityKeyID = (byte[])authorityKeyID.clone();
- }
- if (subjectPublicKeyByte != null)
- {
- copy.subjectPublicKeyByte = (byte[])subjectPublicKeyByte
- .clone();
- }
- if (keyUsage != null)
- {
- copy.keyUsage = (boolean[])keyUsage.clone();
- }
- if (keyPurposeSet != null)
- {
- copy.keyPurposeSet = new HashSet(keyPurposeSet);
- }
- if (policy != null)
- {
- copy.policy = new HashSet(policy);
- copy.policyOID = new HashSet();
- Iterator iter = policyOID.iterator();
- while (iter.hasNext())
- {
- copy.policyOID.add(new ASN1ObjectIdentifier(
- ((ASN1ObjectIdentifier)iter.next()).getId()));
- }
- }
- if (subjectAltNames != null)
- {
- copy.subjectAltNames = new HashSet(getSubjectAlternativeNames());
- Iterator iter = subjectAltNamesByte.iterator();
- List obj;
- List cloneObj;
- while (iter.hasNext())
- {
- obj = (List)iter.next();
- cloneObj = new ArrayList();
- cloneObj.add(obj.get(0));
- cloneObj.add(((byte[])obj.get(1)).clone());
- copy.subjectAltNamesByte.add(cloneObj);
- }
- }
- if (pathToNames != null)
- {
- copy.pathToNames = new HashSet(getPathToNames());
- Iterator iter = pathToNamesByte.iterator();
- List obj;
- List cloneObj;
- while (iter.hasNext())
- {
- obj = (List)iter.next();
- cloneObj = new ArrayList();
- cloneObj.add(obj.get(0));
- cloneObj.add(((byte[])obj.get(1)).clone());
- copy.pathToNamesByte.add(cloneObj);
- }
- }
- return copy;
- }
- catch (CloneNotSupportedException e)
- {
- /* Cannot happen */
- throw new InternalError(e.toString());
- }
- }
-}
diff --git a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/X509Extension.java b/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/X509Extension.java
deleted file mode 100644
index f2c7e1990..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/X509Extension.java
+++ /dev/null
@@ -1,12 +0,0 @@
-
-package org.spongycastle.jce.cert;
-
-import java.util.Set;
-
-public interface X509Extension
-{
- public abstract Set getCriticalExtensionOIDs();
- public abstract byte[] getExtensionValue(String oid);
- public abstract Set getNonCriticalExtensionOIDs();
- public abstract boolean hasUnsupportedCriticalExtension();
-}
diff --git a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/package.html b/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/package.html
deleted file mode 100644
index c5cd3f6ad..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/cert/package.html
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-Compatibility API for the JDK 1.4 CertPath API.
-
-
diff --git a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/exception/ExtCertPathBuilderException.java b/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/exception/ExtCertPathBuilderException.java
deleted file mode 100644
index b238580f7..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/exception/ExtCertPathBuilderException.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package org.spongycastle.jce.exception;
-
-import org.spongycastle.jce.cert.CertPath;
-import org.spongycastle.jce.cert.CertPathBuilderException;
-
-public class ExtCertPathBuilderException
- extends CertPathBuilderException
- implements ExtException
-{
- private Throwable cause;
-
- public ExtCertPathBuilderException(String message, Throwable cause)
- {
- super(message);
- this.cause = cause;
- }
-
- public ExtCertPathBuilderException(String msg, Throwable cause,
- CertPath certPath, int index)
- {
- super(msg, cause);
- this.cause = cause;
- }
-
- public Throwable getCause()
- {
- return cause;
- }
-}
diff --git a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/exception/ExtCertPathValidatorException.java b/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/exception/ExtCertPathValidatorException.java
deleted file mode 100644
index ec2b667d2..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/exception/ExtCertPathValidatorException.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package org.spongycastle.jce.exception;
-
-import org.spongycastle.jce.cert.CertPath;
-import org.spongycastle.jce.cert.CertPathValidatorException;
-
-public class ExtCertPathValidatorException
- extends CertPathValidatorException
- implements ExtException
-{
-
- private Throwable cause;
-
- public ExtCertPathValidatorException(String message, Throwable cause)
- {
- super(message);
- this.cause = cause;
- }
-
- public ExtCertPathValidatorException(String msg, Throwable cause,
- CertPath certPath, int index)
- {
- super(msg, cause, certPath, index);
- this.cause = cause;
- }
-
- public Throwable getCause()
- {
- return cause;
- }
-}
diff --git a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/provider/CertPathValidatorUtilities.java b/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/provider/CertPathValidatorUtilities.java
deleted file mode 100644
index 40bf81dab..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/provider/CertPathValidatorUtilities.java
+++ /dev/null
@@ -1,1417 +0,0 @@
-package org.spongycastle.jce.provider;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.math.BigInteger;
-import java.security.GeneralSecurityException;
-import java.security.KeyFactory;
-import java.security.PublicKey;
-import java.security.cert.CRLException;
-import org.spongycastle.jce.cert.CertPath;
-import org.spongycastle.jce.cert.CertPathValidatorException;
-import org.spongycastle.jce.cert.CertStore;
-import org.spongycastle.jce.cert.CertStoreException;
-import java.security.cert.Certificate;
-import java.security.cert.CertificateParsingException;
-import org.spongycastle.jce.cert.PKIXParameters;
-import org.spongycastle.jce.cert.PolicyQualifierInfo;
-import org.spongycastle.jce.cert.TrustAnchor;
-import java.security.cert.X509CRL;
-import java.security.cert.X509CRLEntry;
-import org.spongycastle.jce.cert.X509CRLSelector;
-import org.spongycastle.jce.cert.X509CertSelector;
-import java.security.cert.X509Certificate;
-import java.security.interfaces.DSAParams;
-import java.security.interfaces.DSAPublicKey;
-import java.security.spec.DSAPublicKeySpec;
-import java.text.ParseException;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Date;
-import java.util.Enumeration;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import org.spongycastle.asn1.ASN1Encodable;
-import org.spongycastle.asn1.ASN1InputStream;
-import org.spongycastle.asn1.ASN1Integer;
-import org.spongycastle.asn1.ASN1OctetString;
-import org.spongycastle.asn1.ASN1OutputStream;
-import org.spongycastle.asn1.ASN1Primitive;
-import org.spongycastle.asn1.ASN1Sequence;
-import org.spongycastle.asn1.ASN1Enumerated;
-import org.spongycastle.asn1.ASN1GeneralizedTime;
-import org.spongycastle.asn1.DERIA5String;
-import org.spongycastle.asn1.ASN1ObjectIdentifier;
-import org.spongycastle.asn1.DERSequence;
-import org.spongycastle.asn1.isismtt.ISISMTTObjectIdentifiers;
-import org.spongycastle.asn1.x509.AlgorithmIdentifier;
-import org.spongycastle.asn1.x509.CRLDistPoint;
-import org.spongycastle.asn1.x509.CRLReason;
-import org.spongycastle.asn1.x509.CertificateList;
-import org.spongycastle.asn1.x509.DistributionPoint;
-import org.spongycastle.asn1.x509.DistributionPointName;
-import org.spongycastle.asn1.x509.GeneralName;
-import org.spongycastle.asn1.x509.GeneralNames;
-import org.spongycastle.asn1.x509.PolicyInformation;
-import org.spongycastle.asn1.x509.SubjectPublicKeyInfo;
-import org.spongycastle.asn1.x509.X509Extension;
-import org.spongycastle.asn1.x509.X509Extensions;
-import org.spongycastle.jce.exception.ExtCertPathValidatorException;
-import org.spongycastle.jce.X509Principal;
-import org.spongycastle.jce.PrincipalUtil;
-import org.spongycastle.util.Selector;
-import org.spongycastle.util.StoreException;
-import org.spongycastle.x509.ExtendedPKIXBuilderParameters;
-import org.spongycastle.x509.ExtendedPKIXParameters;
-import org.spongycastle.x509.X509AttributeCertStoreSelector;
-import org.spongycastle.x509.X509AttributeCertificate;
-import org.spongycastle.x509.X509CRLStoreSelector;
-import org.spongycastle.x509.X509CertStoreSelector;
-import org.spongycastle.x509.X509Store;
-
-public class CertPathValidatorUtilities
-{
- protected static final PKIXCRLUtil CRL_UTIL = new PKIXCRLUtil();
-
- protected static final String CERTIFICATE_POLICIES = X509Extensions.CertificatePolicies.getId();
- protected static final String BASIC_CONSTRAINTS = X509Extensions.BasicConstraints.getId();
- protected static final String POLICY_MAPPINGS = X509Extensions.PolicyMappings.getId();
- protected static final String SUBJECT_ALTERNATIVE_NAME = X509Extensions.SubjectAlternativeName.getId();
- protected static final String NAME_CONSTRAINTS = X509Extensions.NameConstraints.getId();
- protected static final String KEY_USAGE = X509Extensions.KeyUsage.getId();
- protected static final String INHIBIT_ANY_POLICY = X509Extensions.InhibitAnyPolicy.getId();
- protected static final String ISSUING_DISTRIBUTION_POINT = X509Extensions.IssuingDistributionPoint.getId();
- protected static final String DELTA_CRL_INDICATOR = X509Extensions.DeltaCRLIndicator.getId();
- protected static final String POLICY_CONSTRAINTS = X509Extensions.PolicyConstraints.getId();
- protected static final String FRESHEST_CRL = X509Extensions.FreshestCRL.getId();
- protected static final String CRL_DISTRIBUTION_POINTS = X509Extensions.CRLDistributionPoints.getId();
- protected static final String AUTHORITY_KEY_IDENTIFIER = X509Extensions.AuthorityKeyIdentifier.getId();
-
- protected static final String ANY_POLICY = "2.5.29.32.0";
-
- protected static final String CRL_NUMBER = X509Extensions.CRLNumber.getId();
-
- /*
- * key usage bits
- */
- protected static final int KEY_CERT_SIGN = 5;
- protected static final int CRL_SIGN = 6;
-
- protected static final String[] crlReasons = new String[]{
- "unspecified",
- "keyCompromise",
- "cACompromise",
- "affiliationChanged",
- "superseded",
- "cessationOfOperation",
- "certificateHold",
- "unknown",
- "removeFromCRL",
- "privilegeWithdrawn",
- "aACompromise"};
-
- /**
- * Search the given Set of TrustAnchor's for one that is the
- * issuer of the given X509 certificate. Uses the default provider
- * for signature verification.
- *
- * @param cert the X509 certificate
- * @param trustAnchors a Set of TrustAnchor's
- * @return the TrustAnchor
object if found or
- * null
if not.
- * @throws AnnotatedException if a TrustAnchor was found but the signature verification
- * on the given certificate has thrown an exception.
- */
- protected static TrustAnchor findTrustAnchor(
- X509Certificate cert,
- Set trustAnchors)
- throws AnnotatedException
- {
- return findTrustAnchor(cert, trustAnchors, null);
- }
-
- /**
- * Search the given Set of TrustAnchor's for one that is the
- * issuer of the given X509 certificate. Uses the specified
- * provider for signature verification, or the default provider
- * if null.
- *
- * @param cert the X509 certificate
- * @param trustAnchors a Set of TrustAnchor's
- * @param sigProvider the provider to use for signature verification
- * @return the TrustAnchor
object if found or
- * null
if not.
- * @throws AnnotatedException if a TrustAnchor was found but the signature verification
- * on the given certificate has thrown an exception.
- */
- protected static TrustAnchor findTrustAnchor(
- X509Certificate cert,
- Set trustAnchors,
- String sigProvider)
- throws AnnotatedException
- {
- TrustAnchor trust = null;
- PublicKey trustPublicKey = null;
- Exception invalidKeyEx = null;
-
- X509CertSelector certSelectX509 = new X509CertSelector();
- X509Principal certIssuer = getEncodedIssuerPrincipal(cert);
-
- try
- {
- certSelectX509.setSubject(certIssuer.getEncoded());
- }
- catch (IOException ex)
- {
- throw new AnnotatedException("Cannot set subject search criteria for trust anchor.", ex);
- }
-
- Iterator iter = trustAnchors.iterator();
- while (iter.hasNext() && trust == null)
- {
- trust = (TrustAnchor)iter.next();
- if (trust.getTrustedCert() != null)
- {
- if (certSelectX509.match(trust.getTrustedCert()))
- {
- trustPublicKey = trust.getTrustedCert().getPublicKey();
- }
- else
- {
- trust = null;
- }
- }
- else if (trust.getCAName() != null
- && trust.getCAPublicKey() != null)
- {
- try
- {
- X509Principal caName = new X509Principal(trust.getCAName());
- if (certIssuer.equals(caName))
- {
- trustPublicKey = trust.getCAPublicKey();
- }
- else
- {
- trust = null;
- }
- }
- catch (IllegalArgumentException ex)
- {
- trust = null;
- }
- }
- else
- {
- trust = null;
- }
-
- if (trustPublicKey != null)
- {
- try
- {
- verifyX509Certificate(cert, trustPublicKey, sigProvider);
- }
- catch (Exception ex)
- {
- invalidKeyEx = ex;
- trust = null;
- trustPublicKey = null;
- }
- }
- }
-
- if (trust == null && invalidKeyEx != null)
- {
- throw new AnnotatedException("TrustAnchor found but certificate validation failed.", invalidKeyEx);
- }
-
- return trust;
- }
-
- protected static void addAdditionalStoresFromAltNames(
- X509Certificate cert,
- ExtendedPKIXParameters pkixParams)
- throws CertificateParsingException
- {
- // if in the IssuerAltName extension an URI
- // is given, add an additinal X.509 store
-/*
- if (cert.getIssuerAlternativeNames() != null)
- {
- Iterator it = cert.getIssuerAlternativeNames().iterator();
- while (it.hasNext())
- {
- // look for URI
- List list = (List)it.next();
- if (list.get(0).equals(new Integer(GeneralName.uniformResourceIdentifier)))
- {
- // found
- String temp = (String)list.get(1);
- CertPathValidatorUtilities.addAdditionalStoreFromLocation(temp, pkixParams);
- }
- }
- }
-*/
- }
-
- /**
- * Returns the issuer of an attribute certificate or certificate.
- *
- * @param cert The attribute certificate or certificate.
- * @return The issuer as X509Principal
.
- */
- protected static X509Principal getEncodedIssuerPrincipal(
- Object cert)
- {
- if (cert instanceof X509Certificate)
- {
-try
-{
- return PrincipalUtil.getIssuerX509Principal((X509Certificate)cert);
-}
-catch (Exception e)
-{
-throw new IllegalStateException(e.toString());
-}
- }
- else
- {
- return (X509Principal)((X509AttributeCertificate)cert).getIssuer().getPrincipals()[0];
- }
- }
-
- protected static Date getValidDate(PKIXParameters paramsPKIX)
- {
- Date validDate = paramsPKIX.getDate();
-
- if (validDate == null)
- {
- validDate = new Date();
- }
-
- return validDate;
- }
-
- protected static X509Principal getSubjectPrincipal(X509Certificate cert)
- {
-try
-{
- return PrincipalUtil.getSubjectX509Principal(cert);
-}
-catch (Exception e)
-{
-throw new IllegalStateException(e.toString());
-}
- }
-
- protected static boolean isSelfIssued(X509Certificate cert)
- {
- return cert.getSubjectDN().equals(cert.getIssuerDN());
- }
-
-
- /**
- * Extract the value of the given extension, if it exists.
- *
- * @param ext The extension object.
- * @param oid The object identifier to obtain.
- * @throws AnnotatedException if the extension cannot be read.
- */
- protected static ASN1Primitive getExtensionValue(
- java.security.cert.X509Extension ext,
- String oid)
- throws AnnotatedException
- {
- byte[] bytes = ext.getExtensionValue(oid);
- if (bytes == null)
- {
- return null;
- }
-
- return getObject(oid, bytes);
- }
-
- private static ASN1Primitive getObject(
- String oid,
- byte[] ext)
- throws AnnotatedException
- {
- try
- {
- ASN1InputStream aIn = new ASN1InputStream(ext);
- ASN1OctetString octs = (ASN1OctetString)aIn.readObject();
-
- aIn = new ASN1InputStream(octs.getOctets());
- return aIn.readObject();
- }
- catch (Exception e)
- {
- throw new AnnotatedException("exception processing extension " + oid, e);
- }
- }
-
- protected static X509Principal getIssuerPrincipal(X509CRL crl)
- {
-try
-{
- return PrincipalUtil.getIssuerX509Principal(crl);
-}
-catch (Exception e)
-{
- throw new IllegalStateException(e.toString());
-}
- }
-
- protected static AlgorithmIdentifier getAlgorithmIdentifier(
- PublicKey key)
- throws CertPathValidatorException
- {
- try
- {
- ASN1InputStream aIn = new ASN1InputStream(key.getEncoded());
-
- SubjectPublicKeyInfo info = SubjectPublicKeyInfo.getInstance(aIn.readObject());
-
- return info.getAlgorithmId();
- }
- catch (Exception e)
- {
- throw new ExtCertPathValidatorException("Subject public key cannot be decoded.", e);
- }
- }
-
- // crl checking
-
-
- //
- // policy checking
- //
-
- protected static final Set getQualifierSet(ASN1Sequence qualifiers)
- throws CertPathValidatorException
- {
- Set pq = new HashSet();
-
- if (qualifiers == null)
- {
- return pq;
- }
-
- ByteArrayOutputStream bOut = new ByteArrayOutputStream();
- ASN1OutputStream aOut = new ASN1OutputStream(bOut);
-
- Enumeration e = qualifiers.getObjects();
-
- while (e.hasMoreElements())
- {
- try
- {
- aOut.writeObject((ASN1Encodable)e.nextElement());
-
- pq.add(new PolicyQualifierInfo(bOut.toByteArray()));
- }
- catch (IOException ex)
- {
- throw new ExtCertPathValidatorException("Policy qualifier info cannot be decoded.", ex);
- }
-
- bOut.reset();
- }
-
- return pq;
- }
-
- protected static PKIXPolicyNode removePolicyNode(
- PKIXPolicyNode validPolicyTree,
- List[] policyNodes,
- PKIXPolicyNode _node)
- {
- PKIXPolicyNode _parent = (PKIXPolicyNode)_node.getParent();
-
- if (validPolicyTree == null)
- {
- return null;
- }
-
- if (_parent == null)
- {
- for (int j = 0; j < policyNodes.length; j++)
- {
- policyNodes[j] = new ArrayList();
- }
-
- return null;
- }
- else
- {
- _parent.removeChild(_node);
- removePolicyNodeRecurse(policyNodes, _node);
-
- return validPolicyTree;
- }
- }
-
- private static void removePolicyNodeRecurse(
- List[] policyNodes,
- PKIXPolicyNode _node)
- {
- policyNodes[_node.getDepth()].remove(_node);
-
- if (_node.hasChildren())
- {
- Iterator _iter = _node.getChildren();
- while (_iter.hasNext())
- {
- PKIXPolicyNode _child = (PKIXPolicyNode)_iter.next();
- removePolicyNodeRecurse(policyNodes, _child);
- }
- }
- }
-
-
- protected static boolean processCertD1i(
- int index,
- List[] policyNodes,
- ASN1ObjectIdentifier pOid,
- Set pq)
- {
- List policyNodeVec = policyNodes[index - 1];
-
- for (int j = 0; j < policyNodeVec.size(); j++)
- {
- PKIXPolicyNode node = (PKIXPolicyNode)policyNodeVec.get(j);
- Set expectedPolicies = node.getExpectedPolicies();
-
- if (expectedPolicies.contains(pOid.getId()))
- {
- Set childExpectedPolicies = new HashSet();
- childExpectedPolicies.add(pOid.getId());
-
- PKIXPolicyNode child = new PKIXPolicyNode(new ArrayList(),
- index,
- childExpectedPolicies,
- node,
- pq,
- pOid.getId(),
- false);
- node.addChild(child);
- policyNodes[index].add(child);
-
- return true;
- }
- }
-
- return false;
- }
-
- protected static void processCertD1ii(
- int index,
- List[] policyNodes,
- ASN1ObjectIdentifier _poid,
- Set _pq)
- {
- List policyNodeVec = policyNodes[index - 1];
-
- for (int j = 0; j < policyNodeVec.size(); j++)
- {
- PKIXPolicyNode _node = (PKIXPolicyNode)policyNodeVec.get(j);
-
- if (ANY_POLICY.equals(_node.getValidPolicy()))
- {
- Set _childExpectedPolicies = new HashSet();
- _childExpectedPolicies.add(_poid.getId());
-
- PKIXPolicyNode _child = new PKIXPolicyNode(new ArrayList(),
- index,
- _childExpectedPolicies,
- _node,
- _pq,
- _poid.getId(),
- false);
- _node.addChild(_child);
- policyNodes[index].add(_child);
- return;
- }
- }
- }
-
- protected static void prepareNextCertB1(
- int i,
- List[] policyNodes,
- String id_p,
- Map m_idp,
- X509Certificate cert
- )
- throws AnnotatedException, CertPathValidatorException
- {
- boolean idp_found = false;
- Iterator nodes_i = policyNodes[i].iterator();
- while (nodes_i.hasNext())
- {
- PKIXPolicyNode node = (PKIXPolicyNode)nodes_i.next();
- if (node.getValidPolicy().equals(id_p))
- {
- idp_found = true;
- node.expectedPolicies = (Set)m_idp.get(id_p);
- break;
- }
- }
-
- if (!idp_found)
- {
- nodes_i = policyNodes[i].iterator();
- while (nodes_i.hasNext())
- {
- PKIXPolicyNode node = (PKIXPolicyNode)nodes_i.next();
- if (ANY_POLICY.equals(node.getValidPolicy()))
- {
- Set pq = null;
- ASN1Sequence policies = null;
- try
- {
- policies = DERSequence.getInstance(getExtensionValue(cert, CERTIFICATE_POLICIES));
- }
- catch (Exception e)
- {
- throw new AnnotatedException("Certificate policies cannot be decoded.", e);
- }
- Enumeration e = policies.getObjects();
- while (e.hasMoreElements())
- {
- PolicyInformation pinfo = null;
-
- try
- {
- pinfo = PolicyInformation.getInstance(e.nextElement());
- }
- catch (Exception ex)
- {
- throw new AnnotatedException("Policy information cannot be decoded.", ex);
- }
- if (ANY_POLICY.equals(pinfo.getPolicyIdentifier().getId()))
- {
- try
- {
- pq = getQualifierSet(pinfo.getPolicyQualifiers());
- }
- catch (CertPathValidatorException ex)
- {
- throw new ExtCertPathValidatorException(
- "Policy qualifier info set could not be built.", ex);
- }
- break;
- }
- }
- boolean ci = false;
- if (cert.getCriticalExtensionOIDs() != null)
- {
- ci = cert.getCriticalExtensionOIDs().contains(CERTIFICATE_POLICIES);
- }
-
- PKIXPolicyNode p_node = (PKIXPolicyNode)node.getParent();
- if (ANY_POLICY.equals(p_node.getValidPolicy()))
- {
- PKIXPolicyNode c_node = new PKIXPolicyNode(
- new ArrayList(), i,
- (Set)m_idp.get(id_p),
- p_node, pq, id_p, ci);
- p_node.addChild(c_node);
- policyNodes[i].add(c_node);
- }
- break;
- }
- }
- }
- }
-
- protected static PKIXPolicyNode prepareNextCertB2(
- int i,
- List[] policyNodes,
- String id_p,
- PKIXPolicyNode validPolicyTree)
- {
- Iterator nodes_i = policyNodes[i].iterator();
- while (nodes_i.hasNext())
- {
- PKIXPolicyNode node = (PKIXPolicyNode)nodes_i.next();
- if (node.getValidPolicy().equals(id_p))
- {
- PKIXPolicyNode p_node = (PKIXPolicyNode)node.getParent();
- p_node.removeChild(node);
- nodes_i.remove();
- for (int k = (i - 1); k >= 0; k--)
- {
- List nodes = policyNodes[k];
- for (int l = 0; l < nodes.size(); l++)
- {
- PKIXPolicyNode node2 = (PKIXPolicyNode)nodes.get(l);
- if (!node2.hasChildren())
- {
- validPolicyTree = removePolicyNode(validPolicyTree, policyNodes, node2);
- if (validPolicyTree == null)
- {
- break;
- }
- }
- }
- }
- }
- }
- return validPolicyTree;
- }
-
- protected static boolean isAnyPolicy(
- Set policySet)
- {
- return policySet == null || policySet.contains(ANY_POLICY) || policySet.isEmpty();
- }
-
- protected static void addAdditionalStoreFromLocation(String location,
- ExtendedPKIXParameters pkixParams)
- {
- }
-
- /**
- * Return a Collection of all certificates or attribute certificates found
- * in the X509Store's that are matching the certSelect criteriums.
- *
- * @param certSelect a {@link Selector} object that will be used to select
- * the certificates
- * @param certStores a List containing only {@link X509Store} objects. These
- * are used to search for certificates.
- * @return a Collection of all found {@link X509Certificate} or
- * {@link org.spongycastle.x509.X509AttributeCertificate} objects.
- * May be empty but never null
.
- */
- protected static Collection findCertificates(X509CertStoreSelector certSelect,
- List certStores)
- throws AnnotatedException
- {
- Set certs = new HashSet();
- Iterator iter = certStores.iterator();
-
- while (iter.hasNext())
- {
- Object obj = iter.next();
-
- if (obj instanceof X509Store)
- {
- X509Store certStore = (X509Store)obj;
- try
- {
- certs.addAll(certStore.getMatches(certSelect));
- }
- catch (StoreException e)
- {
- throw new AnnotatedException(
- "Problem while picking certificates from X.509 store.", e);
- }
- }
- else
- {
- CertStore certStore = (CertStore)obj;
-
- try
- {
- certs.addAll(certStore.getCertificates(certSelect));
- }
- catch (CertStoreException e)
- {
- throw new AnnotatedException(
- "Problem while picking certificates from certificate store.",
- e);
- }
- }
- }
- return certs;
- }
-
- protected static Collection findCertificates(X509AttributeCertStoreSelector certSelect,
- List certStores)
- throws AnnotatedException
- {
- Set certs = new HashSet();
- Iterator iter = certStores.iterator();
-
- while (iter.hasNext())
- {
- Object obj = iter.next();
-
- if (obj instanceof X509Store)
- {
- X509Store certStore = (X509Store)obj;
- try
- {
- certs.addAll(certStore.getMatches(certSelect));
- }
- catch (StoreException e)
- {
- throw new AnnotatedException(
- "Problem while picking certificates from X.509 store.", e);
- }
- }
- }
- return certs;
- }
-
- protected static void addAdditionalStoresFromCRLDistributionPoint(
- CRLDistPoint crldp, ExtendedPKIXParameters pkixParams)
- throws AnnotatedException
- {
- if (crldp != null)
- {
- DistributionPoint dps[] = null;
- try
- {
- dps = crldp.getDistributionPoints();
- }
- catch (Exception e)
- {
- throw new AnnotatedException(
- "Distribution points could not be read.", e);
- }
- for (int i = 0; i < dps.length; i++)
- {
- DistributionPointName dpn = dps[i].getDistributionPoint();
- // look for URIs in fullName
- if (dpn != null)
- {
- if (dpn.getType() == DistributionPointName.FULL_NAME)
- {
- GeneralName[] genNames = GeneralNames.getInstance(
- dpn.getName()).getNames();
- // look for an URI
- for (int j = 0; j < genNames.length; j++)
- {
- if (genNames[j].getTagNo() == GeneralName.uniformResourceIdentifier)
- {
- String location = DERIA5String.getInstance(
- genNames[j].getName()).getString();
- CertPathValidatorUtilities
- .addAdditionalStoreFromLocation(location,
- pkixParams);
- }
- }
- }
- }
- }
- }
- }
-
- /**
- * Add the CRL issuers from the cRLIssuer field of the distribution point or
- * from the certificate if not given to the issuer criterion of the
- * selector
.
- *
- * The issuerPrincipals
are a collection with a single
- * X509Principal
for X509Certificate
s. For
- * {@link X509AttributeCertificate}s the issuer may contain more than one
- * X509Principal
.
- *
- * @param dp The distribution point.
- * @param issuerPrincipals The issuers of the certificate or attribute
- * certificate which contains the distribution point.
- * @param selector The CRL selector.
- * @param pkixParams The PKIX parameters containing the cert stores.
- * @throws AnnotatedException if an exception occurs while processing.
- * @throws ClassCastException if issuerPrincipals
does not
- * contain only X509Principal
s.
- */
- protected static void getCRLIssuersFromDistributionPoint(
- DistributionPoint dp,
- Collection issuerPrincipals,
- X509CRLSelector selector,
- ExtendedPKIXParameters pkixParams)
- throws AnnotatedException
- {
- List issuers = new ArrayList();
- // indirect CRL
- if (dp.getCRLIssuer() != null)
- {
- GeneralName genNames[] = dp.getCRLIssuer().getNames();
- // look for a DN
- for (int j = 0; j < genNames.length; j++)
- {
- if (genNames[j].getTagNo() == GeneralName.directoryName)
- {
- try
- {
- issuers.add(new X509Principal(genNames[j].getName()
- .toASN1Primitive().getEncoded()));
- }
- catch (IOException e)
- {
- throw new AnnotatedException(
- "CRL issuer information from distribution point cannot be decoded.",
- e);
- }
- }
- }
- }
- else
- {
- /*
- * certificate issuer is CRL issuer, distributionPoint field MUST be
- * present.
- */
- if (dp.getDistributionPoint() == null)
- {
- throw new AnnotatedException(
- "CRL issuer is omitted from distribution point but no distributionPoint field present.");
- }
- // add and check issuer principals
- for (Iterator it = issuerPrincipals.iterator(); it.hasNext(); )
- {
- issuers.add((X509Principal)it.next());
- }
- }
- // TODO: is not found although this should correctly add the rel name. selector of Sun is buggy here or PKI test case is invalid
- // distributionPoint
-// if (dp.getDistributionPoint() != null)
-// {
-// // look for nameRelativeToCRLIssuer
-// if (dp.getDistributionPoint().getType() == DistributionPointName.NAME_RELATIVE_TO_CRL_ISSUER)
-// {
-// // append fragment to issuer, only one
-// // issuer can be there, if this is given
-// if (issuers.size() != 1)
-// {
-// throw new AnnotatedException(
-// "nameRelativeToCRLIssuer field is given but more than one CRL issuer is given.");
-// }
-// ASN1Encodable relName = dp.getDistributionPoint().getName();
-// Iterator it = issuers.iterator();
-// List issuersTemp = new ArrayList(issuers.size());
-// while (it.hasNext())
-// {
-// Enumeration e = null;
-// try
-// {
-// e = ASN1Sequence.getInstance(
-// new ASN1InputStream(((X500Principal) it.next())
-// .getEncoded()).readObject()).getObjects();
-// }
-// catch (IOException ex)
-// {
-// throw new AnnotatedException(
-// "Cannot decode CRL issuer information.", ex);
-// }
-// ASN1EncodableVector v = new ASN1EncodableVector();
-// while (e.hasMoreElements())
-// {
-// v.add((ASN1Encodable) e.nextElement());
-// }
-// v.add(relName);
-// issuersTemp.add(new X500Principal(new DERSequence(v)
-// .getDEREncoded()));
-// }
-// issuers.clear();
-// issuers.addAll(issuersTemp);
-// }
-// }
- Iterator it = issuers.iterator();
- while (it.hasNext())
- {
- try
- {
- selector.addIssuerName(((X509Principal)it.next()).getEncoded());
- }
- catch (IOException ex)
- {
- throw new AnnotatedException(
- "Cannot decode CRL issuer information.", ex);
- }
- }
- }
-
- private static BigInteger getSerialNumber(
- Object cert)
- {
- if (cert instanceof X509Certificate)
- {
- return ((X509Certificate)cert).getSerialNumber();
- }
- else
- {
- return ((X509AttributeCertificate)cert).getSerialNumber();
- }
- }
-
- protected static void getCertStatus(
- Date validDate,
- X509CRL crl,
- Object cert,
- CertStatus certStatus)
- throws AnnotatedException
- {
- X509CRLEntry crl_entry = null;
-
- boolean isIndirect;
- try
- {
- isIndirect = X509CRLObject.isIndirectCRL(crl);
- }
- catch (CRLException exception)
- {
- throw new AnnotatedException("Failed check for indirect CRL.", exception);
- }
-
- if (isIndirect)
- {
- if (!(crl instanceof X509CRLObject))
- {
- try
- {
- crl = new X509CRLObject(CertificateList.getInstance(crl.getEncoded()));
- }
- catch (CRLException exception)
- {
- throw new AnnotatedException("Failed to recode indirect CRL.", exception);
- }
- }
-
- crl_entry = crl.getRevokedCertificate(getSerialNumber(cert));
-
- if (crl_entry == null)
- {
- return;
- }
-
- X509Principal certIssuer = ((X509CRLEntryObject)crl_entry).getCertificateIssuer();
-
- if (certIssuer == null)
- {
- certIssuer = getIssuerPrincipal(crl);
- }
-
- if (!getEncodedIssuerPrincipal(cert).equals(certIssuer))
- {
- return;
- }
- }
- else if (!getEncodedIssuerPrincipal(cert).equals(getIssuerPrincipal(crl)))
- {
- return; // not for our issuer, ignore
- }
- else
- {
- crl_entry = crl.getRevokedCertificate(getSerialNumber(cert));
-
- if (crl_entry == null)
- {
- return;
- }
- }
-
- ASN1Enumerated reasonCode = null;
- if (crl_entry.hasExtensions())
- {
- try
- {
- reasonCode = ASN1Enumerated
- .getInstance(CertPathValidatorUtilities
- .getExtensionValue(crl_entry,
- X509Extension.reasonCode.getId()));
- }
- catch (Exception e)
- {
- throw new AnnotatedException(
- "Reason code CRL entry extension could not be decoded.",
- e);
- }
- }
-
- // for reason keyCompromise, caCompromise, aACompromise or
- // unspecified
- if (!(validDate.getTime() < crl_entry.getRevocationDate().getTime())
- || reasonCode == null
- || reasonCode.getValue().intValue() == 0
- || reasonCode.getValue().intValue() == 1
- || reasonCode.getValue().intValue() == 2
- || reasonCode.getValue().intValue() == 8)
- {
-
- // (i) or (j) (1)
- if (reasonCode != null)
- {
- certStatus.setCertStatus(reasonCode.getValue().intValue());
- }
- // (i) or (j) (2)
- else
- {
- certStatus.setCertStatus(CRLReason.unspecified);
- }
- certStatus.setRevocationDate(crl_entry.getRevocationDate());
- }
- }
-
- /**
- * Fetches delta CRLs according to RFC 3280 section 5.2.4.
- *
- * @param currentDate The date for which the delta CRLs must be valid.
- * @param paramsPKIX The extended PKIX parameters.
- * @param completeCRL The complete CRL the delta CRL is for.
- * @return A Set
of X509CRL
s with delta CRLs.
- * @throws AnnotatedException if an exception occurs while picking the delta
- * CRLs.
- */
- protected static Set getDeltaCRLs(Date currentDate,
- ExtendedPKIXParameters paramsPKIX, X509CRL completeCRL)
- throws AnnotatedException
- {
-
- X509CRLStoreSelector deltaSelect = new X509CRLStoreSelector();
-
- // 5.2.4 (a)
- try
- {
- deltaSelect.addIssuerName(CertPathValidatorUtilities
- .getIssuerPrincipal(completeCRL).getEncoded());
- }
- catch (IOException e)
- {
- throw new AnnotatedException("Cannot extract issuer from CRL.", e);
- }
-
- BigInteger completeCRLNumber = null;
- try
- {
- ASN1Primitive derObject = CertPathValidatorUtilities.getExtensionValue(completeCRL,
- CRL_NUMBER);
- if (derObject != null)
- {
- completeCRLNumber = ASN1Integer.getInstance(derObject).getPositiveValue();
- }
- }
- catch (Exception e)
- {
- throw new AnnotatedException(
- "CRL number extension could not be extracted from CRL.", e);
- }
-
- // 5.2.4 (b)
- byte[] idp = null;
- try
- {
- idp = completeCRL.getExtensionValue(ISSUING_DISTRIBUTION_POINT);
- }
- catch (Exception e)
- {
- throw new AnnotatedException(
- "Issuing distribution point extension value could not be read.",
- e);
- }
-
- // 5.2.4 (d)
-
- deltaSelect.setMinCRLNumber(completeCRLNumber == null ? null : completeCRLNumber
- .add(BigInteger.valueOf(1)));
-
- deltaSelect.setIssuingDistributionPoint(idp);
- deltaSelect.setIssuingDistributionPointEnabled(true);
-
- // 5.2.4 (c)
- deltaSelect.setMaxBaseCRLNumber(completeCRLNumber);
-
- // find delta CRLs
- Set temp = CRL_UTIL.findCRLs(deltaSelect, paramsPKIX, currentDate);
-
- Set result = new HashSet();
-
- for (Iterator it = temp.iterator(); it.hasNext(); )
- {
- X509CRL crl = (X509CRL)it.next();
-
- if (isDeltaCRL(crl))
- {
- result.add(crl);
- }
- }
-
- return result;
- }
-
- private static boolean isDeltaCRL(X509CRL crl)
- {
- Set critical = crl.getCriticalExtensionOIDs();
-
- if (critical == null)
- {
- return false;
- }
-
- return critical.contains(RFC3280CertPathUtilities.DELTA_CRL_INDICATOR);
- }
-
- /**
- * Fetches complete CRLs according to RFC 3280.
- *
- * @param dp The distribution point for which the complete CRL
- * @param cert The X509Certificate
or
- * {@link org.spongycastle.x509.X509AttributeCertificate} for
- * which the CRL should be searched.
- * @param currentDate The date for which the delta CRLs must be valid.
- * @param paramsPKIX The extended PKIX parameters.
- * @return A Set
of X509CRL
s with complete
- * CRLs.
- * @throws AnnotatedException if an exception occurs while picking the CRLs
- * or no CRLs are found.
- */
- protected static Set getCompleteCRLs(DistributionPoint dp, Object cert,
- Date currentDate, ExtendedPKIXParameters paramsPKIX)
- throws AnnotatedException
- {
- X509CRLStoreSelector crlselect = new X509CRLStoreSelector();
- try
- {
- Set issuers = new HashSet();
- if (cert instanceof X509AttributeCertificate)
- {
- issuers.add(((X509AttributeCertificate)cert)
- .getIssuer().getPrincipals()[0]);
- }
- else
- {
- issuers.add(getEncodedIssuerPrincipal(cert));
- }
- CertPathValidatorUtilities.getCRLIssuersFromDistributionPoint(dp, issuers, crlselect, paramsPKIX);
- }
- catch (AnnotatedException e)
- {
- throw new AnnotatedException(
- "Could not get issuer information from distribution point.", e);
- }
- if (cert instanceof X509Certificate)
- {
- crlselect.setCertificateChecking((X509Certificate)cert);
- }
- else if (cert instanceof X509AttributeCertificate)
- {
- crlselect.setAttrCertificateChecking((X509AttributeCertificate)cert);
- }
-
-
- crlselect.setCompleteCRLEnabled(true);
-
- Set crls = CRL_UTIL.findCRLs(crlselect, paramsPKIX, currentDate);
-
- if (crls.isEmpty())
- {
- if (cert instanceof X509AttributeCertificate)
- {
- X509AttributeCertificate aCert = (X509AttributeCertificate)cert;
-
- throw new AnnotatedException("No CRLs found for issuer \"" + aCert.getIssuer().getPrincipals()[0] + "\"");
- }
- else
- {
- X509Certificate xCert = (X509Certificate)cert;
-
- throw new AnnotatedException("No CRLs found for issuer \"" + xCert.getIssuerDN() + "\"");
- }
- }
- return crls;
- }
-
- protected static Date getValidCertDateFromValidityModel(
- ExtendedPKIXParameters paramsPKIX, CertPath certPath, int index)
- throws AnnotatedException
- {
- if (paramsPKIX.getValidityModel() == ExtendedPKIXParameters.CHAIN_VALIDITY_MODEL)
- {
- // if end cert use given signing/encryption/... time
- if (index <= 0)
- {
- return CertPathValidatorUtilities.getValidDate(paramsPKIX);
- // else use time when previous cert was created
- }
- else
- {
- if (index - 1 == 0)
- {
- ASN1GeneralizedTime dateOfCertgen = null;
- try
- {
- byte[] extBytes = ((X509Certificate)certPath.getCertificates().get(index - 1)).getExtensionValue(ISISMTTObjectIdentifiers.id_isismtt_at_dateOfCertGen.getId());
- if (extBytes != null)
- {
- dateOfCertgen = ASN1GeneralizedTime.getInstance(ASN1Primitive.fromByteArray(extBytes));
- }
- }
- catch (IOException e)
- {
- throw new AnnotatedException(
- "Date of cert gen extension could not be read.");
- }
- catch (IllegalArgumentException e)
- {
- throw new AnnotatedException(
- "Date of cert gen extension could not be read.");
- }
- if (dateOfCertgen != null)
- {
- try
- {
- return dateOfCertgen.getDate();
- }
- catch (ParseException e)
- {
- throw new AnnotatedException(
- "Date from date of cert gen extension could not be parsed.",
- e);
- }
- }
- return ((X509Certificate)certPath.getCertificates().get(
- index - 1)).getNotBefore();
- }
- else
- {
- return ((X509Certificate)certPath.getCertificates().get(
- index - 1)).getNotBefore();
- }
- }
- }
- else
- {
- return getValidDate(paramsPKIX);
- }
- }
-
- /**
- * Return the next working key inheriting DSA parameters if necessary.
- * PublicKey
. The list is searched upwards, meaning the end
- * certificate is at position 0 and previous certificates are following.
- * index
extended with DSA parameters if applicable.
- * @throws AnnotatedException if DSA parameters cannot be inherited.
- */
- protected static PublicKey getNextWorkingKey(List certs, int index)
- throws CertPathValidatorException
- {
- Certificate cert = (Certificate)certs.get(index);
- PublicKey pubKey = cert.getPublicKey();
- if (!(pubKey instanceof DSAPublicKey))
- {
- return pubKey;
- }
- DSAPublicKey dsaPubKey = (DSAPublicKey)pubKey;
- if (dsaPubKey.getParams() != null)
- {
- return dsaPubKey;
- }
- for (int i = index + 1; i < certs.size(); i++)
- {
- X509Certificate parentCert = (X509Certificate)certs.get(i);
- pubKey = parentCert.getPublicKey();
- if (!(pubKey instanceof DSAPublicKey))
- {
- throw new CertPathValidatorException(
- "DSA parameters cannot be inherited from previous certificate.");
- }
- DSAPublicKey prevDSAPubKey = (DSAPublicKey)pubKey;
- if (prevDSAPubKey.getParams() == null)
- {
- continue;
- }
- DSAParams dsaParams = prevDSAPubKey.getParams();
- DSAPublicKeySpec dsaPubKeySpec = new DSAPublicKeySpec(
- dsaPubKey.getY(), dsaParams.getP(), dsaParams.getQ(), dsaParams.getG());
- try
- {
- KeyFactory keyFactory = KeyFactory.getInstance("DSA", BouncyCastleProvider.PROVIDER_NAME);
- return keyFactory.generatePublic(dsaPubKeySpec);
- }
- catch (Exception exception)
- {
- throw new RuntimeException(exception.getMessage());
- }
- }
- throw new CertPathValidatorException("DSA parameters cannot be inherited from previous certificate.");
- }
-
- /**
- * Find the issuer certificates of a given certificate.
- *
- * @param cert The certificate for which an issuer should be found.
- * @param pkixParams
- * @return A Collection
object containing the issuer
- * X509Certificate
s. Never null
.
- * @throws AnnotatedException if an error occurs.
- */
- protected static Collection findIssuerCerts(
- X509Certificate cert,
- ExtendedPKIXBuilderParameters pkixParams)
- throws AnnotatedException
- {
- X509CertStoreSelector certSelect = new X509CertStoreSelector();
- Set certs = new HashSet();
- try
- {
- certSelect.setSubject(PrincipalUtil.getSubjectX509Principal(cert).getEncoded());
- }
- catch (Exception ex)
- {
- throw new AnnotatedException(
- "Subject criteria for certificate selector to find issuer certificate could not be set.", ex);
- }
-
- Iterator iter;
-
- try
- {
- List matches = new ArrayList();
-
- matches.addAll(CertPathValidatorUtilities.findCertificates(certSelect, pkixParams.getCertStores()));
- matches.addAll(CertPathValidatorUtilities.findCertificates(certSelect, pkixParams.getStores()));
- matches.addAll(CertPathValidatorUtilities.findCertificates(certSelect, pkixParams.getAdditionalStores()));
-
- iter = matches.iterator();
- }
- catch (AnnotatedException e)
- {
- throw new AnnotatedException("Issuer certificate cannot be searched.", e);
- }
-
- X509Certificate issuer = null;
- while (iter.hasNext())
- {
- issuer = (X509Certificate)iter.next();
- // issuer cannot be verified because possible DSA inheritance
- // parameters are missing
- certs.add(issuer);
- }
- return certs;
- }
-
- protected static void verifyX509Certificate(X509Certificate cert, PublicKey publicKey,
- String sigProvider)
- throws GeneralSecurityException
- {
- if (sigProvider == null)
- {
- cert.verify(publicKey);
- }
- else
- {
- cert.verify(publicKey, sigProvider);
- }
- }
-}
diff --git a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/provider/CertStoreCollectionSpi.java b/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/provider/CertStoreCollectionSpi.java
deleted file mode 100644
index a894cf84d..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/provider/CertStoreCollectionSpi.java
+++ /dev/null
@@ -1,104 +0,0 @@
-package org.spongycastle.jce.provider;
-
-import java.security.InvalidAlgorithmParameterException;
-import java.security.cert.CRL;
-import org.spongycastle.jce.cert.CRLSelector;
-import org.spongycastle.jce.cert.CertSelector;
-import org.spongycastle.jce.cert.CertStoreException;
-import org.spongycastle.jce.cert.CertStoreParameters;
-import org.spongycastle.jce.cert.CertStoreSpi;
-import java.security.cert.Certificate;
-import org.spongycastle.jce.cert.CollectionCertStoreParameters;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.List;
-
-public class CertStoreCollectionSpi extends CertStoreSpi
-{
- private CollectionCertStoreParameters params;
-
- public CertStoreCollectionSpi(CertStoreParameters params)
- throws InvalidAlgorithmParameterException
- {
- super(params);
-
- if (!(params instanceof CollectionCertStoreParameters))
- {
- throw new InvalidAlgorithmParameterException("org.spongycastle.jce.provider.CertStoreCollectionSpi: parameter must be a CollectionCertStoreParameters object\n" + params.toString());
- }
-
- this.params = (CollectionCertStoreParameters)params;
- }
-
- public Collection engineGetCertificates(
- CertSelector selector)
- throws CertStoreException
- {
- List col = new ArrayList();
- Iterator iter = params.getCollection().iterator();
-
- if (selector == null)
- {
- while (iter.hasNext())
- {
- Object obj = iter.next();
-
- if (obj instanceof Certificate)
- {
- col.add(obj);
- }
- }
- }
- else
- {
- while (iter.hasNext())
- {
- Object obj = iter.next();
-
- if ((obj instanceof Certificate) && selector.match((Certificate)obj))
- {
- col.add(obj);
- }
- }
- }
-
- return col;
- }
-
-
- public Collection engineGetCRLs(
- CRLSelector selector)
- throws CertStoreException
- {
- List col = new ArrayList();
- Iterator iter = params.getCollection().iterator();
-
- if (selector == null)
- {
- while (iter.hasNext())
- {
- Object obj = iter.next();
-
- if (obj instanceof CRL)
- {
- col.add(obj);
- }
- }
- }
- else
- {
- while (iter.hasNext())
- {
- Object obj = iter.next();
-
- if ((obj instanceof CRL) && selector.match((CRL)obj))
- {
- col.add(obj);
- }
- }
- }
-
- return col;
- }
-}
diff --git a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/provider/JCEPBEKey.java b/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/provider/JCEPBEKey.java
deleted file mode 100644
index 53c9d66e6..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/provider/JCEPBEKey.java
+++ /dev/null
@@ -1,146 +0,0 @@
-package org.spongycastle.jce.provider;
-
-import javax.crypto.SecretKey;
-import javax.crypto.spec.PBEKeySpec;
-
-import org.spongycastle.asn1.ASN1ObjectIdentifier;
-import org.spongycastle.crypto.CipherParameters;
-import org.spongycastle.crypto.PBEParametersGenerator;
-import org.spongycastle.crypto.params.KeyParameter;
-import org.spongycastle.crypto.params.ParametersWithIV;
-import org.spongycastle.jcajce.provider.symmetric.util.PBE;
-
-public class JCEPBEKey
- implements SecretKey
-{
- String algorithm;
- ASN1ObjectIdentifier oid;
- int type;
- int digest;
- int keySize;
- int ivSize;
- CipherParameters param;
- PBEKeySpec pbeKeySpec;
- boolean tryWrong = false;
-
- /**
- * @param param
- */
- public JCEPBEKey(
- String algorithm,
- ASN1ObjectIdentifier oid,
- int type,
- int digest,
- int keySize,
- int ivSize,
- PBEKeySpec pbeKeySpec,
- CipherParameters param)
- {
- this.algorithm = algorithm;
- this.oid = oid;
- this.type = type;
- this.digest = digest;
- this.keySize = keySize;
- this.ivSize = ivSize;
- this.pbeKeySpec = pbeKeySpec;
- this.param = param;
- }
-
- public String getAlgorithm()
- {
- return algorithm;
- }
-
- public String getFormat()
- {
- return "RAW";
- }
-
- public byte[] getEncoded()
- {
- if (param != null)
- {
- KeyParameter kParam;
-
- if (param instanceof ParametersWithIV)
- {
- kParam = (KeyParameter)((ParametersWithIV)param).getParameters();
- }
- else
- {
- kParam = (KeyParameter)param;
- }
-
- return kParam.getKey();
- }
- else
- {
- if (type == PBE.PKCS12)
- {
- return PBEParametersGenerator.PKCS12PasswordToBytes(pbeKeySpec.getPassword());
- }
- else
- {
- return PBEParametersGenerator.PKCS5PasswordToBytes(pbeKeySpec.getPassword());
- }
- }
- }
-
- int getType()
- {
- return type;
- }
-
- int getDigest()
- {
- return digest;
- }
-
- int getKeySize()
- {
- return keySize;
- }
-
- int getIvSize()
- {
- return ivSize;
- }
-
- CipherParameters getParam()
- {
- return param;
- }
-
- /**
- * these should never be called.
- */
- int getIterationCount()
- {
- return 0;
- }
-
- byte[] getSalt()
- {
- return null;
- }
-
- /**
- * Return the object identifier associated with this algorithm
- *
- * @return the oid for this PBE key
- */
- public ASN1ObjectIdentifier getOID()
- {
- return oid;
- }
-
- void setTryWrongPKCS12Zero(boolean tryWrong)
- {
- this.tryWrong = tryWrong;
- }
-
- boolean shouldTryWrongPKCS12()
- {
- return tryWrong;
- }
-}
diff --git a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/provider/JCESecretKeyFactory.java b/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/provider/JCESecretKeyFactory.java
deleted file mode 100644
index b1c358b93..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/provider/JCESecretKeyFactory.java
+++ /dev/null
@@ -1,557 +0,0 @@
-package org.spongycastle.jce.provider;
-
-import java.lang.reflect.Constructor;
-import java.security.InvalidKeyException;
-import java.security.spec.InvalidKeySpecException;
-import java.security.spec.KeySpec;
-
-import javax.crypto.SecretKey;
-import javax.crypto.SecretKeyFactorySpi;
-import javax.crypto.spec.DESKeySpec;
-import javax.crypto.spec.DESedeKeySpec;
-import javax.crypto.spec.PBEKeySpec;
-import javax.crypto.spec.SecretKeySpec;
-
-import org.spongycastle.asn1.ASN1ObjectIdentifier;
-import org.spongycastle.asn1.pkcs.PKCSObjectIdentifiers;
-import org.spongycastle.crypto.CipherParameters;
-import org.spongycastle.jcajce.provider.symmetric.util.BCPBEKey;
-import org.spongycastle.jcajce.provider.symmetric.util.PBE;
-
-public class JCESecretKeyFactory
- extends SecretKeyFactorySpi
- implements PBE
-{
- protected String algName;
- protected ASN1ObjectIdentifier algOid;
-
- protected JCESecretKeyFactory(
- String algName,
- ASN1ObjectIdentifier algOid)
- {
- this.algName = algName;
- this.algOid = algOid;
- }
-
- protected SecretKey engineGenerateSecret(
- KeySpec keySpec)
- throws InvalidKeySpecException
- {
- if (keySpec instanceof SecretKeySpec)
- {
- return (SecretKey)keySpec;
- }
-
- throw new InvalidKeySpecException("Invalid KeySpec");
- }
-
- protected KeySpec engineGetKeySpec(
- SecretKey key,
- Class keySpec)
- throws InvalidKeySpecException
- {
- if (keySpec == null)
- {
- throw new InvalidKeySpecException("keySpec parameter is null");
- }
- if (key == null)
- {
- throw new InvalidKeySpecException("key parameter is null");
- }
-
- if (SecretKeySpec.class.isAssignableFrom(keySpec))
- {
- return new SecretKeySpec(key.getEncoded(), algName);
- }
-
- try
- {
- Class[] parameters = { byte[].class };
-
- Constructor c = keySpec.getConstructor(parameters);
- Object[] p = new Object[1];
-
- p[0] = key.getEncoded();
-
- return (KeySpec)c.newInstance(p);
- }
- catch (Exception e)
- {
- throw new InvalidKeySpecException(e.toString());
- }
- }
-
- protected SecretKey engineTranslateKey(
- SecretKey key)
- throws InvalidKeyException
- {
- if (key == null)
- {
- throw new InvalidKeyException("key parameter is null");
- }
-
- if (!key.getAlgorithm().equalsIgnoreCase(algName))
- {
- throw new InvalidKeyException("Key not of type " + algName + ".");
- }
-
- return new SecretKeySpec(key.getEncoded(), algName);
- }
-
- /*
- * classes that inherit from us
- */
-
- static public class PBEKeyFactory
- extends JCESecretKeyFactory
- {
- private boolean forCipher;
- private int scheme;
- private int digest;
- private int keySize;
- private int ivSize;
-
- public PBEKeyFactory(
- String algorithm,
- ASN1ObjectIdentifier oid,
- boolean forCipher,
- int scheme,
- int digest,
- int keySize,
- int ivSize)
- {
- super(algorithm, oid);
-
- this.forCipher = forCipher;
- this.scheme = scheme;
- this.digest = digest;
- this.keySize = keySize;
- this.ivSize = ivSize;
- }
-
- protected SecretKey engineGenerateSecret(
- KeySpec keySpec)
- throws InvalidKeySpecException
- {
- if (keySpec instanceof PBEKeySpec)
- {
- PBEKeySpec pbeSpec = (PBEKeySpec)keySpec;
- CipherParameters param;
-
- return new BCPBEKey(this.algName, this.algOid, scheme, digest, keySize, ivSize, pbeSpec, null);
- }
-
- throw new InvalidKeySpecException("Invalid KeySpec");
- }
- }
-
- static public class DESPBEKeyFactory
- extends JCESecretKeyFactory
- {
- private boolean forCipher;
- private int scheme;
- private int digest;
- private int keySize;
- private int ivSize;
-
- public DESPBEKeyFactory(
- String algorithm,
- ASN1ObjectIdentifier oid,
- boolean forCipher,
- int scheme,
- int digest,
- int keySize,
- int ivSize)
- {
- super(algorithm, oid);
-
- this.forCipher = forCipher;
- this.scheme = scheme;
- this.digest = digest;
- this.keySize = keySize;
- this.ivSize = ivSize;
- }
-
- protected SecretKey engineGenerateSecret(
- KeySpec keySpec)
- throws InvalidKeySpecException
- {
- if (keySpec instanceof PBEKeySpec)
- {
- PBEKeySpec pbeSpec = (PBEKeySpec)keySpec;
- CipherParameters param;
-
- return new BCPBEKey(this.algName, this.algOid, scheme, digest, keySize, ivSize, pbeSpec, null);
- }
-
- throw new InvalidKeySpecException("Invalid KeySpec");
- }
- }
-
- static public class DES
- extends JCESecretKeyFactory
- {
- public DES()
- {
- super("DES", null);
- }
-
- protected SecretKey engineGenerateSecret(
- KeySpec keySpec)
- throws InvalidKeySpecException
- {
- if (keySpec instanceof DESKeySpec)
- {
- DESKeySpec desKeySpec = (DESKeySpec)keySpec;
- return new SecretKeySpec(desKeySpec.getKey(), "DES");
- }
-
- return super.engineGenerateSecret(keySpec);
- }
- }
-
- static public class DESede
- extends JCESecretKeyFactory
- {
- public DESede()
- {
- super("DESede", null);
- }
-
- protected KeySpec engineGetKeySpec(
- SecretKey key,
- Class keySpec)
- throws InvalidKeySpecException
- {
- if (keySpec == null)
- {
- throw new InvalidKeySpecException("keySpec parameter is null");
- }
- if (key == null)
- {
- throw new InvalidKeySpecException("key parameter is null");
- }
-
- if (SecretKeySpec.class.isAssignableFrom(keySpec))
- {
- return new SecretKeySpec(key.getEncoded(), algName);
- }
- else if (DESedeKeySpec.class.isAssignableFrom(keySpec))
- {
- byte[] bytes = key.getEncoded();
-
- try
- {
- if (bytes.length == 16)
- {
- byte[] longKey = new byte[24];
-
- System.arraycopy(bytes, 0, longKey, 0, 16);
- System.arraycopy(bytes, 0, longKey, 16, 8);
-
- return new DESedeKeySpec(longKey);
- }
- else
- {
- return new DESedeKeySpec(bytes);
- }
- }
- catch (Exception e)
- {
- throw new InvalidKeySpecException(e.toString());
- }
- }
-
- throw new InvalidKeySpecException("Invalid KeySpec");
- }
-
- protected SecretKey engineGenerateSecret(
- KeySpec keySpec)
- throws InvalidKeySpecException
- {
- if (keySpec instanceof DESedeKeySpec)
- {
- DESedeKeySpec desKeySpec = (DESedeKeySpec)keySpec;
- return new SecretKeySpec(desKeySpec.getKey(), "DESede");
- }
-
- return super.engineGenerateSecret(keySpec);
- }
- }
-
- /**
- * PBEWithMD5AndDES
- */
- static public class PBEWithMD5AndDES
- extends DESPBEKeyFactory
- {
- public PBEWithMD5AndDES()
- {
- super("PBEwithMD5andDES", null, true, PKCS5S1, MD5, 64, 64);
- }
- }
-
- /**
- * PBEWithMD5AndRC2
- */
- static public class PBEWithMD5AndRC2
- extends PBEKeyFactory
- {
- public PBEWithMD5AndRC2()
- {
- super("PBEwithMD5andRC2", null, true, PKCS5S1, MD5, 64, 64);
- }
- }
-
- /**
- * PBEWithSHA1AndDES
- */
- static public class PBEWithSHA1AndDES
- extends PBEKeyFactory
- {
- public PBEWithSHA1AndDES()
- {
- super("PBEwithSHA1andDES", null, true, PKCS5S1, SHA1, 64, 64);
- }
- }
-
- /**
- * PBEWithSHA1AndRC2
- */
- static public class PBEWithSHA1AndRC2
- extends PBEKeyFactory
- {
- public PBEWithSHA1AndRC2()
- {
- super("PBEwithSHA1andRC2", null, true, PKCS5S1, SHA1, 64, 64);
- }
- }
-
- /**
- * PBEWithSHAAnd3-KeyTripleDES-CBC
- */
- static public class PBEWithSHAAndDES3Key
- extends PBEKeyFactory
- {
- public PBEWithSHAAndDES3Key()
- {
- super("PBEwithSHAandDES3Key-CBC", PKCSObjectIdentifiers.pbeWithSHAAnd3_KeyTripleDES_CBC, true, PKCS12, SHA1, 192, 64);
- }
- }
-
- /**
- * PBEWithSHAAnd2-KeyTripleDES-CBC
- */
- static public class PBEWithSHAAndDES2Key
- extends PBEKeyFactory
- {
- public PBEWithSHAAndDES2Key()
- {
- super("PBEwithSHAandDES2Key-CBC", PKCSObjectIdentifiers.pbeWithSHAAnd2_KeyTripleDES_CBC, true, PKCS12, SHA1, 128, 64);
- }
- }
-
- /**
- * PBEWithSHAAnd128BitRC2-CBC
- */
- static public class PBEWithSHAAnd128BitRC2
- extends PBEKeyFactory
- {
- public PBEWithSHAAnd128BitRC2()
- {
- super("PBEwithSHAand128BitRC2-CBC", PKCSObjectIdentifiers.pbeWithSHAAnd128BitRC2_CBC, true, PKCS12, SHA1, 128, 64);
- }
- }
-
- /**
- * PBEWithSHAAnd40BitRC2-CBC
- */
- static public class PBEWithSHAAnd40BitRC2
- extends PBEKeyFactory
- {
- public PBEWithSHAAnd40BitRC2()
- {
- super("PBEwithSHAand40BitRC2-CBC", PKCSObjectIdentifiers.pbewithSHAAnd40BitRC2_CBC, true, PKCS12, SHA1, 40, 64);
- }
- }
-
- /**
- * PBEWithSHAAndTwofish-CBC
- */
- static public class PBEWithSHAAndTwofish
- extends PBEKeyFactory
- {
- public PBEWithSHAAndTwofish()
- {
- super("PBEwithSHAandTwofish-CBC", null, true, PKCS12, SHA1, 256, 128);
- }
- }
-
- /**
- * PBEWithSHAAnd128BitRC4
- */
- static public class PBEWithSHAAnd128BitRC4
- extends PBEKeyFactory
- {
- public PBEWithSHAAnd128BitRC4()
- {
- super("PBEWithSHAAnd128BitRC4", PKCSObjectIdentifiers.pbeWithSHAAnd128BitRC4, true, PKCS12, SHA1, 128, 0);
- }
- }
-
- /**
- * PBEWithSHAAnd40BitRC4
- */
- static public class PBEWithSHAAnd40BitRC4
- extends PBEKeyFactory
- {
- public PBEWithSHAAnd40BitRC4()
- {
- super("PBEWithSHAAnd128BitRC4", PKCSObjectIdentifiers.pbeWithSHAAnd128BitRC4, true, PKCS12, SHA1, 40, 0);
- }
- }
-
- /**
- * PBEWithHmacRIPEMD160
- */
- public static class PBEWithRIPEMD160
- extends PBEKeyFactory
- {
- public PBEWithRIPEMD160()
- {
- super("PBEwithHmacRIPEMD160", null, false, PKCS12, RIPEMD160, 160, 0);
- }
- }
-
- /**
- * PBEWithHmacSHA
- */
- public static class PBEWithSHA
- extends PBEKeyFactory
- {
- public PBEWithSHA()
- {
- super("PBEwithHmacSHA", null, false, PKCS12, SHA1, 160, 0);
- }
- }
-
- /**
- * PBEWithHmacTiger
- */
- public static class PBEWithTiger
- extends PBEKeyFactory
- {
- public PBEWithTiger()
- {
- super("PBEwithHmacTiger", null, false, PKCS12, TIGER, 192, 0);
- }
- }
-
- /**
- * PBEWithSHA1And128BitAES-BC
- */
- static public class PBEWithSHAAnd128BitAESBC
- extends PBEKeyFactory
- {
- public PBEWithSHAAnd128BitAESBC()
- {
- super("PBEWithSHA1And128BitAES-CBC-BC", null, true, PKCS12, SHA1, 128, 128);
- }
- }
-
- /**
- * PBEWithSHA1And192BitAES-BC
- */
- static public class PBEWithSHAAnd192BitAESBC
- extends PBEKeyFactory
- {
- public PBEWithSHAAnd192BitAESBC()
- {
- super("PBEWithSHA1And192BitAES-CBC-BC", null, true, PKCS12, SHA1, 192, 128);
- }
- }
-
- /**
- * PBEWithSHA1And256BitAES-BC
- */
- static public class PBEWithSHAAnd256BitAESBC
- extends PBEKeyFactory
- {
- public PBEWithSHAAnd256BitAESBC()
- {
- super("PBEWithSHA1And256BitAES-CBC-BC", null, true, PKCS12, SHA1, 256, 128);
- }
- }
-
- /**
- * PBEWithSHA256And128BitAES-BC
- */
- static public class PBEWithSHA256And128BitAESBC
- extends PBEKeyFactory
- {
- public PBEWithSHA256And128BitAESBC()
- {
- super("PBEWithSHA256And128BitAES-CBC-BC", null, true, PKCS12, SHA256, 128, 128);
- }
- }
-
- /**
- * PBEWithSHA256And192BitAES-BC
- */
- static public class PBEWithSHA256And192BitAESBC
- extends PBEKeyFactory
- {
- public PBEWithSHA256And192BitAESBC()
- {
- super("PBEWithSHA256And192BitAES-CBC-BC", null, true, PKCS12, SHA256, 192, 128);
- }
- }
-
- /**
- * PBEWithSHA256And256BitAES-BC
- */
- static public class PBEWithSHA256And256BitAESBC
- extends PBEKeyFactory
- {
- public PBEWithSHA256And256BitAESBC()
- {
- super("PBEWithSHA256And256BitAES-CBC-BC", null, true, PKCS12, SHA256, 256, 128);
- }
- }
-
- /**
- * PBEWithMD5And128BitAES-OpenSSL
- */
- static public class PBEWithMD5And128BitAESCBCOpenSSL
- extends PBEKeyFactory
- {
- public PBEWithMD5And128BitAESCBCOpenSSL()
- {
- super("PBEWithMD5And128BitAES-CBC-OpenSSL", null, true, OPENSSL, MD5, 128, 128);
- }
- }
-
- /**
- * PBEWithMD5And128BitAES-OpenSSL
- */
- static public class PBEWithMD5And192BitAESCBCOpenSSL
- extends PBEKeyFactory
- {
- public PBEWithMD5And192BitAESCBCOpenSSL()
- {
- super("PBEWithMD5And128BitAES-CBC-OpenSSL", null, true, OPENSSL, MD5, 192, 128);
- }
- }
-
- /**
- * PBEWithMD5And128BitAES-OpenSSL
- */
- static public class PBEWithMD5And256BitAESCBCOpenSSL
- extends PBEKeyFactory
- {
- public PBEWithMD5And256BitAESCBCOpenSSL()
- {
- super("PBEWithMD5And128BitAES-CBC-OpenSSL", null, true, OPENSSL, MD5, 256, 128);
- }
- }
-}
diff --git a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/provider/JDKAlgorithmParameters.java b/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/provider/JDKAlgorithmParameters.java
deleted file mode 100644
index 9b33841f2..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/provider/JDKAlgorithmParameters.java
+++ /dev/null
@@ -1,643 +0,0 @@
-package org.spongycastle.jce.provider;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.security.AlgorithmParametersSpi;
-import java.security.spec.AlgorithmParameterSpec;
-import java.security.spec.InvalidParameterSpecException;
-
-import javax.crypto.spec.IvParameterSpec;
-import javax.crypto.spec.PBEParameterSpec;
-import javax.crypto.spec.RC2ParameterSpec;
-
-import org.spongycastle.asn1.ASN1EncodableVector;
-import org.spongycastle.asn1.ASN1InputStream;
-import org.spongycastle.asn1.ASN1OctetString;
-import org.spongycastle.asn1.ASN1Sequence;
-import org.spongycastle.asn1.ASN1Integer;
-import org.spongycastle.asn1.DEROctetString;
-import org.spongycastle.asn1.DEROutputStream;
-import org.spongycastle.asn1.DERSequence;
-import org.spongycastle.asn1.misc.CAST5CBCParameters;
-import org.spongycastle.asn1.pkcs.PKCS12PBEParams;
-import org.spongycastle.asn1.pkcs.RC2CBCParameter;
-import org.spongycastle.jce.spec.IESParameterSpec;
-
-public abstract class JDKAlgorithmParameters
- extends AlgorithmParametersSpi
-{
- protected boolean isASN1FormatString(String format)
- {
- return format == null || format.equals("ASN.1");
- }
-
- protected AlgorithmParameterSpec engineGetParameterSpec(
- Class paramSpec)
- throws InvalidParameterSpecException
- {
- if (paramSpec == null)
- {
- throw new NullPointerException("argument to getParameterSpec must not be null");
- }
-
- return localEngineGetParameterSpec(paramSpec);
- }
-
- protected abstract AlgorithmParameterSpec localEngineGetParameterSpec(Class paramSpec)
- throws InvalidParameterSpecException;
-
- public static class IVAlgorithmParameters
- extends JDKAlgorithmParameters
- {
- private byte[] iv;
-
- protected byte[] engineGetEncoded()
- throws IOException
- {
- return engineGetEncoded("ASN.1");
- }
-
- protected byte[] engineGetEncoded(
- String format)
- throws IOException
- {
- if (this.isASN1FormatString(format))
- {
- return new DEROctetString(engineGetEncoded("RAW")).getEncoded();
- }
-
- if (format.equals("RAW"))
- {
- byte[] tmp = new byte[iv.length];
-
- System.arraycopy(iv, 0, tmp, 0, iv.length);
- return tmp;
- }
-
- return null;
- }
-
- protected AlgorithmParameterSpec localEngineGetParameterSpec(
- Class paramSpec)
- throws InvalidParameterSpecException
- {
- if (paramSpec == IvParameterSpec.class)
- {
- return new IvParameterSpec(iv);
- }
-
- throw new InvalidParameterSpecException("unknown parameter spec passed to IV parameters object.");
- }
-
- protected void engineInit(
- AlgorithmParameterSpec paramSpec)
- throws InvalidParameterSpecException
- {
- if (!(paramSpec instanceof IvParameterSpec))
- {
- throw new InvalidParameterSpecException("IvParameterSpec required to initialise a IV parameters algorithm parameters object");
- }
-
- this.iv = ((IvParameterSpec)paramSpec).getIV();
- }
-
- protected void engineInit(
- byte[] params)
- throws IOException
- {
- //
- // check that we don't have a DER encoded octet string
- //
- if ((params.length % 8) != 0
- && params[0] == 0x04 && params[1] == params.length - 2)
- {
- ASN1InputStream aIn = new ASN1InputStream(params);
- ASN1OctetString oct = (ASN1OctetString)aIn.readObject();
-
- params = oct.getOctets();
- }
-
- this.iv = new byte[params.length];
-
- System.arraycopy(params, 0, iv, 0, iv.length);
- }
-
- protected void engineInit(
- byte[] params,
- String format)
- throws IOException
- {
- if (this.isASN1FormatString(format))
- {
- ASN1InputStream aIn = new ASN1InputStream(params);
-
- try
- {
- ASN1OctetString oct = (ASN1OctetString)aIn.readObject();
-
- engineInit(oct.getOctets());
- }
- catch (Exception e)
- {
- throw new IOException("Exception decoding: " + e);
- }
-
- return;
- }
-
- if (format.equals("RAW"))
- {
- engineInit(params);
- return;
- }
-
- throw new IOException("Unknown parameters format in IV parameters object");
- }
-
- protected String engineToString()
- {
- return "IV Parameters";
- }
- }
-
- public static class RC2AlgorithmParameters
- extends JDKAlgorithmParameters
- {
- private short[] table = {
- 0xbd, 0x56, 0xea, 0xf2, 0xa2, 0xf1, 0xac, 0x2a, 0xb0, 0x93, 0xd1, 0x9c, 0x1b, 0x33, 0xfd, 0xd0,
- 0x30, 0x04, 0xb6, 0xdc, 0x7d, 0xdf, 0x32, 0x4b, 0xf7, 0xcb, 0x45, 0x9b, 0x31, 0xbb, 0x21, 0x5a,
- 0x41, 0x9f, 0xe1, 0xd9, 0x4a, 0x4d, 0x9e, 0xda, 0xa0, 0x68, 0x2c, 0xc3, 0x27, 0x5f, 0x80, 0x36,
- 0x3e, 0xee, 0xfb, 0x95, 0x1a, 0xfe, 0xce, 0xa8, 0x34, 0xa9, 0x13, 0xf0, 0xa6, 0x3f, 0xd8, 0x0c,
- 0x78, 0x24, 0xaf, 0x23, 0x52, 0xc1, 0x67, 0x17, 0xf5, 0x66, 0x90, 0xe7, 0xe8, 0x07, 0xb8, 0x60,
- 0x48, 0xe6, 0x1e, 0x53, 0xf3, 0x92, 0xa4, 0x72, 0x8c, 0x08, 0x15, 0x6e, 0x86, 0x00, 0x84, 0xfa,
- 0xf4, 0x7f, 0x8a, 0x42, 0x19, 0xf6, 0xdb, 0xcd, 0x14, 0x8d, 0x50, 0x12, 0xba, 0x3c, 0x06, 0x4e,
- 0xec, 0xb3, 0x35, 0x11, 0xa1, 0x88, 0x8e, 0x2b, 0x94, 0x99, 0xb7, 0x71, 0x74, 0xd3, 0xe4, 0xbf,
- 0x3a, 0xde, 0x96, 0x0e, 0xbc, 0x0a, 0xed, 0x77, 0xfc, 0x37, 0x6b, 0x03, 0x79, 0x89, 0x62, 0xc6,
- 0xd7, 0xc0, 0xd2, 0x7c, 0x6a, 0x8b, 0x22, 0xa3, 0x5b, 0x05, 0x5d, 0x02, 0x75, 0xd5, 0x61, 0xe3,
- 0x18, 0x8f, 0x55, 0x51, 0xad, 0x1f, 0x0b, 0x5e, 0x85, 0xe5, 0xc2, 0x57, 0x63, 0xca, 0x3d, 0x6c,
- 0xb4, 0xc5, 0xcc, 0x70, 0xb2, 0x91, 0x59, 0x0d, 0x47, 0x20, 0xc8, 0x4f, 0x58, 0xe0, 0x01, 0xe2,
- 0x16, 0x38, 0xc4, 0x6f, 0x3b, 0x0f, 0x65, 0x46, 0xbe, 0x7e, 0x2d, 0x7b, 0x82, 0xf9, 0x40, 0xb5,
- 0x1d, 0x73, 0xf8, 0xeb, 0x26, 0xc7, 0x87, 0x97, 0x25, 0x54, 0xb1, 0x28, 0xaa, 0x98, 0x9d, 0xa5,
- 0x64, 0x6d, 0x7a, 0xd4, 0x10, 0x81, 0x44, 0xef, 0x49, 0xd6, 0xae, 0x2e, 0xdd, 0x76, 0x5c, 0x2f,
- 0xa7, 0x1c, 0xc9, 0x09, 0x69, 0x9a, 0x83, 0xcf, 0x29, 0x39, 0xb9, 0xe9, 0x4c, 0xff, 0x43, 0xab
- };
-
- private short[] ekb = {
- 0x5d, 0xbe, 0x9b, 0x8b, 0x11, 0x99, 0x6e, 0x4d, 0x59, 0xf3, 0x85, 0xa6, 0x3f, 0xb7, 0x83, 0xc5,
- 0xe4, 0x73, 0x6b, 0x3a, 0x68, 0x5a, 0xc0, 0x47, 0xa0, 0x64, 0x34, 0x0c, 0xf1, 0xd0, 0x52, 0xa5,
- 0xb9, 0x1e, 0x96, 0x43, 0x41, 0xd8, 0xd4, 0x2c, 0xdb, 0xf8, 0x07, 0x77, 0x2a, 0xca, 0xeb, 0xef,
- 0x10, 0x1c, 0x16, 0x0d, 0x38, 0x72, 0x2f, 0x89, 0xc1, 0xf9, 0x80, 0xc4, 0x6d, 0xae, 0x30, 0x3d,
- 0xce, 0x20, 0x63, 0xfe, 0xe6, 0x1a, 0xc7, 0xb8, 0x50, 0xe8, 0x24, 0x17, 0xfc, 0x25, 0x6f, 0xbb,
- 0x6a, 0xa3, 0x44, 0x53, 0xd9, 0xa2, 0x01, 0xab, 0xbc, 0xb6, 0x1f, 0x98, 0xee, 0x9a, 0xa7, 0x2d,
- 0x4f, 0x9e, 0x8e, 0xac, 0xe0, 0xc6, 0x49, 0x46, 0x29, 0xf4, 0x94, 0x8a, 0xaf, 0xe1, 0x5b, 0xc3,
- 0xb3, 0x7b, 0x57, 0xd1, 0x7c, 0x9c, 0xed, 0x87, 0x40, 0x8c, 0xe2, 0xcb, 0x93, 0x14, 0xc9, 0x61,
- 0x2e, 0xe5, 0xcc, 0xf6, 0x5e, 0xa8, 0x5c, 0xd6, 0x75, 0x8d, 0x62, 0x95, 0x58, 0x69, 0x76, 0xa1,
- 0x4a, 0xb5, 0x55, 0x09, 0x78, 0x33, 0x82, 0xd7, 0xdd, 0x79, 0xf5, 0x1b, 0x0b, 0xde, 0x26, 0x21,
- 0x28, 0x74, 0x04, 0x97, 0x56, 0xdf, 0x3c, 0xf0, 0x37, 0x39, 0xdc, 0xff, 0x06, 0xa4, 0xea, 0x42,
- 0x08, 0xda, 0xb4, 0x71, 0xb0, 0xcf, 0x12, 0x7a, 0x4e, 0xfa, 0x6c, 0x1d, 0x84, 0x00, 0xc8, 0x7f,
- 0x91, 0x45, 0xaa, 0x2b, 0xc2, 0xb1, 0x8f, 0xd5, 0xba, 0xf2, 0xad, 0x19, 0xb2, 0x67, 0x36, 0xf7,
- 0x0f, 0x0a, 0x92, 0x7d, 0xe3, 0x9d, 0xe9, 0x90, 0x3e, 0x23, 0x27, 0x66, 0x13, 0xec, 0x81, 0x15,
- 0xbd, 0x22, 0xbf, 0x9f, 0x7e, 0xa9, 0x51, 0x4b, 0x4c, 0xfb, 0x02, 0xd3, 0x70, 0x86, 0x31, 0xe7,
- 0x3b, 0x05, 0x03, 0x54, 0x60, 0x48, 0x65, 0x18, 0xd2, 0xcd, 0x5f, 0x32, 0x88, 0x0e, 0x35, 0xfd
- };
-
- private byte[] iv;
- private int parameterVersion = 58;
-
- protected byte[] engineGetEncoded()
- {
- byte[] tmp = new byte[iv.length];
-
- System.arraycopy(iv, 0, tmp, 0, iv.length);
- return tmp;
- }
-
- protected byte[] engineGetEncoded(
- String format)
- throws IOException
- {
- if (this.isASN1FormatString(format))
- {
- if (parameterVersion == -1)
- {
- return new RC2CBCParameter(engineGetEncoded()).getEncoded();
- }
- else
- {
- return new RC2CBCParameter(parameterVersion, engineGetEncoded()).getEncoded();
- }
- }
-
- if (format.equals("RAW"))
- {
- return engineGetEncoded();
- }
-
- return null;
- }
-
- protected AlgorithmParameterSpec localEngineGetParameterSpec(
- Class paramSpec)
- throws InvalidParameterSpecException
- {
- if (paramSpec == RC2ParameterSpec.class)
- {
- if (parameterVersion != -1)
- {
- if (parameterVersion < 256)
- {
- return new RC2ParameterSpec(ekb[parameterVersion], iv);
- }
- else
- {
- return new RC2ParameterSpec(parameterVersion, iv);
- }
- }
- }
-
- if (paramSpec == IvParameterSpec.class)
- {
- return new IvParameterSpec(iv);
- }
-
- throw new InvalidParameterSpecException("unknown parameter spec passed to RC2 parameters object.");
- }
-
- protected void engineInit(
- AlgorithmParameterSpec paramSpec)
- throws InvalidParameterSpecException
- {
- if (paramSpec instanceof IvParameterSpec)
- {
- this.iv = ((IvParameterSpec)paramSpec).getIV();
- }
- else if (paramSpec instanceof RC2ParameterSpec)
- {
- int effKeyBits = ((RC2ParameterSpec)paramSpec).getEffectiveKeyBits();
- if (effKeyBits != -1)
- {
- if (effKeyBits < 256)
- {
- parameterVersion = table[effKeyBits];
- }
- else
- {
- parameterVersion = effKeyBits;
- }
- }
-
- this.iv = ((RC2ParameterSpec)paramSpec).getIV();
- }
- else
- {
- throw new InvalidParameterSpecException("IvParameterSpec or RC2ParameterSpec required to initialise a RC2 parameters algorithm parameters object");
- }
- }
-
- protected void engineInit(
- byte[] params)
- throws IOException
- {
- this.iv = new byte[params.length];
-
- System.arraycopy(params, 0, iv, 0, iv.length);
- }
-
- protected void engineInit(
- byte[] params,
- String format)
- throws IOException
- {
- if (this.isASN1FormatString(format))
- {
- ASN1InputStream aIn = new ASN1InputStream(params);
- RC2CBCParameter p = RC2CBCParameter.getInstance(aIn.readObject());
-
- if (p.getRC2ParameterVersion() != null)
- {
- parameterVersion = p.getRC2ParameterVersion().intValue();
- }
-
- iv = p.getIV();
-
- return;
- }
-
- if (format.equals("RAW"))
- {
- engineInit(params);
- return;
- }
-
- throw new IOException("Unknown parameters format in IV parameters object");
- }
-
- protected String engineToString()
- {
- return "RC2 Parameters";
- }
- }
-
- public static class CAST5AlgorithmParameters
- extends JDKAlgorithmParameters
- {
- private byte[] iv;
- private int keyLength = 128;
-
- protected byte[] engineGetEncoded()
- {
- byte[] tmp = new byte[iv.length];
-
- System.arraycopy(iv, 0, tmp, 0, iv.length);
- return tmp;
- }
-
- protected byte[] engineGetEncoded(
- String format)
- throws IOException
- {
- if (this.isASN1FormatString(format))
- {
- return new CAST5CBCParameters(engineGetEncoded(), keyLength).getEncoded();
- }
-
- if (format.equals("RAW"))
- {
- return engineGetEncoded();
- }
-
-
- return null;
- }
-
- protected AlgorithmParameterSpec localEngineGetParameterSpec(
- Class paramSpec)
- throws InvalidParameterSpecException
- {
- if (paramSpec == IvParameterSpec.class)
- {
- return new IvParameterSpec(iv);
- }
-
- throw new InvalidParameterSpecException("unknown parameter spec passed to CAST5 parameters object.");
- }
-
- protected void engineInit(
- AlgorithmParameterSpec paramSpec)
- throws InvalidParameterSpecException
- {
- if (paramSpec instanceof IvParameterSpec)
- {
- this.iv = ((IvParameterSpec)paramSpec).getIV();
- }
- else
- {
- throw new InvalidParameterSpecException("IvParameterSpec required to initialise a CAST5 parameters algorithm parameters object");
- }
- }
-
- protected void engineInit(
- byte[] params)
- throws IOException
- {
- this.iv = new byte[params.length];
-
- System.arraycopy(params, 0, iv, 0, iv.length);
- }
-
- protected void engineInit(
- byte[] params,
- String format)
- throws IOException
- {
- if (this.isASN1FormatString(format))
- {
- ASN1InputStream aIn = new ASN1InputStream(params);
- CAST5CBCParameters p = CAST5CBCParameters.getInstance(aIn.readObject());
-
- keyLength = p.getKeyLength();
-
- iv = p.getIV();
-
- return;
- }
-
- if (format.equals("RAW"))
- {
- engineInit(params);
- return;
- }
-
- throw new IOException("Unknown parameters format in IV parameters object");
- }
-
- protected String engineToString()
- {
- return "CAST5 Parameters";
- }
- }
-
- public static class PKCS12PBE
- extends JDKAlgorithmParameters
- {
- PKCS12PBEParams params;
-
- protected byte[] engineGetEncoded()
- {
- ByteArrayOutputStream bOut = new ByteArrayOutputStream();
- DEROutputStream dOut = new DEROutputStream(bOut);
-
- try
- {
- dOut.writeObject(params);
- }
- catch (IOException e)
- {
- throw new RuntimeException("Oooops! " + e.toString());
- }
-
- return bOut.toByteArray();
- }
-
- protected byte[] engineGetEncoded(
- String format)
- {
- if (this.isASN1FormatString(format))
- {
- return engineGetEncoded();
- }
-
- return null;
- }
-
- protected AlgorithmParameterSpec localEngineGetParameterSpec(
- Class paramSpec)
- throws InvalidParameterSpecException
- {
- if (paramSpec == PBEParameterSpec.class)
- {
- return new PBEParameterSpec(params.getIV(),
- params.getIterations().intValue());
- }
-
- throw new InvalidParameterSpecException("unknown parameter spec passed to PKCS12 PBE parameters object.");
- }
-
- protected void engineInit(
- AlgorithmParameterSpec paramSpec)
- throws InvalidParameterSpecException
- {
- if (!(paramSpec instanceof PBEParameterSpec))
- {
- throw new InvalidParameterSpecException("PBEParameterSpec required to initialise a PKCS12 PBE parameters algorithm parameters object");
- }
-
- PBEParameterSpec pbeSpec = (PBEParameterSpec)paramSpec;
-
- this.params = new PKCS12PBEParams(pbeSpec.getSalt(),
- pbeSpec.getIterationCount());
- }
-
- protected void engineInit(
- byte[] params)
- throws IOException
- {
- ASN1InputStream aIn = new ASN1InputStream(params);
-
- this.params = PKCS12PBEParams.getInstance(aIn.readObject());
- }
-
- protected void engineInit(
- byte[] params,
- String format)
- throws IOException
- {
- if (this.isASN1FormatString(format))
- {
- engineInit(params);
- return;
- }
-
- throw new IOException("Unknown parameters format in PKCS12 PBE parameters object");
- }
-
- protected String engineToString()
- {
- return "PKCS12 PBE Parameters";
- }
- }
-
- public static class IES
- extends JDKAlgorithmParameters
- {
- IESParameterSpec currentSpec;
-
- /**
- * in the abscence of a standard way of doing it this will do for
- * now...
- */
- protected byte[] engineGetEncoded()
- {
- ByteArrayOutputStream bOut = new ByteArrayOutputStream();
- DEROutputStream dOut = new DEROutputStream(bOut);
-
- try
- {
- ASN1EncodableVector v = new ASN1EncodableVector();
-
- v.add(new DEROctetString(currentSpec.getDerivationV()));
- v.add(new DEROctetString(currentSpec.getEncodingV()));
- v.add(new ASN1Integer(currentSpec.getMacKeySize()));
-
- dOut.writeObject(new DERSequence(v));
- dOut.close();
- }
- catch (IOException e)
- {
- throw new RuntimeException("Error encoding IESParameters");
- }
-
- return bOut.toByteArray();
- }
-
- protected byte[] engineGetEncoded(
- String format)
- {
- if (this.isASN1FormatString(format) || format.equalsIgnoreCase("X.509"))
- {
- return engineGetEncoded();
- }
-
- return null;
- }
-
- protected AlgorithmParameterSpec localEngineGetParameterSpec(
- Class paramSpec)
- throws InvalidParameterSpecException
- {
- if (paramSpec == IESParameterSpec.class)
- {
- return currentSpec;
- }
-
- throw new InvalidParameterSpecException("unknown parameter spec passed to ElGamal parameters object.");
- }
-
- protected void engineInit(
- AlgorithmParameterSpec paramSpec)
- throws InvalidParameterSpecException
- {
- if (!(paramSpec instanceof IESParameterSpec))
- {
- throw new InvalidParameterSpecException("IESParameterSpec required to initialise a IES algorithm parameters object");
- }
-
- this.currentSpec = (IESParameterSpec)paramSpec;
- }
-
- protected void engineInit(
- byte[] params)
- throws IOException
- {
- ASN1InputStream aIn = new ASN1InputStream(params);
-
- try
- {
- ASN1Sequence s = (ASN1Sequence)aIn.readObject();
-
- this.currentSpec = new IESParameterSpec(
- ((ASN1OctetString)s.getObjectAt(0)).getOctets(),
- ((ASN1OctetString)s.getObjectAt(0)).getOctets(),
- ((ASN1Integer)s.getObjectAt(0)).getValue().intValue());
- }
- catch (ClassCastException e)
- {
- throw new IOException("Not a valid IES Parameter encoding.");
- }
- catch (ArrayIndexOutOfBoundsException e)
- {
- throw new IOException("Not a valid IES Parameter encoding.");
- }
- }
-
- protected void engineInit(
- byte[] params,
- String format)
- throws IOException
- {
- if (this.isASN1FormatString(format) || format.equalsIgnoreCase("X.509"))
- {
- engineInit(params);
- }
- else
- {
- throw new IOException("Unknown parameter format " + format);
- }
- }
-
- protected String engineToString()
- {
- return "IES Parameters";
- }
- }
-}
diff --git a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/provider/MultiCertStoreSpi.java b/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/provider/MultiCertStoreSpi.java
deleted file mode 100644
index e3102c77d..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/provider/MultiCertStoreSpi.java
+++ /dev/null
@@ -1,85 +0,0 @@
-package org.spongycastle.jce.provider;
-
-import org.spongycastle.jce.MultiCertStoreParameters;
-
-import java.security.InvalidAlgorithmParameterException;
-import org.spongycastle.jce.cert.CRLSelector;
-import org.spongycastle.jce.cert.CertSelector;
-import org.spongycastle.jce.cert.CertStore;
-import org.spongycastle.jce.cert.CertStoreException;
-import org.spongycastle.jce.cert.CertStoreParameters;
-import org.spongycastle.jce.cert.CertStoreSpi;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-
-public class MultiCertStoreSpi
- extends CertStoreSpi
-{
- private MultiCertStoreParameters params;
-
- public MultiCertStoreSpi(CertStoreParameters params)
- throws InvalidAlgorithmParameterException
- {
- super(params);
-
- if (!(params instanceof MultiCertStoreParameters))
- {
- throw new InvalidAlgorithmParameterException("org.spongycastle.jce.provider.MultiCertStoreSpi: parameter must be a MultiCertStoreParameters object\n" + params.toString());
- }
-
- this.params = (MultiCertStoreParameters)params;
- }
-
- public Collection engineGetCertificates(CertSelector certSelector)
- throws CertStoreException
- {
- boolean searchAllStores = params.getSearchAllStores();
- Iterator iter = params.getCertStores().iterator();
- List allCerts = searchAllStores ? new ArrayList() : Collections.EMPTY_LIST;
-
- while (iter.hasNext())
- {
- CertStore store = (CertStore)iter.next();
- Collection certs = store.getCertificates(certSelector);
-
- if (searchAllStores)
- {
- allCerts.addAll(certs);
- }
- else if (!certs.isEmpty())
- {
- return certs;
- }
- }
-
- return allCerts;
- }
-
- public Collection engineGetCRLs(CRLSelector crlSelector)
- throws CertStoreException
- {
- boolean searchAllStores = params.getSearchAllStores();
- Iterator iter = params.getCertStores().iterator();
- List allCRLs = searchAllStores ? new ArrayList() : Collections.EMPTY_LIST;
-
- while (iter.hasNext())
- {
- CertStore store = (CertStore)iter.next();
- Collection crls = store.getCRLs(crlSelector);
-
- if (searchAllStores)
- {
- allCRLs.addAll(crls);
- }
- else if (!crls.isEmpty())
- {
- return crls;
- }
- }
-
- return allCRLs;
- }
-}
diff --git a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/provider/PKIXCRLUtil.java b/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/provider/PKIXCRLUtil.java
deleted file mode 100644
index 3e22d9f6c..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/provider/PKIXCRLUtil.java
+++ /dev/null
@@ -1,155 +0,0 @@
-package org.spongycastle.jce.provider;
-
-import org.spongycastle.jce.cert.CertStore;
-import org.spongycastle.jce.cert.CertStoreException;
-import org.spongycastle.jce.cert.PKIXParameters;
-import java.security.cert.X509CRL;
-import java.security.cert.X509Certificate;
-import java.util.Collection;
-import java.util.Date;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-
-import org.spongycastle.util.StoreException;
-import org.spongycastle.x509.ExtendedPKIXParameters;
-import org.spongycastle.x509.X509CRLStoreSelector;
-import org.spongycastle.x509.X509Store;
-
-public class PKIXCRLUtil
-{
- public Set findCRLs(X509CRLStoreSelector crlselect, ExtendedPKIXParameters paramsPKIX, Date currentDate)
- throws AnnotatedException
- {
- Set initialSet = new HashSet();
-
- // get complete CRL(s)
- try
- {
- initialSet.addAll(findCRLs(crlselect, paramsPKIX.getAdditionalStores()));
- initialSet.addAll(findCRLs(crlselect, paramsPKIX.getStores()));
- initialSet.addAll(findCRLs(crlselect, paramsPKIX.getCertStores()));
- }
- catch (AnnotatedException e)
- {
- throw new AnnotatedException("Exception obtaining complete CRLs.", e);
- }
-
- Set finalSet = new HashSet();
- Date validityDate = currentDate;
-
- if (paramsPKIX.getDate() != null)
- {
- validityDate = paramsPKIX.getDate();
- }
-
- // based on RFC 5280 6.3.3
- for (Iterator it = initialSet.iterator(); it.hasNext();)
- {
- X509CRL crl = (X509CRL)it.next();
-
- if (crl.getNextUpdate().after(validityDate))
- {
- X509Certificate cert = crlselect.getCertificateChecking();
-
- if (cert != null)
- {
- if (crl.getThisUpdate().before(cert.getNotAfter()))
- {
- finalSet.add(crl);
- }
- }
- else
- {
- finalSet.add(crl);
- }
- }
- }
-
- return finalSet;
- }
-
- public Set findCRLs(X509CRLStoreSelector crlselect, PKIXParameters paramsPKIX)
- throws AnnotatedException
- {
- Set completeSet = new HashSet();
-
- // get complete CRL(s)
- try
- {
- completeSet.addAll(findCRLs(crlselect, paramsPKIX.getCertStores()));
- }
- catch (AnnotatedException e)
- {
- throw new AnnotatedException("Exception obtaining complete CRLs.", e);
- }
-
- return completeSet;
- }
-
-/**
- * Return a Collection of all CRLs found in the X509Store's that are
- * matching the crlSelect criteriums.
- *
- * @param crlSelect a {@link X509CRLStoreSelector} object that will be used
- * to select the CRLs
- * @param crlStores a List containing only
- * {@link org.spongycastle.x509.X509Store X509Store} objects.
- * These are used to search for CRLs
- *
- * @return a Collection of all found {@link java.security.cert.X509CRL X509CRL} objects. May be
- * empty but never null
.
- */
- private final Collection findCRLs(X509CRLStoreSelector crlSelect,
- List crlStores) throws AnnotatedException
- {
- Set crls = new HashSet();
- Iterator iter = crlStores.iterator();
-
- AnnotatedException lastException = null;
- boolean foundValidStore = false;
-
- while (iter.hasNext())
- {
- Object obj = iter.next();
-
- if (obj instanceof X509Store)
- {
- X509Store store = (X509Store)obj;
-
- try
- {
- crls.addAll(store.getMatches(crlSelect));
- foundValidStore = true;
- }
- catch (StoreException e)
- {
- lastException = new AnnotatedException(
- "Exception searching in X.509 CRL store.", e);
- }
- }
- else
- {
- CertStore store = (CertStore)obj;
-
- try
- {
- crls.addAll(store.getCRLs(crlSelect));
- foundValidStore = true;
- }
- catch (CertStoreException e)
- {
- lastException = new AnnotatedException(
- "Exception searching in X.509 CRL store.", e);
- }
- }
- }
- if (!foundValidStore && lastException != null)
- {
- throw lastException;
- }
- return crls;
- }
-
-}
diff --git a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/provider/PKIXCertPathBuilderSpi.java b/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/provider/PKIXCertPathBuilderSpi.java
deleted file mode 100644
index d02dd511f..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/provider/PKIXCertPathBuilderSpi.java
+++ /dev/null
@@ -1,395 +0,0 @@
-package org.spongycastle.jce.provider;
-
-import java.io.IOException;
-import java.security.InvalidAlgorithmParameterException;
-import java.security.PublicKey;
-import org.spongycastle.jce.cert.CertPath;
-import org.spongycastle.jce.cert.CertPathBuilderException;
-import org.spongycastle.jce.cert.CertPathBuilderResult;
-import org.spongycastle.jce.cert.CertPathBuilderSpi;
-import org.spongycastle.jce.cert.CertPathParameters;
-import org.spongycastle.jce.cert.CertPathValidator;
-import org.spongycastle.jce.cert.CertPathValidatorException;
-import org.spongycastle.jce.cert.CertSelector;
-import org.spongycastle.jce.cert.CertStore;
-import org.spongycastle.jce.cert.CertStoreException;
-import java.security.cert.Certificate;
-import java.security.cert.CertificateException;
-import org.spongycastle.jce.cert.CertificateFactory;
-import org.spongycastle.jce.cert.PKIXBuilderParameters;
-import org.spongycastle.jce.cert.PKIXBuilderParameters;
-import org.spongycastle.jce.cert.PKIXCertPathBuilderResult;
-import org.spongycastle.jce.cert.PKIXCertPathValidatorResult;
-import org.spongycastle.jce.cert.TrustAnchor;
-import org.spongycastle.jce.cert.X509CertSelector;
-import java.security.cert.X509Certificate;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-
-import org.spongycastle.jce.X509Principal;
-import org.spongycastle.x509.ExtendedPKIXBuilderParameters;
-import org.spongycastle.jce.PrincipalUtil;
-
-/**
- * Implements the PKIX CertPathBuilding algorithem for BouncyCastle.
- *
- * MAYBE: implement more CertPath validation whil build path to omit invalid pathes
- *
- * @see CertPathBuilderSpi
- **/
-public class PKIXCertPathBuilderSpi
- extends CertPathBuilderSpi
-{
- /**
- * Build and validate a CertPath using the given parameter.
- *
- * @param params PKIXBuilderParameters object containing all
- * information to build the CertPath
- **/
- public CertPathBuilderResult engineBuild(
- CertPathParameters params)
- throws CertPathBuilderException, InvalidAlgorithmParameterException
- {
- if (!(params instanceof PKIXBuilderParameters)
- && !(params instanceof ExtendedPKIXBuilderParameters))
- {
- throw new InvalidAlgorithmParameterException(
- "Parameters must be an instance of "
- + PKIXBuilderParameters.class.getName() + " or "
- + ExtendedPKIXBuilderParameters.class.getName() + ".");
- }
-
- ExtendedPKIXBuilderParameters pkixParams = null;
- if (params instanceof ExtendedPKIXBuilderParameters)
- {
- pkixParams = (ExtendedPKIXBuilderParameters) params;
- }
- else
- {
- pkixParams = (ExtendedPKIXBuilderParameters) ExtendedPKIXBuilderParameters
- .getInstance((PKIXBuilderParameters) params);
- }
-
- Collection targets;
- Iterator targetIter;
- List certPathList = new ArrayList();
- Set certPathSet = new HashSet();
- X509Certificate cert;
- Collection certs;
- CertPath certPath = null;
- Exception certPathException = null;
-
- // search target certificates
- CertSelector certSelect = pkixParams.getTargetCertConstraints();
- if (certSelect == null)
- {
- throw new CertPathBuilderException("targetCertConstraints must be non-null for CertPath building");
- }
-
- try
- {
- targets = findCertificates(certSelect, pkixParams.getCertStores());
- }
- catch (CertStoreException e)
- {
- throw new CertPathBuilderException(e);
- }
-
- if (targets.isEmpty())
- {
- throw new CertPathBuilderException("no certificate found matching targetCertContraints");
- }
-
- CertificateFactory cFact;
- CertPathValidator validator;
-
- try
- {
- cFact = CertificateFactory.getInstance("X.509", "SC");
- validator = CertPathValidator.getInstance("PKIX", "SC");
- }
- catch (Exception e)
- {
- throw new CertPathBuilderException("exception creating support classes: " + e);
- }
-
- //
- // check all potential target certificates
- targetIter = targets.iterator();
- while (targetIter.hasNext())
- {
- cert = (X509Certificate)targetIter.next();
- certPathList.clear();
- certPathSet.clear();
- while (cert != null)
- {
- // add cert to the certpath
- certPathList.add(cert);
- certPathSet.add(cert);
-
- // check whether the issuer of TrustAnchor
object if found or
- * null
if not.
- *
- * @exception CertPathValidatorException if a TrustAnchor was
- * found but the signature verificytion on the given certificate
- * has thrown an exception. This Exception can be obtainted with
- * getCause()
method.
- **/
- final TrustAnchor findTrustAnchor(
- X509Certificate cert,
- Set trustAnchors)
- throws CertPathBuilderException
- {
- Iterator iter = trustAnchors.iterator();
- TrustAnchor trust = null;
- PublicKey trustPublicKey = null;
- Exception invalidKeyEx = null;
-
- X509CertSelector certSelectX509 = new X509CertSelector();
-
- try
- {
- certSelectX509.setSubject(PrincipalUtil.getIssuerX509Principal(cert).getEncoded());
- }
- catch (Exception ex)
- {
- throw new CertPathBuilderException("can't get trust anchor principal",null);
- }
-
- while (iter.hasNext() && trust == null)
- {
- trust = (TrustAnchor)iter.next();
- if (trust.getTrustedCert() != null)
- {
- if (certSelectX509.match(trust.getTrustedCert()))
- {
- trustPublicKey = trust.getTrustedCert().getPublicKey();
- }
- else
- {
- trust = null;
- }
- }
- else if (trust.getCAName() != null
- && trust.getCAPublicKey() != null)
- {
- try
- {
- X509Principal certIssuer = PrincipalUtil.getIssuerX509Principal(cert);
- X509Principal caName = new X509Principal(trust.getCAName());
- if (certIssuer.equals(caName))
- {
- trustPublicKey = trust.getCAPublicKey();
- }
- else
- {
- trust = null;
- }
- }
- catch (Exception ex)
- {
- trust = null;
- }
- }
- else
- {
- trust = null;
- }
-
- if (trustPublicKey != null)
- {
- try
- {
- cert.verify(trustPublicKey);
- }
- catch (Exception ex)
- {
- invalidKeyEx = ex;
- trust = null;
- }
- }
- }
-
- if (trust == null && invalidKeyEx != null)
- {
- throw new CertPathBuilderException("TrustAnchor found put certificate validation failed",invalidKeyEx);
- }
-
- return trust;
- }
-
- /**
- * Return a Collection of all certificates found in the
- * CertStore's that are matching the certSelect criteriums.
- *
- * @param certSelect a {@link CertSelector CertSelector}
- * object that will be used to select the certificates
- * @param certStores a List containing only {@link CertStore
- * CertStore} objects. These are used to search for
- * certificates
- *
- * @return a Collection of all found {@link Certificate Certificate}
- * objects. May be empty but never null
.
- **/
- private Collection findCertificates(
- CertSelector certSelect,
- List certStores)
- throws CertStoreException
- {
- Set certs = new HashSet();
- Iterator iter = certStores.iterator();
-
- while (iter.hasNext())
- {
- CertStore certStore = (CertStore)iter.next();
-
- certs.addAll(certStore.getCertificates(certSelect));
- }
-
- return certs;
- }
-
- /**
- * Find the issuer certificate of the given certificate.
- *
- * @param cert the certificate hows issuer certificate should
- * be found.
- * @param certStores a list of CertStore
object
- * that will be searched
- *
- * @return then X509Certificate
object containing
- * the issuer certificate or null
if not found
- *
- * @exception CertPathValidatorException if a TrustAnchor was
- * found but the signature verificytion on the given certificate
- * has thrown an exception. This Exception can be obtainted with
- * getCause()
method.
- **/
- private X509Certificate findIssuer(
- X509Certificate cert,
- List certStores)
- throws CertPathValidatorException
- {
- Exception invalidKeyEx = null;
- X509CertSelector certSelect = new X509CertSelector();
- try
- {
- certSelect.setSubject(PrincipalUtil.getIssuerX509Principal(cert).getEncoded());
- }
- catch (Exception ex)
- {
- throw new CertPathValidatorException("Issuer not found", null, null, -1);
- }
-
- Iterator iter;
- try
- {
- iter = findCertificates(certSelect, certStores).iterator();
- }
- catch (CertStoreException e)
- {
- throw new CertPathValidatorException(e);
- }
-
- X509Certificate issuer = null;
- while (iter.hasNext() && issuer == null)
- {
- issuer = (X509Certificate)iter.next();
- try
- {
- cert.verify(issuer.getPublicKey());
- }
- catch (Exception ex)
- {
- invalidKeyEx = ex;
- issuer = null;
- }
- }
-
- if (issuer == null && invalidKeyEx == null)
- {
- throw new CertPathValidatorException("Issuer not found", null, null, -1);
- }
-
- if (issuer == null && invalidKeyEx != null)
- {
- throw new CertPathValidatorException("issuer found but certificate validation failed",invalidKeyEx,null,-1);
- }
-
- return issuer;
- }
-}
diff --git a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/provider/PKIXCertPathValidatorSpi.java b/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/provider/PKIXCertPathValidatorSpi.java
deleted file mode 100644
index 989d9c9a6..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/provider/PKIXCertPathValidatorSpi.java
+++ /dev/null
@@ -1,431 +0,0 @@
-package org.spongycastle.jce.provider;
-
-import java.security.InvalidAlgorithmParameterException;
-import java.security.PublicKey;
-import org.spongycastle.jce.cert.CertPath;
-import org.spongycastle.jce.cert.CertPathParameters;
-import org.spongycastle.jce.cert.CertPathValidatorException;
-import org.spongycastle.jce.cert.CertPathValidatorResult;
-import org.spongycastle.jce.cert.CertPathValidatorSpi;
-import org.spongycastle.jce.cert.PKIXCertPathChecker;
-import org.spongycastle.jce.cert.PKIXCertPathValidatorResult;
-import org.spongycastle.jce.cert.PKIXParameters;
-import org.spongycastle.jce.cert.TrustAnchor;
-import java.security.cert.X509Certificate;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-
-import org.spongycastle.jce.X509Principal;
-
-import org.spongycastle.asn1.ASN1Encodable;
-import org.spongycastle.asn1.ASN1ObjectIdentifier;
-import org.spongycastle.asn1.x509.AlgorithmIdentifier;
-import org.spongycastle.jce.exception.ExtCertPathValidatorException;
-import org.spongycastle.x509.ExtendedPKIXParameters;
-
-/**
- * CertPathValidatorSpi implementation for X.509 Certificate validation � la RFC
- * 3280.
- */
-public class PKIXCertPathValidatorSpi
- extends CertPathValidatorSpi
-{
-
- public CertPathValidatorResult engineValidate(
- CertPath certPath,
- CertPathParameters params)
- throws CertPathValidatorException,
- InvalidAlgorithmParameterException
- {
- if (!(params instanceof PKIXParameters))
- {
- throw new InvalidAlgorithmParameterException("Parameters must be a " + PKIXParameters.class.getName()
- + " instance.");
- }
-
- ExtendedPKIXParameters paramsPKIX;
- if (params instanceof ExtendedPKIXParameters)
- {
- paramsPKIX = (ExtendedPKIXParameters)params;
- }
- else
- {
- paramsPKIX = ExtendedPKIXParameters.getInstance((PKIXParameters)params);
- }
- if (paramsPKIX.getTrustAnchors() == null)
- {
- throw new InvalidAlgorithmParameterException(
- "trustAnchors is null, this is not allowed for certification path validation.");
- }
-
- //
- // 6.1.1 - inputs
- //
-
- //
- // (a)
- //
- List certs = certPath.getCertificates();
- int n = certs.size();
-
- if (certs.isEmpty())
- {
- throw new CertPathValidatorException("Certification path is empty.", null, certPath, 0);
- }
-
- //
- // (b)
- //
- // Date validDate = CertPathValidatorUtilities.getValidDate(paramsPKIX);
-
- //
- // (c)
- //
- Set userInitialPolicySet = paramsPKIX.getInitialPolicies();
-
- //
- // (d)
- //
- TrustAnchor trust;
- try
- {
- trust = CertPathValidatorUtilities.findTrustAnchor((X509Certificate) certs.get(certs.size() - 1),
- paramsPKIX.getTrustAnchors(), paramsPKIX.getSigProvider());
- }
- catch (AnnotatedException e)
- {
- throw new CertPathValidatorException(e.getMessage(), e, certPath, certs.size() - 1);
- }
-
- if (trust == null)
- {
- throw new CertPathValidatorException("Trust anchor for certification path not found.", null, certPath, -1);
- }
-
- //
- // (e), (f), (g) are part of the paramsPKIX object.
- //
- Iterator certIter;
- int index = 0;
- int i;
- // Certificate for each interation of the validation loop
- // Signature information for each iteration of the validation loop
- //
- // 6.1.2 - setup
- //
-
- //
- // (a)
- //
- List[] policyNodes = new ArrayList[n + 1];
- for (int j = 0; j < policyNodes.length; j++)
- {
- policyNodes[j] = new ArrayList();
- }
-
- Set policySet = new HashSet();
-
- policySet.add(RFC3280CertPathUtilities.ANY_POLICY);
-
- PKIXPolicyNode validPolicyTree = new PKIXPolicyNode(new ArrayList(), 0, policySet, null, new HashSet(),
- RFC3280CertPathUtilities.ANY_POLICY, false);
-
- policyNodes[0].add(validPolicyTree);
-
- //
- // (b) and (c)
- //
- PKIXNameConstraintValidator nameConstraintValidator = new PKIXNameConstraintValidator();
-
- // (d)
- //
- int explicitPolicy;
- Set acceptablePolicies = new HashSet();
-
- if (paramsPKIX.isExplicitPolicyRequired())
- {
- explicitPolicy = 0;
- }
- else
- {
- explicitPolicy = n + 1;
- }
-
- //
- // (e)
- //
- int inhibitAnyPolicy;
-
- if (paramsPKIX.isAnyPolicyInhibited())
- {
- inhibitAnyPolicy = 0;
- }
- else
- {
- inhibitAnyPolicy = n + 1;
- }
-
- //
- // (f)
- //
- int policyMapping;
-
- if (paramsPKIX.isPolicyMappingInhibited())
- {
- policyMapping = 0;
- }
- else
- {
- policyMapping = n + 1;
- }
-
- //
- // (g), (h), (i), (j)
- //
- PublicKey workingPublicKey;
- X509Principal workingIssuerName;
-
- X509Certificate sign = trust.getTrustedCert();
- try
- {
- if (sign != null)
- {
- workingIssuerName = CertPathValidatorUtilities.getSubjectPrincipal(sign);
- workingPublicKey = sign.getPublicKey();
- }
- else
- {
- workingIssuerName = new X509Principal(trust.getCAName());
- workingPublicKey = trust.getCAPublicKey();
- }
- }
- catch (IllegalArgumentException ex)
- {
- throw new ExtCertPathValidatorException("Subject of trust anchor could not be (re)encoded.", ex, certPath,
- -1);
- }
-
- AlgorithmIdentifier workingAlgId = null;
- try
- {
- workingAlgId = CertPathValidatorUtilities.getAlgorithmIdentifier(workingPublicKey);
- }
- catch (CertPathValidatorException e)
- {
- throw new ExtCertPathValidatorException(
- "Algorithm identifier of public key of trust anchor could not be read.", e, certPath, -1);
- }
- ASN1ObjectIdentifier workingPublicKeyAlgorithm = workingAlgId.getObjectId();
- ASN1Encodable workingPublicKeyParameters = workingAlgId.getParameters();
-
- //
- // (k)
- //
- int maxPathLength = n;
-
- //
- // 6.1.3
- //
-
- if (paramsPKIX.getTargetConstraints() != null
- && !paramsPKIX.getTargetConstraints().match((X509Certificate) certs.get(0)))
- {
- throw new ExtCertPathValidatorException(
- "Target certificate in certification path does not match targetConstraints.", null, certPath, 0);
- }
-
- //
- // initialize CertPathChecker's
- //
- List pathCheckers = paramsPKIX.getCertPathCheckers();
- certIter = pathCheckers.iterator();
- while (certIter.hasNext())
- {
- ((PKIXCertPathChecker) certIter.next()).init(false);
- }
-
- X509Certificate cert = null;
-
- for (index = certs.size() - 1; index >= 0; index--)
- {
- // try
- // {
- //
- // i as defined in the algorithm description
- //
- i = n - index;
-
- //
- // set certificate to be checked in this round
- // sign and workingPublicKey and workingIssuerName are set
- // at the end of the for loop and initialized the
- // first time from the TrustAnchor
- //
- cert = (X509Certificate) certs.get(index);
- boolean verificationAlreadyPerformed = (index == certs.size() - 1);
-
- //
- // 6.1.3
- //
-
- RFC3280CertPathUtilities.processCertA(certPath, paramsPKIX, index, workingPublicKey,
- verificationAlreadyPerformed, workingIssuerName, sign);
-
- RFC3280CertPathUtilities.processCertBC(certPath, index, nameConstraintValidator);
-
- validPolicyTree = RFC3280CertPathUtilities.processCertD(certPath, index, acceptablePolicies,
- validPolicyTree, policyNodes, inhibitAnyPolicy);
-
- validPolicyTree = RFC3280CertPathUtilities.processCertE(certPath, index, validPolicyTree);
-
- RFC3280CertPathUtilities.processCertF(certPath, index, validPolicyTree, explicitPolicy);
-
- //
- // 6.1.4
- //
-
- if (i != n)
- {
- if (cert != null && cert.getVersion() == 1)
- {
- throw new CertPathValidatorException("Version 1 certificates can't be used as CA ones.", null,
- certPath, index);
- }
-
- RFC3280CertPathUtilities.prepareNextCertA(certPath, index);
-
- validPolicyTree = RFC3280CertPathUtilities.prepareCertB(certPath, index, policyNodes, validPolicyTree,
- policyMapping);
-
- RFC3280CertPathUtilities.prepareNextCertG(certPath, index, nameConstraintValidator);
-
- // (h)
- explicitPolicy = RFC3280CertPathUtilities.prepareNextCertH1(certPath, index, explicitPolicy);
- policyMapping = RFC3280CertPathUtilities.prepareNextCertH2(certPath, index, policyMapping);
- inhibitAnyPolicy = RFC3280CertPathUtilities.prepareNextCertH3(certPath, index, inhibitAnyPolicy);
-
- //
- // (i)
- //
- explicitPolicy = RFC3280CertPathUtilities.prepareNextCertI1(certPath, index, explicitPolicy);
- policyMapping = RFC3280CertPathUtilities.prepareNextCertI2(certPath, index, policyMapping);
-
- // (j)
- inhibitAnyPolicy = RFC3280CertPathUtilities.prepareNextCertJ(certPath, index, inhibitAnyPolicy);
-
- // (k)
- RFC3280CertPathUtilities.prepareNextCertK(certPath, index);
-
- // (l)
- maxPathLength = RFC3280CertPathUtilities.prepareNextCertL(certPath, index, maxPathLength);
-
- // (m)
- maxPathLength = RFC3280CertPathUtilities.prepareNextCertM(certPath, index, maxPathLength);
-
- // (n)
- RFC3280CertPathUtilities.prepareNextCertN(certPath, index);
-
- Set criticalExtensions = cert.getCriticalExtensionOIDs();
- if (criticalExtensions != null)
- {
- criticalExtensions = new HashSet(criticalExtensions);
-
- // these extensions are handled by the algorithm
- criticalExtensions.remove(RFC3280CertPathUtilities.KEY_USAGE);
- criticalExtensions.remove(RFC3280CertPathUtilities.CERTIFICATE_POLICIES);
- criticalExtensions.remove(RFC3280CertPathUtilities.POLICY_MAPPINGS);
- criticalExtensions.remove(RFC3280CertPathUtilities.INHIBIT_ANY_POLICY);
- criticalExtensions.remove(RFC3280CertPathUtilities.ISSUING_DISTRIBUTION_POINT);
- criticalExtensions.remove(RFC3280CertPathUtilities.DELTA_CRL_INDICATOR);
- criticalExtensions.remove(RFC3280CertPathUtilities.POLICY_CONSTRAINTS);
- criticalExtensions.remove(RFC3280CertPathUtilities.BASIC_CONSTRAINTS);
- criticalExtensions.remove(RFC3280CertPathUtilities.SUBJECT_ALTERNATIVE_NAME);
- criticalExtensions.remove(RFC3280CertPathUtilities.NAME_CONSTRAINTS);
- }
- else
- {
- criticalExtensions = new HashSet();
- }
-
- // (o)
- RFC3280CertPathUtilities.prepareNextCertO(certPath, index, criticalExtensions, pathCheckers);
-
- // set signing certificate for next round
- sign = cert;
-
- // (c)
- workingIssuerName = CertPathValidatorUtilities.getSubjectPrincipal(sign);
-
- // (d)
- try
- {
- workingPublicKey = CertPathValidatorUtilities.getNextWorkingKey(certPath.getCertificates(), index);
- }
- catch (CertPathValidatorException e)
- {
- throw new CertPathValidatorException("Next working key could not be retrieved.", e, certPath, index);
- }
-
- workingAlgId = CertPathValidatorUtilities.getAlgorithmIdentifier(workingPublicKey);
- // (f)
- workingPublicKeyAlgorithm = workingAlgId.getObjectId();
- // (e)
- workingPublicKeyParameters = workingAlgId.getParameters();
- }
- }
-
- //
- // 6.1.5 Wrap-up procedure
- //
-
- explicitPolicy = RFC3280CertPathUtilities.wrapupCertA(explicitPolicy, cert);
-
- explicitPolicy = RFC3280CertPathUtilities.wrapupCertB(certPath, index + 1, explicitPolicy);
-
- //
- // (c) (d) and (e) are already done
- //
-
- //
- // (f)
- //
- Set criticalExtensions = cert.getCriticalExtensionOIDs();
-
- if (criticalExtensions != null)
- {
- criticalExtensions = new HashSet(criticalExtensions);
- // these extensions are handled by the algorithm
- criticalExtensions.remove(RFC3280CertPathUtilities.KEY_USAGE);
- criticalExtensions.remove(RFC3280CertPathUtilities.CERTIFICATE_POLICIES);
- criticalExtensions.remove(RFC3280CertPathUtilities.POLICY_MAPPINGS);
- criticalExtensions.remove(RFC3280CertPathUtilities.INHIBIT_ANY_POLICY);
- criticalExtensions.remove(RFC3280CertPathUtilities.ISSUING_DISTRIBUTION_POINT);
- criticalExtensions.remove(RFC3280CertPathUtilities.DELTA_CRL_INDICATOR);
- criticalExtensions.remove(RFC3280CertPathUtilities.POLICY_CONSTRAINTS);
- criticalExtensions.remove(RFC3280CertPathUtilities.BASIC_CONSTRAINTS);
- criticalExtensions.remove(RFC3280CertPathUtilities.SUBJECT_ALTERNATIVE_NAME);
- criticalExtensions.remove(RFC3280CertPathUtilities.NAME_CONSTRAINTS);
- criticalExtensions.remove(RFC3280CertPathUtilities.CRL_DISTRIBUTION_POINTS);
- }
- else
- {
- criticalExtensions = new HashSet();
- }
-
- RFC3280CertPathUtilities.wrapupCertF(certPath, index + 1, pathCheckers, criticalExtensions);
-
- PKIXPolicyNode intersection = RFC3280CertPathUtilities.wrapupCertG(certPath, paramsPKIX, userInitialPolicySet,
- index + 1, policyNodes, validPolicyTree, acceptablePolicies);
-
- if ((explicitPolicy > 0) || (intersection != null))
- {
- return new PKIXCertPathValidatorResult(trust, intersection, cert.getPublicKey());
- }
-
- throw new CertPathValidatorException("Path processing failed on policy.", null, certPath, index);
- }
-
-}
diff --git a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/provider/PKIXPolicyNode.java b/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/provider/PKIXPolicyNode.java
deleted file mode 100644
index 1a0b4e7b1..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/provider/PKIXPolicyNode.java
+++ /dev/null
@@ -1,169 +0,0 @@
-package org.spongycastle.jce.provider;
-
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-
-import org.spongycastle.jce.cert.PolicyNode;
-
-public class PKIXPolicyNode
- implements PolicyNode
-{
- protected List children;
- protected int depth;
- protected Set expectedPolicies;
- protected PolicyNode parent;
- protected Set policyQualifiers;
- protected String validPolicy;
- protected boolean critical;
-
- /*
- *
- * CONSTRUCTORS
- *
- */
-
- public PKIXPolicyNode(
- List _children,
- int _depth,
- Set _expectedPolicies,
- PolicyNode _parent,
- Set _policyQualifiers,
- String _validPolicy,
- boolean _critical)
- {
- children = _children;
- depth = _depth;
- expectedPolicies = _expectedPolicies;
- parent = _parent;
- policyQualifiers = _policyQualifiers;
- validPolicy = _validPolicy;
- critical = _critical;
- }
-
- public void addChild(
- PKIXPolicyNode _child)
- {
- children.add(_child);
- _child.setParent(this);
- }
-
- public Iterator getChildren()
- {
- return children.iterator();
- }
-
- public int getDepth()
- {
- return depth;
- }
-
- public Set getExpectedPolicies()
- {
- return expectedPolicies;
- }
-
- public PolicyNode getParent()
- {
- return parent;
- }
-
- public Set getPolicyQualifiers()
- {
- return policyQualifiers;
- }
-
- public String getValidPolicy()
- {
- return validPolicy;
- }
-
- public boolean hasChildren()
- {
- return !children.isEmpty();
- }
-
- public boolean isCritical()
- {
- return critical;
- }
-
- public void removeChild(PKIXPolicyNode _child)
- {
- children.remove(_child);
- }
-
- public void setCritical(boolean _critical)
- {
- critical = _critical;
- }
-
- public void setParent(PKIXPolicyNode _parent)
- {
- parent = _parent;
- }
-
- public String toString()
- {
- return toString("");
- }
-
- public String toString(String _indent)
- {
- StringBuffer _buf = new StringBuffer();
- _buf.append(_indent);
- _buf.append(validPolicy);
- _buf.append(" {\n");
-
- for(int i = 0; i < children.size(); i++)
- {
- _buf.append(((PKIXPolicyNode)children.get(i)).toString(_indent + " "));
- }
-
- _buf.append(_indent);
- _buf.append("}\n");
- return _buf.toString();
- }
-
- public Object clone()
- {
- return copy();
- }
-
- public PKIXPolicyNode copy()
- {
- Set _expectedPolicies = new HashSet();
- Iterator _iter = expectedPolicies.iterator();
- while (_iter.hasNext())
- {
- _expectedPolicies.add(new String((String)_iter.next()));
- }
-
- Set _policyQualifiers = new HashSet();
- _iter = policyQualifiers.iterator();
- while (_iter.hasNext())
- {
- _policyQualifiers.add(new String((String)_iter.next()));
- }
-
- PKIXPolicyNode _node = new PKIXPolicyNode(new ArrayList(),
- depth,
- _expectedPolicies,
- null,
- _policyQualifiers,
- new String(validPolicy),
- critical);
-
- _iter = children.iterator();
- while (_iter.hasNext())
- {
- PKIXPolicyNode _child = ((PKIXPolicyNode)_iter.next()).copy();
- _child.setParent(_node);
- _node.addChild(_child);
- }
-
- return _node;
- }
-}
diff --git a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/provider/ProviderUtil.java b/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/provider/ProviderUtil.java
deleted file mode 100644
index 74efc9a99..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/provider/ProviderUtil.java
+++ /dev/null
@@ -1,72 +0,0 @@
-package org.spongycastle.jce.provider;
-
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.security.Permission;
-
-import org.spongycastle.jcajce.provider.config.ConfigurableProvider;
-import org.spongycastle.jcajce.provider.config.ProviderConfigurationPermission;
-import org.spongycastle.jce.spec.ECParameterSpec;
-
-public class ProviderUtil
-{
- private static Permission BC_EC_LOCAL_PERMISSION = new ProviderConfigurationPermission(
- "SC", ConfigurableProvider.THREAD_LOCAL_EC_IMPLICITLY_CA);
- private static Permission BC_EC_PERMISSION = new ProviderConfigurationPermission(
- "SC", ConfigurableProvider.EC_IMPLICITLY_CA);
-
- private static ThreadLocal threadSpec = new ThreadLocal();
- private static volatile ECParameterSpec ecImplicitCaParams;
-
- static void setParameter(String parameterName, Object parameter)
- {
- SecurityManager securityManager = System.getSecurityManager();
-
- if (parameterName.equals(ConfigurableProvider.THREAD_LOCAL_EC_IMPLICITLY_CA))
- {
- ECParameterSpec curveSpec;
-
- if (securityManager != null)
- {
- securityManager.checkPermission(BC_EC_LOCAL_PERMISSION);
- }
-
- curveSpec = (ECParameterSpec)parameter;
-
- threadSpec.set(curveSpec);
- }
- else if (parameterName.equals(ConfigurableProvider.EC_IMPLICITLY_CA))
- {
- if (securityManager != null)
- {
- securityManager.checkPermission(BC_EC_PERMISSION);
- }
-
- ecImplicitCaParams = (ECParameterSpec)parameter;
- }
- }
-
- public static ECParameterSpec getEcImplicitlyCa()
- {
- ECParameterSpec spec = (ECParameterSpec)threadSpec.get();
-
- if (spec != null)
- {
- return spec;
- }
-
- return ecImplicitCaParams;
- }
-
- static int getReadLimit(InputStream in)
- throws IOException
- {
- if (in instanceof ByteArrayInputStream)
- {
- return in.available();
- }
-
- return Integer.MAX_VALUE;
- }
-}
diff --git a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/provider/RFC3280CertPathUtilities.java b/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/provider/RFC3280CertPathUtilities.java
deleted file mode 100644
index 3f37d4c96..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/provider/RFC3280CertPathUtilities.java
+++ /dev/null
@@ -1,2582 +0,0 @@
-package org.spongycastle.jce.provider;
-
-import java.io.IOException;
-import java.math.BigInteger;
-import java.security.GeneralSecurityException;
-import java.security.PublicKey;
-import java.text.SimpleDateFormat;
-import org.spongycastle.jce.cert.CertPath;
-import org.spongycastle.jce.cert.CertPathBuilder;
-import org.spongycastle.jce.cert.CertPathBuilderException;
-import org.spongycastle.jce.cert.CertPathValidatorException;
-import java.security.cert.CertificateExpiredException;
-import java.security.cert.CertificateNotYetValidException;
-import org.spongycastle.jce.cert.PKIXCertPathChecker;
-import java.security.cert.CRLException;
-import java.security.cert.X509CRL;
-import java.security.cert.X509Certificate;
-import java.security.cert.X509Extension;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Date;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.TimeZone;
-import java.util.Vector;
-
-import org.spongycastle.asn1.ASN1Encodable;
-import org.spongycastle.asn1.ASN1EncodableVector;
-import org.spongycastle.asn1.ASN1InputStream;
-import org.spongycastle.asn1.ASN1Primitive;
-import org.spongycastle.asn1.ASN1Sequence;
-import org.spongycastle.asn1.ASN1TaggedObject;
-import org.spongycastle.asn1.ASN1Integer;
-import org.spongycastle.asn1.ASN1ObjectIdentifier;
-import org.spongycastle.asn1.DERSequence;
-import org.spongycastle.asn1.x509.BasicConstraints;
-import org.spongycastle.asn1.x509.CRLDistPoint;
-import org.spongycastle.asn1.x509.CRLReason;
-import org.spongycastle.asn1.x509.DistributionPoint;
-import org.spongycastle.asn1.x509.DistributionPointName;
-import org.spongycastle.asn1.x509.GeneralName;
-import org.spongycastle.asn1.x509.GeneralNames;
-import org.spongycastle.asn1.x509.GeneralSubtree;
-import org.spongycastle.asn1.x509.IssuingDistributionPoint;
-import org.spongycastle.asn1.x509.NameConstraints;
-import org.spongycastle.asn1.x509.PolicyInformation;
-import org.spongycastle.asn1.x509.X509Extensions;
-import org.spongycastle.asn1.x509.X509Name;
-import org.spongycastle.jce.exception.ExtCertPathValidatorException;
-import org.spongycastle.jce.X509Principal;
-import org.spongycastle.jce.PrincipalUtil;
-import org.spongycastle.util.Arrays;
-import org.spongycastle.x509.ExtendedPKIXBuilderParameters;
-import org.spongycastle.x509.ExtendedPKIXParameters;
-import org.spongycastle.x509.X509CRLStoreSelector;
-import org.spongycastle.x509.X509CertStoreSelector;
-
-public class RFC3280CertPathUtilities
-{
- private static final PKIXCRLUtil CRL_UTIL = new PKIXCRLUtil();
-
- /**
- * If the complete CRL includes an issuing distribution point (IDP) CRL
- * extension check the following:
- *
- * (i) If the distribution point name is present in the IDP CRL extension
- * and the distribution field is present in the DP, then verify that one of
- * the names in the IDP matches one of the names in the DP. If the
- * distribution point name is present in the IDP CRL extension and the
- * distribution field is omitted from the DP, then verify that one of the
- * names in the IDP matches one of the names in the cRLIssuer field of the
- * DP.
- *
cert
.
- * @throws AnnotatedException if one of the above conditions does not apply or an error
- * occurs.
- */
- protected static void processCRLB1(
- DistributionPoint dp,
- Object cert,
- X509CRL crl)
- throws AnnotatedException
- {
- ASN1Primitive idp = CertPathValidatorUtilities.getExtensionValue(crl, ISSUING_DISTRIBUTION_POINT);
- boolean isIndirect = false;
- if (idp != null)
- {
- if (IssuingDistributionPoint.getInstance(idp).isIndirectCRL())
- {
- isIndirect = true;
- }
- }
- byte[] issuerBytes = CertPathValidatorUtilities.getIssuerPrincipal(crl).getEncoded();
-
- boolean matchIssuer = false;
- if (dp.getCRLIssuer() != null)
- {
- GeneralName genNames[] = dp.getCRLIssuer().getNames();
- for (int j = 0; j < genNames.length; j++)
- {
- if (genNames[j].getTagNo() == GeneralName.directoryName)
- {
- try
- {
- if (Arrays.areEqual(genNames[j].getName().toASN1Primitive().getEncoded(), issuerBytes))
- {
- matchIssuer = true;
- }
- }
- catch (IOException e)
- {
- throw new AnnotatedException(
- "CRL issuer information from distribution point cannot be decoded.", e);
- }
- }
- }
- if (matchIssuer && !isIndirect)
- {
- throw new AnnotatedException("Distribution point contains cRLIssuer field but CRL is not indirect.");
- }
- if (!matchIssuer)
- {
- throw new AnnotatedException("CRL issuer of CRL does not match CRL issuer of distribution point.");
- }
- }
- else
- {
- if (CertPathValidatorUtilities.getIssuerPrincipal(crl).equals(
- CertPathValidatorUtilities.getEncodedIssuerPrincipal(cert)))
- {
- matchIssuer = true;
- }
- }
- if (!matchIssuer)
- {
- throw new AnnotatedException("Cannot find matching CRL issuer for certificate.");
- }
- }
-
- protected static ReasonsMask processCRLD(
- X509CRL crl,
- DistributionPoint dp)
- throws AnnotatedException
- {
- IssuingDistributionPoint idp = null;
- try
- {
- idp = IssuingDistributionPoint.getInstance(CertPathValidatorUtilities.getExtensionValue(crl,
- RFC3280CertPathUtilities.ISSUING_DISTRIBUTION_POINT));
- }
- catch (Exception e)
- {
- throw new AnnotatedException("Issuing distribution point extension could not be decoded.", e);
- }
- // (d) (1)
- if (idp != null && idp.getOnlySomeReasons() != null && dp.getReasons() != null)
- {
- return new ReasonsMask(dp.getReasons()).intersect(new ReasonsMask(idp.getOnlySomeReasons()));
- }
- // (d) (4)
- if ((idp == null || idp.getOnlySomeReasons() == null) && dp.getReasons() == null)
- {
- return ReasonsMask.allReasons;
- }
- // (d) (2) and (d)(3)
- return (dp.getReasons() == null
- ? ReasonsMask.allReasons
- : new ReasonsMask(dp.getReasons())).intersect(idp == null
- ? ReasonsMask.allReasons
- : new ReasonsMask(idp.getOnlySomeReasons()));
-
- }
-
- public static final String CERTIFICATE_POLICIES = X509Extensions.CertificatePolicies.getId();
-
- public static final String POLICY_MAPPINGS = X509Extensions.PolicyMappings.getId();
-
- public static final String INHIBIT_ANY_POLICY = X509Extensions.InhibitAnyPolicy.getId();
-
- public static final String ISSUING_DISTRIBUTION_POINT = X509Extensions.IssuingDistributionPoint.getId();
-
- public static final String FRESHEST_CRL = X509Extensions.FreshestCRL.getId();
-
- public static final String DELTA_CRL_INDICATOR = X509Extensions.DeltaCRLIndicator.getId();
-
- public static final String POLICY_CONSTRAINTS = X509Extensions.PolicyConstraints.getId();
-
- public static final String BASIC_CONSTRAINTS = X509Extensions.BasicConstraints.getId();
-
- public static final String CRL_DISTRIBUTION_POINTS = X509Extensions.CRLDistributionPoints.getId();
-
- public static final String SUBJECT_ALTERNATIVE_NAME = X509Extensions.SubjectAlternativeName.getId();
-
- public static final String NAME_CONSTRAINTS = X509Extensions.NameConstraints.getId();
-
- public static final String AUTHORITY_KEY_IDENTIFIER = X509Extensions.AuthorityKeyIdentifier.getId();
-
- public static final String KEY_USAGE = X509Extensions.KeyUsage.getId();
-
- public static final String CRL_NUMBER = X509Extensions.CRLNumber.getId();
-
- public static final String ANY_POLICY = "2.5.29.32.0";
-
- /*
- * key usage bits
- */
- protected static final int KEY_CERT_SIGN = 5;
-
- protected static final int CRL_SIGN = 6;
-
- /**
- * Obtain and validate the certification path for the complete CRL issuer.
- * If a key usage extension is present in the CRL issuer's certificate,
- * verify that the cRLSign bit is set.
- *
- * @param crl CRL which contains revocation information for the certificate
- * cert
.
- * @param cert The attribute certificate or certificate to check if it is
- * revoked.
- * @param defaultCRLSignCert The issuer certificate of the certificate cert
.
- * @param defaultCRLSignKey The public key of the issuer certificate
- * defaultCRLSignCert
.
- * @param paramsPKIX paramsPKIX PKIX parameters.
- * @param certPathCerts The certificates on the certification path.
- * @return A Set
with all keys of possible CRL issuer
- * certificates.
- * @throws AnnotatedException if the CRL is not valid or the status cannot be checked or
- * some error occurs.
- */
- protected static Set processCRLF(
- X509CRL crl,
- Object cert,
- X509Certificate defaultCRLSignCert,
- PublicKey defaultCRLSignKey,
- ExtendedPKIXParameters paramsPKIX,
- List certPathCerts)
- throws AnnotatedException
- {
- // (f)
-
- // get issuer from CRL
- X509CertStoreSelector selector = new X509CertStoreSelector();
- try
- {
- byte[] issuerPrincipal = CertPathValidatorUtilities.getIssuerPrincipal(crl).getEncoded();
- selector.setSubject(issuerPrincipal);
- }
- catch (IOException e)
- {
- throw new AnnotatedException(
- "Subject criteria for certificate selector to find issuer certificate for CRL could not be set.", e);
- }
-
- // get CRL signing certs
- Collection coll;
- try
- {
- coll = CertPathValidatorUtilities.findCertificates(selector, paramsPKIX.getStores());
- coll.addAll(CertPathValidatorUtilities.findCertificates(selector, paramsPKIX.getAdditionalStores()));
- coll.addAll(CertPathValidatorUtilities.findCertificates(selector, paramsPKIX.getCertStores()));
- }
- catch (AnnotatedException e)
- {
- throw new AnnotatedException("Issuer certificate for CRL cannot be searched.", e);
- }
-
- coll.add(defaultCRLSignCert);
-
- Iterator cert_it = coll.iterator();
-
- List validCerts = new ArrayList();
- List validKeys = new ArrayList();
-
- while (cert_it.hasNext())
- {
- X509Certificate signingCert = (X509Certificate)cert_it.next();
-
- /*
- * CA of the certificate, for which this CRL is checked, has also
- * signed CRL, so skip the path validation, because is already done
- */
- if (signingCert.equals(defaultCRLSignCert))
- {
- validCerts.add(signingCert);
- validKeys.add(defaultCRLSignKey);
- continue;
- }
- try
- {
- CertPathBuilder builder = CertPathBuilder.getInstance("PKIX", BouncyCastleProvider.PROVIDER_NAME);
- selector = new X509CertStoreSelector();
- selector.setCertificate(signingCert);
- ExtendedPKIXParameters temp = (ExtendedPKIXParameters)paramsPKIX.clone();
- temp.setTargetCertConstraints(selector);
- ExtendedPKIXBuilderParameters params = (ExtendedPKIXBuilderParameters)ExtendedPKIXBuilderParameters
- .getInstance(temp);
- /*
- * if signingCert is placed not higher on the cert path a
- * dependency loop results. CRL for cert is checked, but
- * signingCert is needed for checking the CRL which is dependent
- * on checking cert because it is higher in the cert path and so
- * signing signingCert transitively. so, revocation is disabled,
- * forgery attacks of the CRL are detected in this outer loop
- * for all other it must be enabled to prevent forgery attacks
- */
- if (certPathCerts.contains(signingCert))
- {
- params.setRevocationEnabled(false);
- }
- else
- {
- params.setRevocationEnabled(true);
- }
- List certs = builder.build(params).getCertPath().getCertificates();
- validCerts.add(signingCert);
- validKeys.add(CertPathValidatorUtilities.getNextWorkingKey(certs, 0));
- }
- catch (CertPathBuilderException e)
- {
- throw new AnnotatedException("Internal error.", e);
- }
- catch (CertPathValidatorException e)
- {
- throw new AnnotatedException("Public key of issuer certificate of CRL could not be retrieved.", e);
- }
- catch (Exception e)
- {
- throw new RuntimeException(e.getMessage());
- }
- }
-
- Set checkKeys = new HashSet();
-
- AnnotatedException lastException = null;
- for (int i = 0; i < validCerts.size(); i++)
- {
- X509Certificate signCert = (X509Certificate)validCerts.get(i);
- boolean[] keyusage = signCert.getKeyUsage();
-
- if (keyusage != null && (keyusage.length < 7 || !keyusage[CRL_SIGN]))
- {
- lastException = new AnnotatedException(
- "Issuer certificate key usage extension does not permit CRL signing.");
- }
- else
- {
- checkKeys.add(validKeys.get(i));
- }
- }
-
- if (checkKeys.isEmpty() && lastException == null)
- {
- throw new AnnotatedException("Cannot find a valid issuer certificate.");
- }
- if (checkKeys.isEmpty() && lastException != null)
- {
- throw lastException;
- }
-
- return checkKeys;
- }
-
- protected static PublicKey processCRLG(
- X509CRL crl,
- Set keys)
- throws AnnotatedException
- {
- Exception lastException = null;
- for (Iterator it = keys.iterator(); it.hasNext();)
- {
- PublicKey key = (PublicKey)it.next();
- try
- {
- crl.verify(key);
- return key;
- }
- catch (Exception e)
- {
- lastException = e;
- }
- }
- throw new AnnotatedException("Cannot verify CRL.", lastException);
- }
-
- protected static X509CRL processCRLH(
- Set deltacrls,
- PublicKey key)
- throws AnnotatedException
- {
- Exception lastException = null;
-
- for (Iterator it = deltacrls.iterator(); it.hasNext();)
- {
- X509CRL crl = (X509CRL)it.next();
- try
- {
- crl.verify(key);
- return crl;
- }
- catch (Exception e)
- {
- lastException = e;
- }
- }
-
- if (lastException != null)
- {
- throw new AnnotatedException("Cannot verify delta CRL.", lastException);
- }
- return null;
- }
-
- protected static Set processCRLA1i(
- Date currentDate,
- ExtendedPKIXParameters paramsPKIX,
- X509Certificate cert,
- X509CRL crl)
- throws AnnotatedException
- {
- Set set = new HashSet();
- if (paramsPKIX.isUseDeltasEnabled())
- {
- CRLDistPoint freshestCRL = null;
- try
- {
- freshestCRL = CRLDistPoint
- .getInstance(CertPathValidatorUtilities.getExtensionValue(cert, FRESHEST_CRL));
- }
- catch (AnnotatedException e)
- {
- throw new AnnotatedException("Freshest CRL extension could not be decoded from certificate.", e);
- }
- if (freshestCRL == null)
- {
- try
- {
- freshestCRL = CRLDistPoint.getInstance(CertPathValidatorUtilities.getExtensionValue(crl,
- FRESHEST_CRL));
- }
- catch (AnnotatedException e)
- {
- throw new AnnotatedException("Freshest CRL extension could not be decoded from CRL.", e);
- }
- }
- if (freshestCRL != null)
- {
- try
- {
- CertPathValidatorUtilities.addAdditionalStoresFromCRLDistributionPoint(freshestCRL, paramsPKIX);
- }
- catch (AnnotatedException e)
- {
- throw new AnnotatedException(
- "No new delta CRL locations could be added from Freshest CRL extension.", e);
- }
- // get delta CRL(s)
- try
- {
- set.addAll(CertPathValidatorUtilities.getDeltaCRLs(currentDate, paramsPKIX, crl));
- }
- catch (AnnotatedException e)
- {
- throw new AnnotatedException("Exception obtaining delta CRLs.", e);
- }
- }
- }
- return set;
- }
-
- protected static Set[] processCRLA1ii(
- Date currentDate,
- ExtendedPKIXParameters paramsPKIX,
- X509Certificate cert,
- X509CRL crl)
- throws AnnotatedException
- {
- Set deltaSet = new HashSet();
- X509CRLStoreSelector crlselect = new X509CRLStoreSelector();
- crlselect.setCertificateChecking(cert);
-
- try
- {
- crlselect.addIssuerName(PrincipalUtil.getIssuerX509Principal(crl).getEncoded());
- }
- catch (CRLException e)
- {
- throw new AnnotatedException("Cannot extract issuer from CRL." + e, e);
- }
- catch (IOException e)
- {
- throw new AnnotatedException("Cannot extract issuer from CRL." + e, e);
- }
-
- crlselect.setCompleteCRLEnabled(true);
- Set completeSet = CRL_UTIL.findCRLs(crlselect, paramsPKIX, currentDate);
-
- if (paramsPKIX.isUseDeltasEnabled())
- {
- // get delta CRL(s)
- try
- {
- deltaSet.addAll(CertPathValidatorUtilities.getDeltaCRLs(currentDate, paramsPKIX, crl));
- }
- catch (AnnotatedException e)
- {
- throw new AnnotatedException("Exception obtaining delta CRLs.", e);
- }
- }
- return new Set[]
- {
- completeSet,
- deltaSet};
- }
-
-
-
- /**
- * If use-deltas is set, verify the issuer and scope of the delta CRL.
- *
- * @param deltaCRL The delta CRL.
- * @param completeCRL The complete CRL.
- * @param pkixParams The PKIX paramaters.
- * @throws AnnotatedException if an exception occurs.
- */
- protected static void processCRLC(
- X509CRL deltaCRL,
- X509CRL completeCRL,
- ExtendedPKIXParameters pkixParams)
- throws AnnotatedException
- {
- if (deltaCRL == null)
- {
- return;
- }
- IssuingDistributionPoint completeidp = null;
- try
- {
- completeidp = IssuingDistributionPoint.getInstance(CertPathValidatorUtilities.getExtensionValue(
- completeCRL, RFC3280CertPathUtilities.ISSUING_DISTRIBUTION_POINT));
- }
- catch (Exception e)
- {
- throw new AnnotatedException("Issuing distribution point extension could not be decoded.", e);
- }
-
- if (pkixParams.isUseDeltasEnabled())
- {
- // (c) (1)
- try
- {
- if (!PrincipalUtil.getIssuerX509Principal(deltaCRL).equals(PrincipalUtil.getIssuerX509Principal(completeCRL)))
- {
- throw new AnnotatedException("Complete CRL issuer does not match delta CRL issuer.");
- }
- }
- catch (CRLException e)
- {
- throw new AnnotatedException(
- "Cannot extract issuer from CRL.", e);
- }
-
- // (c) (2)
- IssuingDistributionPoint deltaidp = null;
- try
- {
- deltaidp = IssuingDistributionPoint.getInstance(CertPathValidatorUtilities.getExtensionValue(
- deltaCRL, ISSUING_DISTRIBUTION_POINT));
- }
- catch (Exception e)
- {
- throw new AnnotatedException(
- "Issuing distribution point extension from delta CRL could not be decoded.", e);
- }
-
- boolean match = false;
- if (completeidp == null)
- {
- if (deltaidp == null)
- {
- match = true;
- }
- }
- else
- {
- if (completeidp.equals(deltaidp))
- {
- match = true;
- }
- }
- if (!match)
- {
- throw new AnnotatedException(
- "Issuing distribution point extension from delta CRL and complete CRL does not match.");
- }
-
- // (c) (3)
- ASN1Primitive completeKeyIdentifier = null;
- try
- {
- completeKeyIdentifier = CertPathValidatorUtilities.getExtensionValue(
- completeCRL, AUTHORITY_KEY_IDENTIFIER);
- }
- catch (AnnotatedException e)
- {
- throw new AnnotatedException(
- "Authority key identifier extension could not be extracted from complete CRL.", e);
- }
-
- ASN1Primitive deltaKeyIdentifier = null;
- try
- {
- deltaKeyIdentifier = CertPathValidatorUtilities.getExtensionValue(
- deltaCRL, AUTHORITY_KEY_IDENTIFIER);
- }
- catch (AnnotatedException e)
- {
- throw new AnnotatedException(
- "Authority key identifier extension could not be extracted from delta CRL.", e);
- }
-
- if (completeKeyIdentifier == null)
- {
- throw new AnnotatedException("CRL authority key identifier is null.");
- }
-
- if (deltaKeyIdentifier == null)
- {
- throw new AnnotatedException("Delta CRL authority key identifier is null.");
- }
-
- if (!completeKeyIdentifier.equals(deltaKeyIdentifier))
- {
- throw new AnnotatedException(
- "Delta CRL authority key identifier does not match complete CRL authority key identifier.");
- }
- }
- }
-
- protected static void processCRLI(
- Date validDate,
- X509CRL deltacrl,
- Object cert,
- CertStatus certStatus,
- ExtendedPKIXParameters pkixParams)
- throws AnnotatedException
- {
- if (pkixParams.isUseDeltasEnabled() && deltacrl != null)
- {
- CertPathValidatorUtilities.getCertStatus(validDate, deltacrl, cert, certStatus);
- }
- }
-
- protected static void processCRLJ(
- Date validDate,
- X509CRL completecrl,
- Object cert,
- CertStatus certStatus)
- throws AnnotatedException
- {
- if (certStatus.getCertStatus() == CertStatus.UNREVOKED)
- {
- CertPathValidatorUtilities.getCertStatus(validDate, completecrl, cert, certStatus);
- }
- }
-
- protected static PKIXPolicyNode prepareCertB(
- CertPath certPath,
- int index,
- List[] policyNodes,
- PKIXPolicyNode validPolicyTree,
- int policyMapping)
- throws CertPathValidatorException
- {
- List certs = certPath.getCertificates();
- X509Certificate cert = (X509Certificate)certs.get(index);
- int n = certs.size();
- // i as defined in the algorithm description
- int i = n - index;
- // (b)
- //
- ASN1Sequence pm = null;
- try
- {
- pm = DERSequence.getInstance(CertPathValidatorUtilities.getExtensionValue(cert,
- RFC3280CertPathUtilities.POLICY_MAPPINGS));
- }
- catch (AnnotatedException ex)
- {
- throw new ExtCertPathValidatorException("Policy mappings extension could not be decoded.", ex, certPath,
- index);
- }
- PKIXPolicyNode _validPolicyTree = validPolicyTree;
- if (pm != null)
- {
- ASN1Sequence mappings = (ASN1Sequence)pm;
- Map m_idp = new HashMap();
- Set s_idp = new HashSet();
-
- for (int j = 0; j < mappings.size(); j++)
- {
- ASN1Sequence mapping = (ASN1Sequence)mappings.getObjectAt(j);
- String id_p = ((ASN1ObjectIdentifier)mapping.getObjectAt(0)).getId();
- String sd_p = ((ASN1ObjectIdentifier)mapping.getObjectAt(1)).getId();
- Set tmp;
-
- if (!m_idp.containsKey(id_p))
- {
- tmp = new HashSet();
- tmp.add(sd_p);
- m_idp.put(id_p, tmp);
- s_idp.add(id_p);
- }
- else
- {
- tmp = (Set)m_idp.get(id_p);
- tmp.add(sd_p);
- }
- }
-
- Iterator it_idp = s_idp.iterator();
- while (it_idp.hasNext())
- {
- String id_p = (String)it_idp.next();
-
- //
- // (1)
- //
- if (policyMapping > 0)
- {
- boolean idp_found = false;
- Iterator nodes_i = policyNodes[i].iterator();
- while (nodes_i.hasNext())
- {
- PKIXPolicyNode node = (PKIXPolicyNode)nodes_i.next();
- if (node.getValidPolicy().equals(id_p))
- {
- idp_found = true;
- node.expectedPolicies = (Set)m_idp.get(id_p);
- break;
- }
- }
-
- if (!idp_found)
- {
- nodes_i = policyNodes[i].iterator();
- while (nodes_i.hasNext())
- {
- PKIXPolicyNode node = (PKIXPolicyNode)nodes_i.next();
- if (RFC3280CertPathUtilities.ANY_POLICY.equals(node.getValidPolicy()))
- {
- Set pq = null;
- ASN1Sequence policies = null;
- try
- {
- policies = (ASN1Sequence)CertPathValidatorUtilities.getExtensionValue(cert,
- RFC3280CertPathUtilities.CERTIFICATE_POLICIES);
- }
- catch (AnnotatedException e)
- {
- throw new ExtCertPathValidatorException(
- "Certificate policies extension could not be decoded.", e, certPath, index);
- }
- Enumeration e = policies.getObjects();
- while (e.hasMoreElements())
- {
- PolicyInformation pinfo = null;
- try
- {
- pinfo = PolicyInformation.getInstance(e.nextElement());
- }
- catch (Exception ex)
- {
- throw new CertPathValidatorException(
- "Policy information could not be decoded.", ex, certPath, index);
- }
- if (RFC3280CertPathUtilities.ANY_POLICY.equals(pinfo.getPolicyIdentifier().getId()))
- {
- try
- {
- pq = CertPathValidatorUtilities
- .getQualifierSet(pinfo.getPolicyQualifiers());
- }
- catch (CertPathValidatorException ex)
- {
-
- throw new ExtCertPathValidatorException(
- "Policy qualifier info set could not be decoded.", ex, certPath,
- index);
- }
- break;
- }
- }
- boolean ci = false;
- if (cert.getCriticalExtensionOIDs() != null)
- {
- ci = cert.getCriticalExtensionOIDs().contains(
- RFC3280CertPathUtilities.CERTIFICATE_POLICIES);
- }
-
- PKIXPolicyNode p_node = (PKIXPolicyNode)node.getParent();
- if (RFC3280CertPathUtilities.ANY_POLICY.equals(p_node.getValidPolicy()))
- {
- PKIXPolicyNode c_node = new PKIXPolicyNode(new ArrayList(), i, (Set)m_idp
- .get(id_p), p_node, pq, id_p, ci);
- p_node.addChild(c_node);
- policyNodes[i].add(c_node);
- }
- break;
- }
- }
- }
-
- //
- // (2)
- //
- }
- else if (policyMapping <= 0)
- {
- Iterator nodes_i = policyNodes[i].iterator();
- while (nodes_i.hasNext())
- {
- PKIXPolicyNode node = (PKIXPolicyNode)nodes_i.next();
- if (node.getValidPolicy().equals(id_p))
- {
- PKIXPolicyNode p_node = (PKIXPolicyNode)node.getParent();
- p_node.removeChild(node);
- nodes_i.remove();
- for (int k = (i - 1); k >= 0; k--)
- {
- List nodes = policyNodes[k];
- for (int l = 0; l < nodes.size(); l++)
- {
- PKIXPolicyNode node2 = (PKIXPolicyNode)nodes.get(l);
- if (!node2.hasChildren())
- {
- _validPolicyTree = CertPathValidatorUtilities.removePolicyNode(
- _validPolicyTree, policyNodes, node2);
- if (_validPolicyTree == null)
- {
- break;
- }
- }
- }
- }
- }
- }
- }
- }
- }
- return _validPolicyTree;
- }
-
- protected static void prepareNextCertA(
- CertPath certPath,
- int index)
- throws CertPathValidatorException
- {
- List certs = certPath.getCertificates();
- X509Certificate cert = (X509Certificate)certs.get(index);
- //
- //
- // (a) check the policy mappings
- //
- ASN1Sequence pm = null;
- try
- {
- pm = DERSequence.getInstance(CertPathValidatorUtilities.getExtensionValue(cert,
- RFC3280CertPathUtilities.POLICY_MAPPINGS));
- }
- catch (AnnotatedException ex)
- {
- throw new ExtCertPathValidatorException("Policy mappings extension could not be decoded.", ex, certPath,
- index);
- }
- if (pm != null)
- {
- ASN1Sequence mappings = pm;
-
- for (int j = 0; j < mappings.size(); j++)
- {
- ASN1ObjectIdentifier issuerDomainPolicy = null;
- ASN1ObjectIdentifier subjectDomainPolicy = null;
- try
- {
- ASN1Sequence mapping = DERSequence.getInstance(mappings.getObjectAt(j));
-
- issuerDomainPolicy = ASN1ObjectIdentifier.getInstance(mapping.getObjectAt(0));
- subjectDomainPolicy = ASN1ObjectIdentifier.getInstance(mapping.getObjectAt(1));
- }
- catch (Exception e)
- {
- throw new ExtCertPathValidatorException("Policy mappings extension contents could not be decoded.",
- e, certPath, index);
- }
-
- if (RFC3280CertPathUtilities.ANY_POLICY.equals(issuerDomainPolicy.getId()))
- {
-
- throw new CertPathValidatorException("IssuerDomainPolicy is anyPolicy", null, certPath, index);
- }
-
- if (RFC3280CertPathUtilities.ANY_POLICY.equals(subjectDomainPolicy.getId()))
- {
-
- throw new CertPathValidatorException("SubjectDomainPolicy is anyPolicy,", null, certPath, index);
- }
- }
- }
- }
-
- protected static void processCertF(
- CertPath certPath,
- int index,
- PKIXPolicyNode validPolicyTree,
- int explicitPolicy)
- throws CertPathValidatorException
- {
- //
- // (f)
- //
- if (explicitPolicy <= 0 && validPolicyTree == null)
- {
- throw new ExtCertPathValidatorException("No valid policy tree found when one expected.", null, certPath,
- index);
- }
- }
-
- protected static PKIXPolicyNode processCertE(
- CertPath certPath,
- int index,
- PKIXPolicyNode validPolicyTree)
- throws CertPathValidatorException
- {
- List certs = certPath.getCertificates();
- X509Certificate cert = (X509Certificate)certs.get(index);
- //
- // (e)
- //
- ASN1Sequence certPolicies = null;
- try
- {
- certPolicies = DERSequence.getInstance(CertPathValidatorUtilities.getExtensionValue(cert,
- RFC3280CertPathUtilities.CERTIFICATE_POLICIES));
- }
- catch (AnnotatedException e)
- {
- throw new ExtCertPathValidatorException("Could not read certificate policies extension from certificate.",
- e, certPath, index);
- }
- if (certPolicies == null)
- {
- validPolicyTree = null;
- }
- return validPolicyTree;
- }
-
- protected static void processCertBC(
- CertPath certPath,
- int index,
- PKIXNameConstraintValidator nameConstraintValidator)
- throws CertPathValidatorException
- {
- List certs = certPath.getCertificates();
- X509Certificate cert = (X509Certificate)certs.get(index);
- int n = certs.size();
- // i as defined in the algorithm description
- int i = n - index;
- //
- // (b), (c) permitted and excluded subtree checking.
- //
- if (!(CertPathValidatorUtilities.isSelfIssued(cert) && (i < n)))
- {
- X509Principal principal = CertPathValidatorUtilities.getSubjectPrincipal(cert);
- ASN1InputStream aIn = new ASN1InputStream(principal.getEncoded());
- ASN1Sequence dns;
-
- try
- {
- dns = DERSequence.getInstance(aIn.readObject());
- }
- catch (Exception e)
- {
- throw new CertPathValidatorException("Exception extracting subject name when checking subtrees.", e,
- certPath, index);
- }
-
- try
- {
- nameConstraintValidator.checkPermittedDN(dns);
- nameConstraintValidator.checkExcludedDN(dns);
- }
- catch (PKIXNameConstraintValidatorException e)
- {
- throw new CertPathValidatorException("Subtree check for certificate subject failed.", e, certPath,
- index);
- }
-
- GeneralNames altName = null;
- try
- {
- altName = GeneralNames.getInstance(CertPathValidatorUtilities.getExtensionValue(cert,
- RFC3280CertPathUtilities.SUBJECT_ALTERNATIVE_NAME));
- }
- catch (Exception e)
- {
- throw new CertPathValidatorException("Subject alternative name extension could not be decoded.", e,
- certPath, index);
- }
- Vector emails = new X509Name(dns).getValues(X509Name.EmailAddress);
- for (Enumeration e = emails.elements(); e.hasMoreElements();)
- {
- String email = (String)e.nextElement();
- GeneralName emailAsGeneralName = new GeneralName(GeneralName.rfc822Name, email);
- try
- {
- nameConstraintValidator.checkPermitted(emailAsGeneralName);
- nameConstraintValidator.checkExcluded(emailAsGeneralName);
- }
- catch (PKIXNameConstraintValidatorException ex)
- {
- throw new CertPathValidatorException(
- "Subtree check for certificate subject alternative email failed.", ex, certPath, index);
- }
- }
- if (altName != null)
- {
- GeneralName[] genNames = null;
- try
- {
- genNames = altName.getNames();
- }
- catch (Exception e)
- {
- throw new CertPathValidatorException("Subject alternative name contents could not be decoded.", e,
- certPath, index);
- }
- for (int j = 0; j < genNames.length; j++)
- {
-
- try
- {
- nameConstraintValidator.checkPermitted(genNames[j]);
- nameConstraintValidator.checkExcluded(genNames[j]);
- }
- catch (PKIXNameConstraintValidatorException e)
- {
- throw new CertPathValidatorException(
- "Subtree check for certificate subject alternative name failed.", e, certPath, index);
- }
- }
- }
- }
- }
-
- protected static PKIXPolicyNode processCertD(
- CertPath certPath,
- int index,
- Set acceptablePolicies,
- PKIXPolicyNode validPolicyTree,
- List[] policyNodes,
- int inhibitAnyPolicy)
- throws CertPathValidatorException
- {
- List certs = certPath.getCertificates();
- X509Certificate cert = (X509Certificate)certs.get(index);
- int n = certs.size();
- // i as defined in the algorithm description
- int i = n - index;
- //
- // (d) policy Information checking against initial policy and
- // policy mapping
- //
- ASN1Sequence certPolicies = null;
- try
- {
- certPolicies = DERSequence.getInstance(CertPathValidatorUtilities.getExtensionValue(cert,
- RFC3280CertPathUtilities.CERTIFICATE_POLICIES));
- }
- catch (AnnotatedException e)
- {
- throw new ExtCertPathValidatorException("Could not read certificate policies extension from certificate.",
- e, certPath, index);
- }
- if (certPolicies != null && validPolicyTree != null)
- {
- //
- // (d) (1)
- //
- Enumeration e = certPolicies.getObjects();
- Set pols = new HashSet();
-
- while (e.hasMoreElements())
- {
- PolicyInformation pInfo = PolicyInformation.getInstance(e.nextElement());
- ASN1ObjectIdentifier pOid = pInfo.getPolicyIdentifier();
-
- pols.add(pOid.getId());
-
- if (!RFC3280CertPathUtilities.ANY_POLICY.equals(pOid.getId()))
- {
- Set pq = null;
- try
- {
- pq = CertPathValidatorUtilities.getQualifierSet(pInfo.getPolicyQualifiers());
- }
- catch (CertPathValidatorException ex)
- {
- throw new ExtCertPathValidatorException("Policy qualifier info set could not be build.", ex,
- certPath, index);
- }
-
- boolean match = CertPathValidatorUtilities.processCertD1i(i, policyNodes, pOid, pq);
-
- if (!match)
- {
- CertPathValidatorUtilities.processCertD1ii(i, policyNodes, pOid, pq);
- }
- }
- }
-
- if (acceptablePolicies.isEmpty() || acceptablePolicies.contains(RFC3280CertPathUtilities.ANY_POLICY))
- {
- acceptablePolicies.clear();
- acceptablePolicies.addAll(pols);
- }
- else
- {
- Iterator it = acceptablePolicies.iterator();
- Set t1 = new HashSet();
-
- while (it.hasNext())
- {
- Object o = it.next();
-
- if (pols.contains(o))
- {
- t1.add(o);
- }
- }
- acceptablePolicies.clear();
- acceptablePolicies.addAll(t1);
- }
-
- //
- // (d) (2)
- //
- if ((inhibitAnyPolicy > 0) || ((i < n) && CertPathValidatorUtilities.isSelfIssued(cert)))
- {
- e = certPolicies.getObjects();
-
- while (e.hasMoreElements())
- {
- PolicyInformation pInfo = PolicyInformation.getInstance(e.nextElement());
-
- if (RFC3280CertPathUtilities.ANY_POLICY.equals(pInfo.getPolicyIdentifier().getId()))
- {
- Set _apq = CertPathValidatorUtilities.getQualifierSet(pInfo.getPolicyQualifiers());
- List _nodes = policyNodes[i - 1];
-
- for (int k = 0; k < _nodes.size(); k++)
- {
- PKIXPolicyNode _node = (PKIXPolicyNode)_nodes.get(k);
-
- Iterator _policySetIter = _node.getExpectedPolicies().iterator();
- while (_policySetIter.hasNext())
- {
- Object _tmp = _policySetIter.next();
-
- String _policy;
- if (_tmp instanceof String)
- {
- _policy = (String)_tmp;
- }
- else if (_tmp instanceof ASN1ObjectIdentifier)
- {
- _policy = ((ASN1ObjectIdentifier)_tmp).getId();
- }
- else
- {
- continue;
- }
-
- boolean _found = false;
- Iterator _childrenIter = _node.getChildren();
-
- while (_childrenIter.hasNext())
- {
- PKIXPolicyNode _child = (PKIXPolicyNode)_childrenIter.next();
-
- if (_policy.equals(_child.getValidPolicy()))
- {
- _found = true;
- }
- }
-
- if (!_found)
- {
- Set _newChildExpectedPolicies = new HashSet();
- _newChildExpectedPolicies.add(_policy);
-
- PKIXPolicyNode _newChild = new PKIXPolicyNode(new ArrayList(), i,
- _newChildExpectedPolicies, _node, _apq, _policy, false);
- _node.addChild(_newChild);
- policyNodes[i].add(_newChild);
- }
- }
- }
- break;
- }
- }
- }
-
- PKIXPolicyNode _validPolicyTree = validPolicyTree;
- //
- // (d) (3)
- //
- for (int j = (i - 1); j >= 0; j--)
- {
- List nodes = policyNodes[j];
-
- for (int k = 0; k < nodes.size(); k++)
- {
- PKIXPolicyNode node = (PKIXPolicyNode)nodes.get(k);
- if (!node.hasChildren())
- {
- _validPolicyTree = CertPathValidatorUtilities.removePolicyNode(_validPolicyTree, policyNodes,
- node);
- if (_validPolicyTree == null)
- {
- break;
- }
- }
- }
- }
-
- //
- // d (4)
- //
- Set criticalExtensionOids = cert.getCriticalExtensionOIDs();
-
- if (criticalExtensionOids != null)
- {
- boolean critical = criticalExtensionOids.contains(RFC3280CertPathUtilities.CERTIFICATE_POLICIES);
-
- List nodes = policyNodes[i];
- for (int j = 0; j < nodes.size(); j++)
- {
- PKIXPolicyNode node = (PKIXPolicyNode)nodes.get(j);
- node.setCritical(critical);
- }
- }
- return _validPolicyTree;
- }
- return null;
- }
-
- protected static void processCertA(
- CertPath certPath,
- ExtendedPKIXParameters paramsPKIX,
- int index,
- PublicKey workingPublicKey,
- boolean verificationAlreadyPerformed,
- X509Principal workingIssuerName,
- X509Certificate sign)
- throws ExtCertPathValidatorException
- {
- List certs = certPath.getCertificates();
- X509Certificate cert = (X509Certificate)certs.get(index);
- //
- // (a) verify
- //
- if (!verificationAlreadyPerformed)
- {
- try
- {
- // (a) (1)
- //
- CertPathValidatorUtilities.verifyX509Certificate(cert, workingPublicKey,
- paramsPKIX.getSigProvider());
- }
- catch (GeneralSecurityException e)
- {
- throw new ExtCertPathValidatorException("Could not validate certificate signature.", e, certPath, index);
- }
- }
-
- try
- {
- // (a) (2)
- //
- cert.checkValidity(CertPathValidatorUtilities
- .getValidCertDateFromValidityModel(paramsPKIX, certPath, index));
- }
- catch (CertificateExpiredException e)
- {
- throw new ExtCertPathValidatorException("Could not validate certificate: " + e.getMessage(), e, certPath, index);
- }
- catch (CertificateNotYetValidException e)
- {
- throw new ExtCertPathValidatorException("Could not validate certificate: " + e.getMessage(), e, certPath, index);
- }
- catch (AnnotatedException e)
- {
- throw new ExtCertPathValidatorException("Could not validate time of certificate.", e, certPath, index);
- }
-
- //
- // (a) (3)
- //
- if (paramsPKIX.isRevocationEnabled())
- {
- try
- {
- checkCRLs(paramsPKIX, cert, CertPathValidatorUtilities.getValidCertDateFromValidityModel(paramsPKIX,
- certPath, index), sign, workingPublicKey, certs);
- }
- catch (AnnotatedException e)
- {
- Throwable cause = e;
- if (null != e.getCause())
- {
- cause = e.getCause();
- }
- throw new ExtCertPathValidatorException(e.getMessage(), cause, certPath, index);
- }
- }
-
- //
- // (a) (4) name chaining
- //
- if (!CertPathValidatorUtilities.getEncodedIssuerPrincipal(cert).equals(workingIssuerName))
- {
- throw new ExtCertPathValidatorException("IssuerName(" + CertPathValidatorUtilities.getEncodedIssuerPrincipal(cert)
- + ") does not match SubjectName(" + workingIssuerName + ") of signing certificate.", null,
- certPath, index);
- }
- }
-
- protected static int prepareNextCertI1(
- CertPath certPath,
- int index,
- int explicitPolicy)
- throws CertPathValidatorException
- {
- List certs = certPath.getCertificates();
- X509Certificate cert = (X509Certificate)certs.get(index);
- //
- // (i)
- //
- ASN1Sequence pc = null;
- try
- {
- pc = DERSequence.getInstance(CertPathValidatorUtilities.getExtensionValue(cert,
- RFC3280CertPathUtilities.POLICY_CONSTRAINTS));
- }
- catch (Exception e)
- {
- throw new ExtCertPathValidatorException("Policy constraints extension cannot be decoded.", e, certPath,
- index);
- }
-
- int tmpInt;
-
- if (pc != null)
- {
- Enumeration policyConstraints = pc.getObjects();
-
- while (policyConstraints.hasMoreElements())
- {
- try
- {
-
- ASN1TaggedObject constraint = ASN1TaggedObject.getInstance(policyConstraints.nextElement());
- if (constraint.getTagNo() == 0)
- {
- tmpInt = ASN1Integer.getInstance(constraint, false).getValue().intValue();
- if (tmpInt < explicitPolicy)
- {
- return tmpInt;
- }
- break;
- }
- }
- catch (IllegalArgumentException e)
- {
- throw new ExtCertPathValidatorException("Policy constraints extension contents cannot be decoded.",
- e, certPath, index);
- }
- }
- }
- return explicitPolicy;
- }
-
- protected static int prepareNextCertI2(
- CertPath certPath,
- int index,
- int policyMapping)
- throws CertPathValidatorException
- {
- List certs = certPath.getCertificates();
- X509Certificate cert = (X509Certificate)certs.get(index);
- //
- // (i)
- //
- ASN1Sequence pc = null;
- try
- {
- pc = DERSequence.getInstance(CertPathValidatorUtilities.getExtensionValue(cert,
- RFC3280CertPathUtilities.POLICY_CONSTRAINTS));
- }
- catch (Exception e)
- {
- throw new ExtCertPathValidatorException("Policy constraints extension cannot be decoded.", e, certPath,
- index);
- }
-
- int tmpInt;
-
- if (pc != null)
- {
- Enumeration policyConstraints = pc.getObjects();
-
- while (policyConstraints.hasMoreElements())
- {
- try
- {
- ASN1TaggedObject constraint = ASN1TaggedObject.getInstance(policyConstraints.nextElement());
- if (constraint.getTagNo() == 1)
- {
- tmpInt = ASN1Integer.getInstance(constraint, false).getValue().intValue();
- if (tmpInt < policyMapping)
- {
- return tmpInt;
- }
- break;
- }
- }
- catch (IllegalArgumentException e)
- {
- throw new ExtCertPathValidatorException("Policy constraints extension contents cannot be decoded.",
- e, certPath, index);
- }
- }
- }
- return policyMapping;
- }
-
- protected static void prepareNextCertG(
- CertPath certPath,
- int index,
- PKIXNameConstraintValidator nameConstraintValidator)
- throws CertPathValidatorException
- {
- List certs = certPath.getCertificates();
- X509Certificate cert = (X509Certificate)certs.get(index);
- //
- // (g) handle the name constraints extension
- //
- NameConstraints nc = null;
- try
- {
- ASN1Sequence ncSeq = DERSequence.getInstance(CertPathValidatorUtilities.getExtensionValue(cert,
- RFC3280CertPathUtilities.NAME_CONSTRAINTS));
- if (ncSeq != null)
- {
- nc = NameConstraints.getInstance(ncSeq);
- }
- }
- catch (Exception e)
- {
- throw new ExtCertPathValidatorException("Name constraints extension could not be decoded.", e, certPath,
- index);
- }
- if (nc != null)
- {
-
- //
- // (g) (1) permitted subtrees
- //
- GeneralSubtree[] permitted = nc.getPermittedSubtrees();
- if (permitted != null)
- {
- try
- {
- nameConstraintValidator.intersectPermittedSubtree(permitted);
- }
- catch (Exception ex)
- {
- throw new ExtCertPathValidatorException(
- "Permitted subtrees cannot be build from name constraints extension.", ex, certPath, index);
- }
- }
-
- //
- // (g) (2) excluded subtrees
- //
- GeneralSubtree[] excluded = nc.getExcludedSubtrees();
- if (excluded != null)
- {
- for (int i = 0; i != excluded.length; i++)
- try
- {
- nameConstraintValidator.addExcludedSubtree(excluded[i]);
- }
- catch (Exception ex)
- {
- throw new ExtCertPathValidatorException(
- "Excluded subtrees cannot be build from name constraints extension.", ex, certPath, index);
- }
- }
- }
- }
-
- /**
- * Checks a distribution point for revocation information for the
- * certificate cert
.
- *
- * @param dp The distribution point to consider.
- * @param paramsPKIX PKIX parameters.
- * @param cert Certificate to check if it is revoked.
- * @param validDate The date when the certificate revocation status should be
- * checked.
- * @param defaultCRLSignCert The issuer certificate of the certificate cert
.
- * @param defaultCRLSignKey The public key of the issuer certificate
- * defaultCRLSignCert
.
- * @param certStatus The current certificate revocation status.
- * @param reasonMask The reasons mask which is already checked.
- * @param certPathCerts The certificates of the certification path.
- * @throws AnnotatedException if the certificate is revoked or the status cannot be checked
- * or some error occurs.
- */
- private static void checkCRL(
- DistributionPoint dp,
- ExtendedPKIXParameters paramsPKIX,
- X509Certificate cert,
- Date validDate,
- X509Certificate defaultCRLSignCert,
- PublicKey defaultCRLSignKey,
- CertStatus certStatus,
- ReasonsMask reasonMask,
- List certPathCerts)
- throws AnnotatedException
- {
- Date currentDate = new Date(System.currentTimeMillis());
- if (validDate.getTime() > currentDate.getTime())
- {
- throw new AnnotatedException("Validation time is in future.");
- }
-
- // (a)
- /*
- * We always get timely valid CRLs, so there is no step (a) (1).
- * "locally cached" CRLs are assumed to be in getStore(), additional
- * CRLs must be enabled in the ExtendedPKIXParameters and are in
- * getAdditionalStore()
- */
-
- Set crls = CertPathValidatorUtilities.getCompleteCRLs(dp, cert, currentDate, paramsPKIX);
- boolean validCrlFound = false;
- AnnotatedException lastException = null;
- Iterator crl_iter = crls.iterator();
-
- while (crl_iter.hasNext() && certStatus.getCertStatus() == CertStatus.UNREVOKED && !reasonMask.isAllReasons())
- {
- try
- {
- X509CRL crl = (X509CRL)crl_iter.next();
-
- // (d)
- ReasonsMask interimReasonsMask = RFC3280CertPathUtilities.processCRLD(crl, dp);
-
- // (e)
- /*
- * The reasons mask is updated at the end, so only valid CRLs
- * can update it. If this CRL does not contain new reasons it
- * must be ignored.
- */
- if (!interimReasonsMask.hasNewReasons(reasonMask))
- {
- continue;
- }
-
- // (f)
- Set keys = RFC3280CertPathUtilities.processCRLF(crl, cert, defaultCRLSignCert, defaultCRLSignKey,
- paramsPKIX, certPathCerts);
- // (g)
- PublicKey key = RFC3280CertPathUtilities.processCRLG(crl, keys);
-
- X509CRL deltaCRL = null;
-
- if (paramsPKIX.isUseDeltasEnabled())
- {
- // get delta CRLs
- Set deltaCRLs = CertPathValidatorUtilities.getDeltaCRLs(currentDate, paramsPKIX, crl);
- // we only want one valid delta CRL
- // (h)
- deltaCRL = RFC3280CertPathUtilities.processCRLH(deltaCRLs, key);
- }
-
- /*
- * CRL must be be valid at the current time, not the validation
- * time. If a certificate is revoked with reason keyCompromise,
- * cACompromise, it can be used for forgery, also for the past.
- * This reason may not be contained in older CRLs.
- */
-
- /*
- * in the chain model signatures stay valid also after the
- * certificate has been expired, so they do not have to be in
- * the CRL validity time
- */
-
- if (paramsPKIX.getValidityModel() != ExtendedPKIXParameters.CHAIN_VALIDITY_MODEL)
- {
- /*
- * if a certificate has expired, but was revoked, it is not
- * more in the CRL, so it would be regarded as valid if the
- * first check is not done
- */
- if (cert.getNotAfter().getTime() < crl.getThisUpdate().getTime())
- {
- throw new AnnotatedException("No valid CRL for current time found.");
- }
- }
-
- RFC3280CertPathUtilities.processCRLB1(dp, cert, crl);
-
- // (b) (2)
- RFC3280CertPathUtilities.processCRLB2(dp, cert, crl);
-
- // (c)
- RFC3280CertPathUtilities.processCRLC(deltaCRL, crl, paramsPKIX);
-
- // (i)
- RFC3280CertPathUtilities.processCRLI(validDate, deltaCRL, cert, certStatus, paramsPKIX);
-
- // (j)
- RFC3280CertPathUtilities.processCRLJ(validDate, crl, cert, certStatus);
-
- // (k)
- if (certStatus.getCertStatus() == CRLReason.removeFromCRL)
- {
- certStatus.setCertStatus(CertStatus.UNREVOKED);
- }
-
- // update reasons mask
- reasonMask.addReasons(interimReasonsMask);
-
- Set criticalExtensions = crl.getCriticalExtensionOIDs();
- if (criticalExtensions != null)
- {
- criticalExtensions = new HashSet(criticalExtensions);
- criticalExtensions.remove(X509Extensions.IssuingDistributionPoint.getId());
- criticalExtensions.remove(X509Extensions.DeltaCRLIndicator.getId());
-
- if (!criticalExtensions.isEmpty())
- {
- throw new AnnotatedException("CRL contains unsupported critical extensions.");
- }
- }
-
- if (deltaCRL != null)
- {
- criticalExtensions = deltaCRL.getCriticalExtensionOIDs();
- if (criticalExtensions != null)
- {
- criticalExtensions = new HashSet(criticalExtensions);
- criticalExtensions.remove(X509Extensions.IssuingDistributionPoint.getId());
- criticalExtensions.remove(X509Extensions.DeltaCRLIndicator.getId());
- if (!criticalExtensions.isEmpty())
- {
- throw new AnnotatedException("Delta CRL contains unsupported critical extension.");
- }
- }
- }
-
- validCrlFound = true;
- }
- catch (AnnotatedException e)
- {
- lastException = e;
- }
- }
- if (!validCrlFound)
- {
- throw lastException;
- }
- }
-
- /**
- * Checks a certificate if it is revoked.
- *
- * @param paramsPKIX PKIX parameters.
- * @param cert Certificate to check if it is revoked.
- * @param validDate The date when the certificate revocation status should be
- * checked.
- * @param sign The issuer certificate of the certificate cert
.
- * @param workingPublicKey The public key of the issuer certificate sign
.
- * @param certPathCerts The certificates of the certification path.
- * @throws AnnotatedException if the certificate is revoked or the status cannot be checked
- * or some error occurs.
- */
- protected static void checkCRLs(
- ExtendedPKIXParameters paramsPKIX,
- X509Certificate cert,
- Date validDate,
- X509Certificate sign,
- PublicKey workingPublicKey,
- List certPathCerts)
- throws AnnotatedException
- {
- AnnotatedException lastException = null;
- CRLDistPoint crldp = null;
- try
- {
- crldp = CRLDistPoint.getInstance(CertPathValidatorUtilities.getExtensionValue(cert,
- RFC3280CertPathUtilities.CRL_DISTRIBUTION_POINTS));
- }
- catch (Exception e)
- {
- throw new AnnotatedException("CRL distribution point extension could not be read.", e);
- }
- try
- {
- CertPathValidatorUtilities.addAdditionalStoresFromCRLDistributionPoint(crldp, paramsPKIX);
- }
- catch (AnnotatedException e)
- {
- throw new AnnotatedException(
- "No additional CRL locations could be decoded from CRL distribution point extension.", e);
- }
- CertStatus certStatus = new CertStatus();
- ReasonsMask reasonsMask = new ReasonsMask();
-
- boolean validCrlFound = false;
- // for each distribution point
- if (crldp != null)
- {
- DistributionPoint dps[] = null;
- try
- {
- dps = crldp.getDistributionPoints();
- }
- catch (Exception e)
- {
- throw new AnnotatedException("Distribution points could not be read.", e);
- }
- if (dps != null)
- {
- for (int i = 0; i < dps.length && certStatus.getCertStatus() == CertStatus.UNREVOKED && !reasonsMask.isAllReasons(); i++)
- {
- ExtendedPKIXParameters paramsPKIXClone = (ExtendedPKIXParameters)paramsPKIX.clone();
- try
- {
- checkCRL(dps[i], paramsPKIXClone, cert, validDate, sign, workingPublicKey, certStatus, reasonsMask, certPathCerts);
- validCrlFound = true;
- }
- catch (AnnotatedException e)
- {
- lastException = e;
- }
- }
- }
- }
-
- /*
- * If the revocation status has not been determined, repeat the process
- * above with any available CRLs not specified in a distribution point
- * but issued by the certificate issuer.
- */
-
- if (certStatus.getCertStatus() == CertStatus.UNREVOKED && !reasonsMask.isAllReasons())
- {
- try
- {
- /*
- * assume a DP with both the reasons and the cRLIssuer fields
- * omitted and a distribution point name of the certificate
- * issuer.
- */
- ASN1Primitive issuer = null;
- try
- {
- issuer = new ASN1InputStream(CertPathValidatorUtilities.getEncodedIssuerPrincipal(cert).getEncoded())
- .readObject();
- }
- catch (Exception e)
- {
- throw new AnnotatedException("Issuer from certificate for CRL could not be reencoded.", e);
- }
- DistributionPoint dp = new DistributionPoint(new DistributionPointName(0, new GeneralNames(
- new GeneralName(GeneralName.directoryName, issuer))), null, null);
- ExtendedPKIXParameters paramsPKIXClone = (ExtendedPKIXParameters)paramsPKIX.clone();
- checkCRL(dp, paramsPKIXClone, cert, validDate, sign, workingPublicKey, certStatus, reasonsMask,
- certPathCerts);
- validCrlFound = true;
- }
- catch (AnnotatedException e)
- {
- lastException = e;
- }
- }
-
- if (!validCrlFound)
- {
- if (lastException instanceof AnnotatedException)
- {
- throw lastException;
- }
-
- throw new AnnotatedException("No valid CRL found.", lastException);
- }
- if (certStatus.getCertStatus() != CertStatus.UNREVOKED)
- {
- SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss +0000");
- df.setTimeZone(TimeZone.getTimeZone("UTC"));
- String message = "Certificate revocation after " + df.format(certStatus.getRevocationDate());
- message += ", reason: " + crlReasons[certStatus.getCertStatus()];
- throw new AnnotatedException(message);
- }
- if (!reasonsMask.isAllReasons() && certStatus.getCertStatus() == CertStatus.UNREVOKED)
- {
- certStatus.setCertStatus(CertStatus.UNDETERMINED);
- }
- if (certStatus.getCertStatus() == CertStatus.UNDETERMINED)
- {
- throw new AnnotatedException("Certificate status could not be determined.");
- }
- }
-
- protected static int prepareNextCertJ(
- CertPath certPath,
- int index,
- int inhibitAnyPolicy)
- throws CertPathValidatorException
- {
- List certs = certPath.getCertificates();
- X509Certificate cert = (X509Certificate)certs.get(index);
- //
- // (j)
- //
- ASN1Integer iap = null;
- try
- {
- iap = ASN1Integer.getInstance(CertPathValidatorUtilities.getExtensionValue(cert,
- RFC3280CertPathUtilities.INHIBIT_ANY_POLICY));
- }
- catch (Exception e)
- {
- throw new ExtCertPathValidatorException("Inhibit any-policy extension cannot be decoded.", e, certPath,
- index);
- }
-
- if (iap != null)
- {
- int _inhibitAnyPolicy = iap.getValue().intValue();
-
- if (_inhibitAnyPolicy < inhibitAnyPolicy)
- {
- return _inhibitAnyPolicy;
- }
- }
- return inhibitAnyPolicy;
- }
-
- protected static void prepareNextCertK(
- CertPath certPath,
- int index)
- throws CertPathValidatorException
- {
- List certs = certPath.getCertificates();
- X509Certificate cert = (X509Certificate)certs.get(index);
- //
- // (k)
- //
- BasicConstraints bc = null;
- try
- {
- bc = BasicConstraints.getInstance(CertPathValidatorUtilities.getExtensionValue(cert,
- RFC3280CertPathUtilities.BASIC_CONSTRAINTS));
- }
- catch (Exception e)
- {
- throw new ExtCertPathValidatorException("Basic constraints extension cannot be decoded.", e, certPath,
- index);
- }
- if (bc != null)
- {
- if (!(bc.isCA()))
- {
- throw new CertPathValidatorException("Not a CA certificate");
- }
- }
- else
- {
- throw new CertPathValidatorException("Intermediate certificate lacks BasicConstraints");
- }
- }
-
- protected static int prepareNextCertL(
- CertPath certPath,
- int index,
- int maxPathLength)
- throws CertPathValidatorException
- {
- List certs = certPath.getCertificates();
- X509Certificate cert = (X509Certificate)certs.get(index);
- //
- // (l)
- //
- if (!CertPathValidatorUtilities.isSelfIssued(cert))
- {
- if (maxPathLength <= 0)
- {
- throw new ExtCertPathValidatorException("Max path length not greater than zero", null, certPath, index);
- }
-
- return maxPathLength - 1;
- }
- return maxPathLength;
- }
-
- protected static int prepareNextCertM(
- CertPath certPath,
- int index,
- int maxPathLength)
- throws CertPathValidatorException
- {
- List certs = certPath.getCertificates();
- X509Certificate cert = (X509Certificate)certs.get(index);
-
- //
- // (m)
- //
- BasicConstraints bc = null;
- try
- {
- bc = BasicConstraints.getInstance(CertPathValidatorUtilities.getExtensionValue(cert,
- RFC3280CertPathUtilities.BASIC_CONSTRAINTS));
- }
- catch (Exception e)
- {
- throw new ExtCertPathValidatorException("Basic constraints extension cannot be decoded.", e, certPath,
- index);
- }
- if (bc != null)
- {
- BigInteger _pathLengthConstraint = bc.getPathLenConstraint();
-
- if (_pathLengthConstraint != null)
- {
- int _plc = _pathLengthConstraint.intValue();
-
- if (_plc < maxPathLength)
- {
- return _plc;
- }
- }
- }
- return maxPathLength;
- }
-
- protected static void prepareNextCertN(
- CertPath certPath,
- int index)
- throws CertPathValidatorException
- {
- List certs = certPath.getCertificates();
- X509Certificate cert = (X509Certificate)certs.get(index);
-
- //
- // (n)
- //
- boolean[] _usage = cert.getKeyUsage();
-
- if ((_usage != null) && !_usage[RFC3280CertPathUtilities.KEY_CERT_SIGN])
- {
- throw new ExtCertPathValidatorException(
- "Issuer certificate keyusage extension is critical and does not permit key signing.", null,
- certPath, index);
- }
- }
-
- protected static void prepareNextCertO(
- CertPath certPath,
- int index,
- Set criticalExtensions,
- List pathCheckers)
- throws CertPathValidatorException
- {
- List certs = certPath.getCertificates();
- X509Certificate cert = (X509Certificate)certs.get(index);
- //
- // (o)
- //
-
- Iterator tmpIter;
- tmpIter = pathCheckers.iterator();
- while (tmpIter.hasNext())
- {
- try
- {
- ((PKIXCertPathChecker)tmpIter.next()).check(cert, criticalExtensions);
- }
- catch (CertPathValidatorException e)
- {
- throw new CertPathValidatorException(e.getMessage(), e.getCause(), certPath, index);
- }
- }
- if (!criticalExtensions.isEmpty())
- {
- throw new ExtCertPathValidatorException("Certificate has unsupported critical extension: " + criticalExtensions, null, certPath,
- index);
- }
- }
-
- protected static int prepareNextCertH1(
- CertPath certPath,
- int index,
- int explicitPolicy)
- {
- List certs = certPath.getCertificates();
- X509Certificate cert = (X509Certificate)certs.get(index);
- //
- // (h)
- //
- if (!CertPathValidatorUtilities.isSelfIssued(cert))
- {
- //
- // (1)
- //
- if (explicitPolicy != 0)
- {
- return explicitPolicy - 1;
- }
- }
- return explicitPolicy;
- }
-
- protected static int prepareNextCertH2(
- CertPath certPath,
- int index,
- int policyMapping)
- {
- List certs = certPath.getCertificates();
- X509Certificate cert = (X509Certificate)certs.get(index);
- //
- // (h)
- //
- if (!CertPathValidatorUtilities.isSelfIssued(cert))
- {
- //
- // (2)
- //
- if (policyMapping != 0)
- {
- return policyMapping - 1;
- }
- }
- return policyMapping;
- }
-
- protected static int prepareNextCertH3(
- CertPath certPath,
- int index,
- int inhibitAnyPolicy)
- {
- List certs = certPath.getCertificates();
- X509Certificate cert = (X509Certificate)certs.get(index);
- //
- // (h)
- //
- if (!CertPathValidatorUtilities.isSelfIssued(cert))
- {
- //
- // (3)
- //
- if (inhibitAnyPolicy != 0)
- {
- return inhibitAnyPolicy - 1;
- }
- }
- return inhibitAnyPolicy;
- }
-
- protected static final String[] crlReasons = new String[]
- {
- "unspecified",
- "keyCompromise",
- "cACompromise",
- "affiliationChanged",
- "superseded",
- "cessationOfOperation",
- "certificateHold",
- "unknown",
- "removeFromCRL",
- "privilegeWithdrawn",
- "aACompromise"};
-
- protected static int wrapupCertA(
- int explicitPolicy,
- X509Certificate cert)
- {
- //
- // (a)
- //
- if (!CertPathValidatorUtilities.isSelfIssued(cert) && (explicitPolicy != 0))
- {
- explicitPolicy--;
- }
- return explicitPolicy;
- }
-
- protected static int wrapupCertB(
- CertPath certPath,
- int index,
- int explicitPolicy)
- throws CertPathValidatorException
- {
- List certs = certPath.getCertificates();
- X509Certificate cert = (X509Certificate)certs.get(index);
- //
- // (b)
- //
- int tmpInt;
- ASN1Sequence pc = null;
- try
- {
- pc = DERSequence.getInstance(CertPathValidatorUtilities.getExtensionValue(cert,
- RFC3280CertPathUtilities.POLICY_CONSTRAINTS));
- }
- catch (AnnotatedException e)
- {
- throw new ExtCertPathValidatorException("Policy constraints could not be decoded.", e, certPath, index);
- }
- if (pc != null)
- {
- Enumeration policyConstraints = pc.getObjects();
-
- while (policyConstraints.hasMoreElements())
- {
- ASN1TaggedObject constraint = (ASN1TaggedObject)policyConstraints.nextElement();
- switch (constraint.getTagNo())
- {
- case 0:
- try
- {
- tmpInt = ASN1Integer.getInstance(constraint, false).getValue().intValue();
- }
- catch (Exception e)
- {
- throw new ExtCertPathValidatorException(
- "Policy constraints requireExplicitPolicy field could not be decoded.", e, certPath,
- index);
- }
- if (tmpInt == 0)
- {
- return 0;
- }
- break;
- }
- }
- }
- return explicitPolicy;
- }
-
- protected static void wrapupCertF(
- CertPath certPath,
- int index,
- List pathCheckers,
- Set criticalExtensions)
- throws CertPathValidatorException
- {
- List certs = certPath.getCertificates();
- X509Certificate cert = (X509Certificate)certs.get(index);
- Iterator tmpIter;
- tmpIter = pathCheckers.iterator();
- while (tmpIter.hasNext())
- {
- try
- {
- ((PKIXCertPathChecker)tmpIter.next()).check(cert, criticalExtensions);
- }
- catch (CertPathValidatorException e)
- {
- throw new ExtCertPathValidatorException("Additional certificate path checker failed.", e, certPath,
- index);
- }
- }
-
- if (!criticalExtensions.isEmpty())
- {
- throw new ExtCertPathValidatorException("Certificate has unsupported critical extension: " + criticalExtensions, null, certPath,
- index);
- }
- }
-
- protected static PKIXPolicyNode wrapupCertG(
- CertPath certPath,
- ExtendedPKIXParameters paramsPKIX,
- Set userInitialPolicySet,
- int index,
- List[] policyNodes,
- PKIXPolicyNode validPolicyTree,
- Set acceptablePolicies)
- throws CertPathValidatorException
- {
- int n = certPath.getCertificates().size();
- //
- // (g)
- //
- PKIXPolicyNode intersection;
-
- //
- // (g) (i)
- //
- if (validPolicyTree == null)
- {
- if (paramsPKIX.isExplicitPolicyRequired())
- {
- throw new ExtCertPathValidatorException("Explicit policy requested but none available.", null,
- certPath, index);
- }
- intersection = null;
- }
- else if (CertPathValidatorUtilities.isAnyPolicy(userInitialPolicySet)) // (g)
- // (ii)
- {
- if (paramsPKIX.isExplicitPolicyRequired())
- {
- if (acceptablePolicies.isEmpty())
- {
- throw new ExtCertPathValidatorException("Explicit policy requested but none available.", null,
- certPath, index);
- }
- else
- {
- Set _validPolicyNodeSet = new HashSet();
-
- for (int j = 0; j < policyNodes.length; j++)
- {
- List _nodeDepth = policyNodes[j];
-
- for (int k = 0; k < _nodeDepth.size(); k++)
- {
- PKIXPolicyNode _node = (PKIXPolicyNode)_nodeDepth.get(k);
-
- if (RFC3280CertPathUtilities.ANY_POLICY.equals(_node.getValidPolicy()))
- {
- Iterator _iter = _node.getChildren();
- while (_iter.hasNext())
- {
- _validPolicyNodeSet.add(_iter.next());
- }
- }
- }
- }
-
- Iterator _vpnsIter = _validPolicyNodeSet.iterator();
- while (_vpnsIter.hasNext())
- {
- PKIXPolicyNode _node = (PKIXPolicyNode)_vpnsIter.next();
- String _validPolicy = _node.getValidPolicy();
-
- if (!acceptablePolicies.contains(_validPolicy))
- {
- // validPolicyTree =
- // removePolicyNode(validPolicyTree, policyNodes,
- // _node);
- }
- }
- if (validPolicyTree != null)
- {
- for (int j = (n - 1); j >= 0; j--)
- {
- List nodes = policyNodes[j];
-
- for (int k = 0; k < nodes.size(); k++)
- {
- PKIXPolicyNode node = (PKIXPolicyNode)nodes.get(k);
- if (!node.hasChildren())
- {
- validPolicyTree = CertPathValidatorUtilities.removePolicyNode(validPolicyTree,
- policyNodes, node);
- }
- }
- }
- }
- }
- }
-
- intersection = validPolicyTree;
- }
- else
- {
- //
- // (g) (iii)
- //
- // This implementation is not exactly same as the one described in
- // RFC3280.
- // However, as far as the validation result is concerned, both
- // produce
- // adequate result. The only difference is whether AnyPolicy is
- // remain
- // in the policy tree or not.
- //
- // (g) (iii) 1
- //
- Set _validPolicyNodeSet = new HashSet();
-
- for (int j = 0; j < policyNodes.length; j++)
- {
- List _nodeDepth = policyNodes[j];
-
- for (int k = 0; k < _nodeDepth.size(); k++)
- {
- PKIXPolicyNode _node = (PKIXPolicyNode)_nodeDepth.get(k);
-
- if (RFC3280CertPathUtilities.ANY_POLICY.equals(_node.getValidPolicy()))
- {
- Iterator _iter = _node.getChildren();
- while (_iter.hasNext())
- {
- PKIXPolicyNode _c_node = (PKIXPolicyNode)_iter.next();
- if (!RFC3280CertPathUtilities.ANY_POLICY.equals(_c_node.getValidPolicy()))
- {
- _validPolicyNodeSet.add(_c_node);
- }
- }
- }
- }
- }
-
- //
- // (g) (iii) 2
- //
- Iterator _vpnsIter = _validPolicyNodeSet.iterator();
- while (_vpnsIter.hasNext())
- {
- PKIXPolicyNode _node = (PKIXPolicyNode)_vpnsIter.next();
- String _validPolicy = _node.getValidPolicy();
-
- if (!userInitialPolicySet.contains(_validPolicy))
- {
- validPolicyTree = CertPathValidatorUtilities.removePolicyNode(validPolicyTree, policyNodes, _node);
- }
- }
-
- //
- // (g) (iii) 4
- //
- if (validPolicyTree != null)
- {
- for (int j = (n - 1); j >= 0; j--)
- {
- List nodes = policyNodes[j];
-
- for (int k = 0; k < nodes.size(); k++)
- {
- PKIXPolicyNode node = (PKIXPolicyNode)nodes.get(k);
- if (!node.hasChildren())
- {
- validPolicyTree = CertPathValidatorUtilities.removePolicyNode(validPolicyTree, policyNodes,
- node);
- }
- }
- }
- }
-
- intersection = validPolicyTree;
- }
- return intersection;
- }
-
-}
diff --git a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/provider/X509CRLEntryObject.java b/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/provider/X509CRLEntryObject.java
deleted file mode 100644
index dd0a32c96..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/provider/X509CRLEntryObject.java
+++ /dev/null
@@ -1,293 +0,0 @@
-package org.spongycastle.jce.provider;
-
-import java.io.IOException;
-import java.math.BigInteger;
-import java.security.cert.CRLException;
-import java.security.cert.X509CRLEntry;
-import java.util.Date;
-import java.util.Enumeration;
-import java.util.HashSet;
-import java.util.Set;
-
-import org.spongycastle.asn1.ASN1Encoding;
-import org.spongycastle.asn1.ASN1InputStream;
-import org.spongycastle.asn1.ASN1ObjectIdentifier;
-import org.spongycastle.asn1.ASN1Enumerated;
-import org.spongycastle.asn1.util.ASN1Dump;
-import org.spongycastle.asn1.x500.X500Name;
-import org.spongycastle.asn1.x509.CRLReason;
-import org.spongycastle.asn1.x509.Extension;
-import org.spongycastle.asn1.x509.Extensions;
-import org.spongycastle.asn1.x509.GeneralName;
-import org.spongycastle.asn1.x509.GeneralNames;
-import org.spongycastle.asn1.x509.TBSCertList;
-import org.spongycastle.asn1.x509.X509Extension;
-import org.spongycastle.x509.extension.X509ExtensionUtil;
-import org.spongycastle.jce.X509Principal;
-
-/**
- * The following extensions are listed in RFC 2459 as relevant to CRL Entries
- *
- * ReasonCode Hode Instruction Code Invalidity Date Certificate Issuer
- * (critical)
- */
-public class X509CRLEntryObject extends X509CRLEntry
-{
- private TBSCertList.CRLEntry c;
-
- private X500Name certificateIssuer;
- private int hashValue;
- private boolean isHashValueSet;
-
- public X509CRLEntryObject(TBSCertList.CRLEntry c)
- {
- this.c = c;
- this.certificateIssuer = null;
- }
-
- /**
- * Constructor for CRLEntries of indirect CRLs. If isIndirect
- * is false
{@link #getCertificateIssuer()} will always
- * return null
, previousCertificateIssuer
is
- * ignored. If this isIndirect
is specified and this CRLEntry
- * has no certificate issuer CRL entry extension
- * previousCertificateIssuer
is returned by
- * {@link #getCertificateIssuer()}.
- *
- * @param c
- * TBSCertList.CRLEntry object.
- * @param isIndirect
- * true
if the corresponding CRL is a indirect
- * CRL.
- * @param previousCertificateIssuer
- * Certificate issuer of the previous CRLEntry.
- */
- public X509CRLEntryObject(
- TBSCertList.CRLEntry c,
- boolean isIndirect,
- X500Name previousCertificateIssuer)
- {
- this.c = c;
- this.certificateIssuer = loadCertificateIssuer(isIndirect, previousCertificateIssuer);
- }
-
- /**
- * Will return true if any extensions are present and marked as critical as
- * we currently don't handle any extensions!
- */
- public boolean hasUnsupportedCriticalExtension()
- {
- Set extns = getCriticalExtensionOIDs();
-
- return extns != null && !extns.isEmpty();
- }
-
- private X500Name loadCertificateIssuer(boolean isIndirect, X500Name previousCertificateIssuer)
- {
- if (!isIndirect)
- {
- return null;
- }
-
- byte[] ext = getExtensionValue(X509Extension.certificateIssuer.getId());
- if (ext == null)
- {
- return previousCertificateIssuer;
- }
-
- try
- {
- GeneralName[] names = GeneralNames.getInstance(
- X509ExtensionUtil.fromExtensionValue(ext)).getNames();
- for (int i = 0; i < names.length; i++)
- {
- if (names[i].getTagNo() == GeneralName.directoryName)
- {
- return X500Name.getInstance(names[i].getName());
- }
- }
- return null;
- }
- catch (IOException e)
- {
- return null;
- }
- }
-
- X509Principal getCertificateIssuer()
- {
- if (certificateIssuer == null)
- {
- return null;
- }
- try
- {
- return new X509Principal(certificateIssuer.getEncoded());
- }
- catch (Exception e)
- {
- throw new IllegalStateException(e.toString());
- }
- }
- private Set getExtensionOIDs(boolean critical)
- {
- Extensions extensions = c.getExtensions();
-
- if (extensions != null)
- {
- Set set = new HashSet();
- Enumeration e = extensions.oids();
-
- while (e.hasMoreElements())
- {
- ASN1ObjectIdentifier oid = (ASN1ObjectIdentifier) e.nextElement();
- Extension ext = extensions.getExtension(oid);
-
- if (critical == ext.isCritical())
- {
- set.add(oid.getId());
- }
- }
-
- return set;
- }
-
- return null;
- }
-
- public Set getCriticalExtensionOIDs()
- {
- return getExtensionOIDs(true);
- }
-
- public Set getNonCriticalExtensionOIDs()
- {
- return getExtensionOIDs(false);
- }
-
- public byte[] getExtensionValue(String oid)
- {
- Extensions exts = c.getExtensions();
-
- if (exts != null)
- {
- Extension ext = exts.getExtension(new ASN1ObjectIdentifier(oid));
-
- if (ext != null)
- {
- try
- {
- return ext.getExtnValue().getEncoded();
- }
- catch (Exception e)
- {
- throw new RuntimeException("error encoding " + e.toString());
- }
- }
- }
-
- return null;
- }
-
- /**
- * Cache the hashCode value - calculating it with the standard method.
- * @return calculated hashCode.
- */
- public int hashCode()
- {
- if (!isHashValueSet)
- {
- hashValue = super.hashCode();
- isHashValueSet = true;
- }
-
- return hashValue;
- }
-
- public byte[] getEncoded()
- throws CRLException
- {
- try
- {
- return c.getEncoded(ASN1Encoding.DER);
- }
- catch (IOException e)
- {
- throw new CRLException(e.toString());
- }
- }
-
- public BigInteger getSerialNumber()
- {
- return c.getUserCertificate().getValue();
- }
-
- public Date getRevocationDate()
- {
- return c.getRevocationDate().getDate();
- }
-
- public boolean hasExtensions()
- {
- return c.getExtensions() != null;
- }
-
- public String toString()
- {
- StringBuffer buf = new StringBuffer();
- String nl = System.getProperty("line.separator");
-
- buf.append(" userCertificate: ").append(this.getSerialNumber()).append(nl);
- buf.append(" revocationDate: ").append(this.getRevocationDate()).append(nl);
-
- Extensions extensions = c.getExtensions();
-
- if (extensions != null)
- {
- Enumeration e = extensions.oids();
- if (e.hasMoreElements())
- {
- buf.append(" crlEntryExtensions:").append(nl);
-
- while (e.hasMoreElements())
- {
- ASN1ObjectIdentifier oid = (ASN1ObjectIdentifier)e.nextElement();
- Extension ext = extensions.getExtension(oid);
- if (ext.getExtnValue() != null)
- {
- byte[] octs = ext.getExtnValue().getOctets();
- ASN1InputStream dIn = new ASN1InputStream(octs);
- buf.append(" critical(").append(ext.isCritical()).append(") ");
- try
- {
- if (oid.equals(X509Extension.reasonCode))
- {
- buf.append(CRLReason.getInstance(ASN1Enumerated.getInstance(dIn.readObject()))).append(nl);
- }
- else if (oid.equals(X509Extension.certificateIssuer))
- {
- buf.append("Certificate issuer: ").append(GeneralNames.getInstance(dIn.readObject())).append(nl);
- }
- else
- {
- buf.append(oid.getId());
- buf.append(" value = ").append(ASN1Dump.dumpAsString(dIn.readObject())).append(nl);
- }
- }
- catch (Exception ex)
- {
- buf.append(oid.getId());
- buf.append(" value = ").append("*****").append(nl);
- }
- }
- else
- {
- buf.append(nl);
- }
- }
- }
- }
-
- return buf.toString();
- }
-}
diff --git a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/provider/X509CRLObject.java b/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/provider/X509CRLObject.java
deleted file mode 100644
index 46f9dab5b..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/provider/X509CRLObject.java
+++ /dev/null
@@ -1,556 +0,0 @@
-package org.spongycastle.jce.provider;
-
-import java.io.IOException;
-import java.math.BigInteger;
-import java.security.InvalidKeyException;
-import java.security.NoSuchAlgorithmException;
-import java.security.NoSuchProviderException;
-import java.security.Principal;
-import java.security.PublicKey;
-import java.security.Signature;
-import java.security.SignatureException;
-import java.security.cert.CRLException;
-import java.security.cert.Certificate;
-import java.security.cert.CertificateEncodingException;
-import java.security.cert.X509CRL;
-import java.security.cert.X509CRLEntry;
-import java.security.cert.X509Certificate;
-import java.util.Collections;
-import java.util.Date;
-import java.util.Enumeration;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Set;
-
-import org.spongycastle.asn1.ASN1Encodable;
-import org.spongycastle.asn1.ASN1Encoding;
-import org.spongycastle.asn1.ASN1InputStream;
-import org.spongycastle.asn1.ASN1ObjectIdentifier;
-import org.spongycastle.asn1.ASN1Integer;
-import org.spongycastle.asn1.util.ASN1Dump;
-import org.spongycastle.asn1.x500.X500Name;
-import org.spongycastle.asn1.x509.CRLDistPoint;
-import org.spongycastle.asn1.x509.CRLNumber;
-import org.spongycastle.asn1.x509.CertificateList;
-import org.spongycastle.asn1.x509.Extension;
-import org.spongycastle.asn1.x509.Extensions;
-import org.spongycastle.asn1.x509.GeneralNames;
-import org.spongycastle.asn1.x509.IssuingDistributionPoint;
-import org.spongycastle.asn1.x509.TBSCertList;
-import org.spongycastle.jce.X509Principal;
-import org.spongycastle.jce.provider.RFC3280CertPathUtilities;
-import org.spongycastle.jce.provider.BouncyCastleProvider;
-import org.spongycastle.util.encoders.Hex;
-import org.spongycastle.x509.extension.X509ExtensionUtil;
-
-/**
- * The following extensions are listed in RFC 2459 as relevant to CRLs
- *
- * Authority Key Identifier
- * Issuer Alternative Name
- * CRL Number
- * Delta CRL Indicator (critical)
- * Issuing Distribution Point (critical)
- */
-public class X509CRLObject
- extends X509CRL
-{
- private CertificateList c;
- private String sigAlgName;
- private byte[] sigAlgParams;
- private boolean isIndirect;
-
- static boolean isIndirectCRL(X509CRL crl)
- throws CRLException
- {
- try
- {
- byte[] idp = crl.getExtensionValue(Extension.issuingDistributionPoint.getId());
- return idp != null
- && IssuingDistributionPoint.getInstance(X509ExtensionUtil.fromExtensionValue(idp)).isIndirectCRL();
- }
- catch (Exception e)
- {
- throw new ExtCRLException(
- "Exception reading IssuingDistributionPoint", e);
- }
- }
-
- public X509CRLObject(
- CertificateList c)
- throws CRLException
- {
- this.c = c;
-
- try
- {
- this.sigAlgName = X509SignatureUtil.getSignatureName(c.getSignatureAlgorithm());
-
- if (c.getSignatureAlgorithm().getParameters() != null)
- {
- this.sigAlgParams = ((ASN1Encodable)c.getSignatureAlgorithm().getParameters()).toASN1Primitive().getEncoded(ASN1Encoding.DER);
- }
- else
- {
- this.sigAlgParams = null;
- }
-
- this.isIndirect = isIndirectCRL(this);
- }
- catch (Exception e)
- {
- throw new CRLException("CRL contents invalid: " + e);
- }
- }
-
- /**
- * Will return true if any extensions are present and marked
- * as critical as we currently dont handle any extensions!
- */
- public boolean hasUnsupportedCriticalExtension()
- {
- Set extns = getCriticalExtensionOIDs();
-
- if (extns == null)
- {
- return false;
- }
-
- extns.remove(RFC3280CertPathUtilities.ISSUING_DISTRIBUTION_POINT);
- extns.remove(RFC3280CertPathUtilities.DELTA_CRL_INDICATOR);
-
- return !extns.isEmpty();
- }
-
- private Set getExtensionOIDs(boolean critical)
- {
- if (this.getVersion() == 2)
- {
- Extensions extensions = c.getTBSCertList().getExtensions();
-
- if (extensions != null)
- {
- Set set = new HashSet();
- Enumeration e = extensions.oids();
-
- while (e.hasMoreElements())
- {
- ASN1ObjectIdentifier oid = (ASN1ObjectIdentifier)e.nextElement();
- Extension ext = extensions.getExtension(oid);
-
- if (critical == ext.isCritical())
- {
- set.add(oid.getId());
- }
- }
-
- return set;
- }
- }
-
- return null;
- }
-
- public Set getCriticalExtensionOIDs()
- {
- return getExtensionOIDs(true);
- }
-
- public Set getNonCriticalExtensionOIDs()
- {
- return getExtensionOIDs(false);
- }
-
- public byte[] getExtensionValue(String oid)
- {
- Extensions exts = c.getTBSCertList().getExtensions();
-
- if (exts != null)
- {
- Extension ext = exts.getExtension(new ASN1ObjectIdentifier(oid));
-
- if (ext != null)
- {
- try
- {
- return ext.getExtnValue().getEncoded();
- }
- catch (Exception e)
- {
- throw new IllegalStateException("error parsing " + e.toString());
- }
- }
- }
-
- return null;
- }
-
- public byte[] getEncoded()
- throws CRLException
- {
- try
- {
- return c.getEncoded(ASN1Encoding.DER);
- }
- catch (IOException e)
- {
- throw new CRLException(e.toString());
- }
- }
-
- public void verify(PublicKey key)
- throws CRLException, NoSuchAlgorithmException,
- InvalidKeyException, NoSuchProviderException, SignatureException
- {
- verify(key, BouncyCastleProvider.PROVIDER_NAME);
- }
-
- public void verify(PublicKey key, String sigProvider)
- throws CRLException, NoSuchAlgorithmException,
- InvalidKeyException, NoSuchProviderException, SignatureException
- {
- if (!c.getSignatureAlgorithm().equals(c.getTBSCertList().getSignature()))
- {
- throw new CRLException("Signature algorithm on CertificateList does not match TBSCertList.");
- }
-
- Signature sig;
-
- if (sigProvider != null)
- {
- sig = Signature.getInstance(getSigAlgName(), sigProvider);
- }
- else
- {
- sig = Signature.getInstance(getSigAlgName());
- }
-
- sig.initVerify(key);
- sig.update(this.getTBSCertList());
-
- if (!sig.verify(this.getSignature()))
- {
- throw new SignatureException("CRL does not verify with supplied public key.");
- }
- }
-
- public int getVersion()
- {
- return c.getVersionNumber();
- }
-
- public Principal getIssuerDN()
- {
- return new X509Principal(X500Name.getInstance(c.getIssuer().toASN1Primitive()));
- }
-
- public Date getThisUpdate()
- {
- return c.getThisUpdate().getDate();
- }
-
- public Date getNextUpdate()
- {
- if (c.getNextUpdate() != null)
- {
- return c.getNextUpdate().getDate();
- }
-
- return null;
- }
-
- private Set loadCRLEntries()
- {
- Set entrySet = new HashSet();
- Enumeration certs = c.getRevokedCertificateEnumeration();
-
- X500Name previousCertificateIssuer = c.getIssuer();
- while (certs.hasMoreElements())
- {
- TBSCertList.CRLEntry entry = (TBSCertList.CRLEntry)certs.nextElement();
- X509CRLEntryObject crlEntry = new X509CRLEntryObject(entry, isIndirect, previousCertificateIssuer);
- entrySet.add(crlEntry);
- if (isIndirect && entry.hasExtensions())
- {
- Extension currentCaName = entry.getExtensions().getExtension(Extension.certificateIssuer);
-
- if (currentCaName != null)
- {
- previousCertificateIssuer = X500Name.getInstance(GeneralNames.getInstance(currentCaName.getParsedValue()).getNames()[0].getName());
- }
- }
- }
-
- return entrySet;
- }
-
- public X509CRLEntry getRevokedCertificate(BigInteger serialNumber)
- {
- Enumeration certs = c.getRevokedCertificateEnumeration();
-
- X500Name previousCertificateIssuer = c.getIssuer();
- while (certs.hasMoreElements())
- {
- TBSCertList.CRLEntry entry = (TBSCertList.CRLEntry)certs.nextElement();
-
- if (serialNumber.equals(entry.getUserCertificate().getValue()))
- {
- return new X509CRLEntryObject(entry, isIndirect, previousCertificateIssuer);
- }
-
- if (isIndirect && entry.hasExtensions())
- {
- Extension currentCaName = entry.getExtensions().getExtension(Extension.certificateIssuer);
-
- if (currentCaName != null)
- {
- previousCertificateIssuer = X500Name.getInstance(GeneralNames.getInstance(currentCaName.getParsedValue()).getNames()[0].getName());
- }
- }
- }
-
- return null;
- }
-
- public Set getRevokedCertificates()
- {
- Set entrySet = loadCRLEntries();
-
- if (!entrySet.isEmpty())
- {
- return Collections.unmodifiableSet(entrySet);
- }
-
- return null;
- }
-
- public byte[] getTBSCertList()
- throws CRLException
- {
- try
- {
- return c.getTBSCertList().getEncoded("DER");
- }
- catch (IOException e)
- {
- throw new CRLException(e.toString());
- }
- }
-
- public byte[] getSignature()
- {
- return c.getSignature().getBytes();
- }
-
- public String getSigAlgName()
- {
- return sigAlgName;
- }
-
- public String getSigAlgOID()
- {
- return c.getSignatureAlgorithm().getAlgorithm().getId();
- }
-
- public byte[] getSigAlgParams()
- {
- if (sigAlgParams != null)
- {
- byte[] tmp = new byte[sigAlgParams.length];
-
- System.arraycopy(sigAlgParams, 0, tmp, 0, tmp.length);
-
- return tmp;
- }
-
- return null;
- }
-
- /**
- * Returns a string representation of this CRL.
- *
- * @return a string representation of this CRL.
- */
- public String toString()
- {
- StringBuffer buf = new StringBuffer();
- String nl = System.getProperty("line.separator");
-
- buf.append(" Version: ").append(this.getVersion()).append(
- nl);
- buf.append(" IssuerDN: ").append(this.getIssuerDN())
- .append(nl);
- buf.append(" This update: ").append(this.getThisUpdate())
- .append(nl);
- buf.append(" Next update: ").append(this.getNextUpdate())
- .append(nl);
- buf.append(" Signature Algorithm: ").append(this.getSigAlgName())
- .append(nl);
-
- byte[] sig = this.getSignature();
-
- buf.append(" Signature: ").append(
- new String(Hex.encode(sig, 0, 20))).append(nl);
- for (int i = 20; i < sig.length; i += 20)
- {
- if (i < sig.length - 20)
- {
- buf.append(" ").append(
- new String(Hex.encode(sig, i, 20))).append(nl);
- }
- else
- {
- buf.append(" ").append(
- new String(Hex.encode(sig, i, sig.length - i))).append(nl);
- }
- }
-
- Extensions extensions = c.getTBSCertList().getExtensions();
-
- if (extensions != null)
- {
- Enumeration e = extensions.oids();
-
- if (e.hasMoreElements())
- {
- buf.append(" Extensions: ").append(nl);
- }
-
- while (e.hasMoreElements())
- {
- ASN1ObjectIdentifier oid = (ASN1ObjectIdentifier) e.nextElement();
- Extension ext = extensions.getExtension(oid);
-
- if (ext.getExtnValue() != null)
- {
- byte[] octs = ext.getExtnValue().getOctets();
- ASN1InputStream dIn = new ASN1InputStream(octs);
- buf.append(" critical(").append(
- ext.isCritical()).append(") ");
- try
- {
- if (oid.equals(Extension.cRLNumber))
- {
- buf.append(
- new CRLNumber(ASN1Integer.getInstance(
- dIn.readObject()).getPositiveValue()))
- .append(nl);
- }
- else if (oid.equals(Extension.deltaCRLIndicator))
- {
- buf.append(
- "Base CRL: "
- + new CRLNumber(ASN1Integer.getInstance(
- dIn.readObject()).getPositiveValue()))
- .append(nl);
- }
- else if (oid
- .equals(Extension.issuingDistributionPoint))
- {
- buf.append(
- IssuingDistributionPoint.getInstance(dIn.readObject())).append(nl);
- }
- else if (oid
- .equals(Extension.cRLDistributionPoints))
- {
- buf.append(
- CRLDistPoint.getInstance(dIn.readObject())).append(nl);
- }
- else if (oid.equals(Extension.freshestCRL))
- {
- buf.append(
- CRLDistPoint.getInstance(dIn.readObject())).append(nl);
- }
- else
- {
- buf.append(oid.getId());
- buf.append(" value = ").append(
- ASN1Dump.dumpAsString(dIn.readObject()))
- .append(nl);
- }
- }
- catch (Exception ex)
- {
- buf.append(oid.getId());
- buf.append(" value = ").append("*****").append(nl);
- }
- }
- else
- {
- buf.append(nl);
- }
- }
- }
- Set set = getRevokedCertificates();
- if (set != null)
- {
- Iterator it = set.iterator();
- while (it.hasNext())
- {
- buf.append(it.next());
- buf.append(nl);
- }
- }
- return buf.toString();
- }
-
- /**
- * Checks whether the given certificate is on this CRL.
- *
- * @param cert the certificate to check for.
- * @return true if the given certificate is on this CRL,
- * false otherwise.
- */
- public boolean isRevoked(Certificate cert)
- {
- if (!cert.getType().equals("X.509"))
- {
- throw new RuntimeException("X.509 CRL used with non X.509 Cert");
- }
-
- TBSCertList.CRLEntry[] certs = c.getRevokedCertificates();
-
- X500Name caName = c.getIssuer();
-
- if (certs != null)
- {
- BigInteger serial = ((X509Certificate)cert).getSerialNumber();
-
- for (int i = 0; i < certs.length; i++)
- {
- if (isIndirect && certs[i].hasExtensions())
- {
- Extension currentCaName = certs[i].getExtensions().getExtension(Extension.certificateIssuer);
-
- if (currentCaName != null)
- {
- caName = X500Name.getInstance(GeneralNames.getInstance(currentCaName.getParsedValue()).getNames()[0].getName());
- }
- }
-
- if (certs[i].getUserCertificate().getValue().equals(serial))
- {
- X500Name issuer;
-
- try
- {
- issuer = org.spongycastle.asn1.x509.Certificate.getInstance(cert.getEncoded()).getIssuer();
- }
- catch (CertificateEncodingException e)
- {
- throw new RuntimeException("Cannot process certificate");
- }
-
- if (!caName.equals(issuer))
- {
- return false;
- }
-
- return true;
- }
- }
- }
-
- return false;
- }
-}
diff --git a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/provider/X509CertificateObject.java b/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/provider/X509CertificateObject.java
deleted file mode 100644
index 74b9c6115..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/provider/X509CertificateObject.java
+++ /dev/null
@@ -1,858 +0,0 @@
-package org.spongycastle.jce.provider;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.math.BigInteger;
-import java.net.InetAddress;
-import java.net.UnknownHostException;
-import java.security.InvalidKeyException;
-import java.security.NoSuchAlgorithmException;
-import java.security.NoSuchProviderException;
-import java.security.Principal;
-import java.security.Provider;
-import java.security.PublicKey;
-import java.security.Security;
-import java.security.Signature;
-import java.security.SignatureException;
-import java.security.cert.Certificate;
-import java.security.cert.CertificateEncodingException;
-import java.security.cert.CertificateException;
-import java.security.cert.CertificateExpiredException;
-import java.security.cert.CertificateNotYetValidException;
-import java.security.cert.CertificateParsingException;
-import java.security.cert.X509Certificate;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Date;
-import java.util.Enumeration;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-import org.spongycastle.asn1.ASN1Encodable;
-import org.spongycastle.asn1.ASN1Encoding;
-import org.spongycastle.asn1.ASN1InputStream;
-import org.spongycastle.asn1.ASN1ObjectIdentifier;
-import org.spongycastle.asn1.ASN1OutputStream;
-import org.spongycastle.asn1.ASN1Primitive;
-import org.spongycastle.asn1.ASN1Sequence;
-import org.spongycastle.asn1.ASN1String;
-import org.spongycastle.asn1.DERBitString;
-import org.spongycastle.asn1.DERIA5String;
-import org.spongycastle.asn1.DERNull;
-import org.spongycastle.asn1.DEROctetString;
-import org.spongycastle.asn1.misc.MiscObjectIdentifiers;
-import org.spongycastle.asn1.misc.NetscapeCertType;
-import org.spongycastle.asn1.misc.NetscapeRevocationURL;
-import org.spongycastle.asn1.misc.VerisignCzagExtension;
-import org.spongycastle.asn1.util.ASN1Dump;
-import org.spongycastle.asn1.x500.X500Name;
-import org.spongycastle.asn1.x500.style.RFC4519Style;
-import org.spongycastle.asn1.x509.AlgorithmIdentifier;
-import org.spongycastle.asn1.x509.BasicConstraints;
-import org.spongycastle.asn1.x509.Extension;
-import org.spongycastle.asn1.x509.Extensions;
-import org.spongycastle.asn1.x509.GeneralName;
-import org.spongycastle.asn1.x509.KeyUsage;
-import org.spongycastle.jcajce.provider.asymmetric.util.PKCS12BagAttributeCarrierImpl;
-import org.spongycastle.jce.X509Principal;
-import org.spongycastle.jce.provider.RFC3280CertPathUtilities;
-import org.spongycastle.jce.provider.BouncyCastleProvider;
-import org.spongycastle.jce.interfaces.PKCS12BagAttributeCarrier;
-import org.spongycastle.util.Arrays;
-import org.spongycastle.util.Integers;
-import org.spongycastle.util.encoders.Hex;
-
-public class X509CertificateObject
- extends X509Certificate
- implements PKCS12BagAttributeCarrier
-{
- private org.spongycastle.asn1.x509.Certificate c;
- private BasicConstraints basicConstraints;
- private boolean[] keyUsage;
- private boolean hashValueSet;
- private int hashValue;
-
- private PKCS12BagAttributeCarrier attrCarrier = new PKCS12BagAttributeCarrierImpl();
-
- public X509CertificateObject(
- org.spongycastle.asn1.x509.Certificate c)
- throws CertificateParsingException
- {
- this.c = c;
-
- try
- {
- byte[] bytes = this.getExtensionBytes("2.5.29.19");
-
- if (bytes != null)
- {
- basicConstraints = BasicConstraints.getInstance(ASN1Primitive.fromByteArray(bytes));
- }
- }
- catch (Exception e)
- {
- throw new CertificateParsingException("cannot construct BasicConstraints: " + e);
- }
-
- try
- {
- byte[] bytes = this.getExtensionBytes("2.5.29.15");
- if (bytes != null)
- {
- DERBitString bits = DERBitString.getInstance(ASN1Primitive.fromByteArray(bytes));
-
- bytes = bits.getBytes();
- int length = (bytes.length * 8) - bits.getPadBits();
-
- keyUsage = new boolean[(length < 9) ? 9 : length];
-
- for (int i = 0; i != length; i++)
- {
- keyUsage[i] = (bytes[i / 8] & (0x80 >>> (i % 8))) != 0;
- }
- }
- else
- {
- keyUsage = null;
- }
- }
- catch (Exception e)
- {
- throw new CertificateParsingException("cannot construct KeyUsage: " + e);
- }
- }
-
- public void checkValidity()
- throws CertificateExpiredException, CertificateNotYetValidException
- {
- this.checkValidity(new Date());
- }
-
- public void checkValidity(
- Date date)
- throws CertificateExpiredException, CertificateNotYetValidException
- {
- if (date.getTime() > this.getNotAfter().getTime()) // for other VM compatibility
- {
- throw new CertificateExpiredException("certificate expired on " + c.getEndDate().getTime());
- }
-
- if (date.getTime() < this.getNotBefore().getTime())
- {
- throw new CertificateNotYetValidException("certificate not valid till " + c.getStartDate().getTime());
- }
- }
-
- public int getVersion()
- {
- return c.getVersionNumber();
- }
-
- public BigInteger getSerialNumber()
- {
- return c.getSerialNumber().getValue();
- }
-
- public Principal getIssuerDN()
- {
- try
- {
- return new X509Principal(X500Name.getInstance(c.getIssuer().getEncoded()));
- }
- catch (IOException e)
- {
- return null;
- }
- }
-
- public Principal getSubjectDN()
- {
- return new X509Principal(X500Name.getInstance(c.getSubject().toASN1Primitive()));
- }
-
- public Date getNotBefore()
- {
- return c.getStartDate().getDate();
- }
-
- public Date getNotAfter()
- {
- return c.getEndDate().getDate();
- }
-
- public byte[] getTBSCertificate()
- throws CertificateEncodingException
- {
- try
- {
- return c.getTBSCertificate().getEncoded(ASN1Encoding.DER);
- }
- catch (IOException e)
- {
- throw new CertificateEncodingException(e.toString());
- }
- }
-
- public byte[] getSignature()
- {
- return c.getSignature().getBytes();
- }
-
- /**
- * return a more "meaningful" representation for the signature algorithm used in
- * the certficate.
- */
- public String getSigAlgName()
- {
- Provider prov = Security.getProvider(BouncyCastleProvider.PROVIDER_NAME);
-
- if (prov != null)
- {
- String algName = prov.getProperty("Alg.Alias.Signature." + this.getSigAlgOID());
-
- if (algName != null)
- {
- return algName;
- }
- }
-
- Provider[] provs = Security.getProviders();
-
- //
- // search every provider looking for a real algorithm
- //
- for (int i = 0; i != provs.length; i++)
- {
- String algName = provs[i].getProperty("Alg.Alias.Signature." + this.getSigAlgOID());
- if (algName != null)
- {
- return algName;
- }
- }
-
- return this.getSigAlgOID();
- }
-
- /**
- * return the object identifier for the signature.
- */
- public String getSigAlgOID()
- {
- return c.getSignatureAlgorithm().getAlgorithm().getId();
- }
-
- /**
- * return the signature parameters, or null if there aren't any.
- */
- public byte[] getSigAlgParams()
- {
- if (c.getSignatureAlgorithm().getParameters() != null)
- {
- try
- {
- return c.getSignatureAlgorithm().getParameters().toASN1Primitive().getEncoded(ASN1Encoding.DER);
- }
- catch (IOException e)
- {
- return null;
- }
- }
- else
- {
- return null;
- }
- }
-
- public boolean[] getIssuerUniqueID()
- {
- DERBitString id = c.getTBSCertificate().getIssuerUniqueId();
-
- if (id != null)
- {
- byte[] bytes = id.getBytes();
- boolean[] boolId = new boolean[bytes.length * 8 - id.getPadBits()];
-
- for (int i = 0; i != boolId.length; i++)
- {
- boolId[i] = (bytes[i / 8] & (0x80 >>> (i % 8))) != 0;
- }
-
- return boolId;
- }
-
- return null;
- }
-
- public boolean[] getSubjectUniqueID()
- {
- DERBitString id = c.getTBSCertificate().getSubjectUniqueId();
-
- if (id != null)
- {
- byte[] bytes = id.getBytes();
- boolean[] boolId = new boolean[bytes.length * 8 - id.getPadBits()];
-
- for (int i = 0; i != boolId.length; i++)
- {
- boolId[i] = (bytes[i / 8] & (0x80 >>> (i % 8))) != 0;
- }
-
- return boolId;
- }
-
- return null;
- }
-
- public boolean[] getKeyUsage()
- {
- return keyUsage;
- }
-
- public List getExtendedKeyUsage()
- throws CertificateParsingException
- {
- byte[] bytes = this.getExtensionBytes("2.5.29.37");
-
- if (bytes != null)
- {
- try
- {
- ASN1InputStream dIn = new ASN1InputStream(bytes);
- ASN1Sequence seq = (ASN1Sequence)dIn.readObject();
- List list = new ArrayList();
-
- for (int i = 0; i != seq.size(); i++)
- {
- list.add(((ASN1ObjectIdentifier)seq.getObjectAt(i)).getId());
- }
-
- return Collections.unmodifiableList(list);
- }
- catch (Exception e)
- {
- throw new CertificateParsingException("error processing extended key usage extension");
- }
- }
-
- return null;
- }
-
- public int getBasicConstraints()
- {
- if (basicConstraints != null)
- {
- if (basicConstraints.isCA())
- {
- if (basicConstraints.getPathLenConstraint() == null)
- {
- return Integer.MAX_VALUE;
- }
- else
- {
- return basicConstraints.getPathLenConstraint().intValue();
- }
- }
- else
- {
- return -1;
- }
- }
-
- return -1;
- }
-
- public Collection getSubjectAlternativeNames()
- throws CertificateParsingException
- {
- return getAlternativeNames(getExtensionBytes(Extension.subjectAlternativeName.getId()));
- }
-
- public Collection getIssuerAlternativeNames()
- throws CertificateParsingException
- {
- return getAlternativeNames(getExtensionBytes(Extension.issuerAlternativeName.getId()));
- }
-
- public Set getCriticalExtensionOIDs()
- {
- if (this.getVersion() == 3)
- {
- Set set = new HashSet();
- Extensions extensions = c.getTBSCertificate().getExtensions();
-
- if (extensions != null)
- {
- Enumeration e = extensions.oids();
-
- while (e.hasMoreElements())
- {
- ASN1ObjectIdentifier oid = (ASN1ObjectIdentifier)e.nextElement();
- Extension ext = extensions.getExtension(oid);
-
- if (ext.isCritical())
- {
- set.add(oid.getId());
- }
- }
-
- return set;
- }
- }
-
- return null;
- }
-
- private byte[] getExtensionBytes(String oid)
- {
- Extensions exts = c.getTBSCertificate().getExtensions();
-
- if (exts != null)
- {
- Extension ext = exts.getExtension(new ASN1ObjectIdentifier(oid));
- if (ext != null)
- {
- return ext.getExtnValue().getOctets();
- }
- }
-
- return null;
- }
-
- public byte[] getExtensionValue(String oid)
- {
- Extensions exts = c.getTBSCertificate().getExtensions();
-
- if (exts != null)
- {
- Extension ext = exts.getExtension(new ASN1ObjectIdentifier(oid));
-
- if (ext != null)
- {
- try
- {
- return ext.getExtnValue().getEncoded();
- }
- catch (Exception e)
- {
- throw new IllegalStateException("error parsing " + e.toString());
- }
- }
- }
-
- return null;
- }
-
- public Set getNonCriticalExtensionOIDs()
- {
- if (this.getVersion() == 3)
- {
- Set set = new HashSet();
- Extensions extensions = c.getTBSCertificate().getExtensions();
-
- if (extensions != null)
- {
- Enumeration e = extensions.oids();
-
- while (e.hasMoreElements())
- {
- ASN1ObjectIdentifier oid = (ASN1ObjectIdentifier)e.nextElement();
- Extension ext = extensions.getExtension(oid);
-
- if (!ext.isCritical())
- {
- set.add(oid.getId());
- }
- }
-
- return set;
- }
- }
-
- return null;
- }
-
- public boolean hasUnsupportedCriticalExtension()
- {
- if (this.getVersion() == 3)
- {
- Extensions extensions = c.getTBSCertificate().getExtensions();
-
- if (extensions != null)
- {
- Enumeration e = extensions.oids();
-
- while (e.hasMoreElements())
- {
- ASN1ObjectIdentifier oid = (ASN1ObjectIdentifier)e.nextElement();
- String oidId = oid.getId();
-
- if (oidId.equals(RFC3280CertPathUtilities.KEY_USAGE)
- || oidId.equals(RFC3280CertPathUtilities.CERTIFICATE_POLICIES)
- || oidId.equals(RFC3280CertPathUtilities.POLICY_MAPPINGS)
- || oidId.equals(RFC3280CertPathUtilities.INHIBIT_ANY_POLICY)
- || oidId.equals(RFC3280CertPathUtilities.CRL_DISTRIBUTION_POINTS)
- || oidId.equals(RFC3280CertPathUtilities.ISSUING_DISTRIBUTION_POINT)
- || oidId.equals(RFC3280CertPathUtilities.DELTA_CRL_INDICATOR)
- || oidId.equals(RFC3280CertPathUtilities.POLICY_CONSTRAINTS)
- || oidId.equals(RFC3280CertPathUtilities.BASIC_CONSTRAINTS)
- || oidId.equals(RFC3280CertPathUtilities.SUBJECT_ALTERNATIVE_NAME)
- || oidId.equals(RFC3280CertPathUtilities.NAME_CONSTRAINTS))
- {
- continue;
- }
-
- Extension ext = extensions.getExtension(oid);
-
- if (ext.isCritical())
- {
- return true;
- }
- }
- }
- }
-
- return false;
- }
-
- public PublicKey getPublicKey()
- {
- try
- {
- return BouncyCastleProvider.getPublicKey(c.getSubjectPublicKeyInfo());
- }
- catch (IOException e)
- {
- return null; // should never happen...
- }
- }
-
- public byte[] getEncoded()
- throws CertificateEncodingException
- {
- try
- {
- return c.getEncoded(ASN1Encoding.DER);
- }
- catch (IOException e)
- {
- throw new CertificateEncodingException(e.toString());
- }
- }
-
- public boolean equals(
- Object o)
- {
- if (o == this)
- {
- return true;
- }
-
- if (!(o instanceof Certificate))
- {
- return false;
- }
-
- Certificate other = (Certificate)o;
-
- try
- {
- byte[] b1 = this.getEncoded();
- byte[] b2 = other.getEncoded();
-
- return Arrays.areEqual(b1, b2);
- }
- catch (CertificateEncodingException e)
- {
- return false;
- }
- }
-
- public synchronized int hashCode()
- {
- if (!hashValueSet)
- {
- hashValue = calculateHashCode();
- hashValueSet = true;
- }
-
- return hashValue;
- }
-
- private int calculateHashCode()
- {
- try
- {
- int hashCode = 0;
- byte[] certData = this.getEncoded();
- for (int i = 1; i < certData.length; i++)
- {
- hashCode += certData[i] * i;
- }
- return hashCode;
- }
- catch (CertificateEncodingException e)
- {
- return 0;
- }
- }
-
- public void setBagAttribute(
- ASN1ObjectIdentifier oid,
- ASN1Encodable attribute)
- {
- attrCarrier.setBagAttribute(oid, attribute);
- }
-
- public ASN1Encodable getBagAttribute(
- ASN1ObjectIdentifier oid)
- {
- return attrCarrier.getBagAttribute(oid);
- }
-
- public Enumeration getBagAttributeKeys()
- {
- return attrCarrier.getBagAttributeKeys();
- }
-
- public String toString()
- {
- StringBuffer buf = new StringBuffer();
- String nl = System.getProperty("line.separator");
-
- buf.append(" [0] Version: ").append(this.getVersion()).append(nl);
- buf.append(" SerialNumber: ").append(this.getSerialNumber()).append(nl);
- buf.append(" IssuerDN: ").append(this.getIssuerDN()).append(nl);
- buf.append(" Start Date: ").append(this.getNotBefore()).append(nl);
- buf.append(" Final Date: ").append(this.getNotAfter()).append(nl);
- buf.append(" SubjectDN: ").append(this.getSubjectDN()).append(nl);
- buf.append(" Public Key: ").append(this.getPublicKey()).append(nl);
- buf.append(" Signature Algorithm: ").append(this.getSigAlgName()).append(nl);
-
- byte[] sig = this.getSignature();
-
- buf.append(" Signature: ").append(new String(Hex.encode(sig, 0, 20))).append(nl);
- for (int i = 20; i < sig.length; i += 20)
- {
- if (i < sig.length - 20)
- {
- buf.append(" ").append(new String(Hex.encode(sig, i, 20))).append(nl);
- }
- else
- {
- buf.append(" ").append(new String(Hex.encode(sig, i, sig.length - i))).append(nl);
- }
- }
-
- Extensions extensions = c.getTBSCertificate().getExtensions();
-
- if (extensions != null)
- {
- Enumeration e = extensions.oids();
-
- if (e.hasMoreElements())
- {
- buf.append(" Extensions: \n");
- }
-
- while (e.hasMoreElements())
- {
- ASN1ObjectIdentifier oid = (ASN1ObjectIdentifier)e.nextElement();
- Extension ext = extensions.getExtension(oid);
-
- if (ext.getExtnValue() != null)
- {
- byte[] octs = ext.getExtnValue().getOctets();
- ASN1InputStream dIn = new ASN1InputStream(octs);
- buf.append(" critical(").append(ext.isCritical()).append(") ");
- try
- {
- if (oid.equals(Extension.basicConstraints))
- {
- buf.append(BasicConstraints.getInstance(dIn.readObject())).append(nl);
- }
- else if (oid.equals(Extension.keyUsage))
- {
- buf.append(KeyUsage.getInstance(dIn.readObject())).append(nl);
- }
- else if (oid.equals(MiscObjectIdentifiers.netscapeCertType))
- {
- buf.append(new NetscapeCertType((DERBitString)dIn.readObject())).append(nl);
- }
- else if (oid.equals(MiscObjectIdentifiers.netscapeRevocationURL))
- {
- buf.append(new NetscapeRevocationURL((DERIA5String)dIn.readObject())).append(nl);
- }
- else if (oid.equals(MiscObjectIdentifiers.verisignCzagExtension))
- {
- buf.append(new VerisignCzagExtension((DERIA5String)dIn.readObject())).append(nl);
- }
- else
- {
- buf.append(oid.getId());
- buf.append(" value = ").append(ASN1Dump.dumpAsString(dIn.readObject())).append(nl);
- //buf.append(" value = ").append("*****").append(nl);
- }
- }
- catch (Exception ex)
- {
- buf.append(oid.getId());
- // buf.append(" value = ").append(new String(Hex.encode(ext.getExtnValue().getOctets()))).append(nl);
- buf.append(" value = ").append("*****").append(nl);
- }
- }
- else
- {
- buf.append(nl);
- }
- }
- }
-
- return buf.toString();
- }
-
- public final void verify(
- PublicKey key)
- throws CertificateException, NoSuchAlgorithmException,
- InvalidKeyException, NoSuchProviderException, SignatureException
- {
- Signature signature;
- String sigName = X509SignatureUtil.getSignatureName(c.getSignatureAlgorithm());
-
- try
- {
- signature = Signature.getInstance(sigName, BouncyCastleProvider.PROVIDER_NAME);
- }
- catch (Exception e)
- {
- signature = Signature.getInstance(sigName);
- }
-
- checkSignature(key, signature);
- }
-
- public final void verify(
- PublicKey key,
- String sigProvider)
- throws CertificateException, NoSuchAlgorithmException,
- InvalidKeyException, NoSuchProviderException, SignatureException
- {
- String sigName = X509SignatureUtil.getSignatureName(c.getSignatureAlgorithm());
- Signature signature = Signature.getInstance(sigName, sigProvider);
-
- checkSignature(key, signature);
- }
-
- private void checkSignature(
- PublicKey key,
- Signature signature)
- throws CertificateException, NoSuchAlgorithmException,
- SignatureException, InvalidKeyException
- {
- if (!isAlgIdEqual(c.getSignatureAlgorithm(), c.getTBSCertificate().getSignature()))
- {
- throw new CertificateException("signature algorithm in TBS cert not same as outer cert");
- }
-
- ASN1Encodable params = c.getSignatureAlgorithm().getParameters();
-
- // TODO This should go after the initVerify?
- X509SignatureUtil.setSignatureParameters(signature, params);
-
- signature.initVerify(key);
-
- signature.update(this.getTBSCertificate());
-
- if (!signature.verify(this.getSignature()))
- {
- throw new SignatureException("certificate does not verify with supplied key");
- }
- }
-
- private boolean isAlgIdEqual(AlgorithmIdentifier id1, AlgorithmIdentifier id2)
- {
- if (!id1.getAlgorithm().equals(id2.getAlgorithm()))
- {
- return false;
- }
-
- if (id1.getParameters() == null)
- {
- if (id2.getParameters() != null && !id2.getParameters().equals(DERNull.INSTANCE))
- {
- return false;
- }
-
- return true;
- }
-
- if (id2.getParameters() == null)
- {
- if (id1.getParameters() != null && !id1.getParameters().equals(DERNull.INSTANCE))
- {
- return false;
- }
-
- return true;
- }
-
- return id1.getParameters().equals(id2.getParameters());
- }
-
- private static Collection getAlternativeNames(byte[] extVal)
- throws CertificateParsingException
- {
- if (extVal == null)
- {
- return null;
- }
- try
- {
- Collection temp = new ArrayList();
- Enumeration it = ASN1Sequence.getInstance(extVal).getObjects();
- while (it.hasMoreElements())
- {
- GeneralName genName = GeneralName.getInstance(it.nextElement());
- List list = new ArrayList();
- list.add(Integers.valueOf(genName.getTagNo()));
- switch (genName.getTagNo())
- {
- case GeneralName.ediPartyName:
- case GeneralName.x400Address:
- case GeneralName.otherName:
- list.add(genName.getEncoded());
- break;
- case GeneralName.directoryName:
- list.add(X500Name.getInstance(RFC4519Style.INSTANCE, genName.getName()).toString());
- break;
- case GeneralName.dNSName:
- case GeneralName.rfc822Name:
- case GeneralName.uniformResourceIdentifier:
- list.add(((ASN1String)genName.getName()).getString());
- break;
- case GeneralName.registeredID:
- list.add(ASN1ObjectIdentifier.getInstance(genName.getName()).getId());
- break;
- case GeneralName.iPAddress:
- byte[] addrBytes = DEROctetString.getInstance(genName.getName()).getOctets();
- list.add(addrBytes);
- break;
- default:
- throw new IOException("Bad tag number: " + genName.getTagNo());
- }
-
- temp.add(list);
- }
- if (temp.size() == 0)
- {
- return null;
- }
- return Collections.unmodifiableCollection(temp);
- }
- catch (Exception e)
- {
- throw new CertificateParsingException(e.getMessage());
- }
- }
-}
diff --git a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/spec/PSSParameterSpec.java b/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/spec/PSSParameterSpec.java
deleted file mode 100644
index 0711e29c8..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/jce/spec/PSSParameterSpec.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package org.spongycastle.jce.spec;
-
-/**
- * This class specifies a parameter spec for RSA PSS encoding scheme,
- * as defined in the PKCS#1 v2.1.
- *
- * @see java.security.spec.AlgorithmParameterSpec
- * @see java.security.Signature
- */
-public class PSSParameterSpec
- extends Object
- implements java.security.spec.AlgorithmParameterSpec
-{
- private int saltLen;
-
- /**
- * Creates a new PSSParameterSpec given the salt length as defined
- * in PKCS#1.
- *
- * @param saltLen - the length of salt in bits to be used in PKCS#1
- * PSS encoding.
- * @throws IllegalArgumentException - if saltLen is less than 0.
- */
- public PSSParameterSpec(int saltLen)
- {
- if (saltLen < 0)
- {
- throw new IllegalArgumentException("Salt length must be >= 0");
- }
-
- this.saltLen = saltLen;
- }
-
- /**
- * Returns the salt length in bits.
- *
- * @returns the salt length.
- */
- public int getSaltLength()
- {
- return saltLen;
- }
-}
-
diff --git a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/x509/AttributeCertificateHolder.java b/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/x509/AttributeCertificateHolder.java
deleted file mode 100644
index 5b161b4de..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/x509/AttributeCertificateHolder.java
+++ /dev/null
@@ -1,406 +0,0 @@
-package org.spongycastle.x509;
-
-import java.io.IOException;
-import java.math.BigInteger;
-import java.security.MessageDigest;
-import java.security.Principal;
-import java.security.cert.Certificate;
-import java.security.cert.CertificateEncodingException;
-import java.security.cert.CertificateParsingException;
-import java.security.cert.X509Certificate;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.spongycastle.asn1.ASN1Encodable;
-import org.spongycastle.asn1.ASN1Integer;
-import org.spongycastle.asn1.ASN1Sequence;
-import org.spongycastle.asn1.ASN1ObjectIdentifier;
-import org.spongycastle.asn1.x509.AlgorithmIdentifier;
-import org.spongycastle.asn1.x509.GeneralName;
-import org.spongycastle.asn1.x509.GeneralNames;
-import org.spongycastle.asn1.x509.Holder;
-import org.spongycastle.asn1.x509.IssuerSerial;
-import org.spongycastle.asn1.x509.ObjectDigestInfo;
-import org.spongycastle.jce.PrincipalUtil;
-import org.spongycastle.jce.X509Principal;
-import org.spongycastle.jce.cert.CertSelector;
-import org.spongycastle.util.Arrays;
-import org.spongycastle.util.Selector;
-
-/**
- * The Holder object.
- *
- * - * Holder ::= SEQUENCE { - * baseCertificateID [0] IssuerSerial OPTIONAL, - * -- the issuer and serial number of - * -- the holder's Public Key Certificate - * entityName [1] GeneralNames OPTIONAL, - * -- the name of the claimant or role - * objectDigestInfo [2] ObjectDigestInfo OPTIONAL - * -- used to directly authenticate the holder, - * -- for example, an executable - * } - *- * @deprecated use org.spongycastle.cert.AttributeCertificateHolder - */ -public class AttributeCertificateHolder - implements CertSelector, Selector -{ - final Holder holder; - - AttributeCertificateHolder(ASN1Sequence seq) - { - holder = Holder.getInstance(seq); - } - - public AttributeCertificateHolder(X509Principal issuerName, - BigInteger serialNumber) - { - holder = new org.spongycastle.asn1.x509.Holder(new IssuerSerial( - new GeneralNames(new GeneralName(issuerName)), - new ASN1Integer(serialNumber))); - } - - public AttributeCertificateHolder(X509Certificate cert) - throws CertificateParsingException - { - X509Principal name; - - try - { - name = PrincipalUtil.getIssuerX509Principal(cert); - } - catch (Exception e) - { - throw new CertificateParsingException(e.getMessage()); - } - - holder = new Holder(new IssuerSerial(generateGeneralNames(name), - new ASN1Integer(cert.getSerialNumber()))); - } - - public AttributeCertificateHolder(X509Principal principal) - { - holder = new Holder(generateGeneralNames(principal)); - } - - /** - * Constructs a holder for v2 attribute certificates with a hash value for - * some type of object. - *
- * digestedObjectType
can be one of the following:
- *
otherObjectTypeID
must not be empty.
- *
- * This cannot be used if a v1 attribute certificate is used.
- *
- * @param digestedObjectType The digest object type.
- * @param digestAlgorithm The algorithm identifier for the hash.
- * @param otherObjectTypeID The object type ID if
- * digestedObjectType
is
- * otherObjectDigest
.
- * @param objectDigest The hash value.
- */
- public AttributeCertificateHolder(int digestedObjectType,
- String digestAlgorithm, String otherObjectTypeID, byte[] objectDigest)
- {
- holder = new Holder(new ObjectDigestInfo(digestedObjectType,
- new ASN1ObjectIdentifier(otherObjectTypeID), new AlgorithmIdentifier(digestAlgorithm), Arrays
- .clone(objectDigest)));
- }
-
- /**
- * Returns the digest object type if an object digest info is used.
- *
- *
otherObjectTypeID
must not be empty.
- * null
if no object
- * digest info is set.
- */
- public String getDigestAlgorithm()
- {
- if (holder.getObjectDigestInfo() != null)
- {
- return holder.getObjectDigestInfo().getDigestAlgorithm().getObjectId()
- .getId();
- }
- return null;
- }
-
- /**
- * Returns the hash if an object digest info is used.
- *
- * @return The hash or null
if no object digest info is set.
- */
- public byte[] getObjectDigest()
- {
- if (holder.getObjectDigestInfo() != null)
- {
- return holder.getObjectDigestInfo().getObjectDigest().getBytes();
- }
- return null;
- }
-
- /**
- * Returns the digest algorithm ID if an object digest info is used.
- *
- * @return The digest algorithm ID or null
if no object
- * digest info is set.
- */
- public String getOtherObjectTypeID()
- {
- if (holder.getObjectDigestInfo() != null)
- {
- holder.getObjectDigestInfo().getOtherObjectTypeID().getId();
- }
- return null;
- }
-
- private GeneralNames generateGeneralNames(X509Principal principal)
- {
- return new GeneralNames(new GeneralName(principal));
- }
-
- private boolean matchesDN(X509Principal subject, GeneralNames targets)
- {
- GeneralName[] names = targets.getNames();
-
- for (int i = 0; i != names.length; i++)
- {
- GeneralName gn = names[i];
-
- if (gn.getTagNo() == GeneralName.directoryName)
- {
- try
- {
- if (new X509Principal(((ASN1Encodable)gn.getName()).toASN1Primitive()
- .getEncoded()).equals(subject))
- {
- return true;
- }
- }
- catch (IOException e)
- {
- }
- }
- }
-
- return false;
- }
-
- private Object[] getNames(GeneralName[] names)
- {
- List l = new ArrayList(names.length);
-
- for (int i = 0; i != names.length; i++)
- {
- if (names[i].getTagNo() == GeneralName.directoryName)
- {
- try
- {
- l.add(new X509Principal(
- ((ASN1Encodable)names[i].getName()).toASN1Primitive().getEncoded()));
- }
- catch (IOException e)
- {
- throw new RuntimeException("badly formed Name object");
- }
- }
- }
-
- return l.toArray(new Object[l.size()]);
- }
-
- private Principal[] getPrincipals(GeneralNames names)
- {
- Object[] p = this.getNames(names.getNames());
- List l = new ArrayList();
-
- for (int i = 0; i != p.length; i++)
- {
- if (p[i] instanceof Principal)
- {
- l.add(p[i]);
- }
- }
-
- return (Principal[])l.toArray(new Principal[l.size()]);
- }
-
- /**
- * Return any principal objects inside the attribute certificate holder
- * entity names field.
- *
- * @return an array of Principal objects (usually X509Principal), null if no
- * entity names field is set.
- */
- public Principal[] getEntityNames()
- {
- if (holder.getEntityName() != null)
- {
- return getPrincipals(holder.getEntityName());
- }
-
- return null;
- }
-
- /**
- * Return the principals associated with the issuer attached to this holder
- *
- * @return an array of principals, null if no BaseCertificateID is set.
- */
- public Principal[] getIssuer()
- {
- if (holder.getBaseCertificateID() != null)
- {
- return getPrincipals(holder.getBaseCertificateID().getIssuer());
- }
-
- return null;
- }
-
- /**
- * Return the serial number associated with the issuer attached to this
- * holder.
- *
- * @return the certificate serial number, null if no BaseCertificateID is
- * set.
- */
- public BigInteger getSerialNumber()
- {
- if (holder.getBaseCertificateID() != null)
- {
- return holder.getBaseCertificateID().getSerial().getValue();
- }
-
- return null;
- }
-
- public Object clone()
- {
- return new AttributeCertificateHolder((ASN1Sequence)holder
- .toASN1Object());
- }
-
- public boolean match(Certificate cert)
- {
- if (!(cert instanceof X509Certificate))
- {
- return false;
- }
-
- X509Certificate x509Cert = (X509Certificate)cert;
-
- try
- {
- if (holder.getBaseCertificateID() != null)
- {
- return holder.getBaseCertificateID().getSerial().getValue().equals(x509Cert.getSerialNumber())
- && matchesDN(PrincipalUtil.getIssuerX509Principal(x509Cert), holder.getBaseCertificateID().getIssuer());
- }
-
- if (holder.getEntityName() != null)
- {
- if (matchesDN(PrincipalUtil.getSubjectX509Principal(x509Cert),
- holder.getEntityName()))
- {
- return true;
- }
- }
- if (holder.getObjectDigestInfo() != null)
- {
- MessageDigest md = null;
- try
- {
- md = MessageDigest.getInstance(getDigestAlgorithm(), "SC");
-
- }
- catch (Exception e)
- {
- return false;
- }
- switch (getDigestedObjectType())
- {
- case ObjectDigestInfo.publicKey:
- // TODO: DSA Dss-parms
- md.update(cert.getPublicKey().getEncoded());
- break;
- case ObjectDigestInfo.publicKeyCert:
- md.update(cert.getEncoded());
- break;
- }
- if (!Arrays.areEqual(md.digest(), getObjectDigest()))
- {
- return false;
- }
- }
- }
- catch (CertificateEncodingException e)
- {
- return false;
- }
-
- return false;
- }
-
- public boolean equals(Object obj)
- {
- if (obj == this)
- {
- return true;
- }
-
- if (!(obj instanceof AttributeCertificateHolder))
- {
- return false;
- }
-
- AttributeCertificateHolder other = (AttributeCertificateHolder)obj;
-
- return this.holder.equals(other.holder);
- }
-
- public int hashCode()
- {
- return this.holder.hashCode();
- }
-
- public boolean match(Object obj)
- {
- if (!(obj instanceof X509Certificate))
- {
- return false;
- }
-
- return match((Certificate)obj);
- }
-}
diff --git a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/x509/AttributeCertificateIssuer.java b/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/x509/AttributeCertificateIssuer.java
deleted file mode 100644
index 44512802c..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/x509/AttributeCertificateIssuer.java
+++ /dev/null
@@ -1,211 +0,0 @@
-package org.spongycastle.x509;
-
-import java.io.IOException;
-import java.security.Principal;
-import java.security.cert.Certificate;
-import java.security.cert.CertificateEncodingException;
-import java.security.cert.X509Certificate;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.spongycastle.asn1.ASN1Encodable;
-import org.spongycastle.asn1.x509.AttCertIssuer;
-import org.spongycastle.asn1.x509.GeneralName;
-import org.spongycastle.asn1.x509.GeneralNames;
-import org.spongycastle.asn1.x509.V2Form;
-import org.spongycastle.jce.PrincipalUtil;
-import org.spongycastle.jce.X509Principal;
-import org.spongycastle.jce.cert.CertSelector;
-import org.spongycastle.util.Selector;
-
-/**
- * Carrying class for an attribute certificate issuer.
- */
-public class AttributeCertificateIssuer
- implements CertSelector, Selector
-{
- final ASN1Encodable form;
-
- /**
- * @param issuer
- */
- AttributeCertificateIssuer(
- AttCertIssuer issuer)
- {
- form = issuer.getIssuer();
- }
-
- public AttributeCertificateIssuer(
- X509Principal principal)
- {
- form = new V2Form(new GeneralNames(new GeneralName(principal)));
- }
-
- private Object[] getNames()
- {
- GeneralNames name;
-
- if (form instanceof V2Form)
- {
- name = ((V2Form)form).getIssuerName();
- }
- else
- {
- name = (GeneralNames)form;
- }
-
- GeneralName[] names = name.getNames();
-
- List l = new ArrayList(names.length);
-
- for (int i = 0; i != names.length; i++)
- {
- if (names[i].getTagNo() == GeneralName.directoryName)
- {
- try
- {
- l.add(new X509Principal(((ASN1Encodable)names[i].getName()).toASN1Primitive().getEncoded()));
- }
- catch (IOException e)
- {
- throw new RuntimeException("badly formed Name object");
- }
- }
- }
-
- return l.toArray(new Object[l.size()]);
- }
-
- /**
- * Return any principal objects inside the attribute certificate issuer object.
- *
- * @return an array of Principal objects (usually X509Principal)
- */
- public Principal[] getPrincipals()
- {
- Object[] p = this.getNames();
- List l = new ArrayList();
-
- for (int i = 0; i != p.length; i++)
- {
- if (p[i] instanceof Principal)
- {
- l.add(p[i]);
- }
- }
-
- return (Principal[])l.toArray(new Principal[l.size()]);
- }
-
- private boolean matchesDN(X509Principal subject, GeneralNames targets)
- {
- GeneralName[] names = targets.getNames();
-
- for (int i = 0; i != names.length; i++)
- {
- GeneralName gn = names[i];
-
- if (gn.getTagNo() == GeneralName.directoryName)
- {
- try
- {
- if (new X509Principal(((ASN1Encodable)gn.getName()).toASN1Primitive().getEncoded()).equals(subject))
- {
- return true;
- }
- }
- catch (IOException e)
- {
- }
- }
- }
-
- return false;
- }
-
- /* (non-Javadoc)
- * @see java.security.cert.CertSelector#clone()
- */
- public Object clone()
- {
- return new AttributeCertificateIssuer(AttCertIssuer.getInstance(form));
- }
-
- /* (non-Javadoc)
- * @see java.security.cert.CertSelector#match(java.security.cert.Certificate)
- */
- public boolean match(Certificate cert)
- {
- if (!(cert instanceof X509Certificate))
- {
- return false;
- }
-
- X509Certificate x509Cert = (X509Certificate)cert;
-
- try
- {
- if (form instanceof V2Form)
- {
- V2Form issuer = (V2Form)form;
- if (issuer.getBaseCertificateID() != null)
- {
- return issuer.getBaseCertificateID().getSerial().getValue().equals(x509Cert.getSerialNumber())
- && matchesDN(PrincipalUtil.getIssuerX509Principal(x509Cert), issuer.getBaseCertificateID().getIssuer());
- }
-
- GeneralNames name = issuer.getIssuerName();
- if (matchesDN(PrincipalUtil.getSubjectX509Principal(x509Cert), name))
- {
- return true;
- }
- }
- else
- {
- GeneralNames name = (GeneralNames)form;
- if (matchesDN(PrincipalUtil.getSubjectX509Principal(x509Cert), name))
- {
- return true;
- }
- }
- }
- catch (CertificateEncodingException e)
- {
- return false;
- }
-
- return false;
- }
-
- public boolean equals(Object obj)
- {
- if (obj == this)
- {
- return true;
- }
-
- if (!(obj instanceof AttributeCertificateIssuer))
- {
- return false;
- }
-
- AttributeCertificateIssuer other = (AttributeCertificateIssuer)obj;
-
- return this.form.equals(other.form);
- }
-
- public int hashCode()
- {
- return this.form.hashCode();
- }
-
- public boolean match(Object obj)
- {
- if (!(obj instanceof X509Certificate))
- {
- return false;
- }
-
- return match((Certificate)obj);
- }
-}
diff --git a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/x509/ExtendedPKIXBuilderParameters.java b/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/x509/ExtendedPKIXBuilderParameters.java
deleted file mode 100644
index 55d80de90..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/x509/ExtendedPKIXBuilderParameters.java
+++ /dev/null
@@ -1,210 +0,0 @@
-package org.spongycastle.x509;
-
-import org.spongycastle.util.Selector;
-
-import java.security.InvalidAlgorithmParameterException;
-import java.security.InvalidParameterException;
-import org.spongycastle.jce.cert.PKIXBuilderParameters;
-import org.spongycastle.jce.cert.PKIXParameters;
-import org.spongycastle.jce.cert.TrustAnchor;
-import org.spongycastle.jce.cert.X509CertSelector;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Set;
-
-/**
- * This class contains extended parameters for PKIX certification path builders.
- *
- * @see java.security.cert.PKIXBuilderParameters
- * @see org.spongycastle.jce.provider.PKIXCertPathBuilderSpi
- */
-public class ExtendedPKIXBuilderParameters extends ExtendedPKIXParameters
-{
-
- private int maxPathLength = 5;
-
- private Set excludedCerts = Collections.EMPTY_SET;
-
- /**
- * Excluded certificates are not used for building a certification path.
- *
- * The returned set is immutable.
- *
- * @return Returns the excluded certificates.
- */
- public Set getExcludedCerts()
- {
- return Collections.unmodifiableSet(excludedCerts);
- }
-
- /**
- * Sets the excluded certificates which are not used for building a
- * certification path. If the Set
is null
an
- * empty set is assumed.
- *
- * The given set is cloned to protect it against subsequent modifications.
- *
- * @param excludedCerts The excluded certificates to set.
- */
- public void setExcludedCerts(Set excludedCerts)
- {
- if (excludedCerts == null)
- {
- excludedCerts = Collections.EMPTY_SET;
- }
- else
- {
- this.excludedCerts = new HashSet(excludedCerts);
- }
- }
-
- /**
- * Creates an instance of PKIXBuilderParameters
with the
- * specified Set
of most-trusted CAs. Each element of the set
- * is a {@link TrustAnchor TrustAnchor}.
- *
- *
- * Note that the Set
is copied to protect against subsequent
- * modifications.
- *
- * @param trustAnchors a Set
of TrustAnchor
s
- * @param targetConstraints a Selector
specifying the
- * constraints on the target certificate or attribute
- * certificate.
- * @throws InvalidAlgorithmParameterException if trustAnchors
- * is empty.
- * @throws NullPointerException if trustAnchors
is
- * null
- * @throws ClassCastException if any of the elements of
- * trustAnchors
is not of type
- * java.security.cert.TrustAnchor
- */
- public ExtendedPKIXBuilderParameters(Set trustAnchors,
- Selector targetConstraints)
- throws InvalidAlgorithmParameterException
- {
- super(trustAnchors);
- setTargetConstraints(targetConstraints);
- }
-
- /**
- * Sets the maximum number of intermediate non-self-issued certificates in a
- * certification path. The PKIX CertPathBuilder
must not
- * build paths longer then this length.
- *
- * A value of 0 implies that the path can only contain a single certificate. - * A value of -1 does not limit the length. The default length is 5. - * - *
- *
- * The basic constraints extension of a CA certificate overrides this value
- * if smaller.
- *
- * @param maxPathLength the maximum number of non-self-issued intermediate
- * certificates in the certification path
- * @throws InvalidParameterException if maxPathLength
is set
- * to a value less than -1
- *
- * @see org.spongycastle.jce.provider.PKIXCertPathBuilderSpi
- * @see #getMaxPathLength
- */
- public void setMaxPathLength(int maxPathLength)
- {
- if (maxPathLength < -1)
- {
- throw new InvalidParameterException("The maximum path "
- + "length parameter can not be less than -1.");
- }
- this.maxPathLength = maxPathLength;
- }
-
- /**
- * Returns the value of the maximum number of intermediate non-self-issued
- * certificates in the certification path.
- *
- * @return the maximum number of non-self-issued intermediate certificates
- * in the certification path, or -1 if no limit exists.
- *
- * @see #setMaxPathLength(int)
- */
- public int getMaxPathLength()
- {
- return maxPathLength;
- }
-
- /**
- * Can alse handle ExtendedPKIXBuilderParameters
and
- * PKIXBuilderParameters
.
- *
- * @param params Parameters to set.
- * @see org.spongycastle.x509.ExtendedPKIXParameters#setParams(java.security.cert.PKIXParameters)
- */
- protected void setParams(PKIXParameters params)
- {
- super.setParams(params);
- if (params instanceof ExtendedPKIXBuilderParameters)
- {
- ExtendedPKIXBuilderParameters _params = (ExtendedPKIXBuilderParameters) params;
- maxPathLength = _params.maxPathLength;
- excludedCerts = new HashSet(_params.excludedCerts);
- }
- if (params instanceof PKIXBuilderParameters)
- {
- PKIXBuilderParameters _params = (PKIXBuilderParameters) params;
- maxPathLength = _params.getMaxPathLength();
- }
- }
-
- /**
- * Makes a copy of this PKIXParameters
object. Changes to the
- * copy will not affect the original and vice versa.
- *
- * @return a copy of this PKIXParameters
object
- */
- public Object clone()
- {
- ExtendedPKIXBuilderParameters params = null;
- try
- {
- params = new ExtendedPKIXBuilderParameters(getTrustAnchors(),
- getTargetConstraints());
- }
- catch (Exception e)
- {
- // cannot happen
- throw new RuntimeException(e.getMessage());
- }
- params.setParams(this);
- return params;
- }
-
- /**
- * Returns an instance of ExtendedPKIXParameters
which can be
- * safely casted to ExtendedPKIXBuilderParameters
.
- *
- * This method can be used to get a copy from other
- * PKIXBuilderParameters
, PKIXParameters
,
- * and ExtendedPKIXParameters
instances.
- *
- * @param pkixParams The PKIX parameters to create a copy of.
- * @return An ExtendedPKIXBuilderParameters
instance.
- */
- public static ExtendedPKIXParameters getInstance(PKIXParameters pkixParams)
- {
- ExtendedPKIXBuilderParameters params;
- try
- {
- params = new ExtendedPKIXBuilderParameters(pkixParams
- .getTrustAnchors(), X509CertStoreSelector
- .getInstance((X509CertSelector) pkixParams
- .getTargetCertConstraints()));
- }
- catch (Exception e)
- {
- // cannot happen
- throw new RuntimeException(e.getMessage());
- }
- params.setParams(pkixParams);
- return params;
- }
-}
diff --git a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/x509/ExtendedPKIXParameters.java b/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/x509/ExtendedPKIXParameters.java
deleted file mode 100644
index c2636c5b6..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/x509/ExtendedPKIXParameters.java
+++ /dev/null
@@ -1,647 +0,0 @@
-package org.spongycastle.x509;
-
-import org.spongycastle.util.Selector;
-import org.spongycastle.util.Store;
-
-import java.security.InvalidAlgorithmParameterException;
-import org.spongycastle.jce.cert.CertSelector;
-import org.spongycastle.jce.cert.CertStore;
-import org.spongycastle.jce.cert.CollectionCertStoreParameters;
-import org.spongycastle.jce.cert.LDAPCertStoreParameters;
-import org.spongycastle.jce.cert.PKIXParameters;
-import org.spongycastle.jce.cert.TrustAnchor;
-import org.spongycastle.jce.cert.X509CertSelector;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-
-/**
- * This class extends the PKIXParameters with a validity model parameter.
- */
-public class ExtendedPKIXParameters
- extends PKIXParameters
-{
-
- private List stores;
-
- private Selector selector;
-
- private boolean additionalLocationsEnabled;
-
- private List additionalStores;
-
- private Set trustedACIssuers;
-
- private Set necessaryACAttributes;
-
- private Set prohibitedACAttributes;
-
- private Set attrCertCheckers;
-
- /**
- * Creates an instance of PKIXParameters
with the specified
- * Set
of most-trusted CAs. Each element of the set is a
- * {@link TrustAnchor TrustAnchor}.
Set
- * is copied to protect against subsequent modifications.
- *
- * @param trustAnchors a Set
of TrustAnchor
s
- * @throws InvalidAlgorithmParameterException if the specified
- * Set
is empty.
- * @throws NullPointerException if the specified Set
is
- * null
- * @throws ClassCastException if any of the elements in the Set
- * is not of type java.security.cert.TrustAnchor
- */
- public ExtendedPKIXParameters(Set trustAnchors)
- throws InvalidAlgorithmParameterException
- {
- super(trustAnchors);
- stores = new ArrayList();
- additionalStores = new ArrayList();
- trustedACIssuers = new HashSet();
- necessaryACAttributes = new HashSet();
- prohibitedACAttributes = new HashSet();
- attrCertCheckers = new HashSet();
- }
-
- /**
- * Returns an instance with the parameters of a given
- * PKIXParameters
object.
- *
- * @param pkixParams The given PKIXParameters
- * @return an extended PKIX params object
- */
- public static ExtendedPKIXParameters getInstance(PKIXParameters pkixParams)
- {
- ExtendedPKIXParameters params;
- try
- {
- params = new ExtendedPKIXParameters(pkixParams.getTrustAnchors());
- }
- catch (Exception e)
- {
- // cannot happen
- throw new RuntimeException(e.getMessage());
- }
- params.setParams(pkixParams);
- return params;
- }
-
- /**
- * Method to support clone()
under J2ME.
- * super.clone()
does not exist and fields are not copied.
- *
- * @param params Parameters to set. If this are
- * ExtendedPKIXParameters
they are copied to.
- */
- protected void setParams(PKIXParameters params)
- {
- setDate(params.getDate());
- setCertPathCheckers(params.getCertPathCheckers());
- setCertStores(params.getCertStores());
- setAnyPolicyInhibited(params.isAnyPolicyInhibited());
- setExplicitPolicyRequired(params.isExplicitPolicyRequired());
- setPolicyMappingInhibited(params.isPolicyMappingInhibited());
- setRevocationEnabled(params.isRevocationEnabled());
- setInitialPolicies(params.getInitialPolicies());
- setPolicyQualifiersRejected(params.getPolicyQualifiersRejected());
- setSigProvider(params.getSigProvider());
- setTargetCertConstraints(params.getTargetCertConstraints());
- try
- {
- setTrustAnchors(params.getTrustAnchors());
- }
- catch (Exception e)
- {
- // cannot happen
- throw new RuntimeException(e.getMessage());
- }
- if (params instanceof ExtendedPKIXParameters)
- {
- ExtendedPKIXParameters _params = (ExtendedPKIXParameters) params;
- validityModel = _params.validityModel;
- useDeltas = _params.useDeltas;
- additionalLocationsEnabled = _params.additionalLocationsEnabled;
- selector = _params.selector == null ? null
- : (Selector) _params.selector.clone();
- stores = new ArrayList(_params.stores);
- additionalStores = new ArrayList(_params.additionalStores);
- trustedACIssuers = new HashSet(_params.trustedACIssuers);
- prohibitedACAttributes = new HashSet(_params.prohibitedACAttributes);
- necessaryACAttributes = new HashSet(_params.necessaryACAttributes);
- attrCertCheckers = new HashSet(_params.attrCertCheckers);
- }
- }
-
- /**
- * This is the default PKIX validity model. Actually there are two variants
- * of this: The PKIX model and the modified PKIX model. The PKIX model
- * verifies that all involved certificates must have been valid at the
- * current time. The modified PKIX model verifies that all involved
- * certificates were valid at the signing time. Both are indirectly choosen
- * with the {@link PKIXParameters#setDate(java.util.Date)} method, so this
- * methods sets the Date when all certificates must have been
- * valid.
- */
- public static final int PKIX_VALIDITY_MODEL = 0;
-
- /**
- * This model uses the following validity model. Each certificate must have
- * been valid at the moment where is was used. That means the end
- * certificate must have been valid at the time the signature was done. The
- * CA certificate which signed the end certificate must have been valid,
- * when the end certificate was signed. The CA (or Root CA) certificate must
- * have been valid, when the CA certificate was signed and so on. So the
- * {@link PKIXParameters#setDate(java.util.Date)} method sets the time, when
- * the end certificate must have been valid. It is used e.g.
- * in the German signature law.
- */
- public static final int CHAIN_VALIDITY_MODEL = 1;
-
- private int validityModel = PKIX_VALIDITY_MODEL;
-
- private boolean useDeltas = false;
-
- /**
- * Defaults to false
.
- *
- * @return Returns if delta CRLs should be used.
- */
- public boolean isUseDeltasEnabled()
- {
- return useDeltas;
- }
-
- /**
- * Sets if delta CRLs should be used for checking the revocation status.
- *
- * @param useDeltas true
if delta CRLs should be used.
- */
- public void setUseDeltasEnabled(boolean useDeltas)
- {
- this.useDeltas = useDeltas;
- }
-
- /**
- * @return Returns the validity model.
- * @see #CHAIN_VALIDITY_MODEL
- * @see #PKIX_VALIDITY_MODEL
- */
- public int getValidityModel()
- {
- return validityModel;
- }
-
- /**
- * Sets the Java CertStore to this extended PKIX parameters.
- *
- * @throws ClassCastException if an element of stores
is not
- * a CertStore
.
- */
- public void setCertStores(List stores)
- {
- if (stores != null)
- {
- Iterator it = stores.iterator();
- while (it.hasNext())
- {
- addCertStore((CertStore)it.next());
- }
- }
- }
-
- /**
- * Sets the Bouncy Castle Stores for finding CRLs, certificates, attribute
- * certificates or cross certificates.
- *
- * The List
is cloned.
- *
- * @param stores A list of stores to use.
- * @see #getStores
- * @throws ClassCastException if an element of stores
is not
- * a {@link Store}.
- */
- public void setStores(List stores)
- {
- if (stores == null)
- {
- this.stores = new ArrayList();
- }
- else
- {
- for (Iterator i = stores.iterator(); i.hasNext();)
- {
- if (!(i.next() instanceof Store))
- {
- throw new ClassCastException(
- "All elements of list must be "
- + "of type org.spongycastle.util.Store.");
- }
- }
- this.stores = new ArrayList(stores);
- }
- }
-
- /**
- * Adds a Bouncy Castle {@link Store} to find CRLs, certificates, attribute
- * certificates or cross certificates.
- *
- * This method should be used to add local stores, like collection based - * X.509 stores, if available. Local stores should be considered first, - * before trying to use additional (remote) locations, because they do not - * need possible additional network traffic. - *
- * If store
is null
it is ignored.
- *
- * @param store The store to add.
- * @see #getStores
- */
- public void addStore(Store store)
- {
- if (stores != null)
- {
- stores.add(store);
- }
- }
-
- /**
- * Adds a additional Bouncy Castle {@link Store} to find CRLs, certificates,
- * attribute certificates or cross certificates.
- *
- * You should not use this method. This method is used for adding additional - * X.509 stores, which are used to add (remote) locations, e.g. LDAP, found - * during X.509 object processing, e.g. in certificates or CRLs. This method - * is used in PKIX certification path processing. - *
- * If store
is null
it is ignored.
- *
- * @param store The store to add.
- * @see #getStores()
- */
- public void addAddionalStore(Store store)
- {
- if (store != null)
- {
- additionalStores.add(store);
- }
- }
-
- /**
- * Returns an immutable List
of additional Bouncy Castle
- * Store
s used for finding CRLs, certificates, attribute
- * certificates or cross certificates.
- *
- * @return an immutable List
of additional Bouncy Castle
- * Store
s. Never null
.
- *
- * @see #addAddionalStore(Store)
- */
- public List getAdditionalStores()
- {
- return Collections.unmodifiableList(additionalStores);
- }
-
- /**
- * Returns an immutable List
of Bouncy Castle
- * Store
s used for finding CRLs, certificates, attribute
- * certificates or cross certificates.
- *
- * @return an immutable List
of Bouncy Castle
- * Store
s. Never null
.
- *
- * @see #setStores(List)
- */
- public List getStores()
- {
- return Collections.unmodifiableList(new ArrayList(stores));
- }
-
- /**
- * @param validityModel The validity model to set.
- * @see #CHAIN_VALIDITY_MODEL
- * @see #PKIX_VALIDITY_MODEL
- */
- public void setValidityModel(int validityModel)
- {
- this.validityModel = validityModel;
- }
-
- public Object clone()
- {
- ExtendedPKIXParameters params;
- try
- {
- params = new ExtendedPKIXParameters(getTrustAnchors());
- }
- catch (Exception e)
- {
- // cannot happen
- throw new RuntimeException(e.getMessage());
- }
- params.setParams(this);
- return params;
- }
-
- /**
- * Returns if additional {@link X509Store}s for locations like LDAP found
- * in certificates or CRLs should be used.
- *
- * @return Returns true
if additional stores are used.
- */
- public boolean isAdditionalLocationsEnabled()
- {
- return additionalLocationsEnabled;
- }
-
- /**
- * Sets if additional {@link X509Store}s for locations like LDAP found in
- * certificates or CRLs should be used.
- *
- * @param enabled true
if additional stores are used.
- */
- public void setAdditionalLocationsEnabled(boolean enabled)
- {
- additionalLocationsEnabled = enabled;
- }
-
- /**
- * Returns the required constraints on the target certificate or attribute
- * certificate. The constraints are returned as an instance of
- * Selector
. If null
, no constraints are
- * defined.
- *
- *
- * The target certificate in a PKIX path may be a certificate or an - * attribute certificate. - *
- * Note that the Selector
returned is cloned to protect
- * against subsequent modifications.
- *
- * @return a Selector
specifying the constraints on the
- * target certificate or attribute certificate (or null
)
- * @see #setTargetConstraints
- * @see X509CertStoreSelector
- * @see X509AttributeCertStoreSelector
- */
- public Selector getTargetConstraints()
- {
- if (selector != null)
- {
- return (Selector) selector.clone();
- }
- else
- {
- return null;
- }
- }
-
- /**
- * Sets the required constraints on the target certificate or attribute
- * certificate. The constraints are specified as an instance of
- * Selector
. If null
, no constraints are
- * defined.
- *
- * The target certificate in a PKIX path may be a certificate or an - * attribute certificate. - *
- * Note that the Selector
specified is cloned to protect
- * against subsequent modifications.
- *
- * @param selector a Selector
specifying the constraints on
- * the target certificate or attribute certificate (or
- * null
)
- * @see #getTargetConstraints
- * @see X509CertStoreSelector
- * @see X509AttributeCertStoreSelector
- */
- public void setTargetConstraints(Selector selector)
- {
- if (selector != null)
- {
- this.selector = (Selector) selector.clone();
- }
- else
- {
- this.selector = null;
- }
- }
-
- /**
- * Sets the required constraints on the target certificate. The constraints
- * are specified as an instance of X509CertSelector
. If
- * null
, no constraints are defined.
- *
- *
- * This method wraps the given X509CertSelector
into a
- * X509CertStoreSelector
.
- *
- * Note that the X509CertSelector
specified is cloned to
- * protect against subsequent modifications.
- *
- * @param selector a X509CertSelector
specifying the
- * constraints on the target certificate (or null
)
- * @see #getTargetCertConstraints
- * @see X509CertStoreSelector
- */
- public void setTargetCertConstraints(CertSelector selector)
- {
- super.setTargetCertConstraints(selector);
- if (selector != null)
- {
- this.selector = X509CertStoreSelector
- .getInstance((X509CertSelector) selector);
- }
- else
- {
- this.selector = null;
- }
- }
-
- /**
- * Returns the trusted attribute certificate issuers. If attribute
- * certificates is verified the trusted AC issuers must be set.
- *
- * The returned Set
consists of TrustAnchor
s.
- *
- * The returned Set
is immutable. Never null
- *
- * @return Returns an immutable set of the trusted AC issuers.
- */
- public Set getTrustedACIssuers()
- {
- return Collections.unmodifiableSet(trustedACIssuers);
- }
-
- /**
- * Sets the trusted attribute certificate issuers. If attribute certificates
- * is verified the trusted AC issuers must be set.
- *
- * The trustedACIssuers
must be a Set
of
- * TrustAnchor
- *
- * The given set is cloned.
- *
- * @param trustedACIssuers The trusted AC issuers to set. Is never
- * null
.
- * @throws ClassCastException if an element of stores
is not
- * a TrustAnchor
.
- */
- public void setTrustedACIssuers(Set trustedACIssuers)
- {
- if (trustedACIssuers == null)
- {
- trustedACIssuers.clear();
- return;
- }
- for (Iterator it = trustedACIssuers.iterator(); it.hasNext();)
- {
- if (!(it.next() instanceof TrustAnchor))
- {
- throw new ClassCastException("All elements of set must be "
- + "of type " + TrustAnchor.class.getName() + ".");
- }
- }
- this.trustedACIssuers.clear();
- this.trustedACIssuers.addAll(trustedACIssuers);
- }
-
- /**
- * Returns the neccessary attributes which must be contained in an attribute
- * certificate.
- *
- * The returned Set
is immutable and contains
- * String
s with the OIDs.
- *
- * @return Returns the necessary AC attributes.
- */
- public Set getNecessaryACAttributes()
- {
- return Collections.unmodifiableSet(necessaryACAttributes);
- }
-
- /**
- * Sets the neccessary which must be contained in an attribute certificate.
- *
- * The Set
must contain String
s with the
- * OIDs.
- *
- * The set is cloned.
- *
- * @param necessaryACAttributes The necessary AC attributes to set.
- * @throws ClassCastException if an element of
- * necessaryACAttributes
is not a
- * String
.
- */
- public void setNecessaryACAttributes(Set necessaryACAttributes)
- {
- if (necessaryACAttributes == null)
- {
- this.necessaryACAttributes.clear();
- return;
- }
- for (Iterator it = necessaryACAttributes.iterator(); it.hasNext();)
- {
- if (!(it.next() instanceof String))
- {
- throw new ClassCastException("All elements of set must be "
- + "of type String.");
- }
- }
- this.necessaryACAttributes.clear();
- this.necessaryACAttributes.addAll(necessaryACAttributes);
- }
-
- /**
- * Returns the attribute certificates which are not allowed.
- *
- * The returned Set
is immutable and contains
- * String
s with the OIDs.
- *
- * @return Returns the prohibited AC attributes. Is never null
.
- */
- public Set getProhibitedACAttributes()
- {
- return prohibitedACAttributes;
- }
-
- /**
- * Sets the attribute certificates which are not allowed.
- *
- * The Set
must contain String
s with the
- * OIDs.
- *
- * The set is cloned.
- *
- * @param prohibitedACAttributes The prohibited AC attributes to set.
- * @throws ClassCastException if an element of
- * prohibitedACAttributes
is not a
- * String
.
- */
- public void setProhibitedACAttributes(Set prohibitedACAttributes)
- {
- if (prohibitedACAttributes == null)
- {
- this.prohibitedACAttributes.clear();
- return;
- }
- for (Iterator it = prohibitedACAttributes.iterator(); it.hasNext();)
- {
- if (!(it.next() instanceof String))
- {
- throw new ClassCastException("All elements of set must be "
- + "of type String.");
- }
- }
- this.prohibitedACAttributes.clear();
- this.prohibitedACAttributes.addAll(prohibitedACAttributes);
- }
-
- /**
- * Returns the attribute certificate checker. The returned set contains
- * {@link PKIXAttrCertChecker}s and is immutable.
- *
- * @return Returns the attribute certificate checker. Is never
- * null
.
- */
- public Set getAttrCertCheckers()
- {
- return Collections.unmodifiableSet(attrCertCheckers);
- }
-
- /**
- * Sets the attribute certificate checkers.
- *
- * All elements in the Set
must a {@link PKIXAttrCertChecker}.
- *
- * The given set is cloned.
- *
- * @param attrCertCheckers The attribute certificate checkers to set. Is
- * never
- * Each attribute certificate may contain a target information extension
- * limiting the servers where this attribute certificate can be used. If
- * this extension is not present, the attribute certificate is not targeted
- * and may be accepted by any server.
- *
- * @param name The name as a GeneralName (not
- * Each attribute certificate may contain a target information extension
- * limiting the servers where this attribute certificate can be used. If
- * this extension is not present, the attribute certificate is not targeted
- * and may be accepted by any server.
- *
- * @param name a byte array containing the name in ASN.1 DER encoded form of a GeneralName
- * @throws IOException if a parsing error occurs.
- */
- public void addTargetName(byte[] name) throws IOException
- {
- addTargetName(GeneralName.getInstance(ASN1Primitive.fromByteArray(name)));
- }
-
- /**
- * Adds a collection with target names criteria. If
- * The collection consists of either GeneralName objects or byte[] arrays representing
- * DER encoded GeneralName structures.
- *
- * @param names A collection of target names.
- * @throws IOException if a parsing error occurs.
- * @see #addTargetName(byte[])
- * @see #addTargetName(GeneralName)
- */
- public void setTargetNames(Collection names) throws IOException
- {
- targetNames = extractGeneralNames(names);
- }
-
- /**
- * Gets the target names. The collection consists of
- * The returned collection is immutable.
- *
- * @return The collection of target names
- * @see #setTargetNames(Collection)
- */
- public Collection getTargetNames()
- {
- return Collections.unmodifiableCollection(targetNames);
- }
-
- /**
- * Adds a target group criterion for the attribute certificate to the target
- * information extension criteria. The
- * Each attribute certificate may contain a target information extension
- * limiting the servers where this attribute certificate can be used. If
- * this extension is not present, the attribute certificate is not targeted
- * and may be accepted by any server.
- *
- * @param group The group as GeneralName form (not
- * Each attribute certificate may contain a target information extension
- * limiting the servers where this attribute certificate can be used. If
- * this extension is not present, the attribute certificate is not targeted
- * and may be accepted by any server.
- *
- * @param name a byte array containing the group in ASN.1 DER encoded form of a GeneralName
- * @throws IOException if a parsing error occurs.
- */
- public void addTargetGroup(byte[] name) throws IOException
- {
- addTargetGroup(GeneralName.getInstance(ASN1Primitive.fromByteArray(name)));
- }
-
- /**
- * Adds a collection with target groups criteria. If
- * The collection consists of
- * The returned collection is immutable.
- *
- * @return The collection of target groups.
- * @see #setTargetGroups(Collection)
- */
- public Collection getTargetGroups()
- {
- return Collections.unmodifiableCollection(targetGroups);
- }
-
- private Set extractGeneralNames(Collection names)
- throws IOException
- {
- if (names == null || names.isEmpty())
- {
- return new HashSet();
- }
- Set temp = new HashSet();
- for (Iterator it = names.iterator(); it.hasNext();)
- {
- Object o = it.next();
- if (o instanceof GeneralName)
- {
- temp.add(o);
- }
- else
- {
- temp.add(GeneralName.getInstance(ASN1Primitive.fromByteArray((byte[])o)));
- }
- }
- return temp;
- }
-}
diff --git a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/x509/X509CRLStoreSelector.java b/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/x509/X509CRLStoreSelector.java
deleted file mode 100644
index 554911f0f..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/x509/X509CRLStoreSelector.java
+++ /dev/null
@@ -1,330 +0,0 @@
-package org.spongycastle.x509;
-
-import org.spongycastle.asn1.ASN1Integer;
-import org.spongycastle.asn1.x509.X509Extensions;
-import org.spongycastle.util.Arrays;
-import org.spongycastle.util.Selector;
-import org.spongycastle.x509.extension.X509ExtensionUtil;
-
-import java.io.IOException;
-import java.math.BigInteger;
-import java.security.cert.CRL;
-import java.security.cert.X509CRL;
-import org.spongycastle.jce.cert.X509CRLSelector;
-
-/**
- * This class is a Selector implementation for X.509 certificate revocation
- * lists.
- *
- * @see org.spongycastle.util.Selector
- * @see org.spongycastle.x509.X509Store
- * @see org.spongycastle.jce.provider.X509StoreCRLCollection
- */
-public class X509CRLStoreSelector
- extends X509CRLSelector
- implements Selector
-{
- private boolean deltaCRLIndicator = false;
-
- private boolean completeCRLEnabled = false;
-
- private BigInteger maxBaseCRLNumber = null;
-
- private byte[] issuingDistributionPoint = null;
-
- private boolean issuingDistributionPointEnabled = false;
-
- private X509AttributeCertificate attrCertChecking;
-
- /**
- * Returns if the issuing distribution point criteria should be applied.
- * Defaults to
- * You may also set the issuing distribution point criteria if not a missing
- * issuing distribution point should be assumed.
- *
- * @return Returns if the issuing distribution point check is enabled.
- */
- public boolean isIssuingDistributionPointEnabled()
- {
- return issuingDistributionPointEnabled;
- }
-
- /**
- * Enables or disables the issuing distribution point check.
- *
- * @param issuingDistributionPointEnabled
- * {@link #setCompleteCRLEnabled(boolean)} and
- * {@link #setDeltaCRLIndicatorEnabled(boolean)} excluded each other.
- *
- * @param deltaCRLIndicator
- * {@link #setCompleteCRLEnabled(boolean)} and
- * {@link #setDeltaCRLIndicatorEnabled(boolean)} excluded each other.
- *
- * @param completeCRLEnabled
- * This is only meaningful for delta CRLs. Complete CRLs must have a CRL
- * number which is greater or equal than the base number of the
- * corresponding CRL.
- *
- * @param maxBaseCRLNumber The maximum base CRL number to set.
- */
- public void setMaxBaseCRLNumber(BigInteger maxBaseCRLNumber)
- {
- this.maxBaseCRLNumber = maxBaseCRLNumber;
- }
-
- /**
- * Returns the issuing distribution point. Defaults to
- * The internal byte array is cloned before it is returned.
- *
- * The criteria must be enable with
- * {@link #setIssuingDistributionPointEnabled(boolean)}.
- *
- * @return Returns the issuing distribution point.
- * @see #setIssuingDistributionPoint(byte[])
- */
- public byte[] getIssuingDistributionPoint()
- {
- return Arrays.clone(issuingDistributionPoint);
- }
-
- /**
- * Sets the issuing distribution point.
- *
- * The issuing distribution point extension is a CRL extension which
- * identifies the scope and the distribution point of a CRL. The scope
- * contains among others information about revocation reasons contained in
- * the CRL. Delta CRLs and complete CRLs must have matching issuing
- * distribution points.
- *
- * The byte array is cloned to protect against subsequent modifications.
- *
- * You must also enable or disable this criteria with
- * {@link #setIssuingDistributionPointEnabled(boolean)}.
- *
- * @param issuingDistributionPoint The issuing distribution point to set.
- * This is the DER encoded OCTET STRING extension value.
- * @see #getIssuingDistributionPoint()
- */
- public void setIssuingDistributionPoint(byte[] issuingDistributionPoint)
- {
- this.issuingDistributionPoint = Arrays.clone(issuingDistributionPoint);
- }
-}
diff --git a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/x509/X509CertStoreSelector.java b/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/x509/X509CertStoreSelector.java
deleted file mode 100644
index f4efcddbc..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/x509/X509CertStoreSelector.java
+++ /dev/null
@@ -1,86 +0,0 @@
-package org.spongycastle.x509;
-
-import org.spongycastle.util.Selector;
-
-import java.io.IOException;
-import java.security.cert.Certificate;
-import org.spongycastle.jce.cert.X509CertSelector;
-import java.security.cert.X509Certificate;
-
-/**
- * This class is a Selector implementation for X.509 certificates.
- *
- * @see org.spongycastle.util.Selector
- * @see org.spongycastle.x509.X509Store
- * @see org.spongycastle.jce.provider.X509StoreCertCollection
- */
-public class X509CertStoreSelector
- extends X509CertSelector
- implements Selector
-{
- public boolean match(Object obj)
- {
- if (!(obj instanceof X509Certificate))
- {
- return false;
- }
-
- X509Certificate other = (X509Certificate)obj;
-
- return super.match(other);
- }
-
- public boolean match(Certificate cert)
- {
- return match((Object)cert);
- }
-
- public Object clone()
- {
- X509CertStoreSelector selector = (X509CertStoreSelector)super.clone();
-
- return selector;
- }
-
- /**
- * Returns an instance of this from a
- * Note: this differs from the deprecated method in that the default provider is
- * used - not "SC".
- *
- * Note: this differs from the deprecated method in that the default provider is
- * used - not "SC".
- *
- * Note: this differs from the deprecated method in that the default provider is
- * used - not "SC".
- *
- * Note: this differs from the deprecated method in that the default provider is
- * used - not "SC".
- *
- * Note: this differs from the deprecated method in that the default provider is
- * used - not "SC".
- *
- * Note: this differs from the deprecated method in that the default provider is
- * used - not "SC".
- *
- * This methods inherits DSA parameters from the indexed certificate or
- * previous certificates in the certificate chain to the returned
- *
- * If the indexed certificate does not contain a DSA key this method simply
- * returns the public key. If the DSA key already contains DSA parameters
- * the key is also only returned.
- *
- * You may also set the issuing distribution point criteria if not a missing
- * issuing distribution point should be assumed.
- *
- * @return Returns if the issuing distribution point check is enabled.
- */
- public boolean isIssuingDistributionPointEnabled()
- {
- return issuingDistributionPointEnabled;
- }
-
- /**
- * Enables or disables the issuing distribution point check.
- *
- * @param issuingDistributionPointEnabled
- * {@link #setCompleteCRLEnabled(boolean)} and
- * {@link #setDeltaCRLIndicatorEnabled(boolean)} excluded each other.
- *
- * @param deltaCRLIndicator
- * {@link #setCompleteCRLEnabled(boolean)} and
- * {@link #setDeltaCRLIndicatorEnabled(boolean)} excluded each other.
- *
- * @param completeCRLEnabled
- * This is only meaningful for delta CRLs. Complete CRLs must have a CRL
- * number which is greater or equal than the base number of the
- * corresponding CRL.
- *
- * @param maxBaseCRLNumber The maximum base CRL number to set.
- */
- public void setMaxBaseCRLNumber(BigInteger maxBaseCRLNumber)
- {
- this.maxBaseCRLNumber = maxBaseCRLNumber;
- }
-
- /**
- * Returns the issuing distribution point. Defaults to
- * The internal byte array is cloned before it is returned.
- *
- * The criteria must be enable with
- * {@link #setIssuingDistributionPointEnabled(boolean)}.
- *
- * @return Returns the issuing distribution point.
- * @see #setIssuingDistributionPoint(byte[])
- */
- public byte[] getIssuingDistributionPoint()
- {
- return Arrays.clone(issuingDistributionPoint);
- }
-
- /**
- * Sets the issuing distribution point.
- *
- * The issuing distribution point extension is a CRL extension which
- * identifies the scope and the distribution point of a CRL. The scope
- * contains among others information about revocation reasons contained in
- * the CRL. Delta CRLs and complete CRLs must have matching issuing
- * distribution points.
- *
- * The byte array is cloned to protect against subsequent modifications.
- *
- * You must also enable or disable this criteria with
- * {@link #setIssuingDistributionPointEnabled(boolean)}.
- *
- * @param issuingDistributionPoint The issuing distribution point to set.
- * This is the DER encoded OCTET STRING extension value.
- * @see #getIssuingDistributionPoint()
- */
- public void setIssuingDistributionPoint(byte[] issuingDistributionPoint)
- {
- this.issuingDistributionPoint = Arrays.clone(issuingDistributionPoint);
- }
-}
diff --git a/extern/spongycastle/prov/src/main/jdk1.4/org/spongycastle/x509/X509CertStoreSelector.java b/extern/spongycastle/prov/src/main/jdk1.4/org/spongycastle/x509/X509CertStoreSelector.java
deleted file mode 100644
index 61664c449..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.4/org/spongycastle/x509/X509CertStoreSelector.java
+++ /dev/null
@@ -1,86 +0,0 @@
-package org.spongycastle.x509;
-
-import org.spongycastle.util.Selector;
-
-import java.io.IOException;
-import java.security.cert.Certificate;
-import java.security.cert.X509CertSelector;
-import java.security.cert.X509Certificate;
-
-/**
- * This class is a Selector implementation for X.509 certificates.
- *
- * @see org.spongycastle.util.Selector
- * @see org.spongycastle.x509.X509Store
- * @see org.spongycastle.jce.provider.X509StoreCertCollection
- */
-public class X509CertStoreSelector
- extends X509CertSelector
- implements Selector
-{
- public boolean match(Object obj)
- {
- if (!(obj instanceof X509Certificate))
- {
- return false;
- }
-
- X509Certificate other = (X509Certificate)obj;
-
- return super.match(other);
- }
-
- public boolean match(Certificate cert)
- {
- return match((Object)cert);
- }
-
- public Object clone()
- {
- X509CertStoreSelector selector = (X509CertStoreSelector)super.clone();
-
- return selector;
- }
-
- /**
- * Returns an instance of this from a null
.
- * @throws ClassCastException if an element of attrCertCheckers
- * is not a PKIXAttrCertChecker
.
- */
-/*
- public void setAttrCertCheckers(Set attrCertCheckers)
- {
- if (attrCertCheckers == null)
- {
- this.attrCertCheckers.clear();
- return;
- }
- for (Iterator it = attrCertCheckers.iterator(); it.hasNext();)
- {
- if (!(it.next() instanceof PKIXAttrCertChecker))
- {
- throw new ClassCastException("All elements of set must be "
- + "of type " + PKIXAttrCertChecker.class.getName() + ".");
- }
- }
- this.attrCertCheckers.clear();
- this.attrCertCheckers.addAll(attrCertCheckers);
- }
-*/
-}
diff --git a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/x509/X509AttributeCertStoreSelector.java b/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/x509/X509AttributeCertStoreSelector.java
deleted file mode 100644
index b47236d1b..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/x509/X509AttributeCertStoreSelector.java
+++ /dev/null
@@ -1,486 +0,0 @@
-package org.spongycastle.x509;
-
-import java.io.IOException;
-import java.math.BigInteger;
-import java.security.cert.CertificateExpiredException;
-import java.security.cert.CertificateNotYetValidException;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Date;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Set;
-
-import org.spongycastle.asn1.ASN1InputStream;
-import org.spongycastle.asn1.ASN1Primitive;
-import org.spongycastle.asn1.DEROctetString;
-import org.spongycastle.asn1.x509.GeneralName;
-import org.spongycastle.asn1.x509.Target;
-import org.spongycastle.asn1.x509.TargetInformation;
-import org.spongycastle.asn1.x509.Targets;
-import org.spongycastle.asn1.x509.X509Extensions;
-import org.spongycastle.util.Selector;
-
-/**
- * This class is an Selector
like implementation to select
- * attribute certificates from a given set of criteria.
- *
- * @see org.spongycastle.x509.X509AttributeCertificate
- * @see org.spongycastle.x509.X509Store
- */
-public class X509AttributeCertStoreSelector
- implements Selector
-{
-
- // TODO: name constraints???
-
- private AttributeCertificateHolder holder;
-
- private AttributeCertificateIssuer issuer;
-
- private BigInteger serialNumber;
-
- private Date attributeCertificateValid;
-
- private X509AttributeCertificate attributeCert;
-
- private Collection targetNames = new HashSet();
-
- private Collection targetGroups = new HashSet();
-
- public X509AttributeCertStoreSelector()
- {
- super();
- }
-
- /**
- * Decides if the given attribute certificate should be selected.
- *
- * @param obj The attribute certificate which should be checked.
- * @return true
if the attribute certificate can be selected,
- * false
otherwise.
- */
- public boolean match(Object obj)
- {
- if (!(obj instanceof X509AttributeCertificate))
- {
- return false;
- }
-
- X509AttributeCertificate attrCert = (X509AttributeCertificate) obj;
-
- if (this.attributeCert != null)
- {
- if (!this.attributeCert.equals(attrCert))
- {
- return false;
- }
- }
- if (serialNumber != null)
- {
- if (!attrCert.getSerialNumber().equals(serialNumber))
- {
- return false;
- }
- }
- if (holder != null)
- {
- if (!attrCert.getHolder().equals(holder))
- {
- return false;
- }
- }
- if (issuer != null)
- {
- if (!attrCert.getIssuer().equals(issuer))
- {
- return false;
- }
- }
-
- if (attributeCertificateValid != null)
- {
- try
- {
- attrCert.checkValidity(attributeCertificateValid);
- }
- catch (CertificateExpiredException e)
- {
- return false;
- }
- catch (CertificateNotYetValidException e)
- {
- return false;
- }
- }
- if (!targetNames.isEmpty() || !targetGroups.isEmpty())
- {
-
- byte[] targetInfoExt = attrCert
- .getExtensionValue(X509Extensions.TargetInformation.getId());
- if (targetInfoExt != null)
- {
- TargetInformation targetinfo;
- try
- {
- targetinfo = TargetInformation
- .getInstance(new ASN1InputStream(
- ((DEROctetString) DEROctetString
- .fromByteArray(targetInfoExt)).getOctets())
- .readObject());
- }
- catch (IOException e)
- {
- return false;
- }
- catch (IllegalArgumentException e)
- {
- return false;
- }
- Targets[] targetss = targetinfo.getTargetsObjects();
- if (!targetNames.isEmpty())
- {
- boolean found = false;
-
- for (int i=0; inull
- * is given any will do.
- *
- * @param attributeCertificateValid The attribute certificate validation
- * time to set.
- */
- public void setAttributeCertificateValid(Date attributeCertificateValid)
- {
- if (attributeCertificateValid != null)
- {
- this.attributeCertificateValid = new Date(attributeCertificateValid
- .getTime());
- }
- else
- {
- this.attributeCertificateValid = null;
- }
- }
-
- /**
- * Gets the holder.
- *
- * @return Returns the holder.
- */
- public AttributeCertificateHolder getHolder()
- {
- return holder;
- }
-
- /**
- * Sets the holder. If null
is given any will do.
- *
- * @param holder The holder to set.
- */
- public void setHolder(AttributeCertificateHolder holder)
- {
- this.holder = holder;
- }
-
- /**
- * Returns the issuer criterion.
- *
- * @return Returns the issuer.
- */
- public AttributeCertificateIssuer getIssuer()
- {
- return issuer;
- }
-
- /**
- * Sets the issuer the attribute certificate must have. If null
- * is given any will do.
- *
- * @param issuer The issuer to set.
- */
- public void setIssuer(AttributeCertificateIssuer issuer)
- {
- this.issuer = issuer;
- }
-
- /**
- * Gets the serial number the attribute certificate must have.
- *
- * @return Returns the serialNumber.
- */
- public BigInteger getSerialNumber()
- {
- return serialNumber;
- }
-
- /**
- * Sets the serial number the attribute certificate must have. If
- * null
is given any will do.
- *
- * @param serialNumber The serialNumber to set.
- */
- public void setSerialNumber(BigInteger serialNumber)
- {
- this.serialNumber = serialNumber;
- }
-
- /**
- * Adds a target name criterion for the attribute certificate to the target
- * information extension criteria. The X509AttributeCertificate
- * must contain at least one of the specified target names.
- * null
)
- */
- public void addTargetName(GeneralName name)
- {
- targetNames.add(name);
- }
-
- /**
- * Adds a target name criterion for the attribute certificate to the target
- * information extension criteria. The X509AttributeCertificate
- * must contain at least one of the specified target names.
- * null
is
- * given any will do.
- * List
s
- * made up of an Integer
in the first entry and a DER encoded
- * byte array or a String
in the second entry.
- * X509AttributeCertificate
- * must contain at least one of the specified target groups.
- * null
)
- */
- public void addTargetGroup(GeneralName group)
- {
- targetGroups.add(group);
- }
-
- /**
- * Adds a target group criterion for the attribute certificate to the target
- * information extension criteria. The X509AttributeCertificate
- * must contain at least one of the specified target groups.
- * null
is
- * given any will do.
- * GeneralName
objects or byte[]
Lists
- * made up of an Integer
in the first entry and a DER encoded
- * byte array or a String
in the second entry.
- * false
.
- * true
to enable the
- * issuing distribution point check.
- */
- public void setIssuingDistributionPointEnabled(
- boolean issuingDistributionPointEnabled)
- {
- this.issuingDistributionPointEnabled = issuingDistributionPointEnabled;
- }
-
- /**
- * Sets the attribute certificate being checked. This is not a criterion.
- * Rather, it is optional information that may help a {@link X509Store} find
- * CRLs that would be relevant when checking revocation for the specified
- * attribute certificate. If null
is specified, then no such
- * optional information is provided.
- *
- * @param attrCert the X509AttributeCertificate
being checked (or
- * null
)
- * @see #getAttrCertificateChecking()
- */
- public void setAttrCertificateChecking(X509AttributeCertificate attrCert)
- {
- attrCertChecking = attrCert;
- }
-
- /**
- * Returns the attribute certificate being checked.
- *
- * @return Returns the attribute certificate being checked.
- * @see #setAttrCertificateChecking(X509AttributeCertificate)
- */
- public X509AttributeCertificate getAttrCertificateChecking()
- {
- return attrCertChecking;
- }
-
- public boolean match(Object obj)
- {
- if (!(obj instanceof X509CRL))
- {
- return false;
- }
- X509CRL crl = (X509CRL)obj;
- ASN1Integer dci = null;
- try
- {
- byte[] bytes = crl
- .getExtensionValue(X509Extensions.DeltaCRLIndicator.getId());
- if (bytes != null)
- {
- dci = ASN1Integer.getInstance(X509ExtensionUtil
- .fromExtensionValue(bytes));
- }
- }
- catch (Exception e)
- {
- return false;
- }
- if (isDeltaCRLIndicatorEnabled())
- {
- if (dci == null)
- {
- return false;
- }
- }
- if (isCompleteCRLEnabled())
- {
- if (dci != null)
- {
- return false;
- }
- }
- if (dci != null)
- {
-
- if (maxBaseCRLNumber != null)
- {
- if (dci.getPositiveValue().compareTo(maxBaseCRLNumber) == 1)
- {
- return false;
- }
- }
- }
- if (issuingDistributionPointEnabled)
- {
- byte[] idp = crl
- .getExtensionValue(X509Extensions.IssuingDistributionPoint
- .getId());
- if (issuingDistributionPoint == null)
- {
- if (idp != null)
- {
- return false;
- }
- }
- else
- {
- if (!Arrays.areEqual(idp, issuingDistributionPoint))
- {
- return false;
- }
- }
-
- }
- return super.match((X509CRL)obj);
- }
-
- public boolean match(CRL crl)
- {
- return match((Object)crl);
- }
-
- /**
- * Returns if this selector must match CRLs with the delta CRL indicator
- * extension set. Defaults to false
.
- *
- * @return Returns true
if only CRLs with the delta CRL
- * indicator extension are selected.
- */
- public boolean isDeltaCRLIndicatorEnabled()
- {
- return deltaCRLIndicator;
- }
-
- /**
- * If this is set to true
the CRL reported contains the delta
- * CRL indicator CRL extension.
- * true
if the delta CRL indicator
- * extension must be in the CRL.
- */
- public void setDeltaCRLIndicatorEnabled(boolean deltaCRLIndicator)
- {
- this.deltaCRLIndicator = deltaCRLIndicator;
- }
-
- /**
- * Returns an instance of this from a X509CRLSelector
.
- *
- * @param selector A X509CRLSelector
instance.
- * @return An instance of an X509CRLStoreSelector
.
- * @exception IllegalArgumentException if selector is null or creation
- * fails.
- */
- public static X509CRLStoreSelector getInstance(X509CRLSelector selector)
- {
- if (selector == null)
- {
- throw new IllegalArgumentException(
- "cannot create from null selector");
- }
- X509CRLStoreSelector cs = new X509CRLStoreSelector();
- cs.setCertificateChecking(selector.getCertificateChecking());
- cs.setDateAndTime(selector.getDateAndTime());
- try
- {
- cs.setIssuerNames(selector.getIssuerNames());
- }
- catch (IOException e)
- {
- // cannot happen
- throw new IllegalArgumentException(e.getMessage());
- }
- //cs.setIssuers(selector.getIssuers());
- cs.setMaxCRLNumber(selector.getMaxCRL());
- cs.setMinCRLNumber(selector.getMinCRL());
- return cs;
- }
-
- public Object clone()
- {
- X509CRLStoreSelector sel = X509CRLStoreSelector.getInstance(this);
- sel.deltaCRLIndicator = deltaCRLIndicator;
- sel.completeCRLEnabled = completeCRLEnabled;
- sel.maxBaseCRLNumber = maxBaseCRLNumber;
- sel.attrCertChecking = attrCertChecking;
- sel.issuingDistributionPointEnabled = issuingDistributionPointEnabled;
- sel.issuingDistributionPoint = Arrays.clone(issuingDistributionPoint);
- return sel;
- }
-
- /**
- * If true
only complete CRLs are returned. Defaults to
- * false
.
- *
- * @return true
if only complete CRLs are returned.
- */
- public boolean isCompleteCRLEnabled()
- {
- return completeCRLEnabled;
- }
-
- /**
- * If set to true
only complete CRLs are returned.
- * true
if only complete CRLs
- * should be returned.
- */
- public void setCompleteCRLEnabled(boolean completeCRLEnabled)
- {
- this.completeCRLEnabled = completeCRLEnabled;
- }
-
- /**
- * Get the maximum base CRL number. Defaults to null
.
- *
- * @return Returns the maximum base CRL number.
- * @see #setMaxBaseCRLNumber(BigInteger)
- */
- public BigInteger getMaxBaseCRLNumber()
- {
- return maxBaseCRLNumber;
- }
-
- /**
- * Sets the maximum base CRL number. Setting to null
disables
- * this cheack.
- * null
,
- * which is a missing issuing distribution point extension.
- * X509CertSelector
.
- *
- * @param selector A X509CertSelector
instance.
- * @return An instance of an X509CertStoreSelector
.
- * @exception IllegalArgumentException if selector is null or creation fails.
- */
- public static X509CertStoreSelector getInstance(X509CertSelector selector)
- {
- if (selector == null)
- {
- throw new IllegalArgumentException("cannot create from null selector");
- }
- X509CertStoreSelector cs = new X509CertStoreSelector();
- cs.setAuthorityKeyIdentifier(selector.getAuthorityKeyIdentifier());
- cs.setBasicConstraints(selector.getBasicConstraints());
- cs.setCertificate(selector.getCertificate());
- cs.setCertificateValid(selector.getCertificateValid());
- cs.setMatchAllSubjectAltNames(selector.getMatchAllSubjectAltNames());
- try
- {
- cs.setPathToNames(selector.getPathToNames());
- cs.setExtendedKeyUsage(selector.getExtendedKeyUsage());
- //cs.setNameConstraints(selector.getNameConstraints());
- cs.setPolicy(selector.getPolicy());
- cs.setSubjectPublicKeyAlgID(selector.getSubjectPublicKeyAlgID());
- cs.setSubject(selector.getSubjectAsBytes());
- cs.setIssuer(selector.getIssuerAsBytes());
- }
- catch (IOException e)
- {
- throw new IllegalArgumentException("error in passed in selector: " + e);
- }
- cs.setKeyUsage(selector.getKeyUsage());
- cs.setPrivateKeyValid(selector.getPrivateKeyValid());
- cs.setSerialNumber(selector.getSerialNumber());
- cs.setSubjectKeyIdentifier(selector.getSubjectKeyIdentifier());
- cs.setSubjectPublicKey(selector.getSubjectPublicKey());
- return cs;
- }
-
-}
diff --git a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/x509/X509Util.java b/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/x509/X509Util.java
deleted file mode 100644
index 93ec8b638..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/x509/X509Util.java
+++ /dev/null
@@ -1,397 +0,0 @@
-package org.spongycastle.x509;
-
-import java.io.IOException;
-import java.security.InvalidKeyException;
-import java.security.NoSuchAlgorithmException;
-import java.security.NoSuchProviderException;
-import java.security.PrivateKey;
-import java.security.Provider;
-import java.security.SecureRandom;
-import java.security.Security;
-import java.security.Signature;
-import java.security.SignatureException;
-import java.util.ArrayList;
-import java.util.Enumeration;
-import java.util.HashSet;
-import java.util.Hashtable;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-
-import org.spongycastle.asn1.ASN1Encodable;
-import org.spongycastle.asn1.ASN1Encoding;
-import org.spongycastle.asn1.ASN1Integer;
-import org.spongycastle.asn1.DERNull;
-import org.spongycastle.asn1.ASN1ObjectIdentifier;
-import org.spongycastle.asn1.cryptopro.CryptoProObjectIdentifiers;
-import org.spongycastle.asn1.nist.NISTObjectIdentifiers;
-import org.spongycastle.asn1.oiw.OIWObjectIdentifiers;
-import org.spongycastle.asn1.pkcs.PKCSObjectIdentifiers;
-import org.spongycastle.asn1.pkcs.RSASSAPSSparams;
-import org.spongycastle.asn1.teletrust.TeleTrusTObjectIdentifiers;
-import org.spongycastle.asn1.x509.AlgorithmIdentifier;
-import org.spongycastle.asn1.x9.X9ObjectIdentifiers;
-import org.spongycastle.jce.X509Principal;
-import org.spongycastle.util.Strings;
-
-class X509Util
-{
- private static Hashtable algorithms = new Hashtable();
- private static Hashtable params = new Hashtable();
- private static Set noParams = new HashSet();
-
- static
- {
- algorithms.put("MD2WITHRSAENCRYPTION", PKCSObjectIdentifiers.md2WithRSAEncryption);
- algorithms.put("MD2WITHRSA", PKCSObjectIdentifiers.md2WithRSAEncryption);
- algorithms.put("MD5WITHRSAENCRYPTION", PKCSObjectIdentifiers.md5WithRSAEncryption);
- algorithms.put("MD5WITHRSA", PKCSObjectIdentifiers.md5WithRSAEncryption);
- algorithms.put("SHA1WITHRSAENCRYPTION", PKCSObjectIdentifiers.sha1WithRSAEncryption);
- algorithms.put("SHA1WITHRSA", PKCSObjectIdentifiers.sha1WithRSAEncryption);
- algorithms.put("SHA224WITHRSAENCRYPTION", PKCSObjectIdentifiers.sha224WithRSAEncryption);
- algorithms.put("SHA224WITHRSA", PKCSObjectIdentifiers.sha224WithRSAEncryption);
- algorithms.put("SHA256WITHRSAENCRYPTION", PKCSObjectIdentifiers.sha256WithRSAEncryption);
- algorithms.put("SHA256WITHRSA", PKCSObjectIdentifiers.sha256WithRSAEncryption);
- algorithms.put("SHA384WITHRSAENCRYPTION", PKCSObjectIdentifiers.sha384WithRSAEncryption);
- algorithms.put("SHA384WITHRSA", PKCSObjectIdentifiers.sha384WithRSAEncryption);
- algorithms.put("SHA512WITHRSAENCRYPTION", PKCSObjectIdentifiers.sha512WithRSAEncryption);
- algorithms.put("SHA512WITHRSA", PKCSObjectIdentifiers.sha512WithRSAEncryption);
- algorithms.put("SHA1WITHRSAANDMGF1", PKCSObjectIdentifiers.id_RSASSA_PSS);
- algorithms.put("SHA224WITHRSAANDMGF1", PKCSObjectIdentifiers.id_RSASSA_PSS);
- algorithms.put("SHA256WITHRSAANDMGF1", PKCSObjectIdentifiers.id_RSASSA_PSS);
- algorithms.put("SHA384WITHRSAANDMGF1", PKCSObjectIdentifiers.id_RSASSA_PSS);
- algorithms.put("SHA512WITHRSAANDMGF1", PKCSObjectIdentifiers.id_RSASSA_PSS);
- algorithms.put("RIPEMD160WITHRSAENCRYPTION", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd160);
- algorithms.put("RIPEMD160WITHRSA", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd160);
- algorithms.put("RIPEMD128WITHRSAENCRYPTION", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd128);
- algorithms.put("RIPEMD128WITHRSA", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd128);
- algorithms.put("RIPEMD256WITHRSAENCRYPTION", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd256);
- algorithms.put("RIPEMD256WITHRSA", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd256);
- algorithms.put("SHA1WITHDSA", X9ObjectIdentifiers.id_dsa_with_sha1);
- algorithms.put("DSAWITHSHA1", X9ObjectIdentifiers.id_dsa_with_sha1);
- algorithms.put("SHA224WITHDSA", NISTObjectIdentifiers.dsa_with_sha224);
- algorithms.put("SHA256WITHDSA", NISTObjectIdentifiers.dsa_with_sha256);
- algorithms.put("SHA384WITHDSA", NISTObjectIdentifiers.dsa_with_sha384);
- algorithms.put("SHA512WITHDSA", NISTObjectIdentifiers.dsa_with_sha512);
- algorithms.put("SHA1WITHECDSA", X9ObjectIdentifiers.ecdsa_with_SHA1);
- algorithms.put("ECDSAWITHSHA1", X9ObjectIdentifiers.ecdsa_with_SHA1);
- algorithms.put("SHA224WITHECDSA", X9ObjectIdentifiers.ecdsa_with_SHA224);
- algorithms.put("SHA256WITHECDSA", X9ObjectIdentifiers.ecdsa_with_SHA256);
- algorithms.put("SHA384WITHECDSA", X9ObjectIdentifiers.ecdsa_with_SHA384);
- algorithms.put("SHA512WITHECDSA", X9ObjectIdentifiers.ecdsa_with_SHA512);
- algorithms.put("GOST3411WITHGOST3410", CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_94);
- algorithms.put("GOST3411WITHGOST3410-94", CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_94);
- algorithms.put("GOST3411WITHECGOST3410", CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_2001);
- algorithms.put("GOST3411WITHECGOST3410-2001", CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_2001);
- algorithms.put("GOST3411WITHGOST3410-2001", CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_2001);
-
- //
- // According to RFC 3279, the ASN.1 encoding SHALL (id-dsa-with-sha1) or MUST (ecdsa-with-SHA*) omit the parameters field.
- // The parameters field SHALL be NULL for RSA based signature algorithms.
- //
- noParams.add(X9ObjectIdentifiers.ecdsa_with_SHA1);
- noParams.add(X9ObjectIdentifiers.ecdsa_with_SHA224);
- noParams.add(X9ObjectIdentifiers.ecdsa_with_SHA256);
- noParams.add(X9ObjectIdentifiers.ecdsa_with_SHA384);
- noParams.add(X9ObjectIdentifiers.ecdsa_with_SHA512);
- noParams.add(X9ObjectIdentifiers.id_dsa_with_sha1);
- noParams.add(NISTObjectIdentifiers.dsa_with_sha224);
- noParams.add(NISTObjectIdentifiers.dsa_with_sha256);
- noParams.add(NISTObjectIdentifiers.dsa_with_sha384);
- noParams.add(NISTObjectIdentifiers.dsa_with_sha512);
-
- //
- // RFC 4491
- //
- noParams.add(CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_94);
- noParams.add(CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_2001);
-
- //
- // explicit params
- //
- AlgorithmIdentifier sha1AlgId = new AlgorithmIdentifier(OIWObjectIdentifiers.idSHA1, new DERNull());
- params.put("SHA1WITHRSAANDMGF1", creatPSSParams(sha1AlgId, 20));
-
- AlgorithmIdentifier sha224AlgId = new AlgorithmIdentifier(NISTObjectIdentifiers.id_sha224, new DERNull());
- params.put("SHA224WITHRSAANDMGF1", creatPSSParams(sha224AlgId, 28));
-
- AlgorithmIdentifier sha256AlgId = new AlgorithmIdentifier(NISTObjectIdentifiers.id_sha256, new DERNull());
- params.put("SHA256WITHRSAANDMGF1", creatPSSParams(sha256AlgId, 32));
-
- AlgorithmIdentifier sha384AlgId = new AlgorithmIdentifier(NISTObjectIdentifiers.id_sha384, new DERNull());
- params.put("SHA384WITHRSAANDMGF1", creatPSSParams(sha384AlgId, 48));
-
- AlgorithmIdentifier sha512AlgId = new AlgorithmIdentifier(NISTObjectIdentifiers.id_sha512, new DERNull());
- params.put("SHA512WITHRSAANDMGF1", creatPSSParams(sha512AlgId, 64));
- }
-
- private static RSASSAPSSparams creatPSSParams(AlgorithmIdentifier hashAlgId, int saltSize)
- {
- return new RSASSAPSSparams(
- hashAlgId,
- new AlgorithmIdentifier(PKCSObjectIdentifiers.id_mgf1, hashAlgId),
- new ASN1Integer(saltSize),
- new ASN1Integer(1));
- }
-
- static ASN1ObjectIdentifier getAlgorithmOID(
- String algorithmName)
- {
- algorithmName = Strings.toUpperCase(algorithmName);
-
- if (algorithms.containsKey(algorithmName))
- {
- return (ASN1ObjectIdentifier)algorithms.get(algorithmName);
- }
-
- return new ASN1ObjectIdentifier(algorithmName);
- }
-
- static AlgorithmIdentifier getSigAlgID(
- ASN1ObjectIdentifier sigOid,
- String algorithmName)
- {
- if (noParams.contains(sigOid))
- {
- return new AlgorithmIdentifier(sigOid);
- }
-
- algorithmName = Strings.toUpperCase(algorithmName);
-
- if (params.containsKey(algorithmName))
- {
- return new AlgorithmIdentifier(sigOid, (ASN1Encodable)params.get(algorithmName));
- }
- else
- {
- return new AlgorithmIdentifier(sigOid, new DERNull());
- }
- }
-
- static Iterator getAlgNames()
- {
- Enumeration e = algorithms.keys();
- List l = new ArrayList();
-
- while (e.hasMoreElements())
- {
- l.add(e.nextElement());
- }
-
- return l.iterator();
- }
-
- static Signature getSignatureInstance(
- String algorithm)
- throws NoSuchAlgorithmException
- {
- return Signature.getInstance(algorithm);
- }
-
- static Signature getSignatureInstance(
- String algorithm,
- String provider)
- throws NoSuchProviderException, NoSuchAlgorithmException
- {
- if (provider != null)
- {
- return Signature.getInstance(algorithm, provider);
- }
- else
- {
- return Signature.getInstance(algorithm);
- }
- }
-
- static byte[] calculateSignature(
- ASN1ObjectIdentifier sigOid,
- String sigName,
- PrivateKey key,
- SecureRandom random,
- ASN1Encodable object)
- throws IOException, NoSuchAlgorithmException, InvalidKeyException, SignatureException
- {
- Signature sig;
-
- if (sigOid == null)
- {
- throw new IllegalStateException("no signature algorithm specified");
- }
-
- sig = X509Util.getSignatureInstance(sigName);
-
- if (random != null)
- {
- sig.initSign(key, random);
- }
- else
- {
- sig.initSign(key);
- }
-
- sig.update(object.toASN1Primitive().getEncoded(ASN1Encoding.DER));
-
- return sig.sign();
- }
-
- static byte[] calculateSignature(
- ASN1ObjectIdentifier sigOid,
- String sigName,
- String provider,
- PrivateKey key,
- SecureRandom random,
- ASN1Encodable object)
- throws IOException, NoSuchProviderException, NoSuchAlgorithmException, InvalidKeyException, SignatureException
- {
- Signature sig;
-
- if (sigOid == null)
- {
- throw new IllegalStateException("no signature algorithm specified");
- }
-
- sig = X509Util.getSignatureInstance(sigName, provider);
-
- if (random != null)
- {
- sig.initSign(key, random);
- }
- else
- {
- sig.initSign(key);
- }
-
- sig.update(object.toASN1Primitive().getEncoded(ASN1Encoding.DER));
-
- return sig.sign();
- }
-
- static class Implementation
- {
- Object engine;
- Provider provider;
-
- Implementation(
- Object engine,
- Provider provider)
- {
- this.engine = engine;
- this.provider = provider;
- }
-
- Object getEngine()
- {
- return engine;
- }
-
- Provider getProvider()
- {
- return provider;
- }
- }
-
- /**
- * see if we can find an algorithm (or its alias and what it represents) in
- * the property table for the given provider.
- */
- static Implementation getImplementation(
- String baseName,
- String algorithm,
- Provider prov)
- throws NoSuchAlgorithmException
- {
- algorithm = Strings.toUpperCase(algorithm);
-
- String alias;
-
- while ((alias = prov.getProperty("Alg.Alias." + baseName + "." + algorithm)) != null)
- {
- algorithm = alias;
- }
-
- String className = prov.getProperty(baseName + "." + algorithm);
-
- if (className != null)
- {
- try
- {
- Class cls;
- ClassLoader clsLoader = prov.getClass().getClassLoader();
-
- if (clsLoader != null)
- {
- cls = clsLoader.loadClass(className);
- }
- else
- {
- cls = Class.forName(className);
- }
-
- return new Implementation(cls.newInstance(), prov);
- }
- catch (ClassNotFoundException e)
- {
- throw new IllegalStateException(
- "algorithm " + algorithm + " in provider " + prov.getName() + " but no class \"" + className + "\" found!");
- }
- catch (Exception e)
- {
- throw new IllegalStateException(
- "algorithm " + algorithm + " in provider " + prov.getName() + " but class \"" + className + "\" inaccessible!");
- }
- }
-
- throw new NoSuchAlgorithmException("cannot find implementation " + algorithm + " for provider " + prov.getName());
- }
-
- /**
- * return an implementation for a given algorithm/provider.
- * If the provider is null, we grab the first avalaible who has the required algorithm.
- */
- static Implementation getImplementation(
- String baseName,
- String algorithm)
- throws NoSuchAlgorithmException
- {
- Provider[] prov = Security.getProviders();
-
- //
- // search every provider looking for the algorithm we want.
- //
- for (int i = 0; i != prov.length; i++)
- {
- //
- // try case insensitive
- //
- Implementation imp = getImplementation(baseName, Strings.toUpperCase(algorithm), prov[i]);
- if (imp != null)
- {
- return imp;
- }
-
- try
- {
- imp = getImplementation(baseName, algorithm, prov[i]);
- }
- catch (NoSuchAlgorithmException e)
- {
- // continue
- }
- }
-
- throw new NoSuchAlgorithmException("cannot find implementation " + algorithm);
- }
-
- static Provider getProvider(String provider)
- throws NoSuchProviderException
- {
- Provider prov = Security.getProvider(provider);
-
- if (prov == null)
- {
- throw new NoSuchProviderException("Provider " + provider + " not found");
- }
-
- return prov;
- }
-}
diff --git a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/x509/X509V1CertificateGenerator.java b/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/x509/X509V1CertificateGenerator.java
deleted file mode 100644
index d038b5cfd..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.3/org/spongycastle/x509/X509V1CertificateGenerator.java
+++ /dev/null
@@ -1,341 +0,0 @@
-package org.spongycastle.x509;
-
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.math.BigInteger;
-import java.security.GeneralSecurityException;
-import java.security.InvalidKeyException;
-import java.security.NoSuchAlgorithmException;
-import java.security.NoSuchProviderException;
-import java.security.PrivateKey;
-import java.security.PublicKey;
-import java.security.SecureRandom;
-import java.security.SignatureException;
-import java.security.cert.CertificateEncodingException;
-import java.security.cert.CertificateParsingException;
-import java.security.cert.X509Certificate;
-import java.util.Date;
-import java.util.Iterator;
-
-import org.spongycastle.asn1.ASN1EncodableVector;
-import org.spongycastle.asn1.ASN1InputStream;
-import org.spongycastle.asn1.ASN1Integer;
-import org.spongycastle.asn1.ASN1Sequence;
-import org.spongycastle.asn1.DERBitString;
-import org.spongycastle.asn1.ASN1ObjectIdentifier;
-import org.spongycastle.asn1.DERSequence;
-import org.spongycastle.asn1.x509.AlgorithmIdentifier;
-import org.spongycastle.asn1.x509.SubjectPublicKeyInfo;
-import org.spongycastle.asn1.x509.TBSCertificate;
-import org.spongycastle.asn1.x509.Time;
-import org.spongycastle.asn1.x509.V1TBSCertificateGenerator;
-import org.spongycastle.asn1.x509.Certificate;
-import org.spongycastle.asn1.x509.X509Name;
-import org.spongycastle.jce.provider.X509CertificateObject;
-
-/**
- * class to produce an X.509 Version 1 certificate.
- * @deprecated use org.spongycastle.cert.X509v1CertificateBuilder.
- */
-public class X509V1CertificateGenerator
-{
- private V1TBSCertificateGenerator tbsGen;
- private ASN1ObjectIdentifier sigOID;
- private AlgorithmIdentifier sigAlgId;
- private String signatureAlgorithm;
-
- public X509V1CertificateGenerator()
- {
- tbsGen = new V1TBSCertificateGenerator();
- }
-
- /**
- * reset the generator
- */
- public void reset()
- {
- tbsGen = new V1TBSCertificateGenerator();
- }
-
- /**
- * set the serial number for the certificate.
- */
- public void setSerialNumber(
- BigInteger serialNumber)
- {
- if (serialNumber.compareTo(BigInteger.ZERO) <= 0)
- {
- throw new IllegalArgumentException("serial number must be a positive integer");
- }
-
- tbsGen.setSerialNumber(new ASN1Integer(serialNumber));
- }
-
- /**
- * Set the issuer distinguished name - the issuer is the entity whose private key is used to sign the
- * certificate.
- */
- public void setIssuerDN(
- X509Name issuer)
- {
- tbsGen.setIssuer(issuer);
- }
-
- public void setNotBefore(
- Date date)
- {
- tbsGen.setStartDate(new Time(date));
- }
-
- public void setNotAfter(
- Date date)
- {
- tbsGen.setEndDate(new Time(date));
- }
-
- /**
- * Set the subject distinguished name. The subject describes the entity associated with the public key.
- */
- public void setSubjectDN(
- X509Name subject)
- {
- tbsGen.setSubject(subject);
- }
-
- public void setPublicKey(
- PublicKey key)
- {
- try
- {
- tbsGen.setSubjectPublicKeyInfo(new SubjectPublicKeyInfo((ASN1Sequence)new ASN1InputStream(
- new ByteArrayInputStream(key.getEncoded())).readObject()));
- }
- catch (Exception e)
- {
- throw new IllegalArgumentException("unable to process key - " + e.toString());
- }
- }
-
- /**
- * Set the signature algorithm. This can be either a name or an OID, names
- * are treated as case insensitive.
- *
- * @param signatureAlgorithm string representation of the algorithm name.
- */
- public void setSignatureAlgorithm(
- String signatureAlgorithm)
- {
- this.signatureAlgorithm = signatureAlgorithm;
-
- try
- {
- sigOID = X509Util.getAlgorithmOID(signatureAlgorithm);
- }
- catch (Exception e)
- {
- throw new IllegalArgumentException("Unknown signature type requested");
- }
-
- sigAlgId = X509Util.getSigAlgID(sigOID, signatureAlgorithm);
-
- tbsGen.setSignature(sigAlgId);
- }
-
- /**
- * generate an X509 certificate, based on the current issuer and subject
- * using the default provider "SC".
- * @deprecated use generate(key, "SC")
- */
- public X509Certificate generateX509Certificate(
- PrivateKey key)
- throws SecurityException, SignatureException, InvalidKeyException
- {
- try
- {
- return generateX509Certificate(key, "SC", null);
- }
- catch (NoSuchProviderException e)
- {
- throw new SecurityException("BC provider not installed!");
- }
- }
-
- /**
- * generate an X509 certificate, based on the current issuer and subject
- * using the default provider "SC" and the passed in source of randomness
- * @deprecated use generate(key, random, "SC")
- */
- public X509Certificate generateX509Certificate(
- PrivateKey key,
- SecureRandom random)
- throws SecurityException, SignatureException, InvalidKeyException
- {
- try
- {
- return generateX509Certificate(key, "SC", random);
- }
- catch (NoSuchProviderException e)
- {
- throw new SecurityException("BC provider not installed!");
- }
- }
-
- /**
- * generate an X509 certificate, based on the current issuer and subject,
- * using the passed in provider for the signing, and the passed in source
- * of randomness (if required).
- * @deprecated use generate()
- */
- public X509Certificate generateX509Certificate(
- PrivateKey key,
- String provider)
- throws NoSuchProviderException, SecurityException, SignatureException, InvalidKeyException
- {
- return generateX509Certificate(key, provider, null);
- }
-
- /**
- * generate an X509 certificate, based on the current issuer and subject,
- * using the passed in provider for the signing, and the passed in source
- * of randomness (if required).
- * @deprecated use generate()
- */
- public X509Certificate generateX509Certificate(
- PrivateKey key,
- String provider,
- SecureRandom random)
- throws NoSuchProviderException, SecurityException, SignatureException, InvalidKeyException
- {
- try
- {
- return generate(key, provider, random);
- }
- catch (NoSuchProviderException e)
- {
- throw e;
- }
- catch (SignatureException e)
- {
- throw e;
- }
- catch (InvalidKeyException e)
- {
- throw e;
- }
- catch (GeneralSecurityException e)
- {
- throw new SecurityException("exception: " + e);
- }
- }
-
- /**
- * generate an X509 certificate, based on the current issuer and subject
- * using the default provider.
- * TrustAnchor
object if found or
- * null
if not.
- * @throws AnnotatedException if a TrustAnchor was found but the signature verification
- * on the given certificate has thrown an exception.
- */
- protected static TrustAnchor findTrustAnchor(
- X509Certificate cert,
- Set trustAnchors)
- throws AnnotatedException
- {
- return findTrustAnchor(cert, trustAnchors, null);
- }
-
- /**
- * Search the given Set of TrustAnchor's for one that is the
- * issuer of the given X509 certificate. Uses the specified
- * provider for signature verification, or the default provider
- * if null.
- *
- * @param cert the X509 certificate
- * @param trustAnchors a Set of TrustAnchor's
- * @param sigProvider the provider to use for signature verification
- * @return the TrustAnchor
object if found or
- * null
if not.
- * @throws AnnotatedException if a TrustAnchor was found but the signature verification
- * on the given certificate has thrown an exception.
- */
- protected static TrustAnchor findTrustAnchor(
- X509Certificate cert,
- Set trustAnchors,
- String sigProvider)
- throws AnnotatedException
- {
- TrustAnchor trust = null;
- PublicKey trustPublicKey = null;
- Exception invalidKeyEx = null;
-
- X509CertSelector certSelectX509 = new X509CertSelector();
- X500Principal certIssuer = getEncodedIssuerPrincipal(cert);
-
- try
- {
- certSelectX509.setSubject(certIssuer.getEncoded());
- }
- catch (IOException ex)
- {
- throw new AnnotatedException("Cannot set subject search criteria for trust anchor.", ex);
- }
-
- Iterator iter = trustAnchors.iterator();
- while (iter.hasNext() && trust == null)
- {
- trust = (TrustAnchor)iter.next();
- if (trust.getTrustedCert() != null)
- {
- if (certSelectX509.match(trust.getTrustedCert()))
- {
- trustPublicKey = trust.getTrustedCert().getPublicKey();
- }
- else
- {
- trust = null;
- }
- }
- else if (trust.getCAName() != null
- && trust.getCAPublicKey() != null)
- {
- try
- {
- X500Principal caName = new X500Principal(trust.getCAName());
- if (certIssuer.equals(caName))
- {
- trustPublicKey = trust.getCAPublicKey();
- }
- else
- {
- trust = null;
- }
- }
- catch (IllegalArgumentException ex)
- {
- trust = null;
- }
- }
- else
- {
- trust = null;
- }
-
- if (trustPublicKey != null)
- {
- try
- {
- verifyX509Certificate(cert, trustPublicKey, sigProvider);
- }
- catch (Exception ex)
- {
- invalidKeyEx = ex;
- trust = null;
- trustPublicKey = null;
- }
- }
- }
-
- if (trust == null && invalidKeyEx != null)
- {
- throw new AnnotatedException("TrustAnchor found but certificate validation failed.", invalidKeyEx);
- }
-
- return trust;
- }
-
- protected static void addAdditionalStoresFromAltNames(
- X509Certificate cert,
- ExtendedPKIXParameters pkixParams)
- throws CertificateParsingException
- {
- // if in the IssuerAltName extension an URI
- // is given, add an additinal X.509 store
- if (cert.getIssuerAlternativeNames() != null)
- {
- Iterator it = cert.getIssuerAlternativeNames().iterator();
- while (it.hasNext())
- {
- // look for URI
- List list = (List)it.next();
- if (list.get(0).equals(Integers.valueOf(GeneralName.uniformResourceIdentifier)))
- {
- // found
- String temp = (String)list.get(1);
- CertPathValidatorUtilities.addAdditionalStoreFromLocation(temp, pkixParams);
- }
- }
- }
- }
-
- /**
- * Returns the issuer of an attribute certificate or certificate.
- *
- * @param cert The attribute certificate or certificate.
- * @return The issuer as X500Principal
.
- */
- protected static X500Principal getEncodedIssuerPrincipal(
- Object cert)
- {
- if (cert instanceof X509Certificate)
- {
- return ((X509Certificate)cert).getIssuerX500Principal();
- }
- else
- {
- return (X500Principal)((X509AttributeCertificate)cert).getIssuer().getPrincipals()[0];
- }
- }
-
- protected static Date getValidDate(PKIXParameters paramsPKIX)
- {
- Date validDate = paramsPKIX.getDate();
-
- if (validDate == null)
- {
- validDate = new Date();
- }
-
- return validDate;
- }
-
- protected static X500Principal getSubjectPrincipal(X509Certificate cert)
- {
- return cert.getSubjectX500Principal();
- }
-
- protected static boolean isSelfIssued(X509Certificate cert)
- {
- return cert.getSubjectDN().equals(cert.getIssuerDN());
- }
-
-
- /**
- * Extract the value of the given extension, if it exists.
- *
- * @param ext The extension object.
- * @param oid The object identifier to obtain.
- * @throws AnnotatedException if the extension cannot be read.
- */
- protected static ASN1Primitive getExtensionValue(
- java.security.cert.X509Extension ext,
- String oid)
- throws AnnotatedException
- {
- byte[] bytes = ext.getExtensionValue(oid);
- if (bytes == null)
- {
- return null;
- }
-
- return getObject(oid, bytes);
- }
-
- private static ASN1Primitive getObject(
- String oid,
- byte[] ext)
- throws AnnotatedException
- {
- try
- {
- ASN1InputStream aIn = new ASN1InputStream(ext);
- ASN1OctetString octs = (ASN1OctetString)aIn.readObject();
-
- aIn = new ASN1InputStream(octs.getOctets());
- return aIn.readObject();
- }
- catch (Exception e)
- {
- throw new AnnotatedException("exception processing extension " + oid, e);
- }
- }
-
- protected static X500Principal getIssuerPrincipal(X509CRL crl)
- {
- return crl.getIssuerX500Principal();
- }
-
- protected static AlgorithmIdentifier getAlgorithmIdentifier(
- PublicKey key)
- throws CertPathValidatorException
- {
- try
- {
- ASN1InputStream aIn = new ASN1InputStream(key.getEncoded());
-
- SubjectPublicKeyInfo info = SubjectPublicKeyInfo.getInstance(aIn.readObject());
-
- return info.getAlgorithmId();
- }
- catch (Exception e)
- {
- throw new ExtCertPathValidatorException("Subject public key cannot be decoded.", e);
- }
- }
-
- // crl checking
-
-
- //
- // policy checking
- //
-
- protected static final Set getQualifierSet(ASN1Sequence qualifiers)
- throws CertPathValidatorException
- {
- Set pq = new HashSet();
-
- if (qualifiers == null)
- {
- return pq;
- }
-
- ByteArrayOutputStream bOut = new ByteArrayOutputStream();
- ASN1OutputStream aOut = new ASN1OutputStream(bOut);
-
- Enumeration e = qualifiers.getObjects();
-
- while (e.hasMoreElements())
- {
- try
- {
- aOut.writeObject((ASN1Encodable)e.nextElement());
-
- pq.add(new PolicyQualifierInfo(bOut.toByteArray()));
- }
- catch (IOException ex)
- {
- throw new ExtCertPathValidatorException("Policy qualifier info cannot be decoded.", ex);
- }
-
- bOut.reset();
- }
-
- return pq;
- }
-
- protected static PKIXPolicyNode removePolicyNode(
- PKIXPolicyNode validPolicyTree,
- List[] policyNodes,
- PKIXPolicyNode _node)
- {
- PKIXPolicyNode _parent = (PKIXPolicyNode)_node.getParent();
-
- if (validPolicyTree == null)
- {
- return null;
- }
-
- if (_parent == null)
- {
- for (int j = 0; j < policyNodes.length; j++)
- {
- policyNodes[j] = new ArrayList();
- }
-
- return null;
- }
- else
- {
- _parent.removeChild(_node);
- removePolicyNodeRecurse(policyNodes, _node);
-
- return validPolicyTree;
- }
- }
-
- private static void removePolicyNodeRecurse(
- List[] policyNodes,
- PKIXPolicyNode _node)
- {
- policyNodes[_node.getDepth()].remove(_node);
-
- if (_node.hasChildren())
- {
- Iterator _iter = _node.getChildren();
- while (_iter.hasNext())
- {
- PKIXPolicyNode _child = (PKIXPolicyNode)_iter.next();
- removePolicyNodeRecurse(policyNodes, _child);
- }
- }
- }
-
-
- protected static boolean processCertD1i(
- int index,
- List[] policyNodes,
- ASN1ObjectIdentifier pOid,
- Set pq)
- {
- List policyNodeVec = policyNodes[index - 1];
-
- for (int j = 0; j < policyNodeVec.size(); j++)
- {
- PKIXPolicyNode node = (PKIXPolicyNode)policyNodeVec.get(j);
- Set expectedPolicies = node.getExpectedPolicies();
-
- if (expectedPolicies.contains(pOid.getId()))
- {
- Set childExpectedPolicies = new HashSet();
- childExpectedPolicies.add(pOid.getId());
-
- PKIXPolicyNode child = new PKIXPolicyNode(new ArrayList(),
- index,
- childExpectedPolicies,
- node,
- pq,
- pOid.getId(),
- false);
- node.addChild(child);
- policyNodes[index].add(child);
-
- return true;
- }
- }
-
- return false;
- }
-
- protected static void processCertD1ii(
- int index,
- List[] policyNodes,
- ASN1ObjectIdentifier _poid,
- Set _pq)
- {
- List policyNodeVec = policyNodes[index - 1];
-
- for (int j = 0; j < policyNodeVec.size(); j++)
- {
- PKIXPolicyNode _node = (PKIXPolicyNode)policyNodeVec.get(j);
-
- if (ANY_POLICY.equals(_node.getValidPolicy()))
- {
- Set _childExpectedPolicies = new HashSet();
- _childExpectedPolicies.add(_poid.getId());
-
- PKIXPolicyNode _child = new PKIXPolicyNode(new ArrayList(),
- index,
- _childExpectedPolicies,
- _node,
- _pq,
- _poid.getId(),
- false);
- _node.addChild(_child);
- policyNodes[index].add(_child);
- return;
- }
- }
- }
-
- protected static void prepareNextCertB1(
- int i,
- List[] policyNodes,
- String id_p,
- Map m_idp,
- X509Certificate cert
- )
- throws AnnotatedException, CertPathValidatorException
- {
- boolean idp_found = false;
- Iterator nodes_i = policyNodes[i].iterator();
- while (nodes_i.hasNext())
- {
- PKIXPolicyNode node = (PKIXPolicyNode)nodes_i.next();
- if (node.getValidPolicy().equals(id_p))
- {
- idp_found = true;
- node.expectedPolicies = (Set)m_idp.get(id_p);
- break;
- }
- }
-
- if (!idp_found)
- {
- nodes_i = policyNodes[i].iterator();
- while (nodes_i.hasNext())
- {
- PKIXPolicyNode node = (PKIXPolicyNode)nodes_i.next();
- if (ANY_POLICY.equals(node.getValidPolicy()))
- {
- Set pq = null;
- ASN1Sequence policies = null;
- try
- {
- policies = DERSequence.getInstance(getExtensionValue(cert, CERTIFICATE_POLICIES));
- }
- catch (Exception e)
- {
- throw new AnnotatedException("Certificate policies cannot be decoded.", e);
- }
- Enumeration e = policies.getObjects();
- while (e.hasMoreElements())
- {
- PolicyInformation pinfo = null;
-
- try
- {
- pinfo = PolicyInformation.getInstance(e.nextElement());
- }
- catch (Exception ex)
- {
- throw new AnnotatedException("Policy information cannot be decoded.", ex);
- }
- if (ANY_POLICY.equals(pinfo.getPolicyIdentifier().getId()))
- {
- try
- {
- pq = getQualifierSet(pinfo.getPolicyQualifiers());
- }
- catch (CertPathValidatorException ex)
- {
- throw new ExtCertPathValidatorException(
- "Policy qualifier info set could not be built.", ex);
- }
- break;
- }
- }
- boolean ci = false;
- if (cert.getCriticalExtensionOIDs() != null)
- {
- ci = cert.getCriticalExtensionOIDs().contains(CERTIFICATE_POLICIES);
- }
-
- PKIXPolicyNode p_node = (PKIXPolicyNode)node.getParent();
- if (ANY_POLICY.equals(p_node.getValidPolicy()))
- {
- PKIXPolicyNode c_node = new PKIXPolicyNode(
- new ArrayList(), i,
- (Set)m_idp.get(id_p),
- p_node, pq, id_p, ci);
- p_node.addChild(c_node);
- policyNodes[i].add(c_node);
- }
- break;
- }
- }
- }
- }
-
- protected static PKIXPolicyNode prepareNextCertB2(
- int i,
- List[] policyNodes,
- String id_p,
- PKIXPolicyNode validPolicyTree)
- {
- Iterator nodes_i = policyNodes[i].iterator();
- while (nodes_i.hasNext())
- {
- PKIXPolicyNode node = (PKIXPolicyNode)nodes_i.next();
- if (node.getValidPolicy().equals(id_p))
- {
- PKIXPolicyNode p_node = (PKIXPolicyNode)node.getParent();
- p_node.removeChild(node);
- nodes_i.remove();
- for (int k = (i - 1); k >= 0; k--)
- {
- List nodes = policyNodes[k];
- for (int l = 0; l < nodes.size(); l++)
- {
- PKIXPolicyNode node2 = (PKIXPolicyNode)nodes.get(l);
- if (!node2.hasChildren())
- {
- validPolicyTree = removePolicyNode(validPolicyTree, policyNodes, node2);
- if (validPolicyTree == null)
- {
- break;
- }
- }
- }
- }
- }
- }
- return validPolicyTree;
- }
-
- protected static boolean isAnyPolicy(
- Set policySet)
- {
- return policySet == null || policySet.contains(ANY_POLICY) || policySet.isEmpty();
- }
-
- protected static void addAdditionalStoreFromLocation(String location,
- ExtendedPKIXParameters pkixParams)
- {
- if (pkixParams.isAdditionalLocationsEnabled())
- {
- try
- {
- if (location.startsWith("ldap://"))
- {
- // ldap://directory.d-trust.net/CN=D-TRUST
- // Qualified CA 2003 1:PN,O=D-Trust GmbH,C=DE
- // skip "ldap://"
- location = location.substring(7);
- // after first / baseDN starts
- String base = null;
- String url = null;
- if (location.indexOf("/") != -1)
- {
- base = location.substring(location.indexOf("/"));
- // URL
- url = "ldap://"
- + location.substring(0, location.indexOf("/"));
- }
- else
- {
- url = "ldap://" + location;
- }
- // use all purpose parameters
- X509LDAPCertStoreParameters params = new X509LDAPCertStoreParameters.Builder(
- url, base).build();
- pkixParams.addAdditionalStore(X509Store.getInstance(
- "CERTIFICATE/LDAP", params, BouncyCastleProvider.PROVIDER_NAME));
- pkixParams.addAdditionalStore(X509Store.getInstance(
- "CRL/LDAP", params, BouncyCastleProvider.PROVIDER_NAME));
- pkixParams.addAdditionalStore(X509Store.getInstance(
- "ATTRIBUTECERTIFICATE/LDAP", params, BouncyCastleProvider.PROVIDER_NAME));
- pkixParams.addAdditionalStore(X509Store.getInstance(
- "CERTIFICATEPAIR/LDAP", params, BouncyCastleProvider.PROVIDER_NAME));
- }
- }
- catch (Exception e)
- {
- // cannot happen
- throw new RuntimeException("Exception adding X.509 stores.");
- }
- }
- }
-
- /**
- * Return a Collection of all certificates or attribute certificates found
- * in the X509Store's that are matching the certSelect criteriums.
- *
- * @param certSelect a {@link Selector} object that will be used to select
- * the certificates
- * @param certStores a List containing only {@link X509Store} objects. These
- * are used to search for certificates.
- * @return a Collection of all found {@link X509Certificate} or
- * {@link org.spongycastle.x509.X509AttributeCertificate} objects.
- * May be empty but never null
.
- */
- protected static Collection findCertificates(X509CertStoreSelector certSelect,
- List certStores)
- throws AnnotatedException
- {
- Set certs = new HashSet();
- Iterator iter = certStores.iterator();
-
- while (iter.hasNext())
- {
- Object obj = iter.next();
-
- if (obj instanceof X509Store)
- {
- X509Store certStore = (X509Store)obj;
- try
- {
- certs.addAll(certStore.getMatches(certSelect));
- }
- catch (StoreException e)
- {
- throw new AnnotatedException(
- "Problem while picking certificates from X.509 store.", e);
- }
- }
- else
- {
- CertStore certStore = (CertStore)obj;
-
- try
- {
- certs.addAll(certStore.getCertificates(certSelect));
- }
- catch (CertStoreException e)
- {
- throw new AnnotatedException(
- "Problem while picking certificates from certificate store.",
- e);
- }
- }
- }
- return certs;
- }
-
- protected static Collection findCertificates(X509AttributeCertStoreSelector certSelect,
- List certStores)
- throws AnnotatedException
- {
- Set certs = new HashSet();
- Iterator iter = certStores.iterator();
-
- while (iter.hasNext())
- {
- Object obj = iter.next();
-
- if (obj instanceof X509Store)
- {
- X509Store certStore = (X509Store)obj;
- try
- {
- certs.addAll(certStore.getMatches(certSelect));
- }
- catch (StoreException e)
- {
- throw new AnnotatedException(
- "Problem while picking certificates from X.509 store.", e);
- }
- }
- }
- return certs;
- }
-
- protected static void addAdditionalStoresFromCRLDistributionPoint(
- CRLDistPoint crldp, ExtendedPKIXParameters pkixParams)
- throws AnnotatedException
- {
- if (crldp != null)
- {
- DistributionPoint dps[] = null;
- try
- {
- dps = crldp.getDistributionPoints();
- }
- catch (Exception e)
- {
- throw new AnnotatedException(
- "Distribution points could not be read.", e);
- }
- for (int i = 0; i < dps.length; i++)
- {
- DistributionPointName dpn = dps[i].getDistributionPoint();
- // look for URIs in fullName
- if (dpn != null)
- {
- if (dpn.getType() == DistributionPointName.FULL_NAME)
- {
- GeneralName[] genNames = GeneralNames.getInstance(
- dpn.getName()).getNames();
- // look for an URI
- for (int j = 0; j < genNames.length; j++)
- {
- if (genNames[j].getTagNo() == GeneralName.uniformResourceIdentifier)
- {
- String location = DERIA5String.getInstance(
- genNames[j].getName()).getString();
- CertPathValidatorUtilities
- .addAdditionalStoreFromLocation(location,
- pkixParams);
- }
- }
- }
- }
- }
- }
- }
-
- /**
- * Add the CRL issuers from the cRLIssuer field of the distribution point or
- * from the certificate if not given to the issuer criterion of the
- * selector
.
- *
- * The issuerPrincipals
are a collection with a single
- * X500Principal
for X509Certificate
s. For
- * {@link X509AttributeCertificate}s the issuer may contain more than one
- * X500Principal
.
- *
- * @param dp The distribution point.
- * @param issuerPrincipals The issuers of the certificate or attribute
- * certificate which contains the distribution point.
- * @param selector The CRL selector.
- * @param pkixParams The PKIX parameters containing the cert stores.
- * @throws AnnotatedException if an exception occurs while processing.
- * @throws ClassCastException if issuerPrincipals
does not
- * contain only X500Principal
s.
- */
- protected static void getCRLIssuersFromDistributionPoint(
- DistributionPoint dp,
- Collection issuerPrincipals,
- X509CRLSelector selector,
- ExtendedPKIXParameters pkixParams)
- throws AnnotatedException
- {
- List issuers = new ArrayList();
- // indirect CRL
- if (dp.getCRLIssuer() != null)
- {
- GeneralName genNames[] = dp.getCRLIssuer().getNames();
- // look for a DN
- for (int j = 0; j < genNames.length; j++)
- {
- if (genNames[j].getTagNo() == GeneralName.directoryName)
- {
- try
- {
- issuers.add(new X500Principal(genNames[j].getName()
- .toASN1Primitive().getEncoded()));
- }
- catch (IOException e)
- {
- throw new AnnotatedException(
- "CRL issuer information from distribution point cannot be decoded.",
- e);
- }
- }
- }
- }
- else
- {
- /*
- * certificate issuer is CRL issuer, distributionPoint field MUST be
- * present.
- */
- if (dp.getDistributionPoint() == null)
- {
- throw new AnnotatedException(
- "CRL issuer is omitted from distribution point but no distributionPoint field present.");
- }
- // add and check issuer principals
- for (Iterator it = issuerPrincipals.iterator(); it.hasNext(); )
- {
- issuers.add((X500Principal)it.next());
- }
- }
- // TODO: is not found although this should correctly add the rel name. selector of Sun is buggy here or PKI test case is invalid
- // distributionPoint
-// if (dp.getDistributionPoint() != null)
-// {
-// // look for nameRelativeToCRLIssuer
-// if (dp.getDistributionPoint().getType() == DistributionPointName.NAME_RELATIVE_TO_CRL_ISSUER)
-// {
-// // append fragment to issuer, only one
-// // issuer can be there, if this is given
-// if (issuers.size() != 1)
-// {
-// throw new AnnotatedException(
-// "nameRelativeToCRLIssuer field is given but more than one CRL issuer is given.");
-// }
-// ASN1Encodable relName = dp.getDistributionPoint().getName();
-// Iterator it = issuers.iterator();
-// List issuersTemp = new ArrayList(issuers.size());
-// while (it.hasNext())
-// {
-// Enumeration e = null;
-// try
-// {
-// e = ASN1Sequence.getInstance(
-// new ASN1InputStream(((X500Principal) it.next())
-// .getEncoded()).readObject()).getObjects();
-// }
-// catch (IOException ex)
-// {
-// throw new AnnotatedException(
-// "Cannot decode CRL issuer information.", ex);
-// }
-// ASN1EncodableVector v = new ASN1EncodableVector();
-// while (e.hasMoreElements())
-// {
-// v.add((ASN1Encodable) e.nextElement());
-// }
-// v.add(relName);
-// issuersTemp.add(new X500Principal(new DERSequence(v)
-// .getDEREncoded()));
-// }
-// issuers.clear();
-// issuers.addAll(issuersTemp);
-// }
-// }
- Iterator it = issuers.iterator();
- while (it.hasNext())
- {
- try
- {
- selector.addIssuerName(((X500Principal)it.next()).getEncoded());
- }
- catch (IOException ex)
- {
- throw new AnnotatedException(
- "Cannot decode CRL issuer information.", ex);
- }
- }
- }
-
- private static BigInteger getSerialNumber(
- Object cert)
- {
- if (cert instanceof X509Certificate)
- {
- return ((X509Certificate)cert).getSerialNumber();
- }
- else
- {
- return ((X509AttributeCertificate)cert).getSerialNumber();
- }
- }
-
- protected static void getCertStatus(
- Date validDate,
- X509CRL crl,
- Object cert,
- CertStatus certStatus)
- throws AnnotatedException
- {
- X509CRLEntry crl_entry = null;
-
- boolean isIndirect;
- try
- {
- isIndirect = X509CRLObject.isIndirectCRL(crl);
- }
- catch (CRLException exception)
- {
- throw new AnnotatedException("Failed check for indirect CRL.", exception);
- }
-
- if (isIndirect)
- {
- if (!(crl instanceof X509CRLObject))
- {
- try
- {
- crl = new X509CRLObject(CertificateList.getInstance(crl.getEncoded()));
- }
- catch (CRLException exception)
- {
- throw new AnnotatedException("Failed to recode indirect CRL.", exception);
- }
- }
-
- crl_entry = crl.getRevokedCertificate(getSerialNumber(cert));
-
- if (crl_entry == null)
- {
- return;
- }
-
- X500Principal certIssuer = ((X509CRLEntryObject)crl_entry).getCertificateIssuer();
-
- if (certIssuer == null)
- {
- certIssuer = getIssuerPrincipal(crl);
- }
-
- if (!getEncodedIssuerPrincipal(cert).equals(certIssuer))
- {
- return;
- }
- }
- else if (!getEncodedIssuerPrincipal(cert).equals(getIssuerPrincipal(crl)))
- {
- return; // not for our issuer, ignore
- }
- else
- {
- crl_entry = crl.getRevokedCertificate(getSerialNumber(cert));
-
- if (crl_entry == null)
- {
- return;
- }
- }
-
- ASN1Enumerated reasonCode = null;
- if (crl_entry.hasExtensions())
- {
- try
- {
- reasonCode = ASN1Enumerated
- .getInstance(CertPathValidatorUtilities
- .getExtensionValue(crl_entry,
- X509Extension.reasonCode.getId()));
- }
- catch (Exception e)
- {
- throw new AnnotatedException(
- "Reason code CRL entry extension could not be decoded.",
- e);
- }
- }
-
- // for reason keyCompromise, caCompromise, aACompromise or
- // unspecified
- if (!(validDate.getTime() < crl_entry.getRevocationDate().getTime())
- || reasonCode == null
- || reasonCode.getValue().intValue() == 0
- || reasonCode.getValue().intValue() == 1
- || reasonCode.getValue().intValue() == 2
- || reasonCode.getValue().intValue() == 8)
- {
-
- // (i) or (j) (1)
- if (reasonCode != null)
- {
- certStatus.setCertStatus(reasonCode.getValue().intValue());
- }
- // (i) or (j) (2)
- else
- {
- certStatus.setCertStatus(CRLReason.unspecified);
- }
- certStatus.setRevocationDate(crl_entry.getRevocationDate());
- }
- }
-
- /**
- * Fetches delta CRLs according to RFC 3280 section 5.2.4.
- *
- * @param currentDate The date for which the delta CRLs must be valid.
- * @param paramsPKIX The extended PKIX parameters.
- * @param completeCRL The complete CRL the delta CRL is for.
- * @return A Set
of X509CRL
s with delta CRLs.
- * @throws AnnotatedException if an exception occurs while picking the delta
- * CRLs.
- */
- protected static Set getDeltaCRLs(Date currentDate,
- ExtendedPKIXParameters paramsPKIX, X509CRL completeCRL)
- throws AnnotatedException
- {
-
- X509CRLStoreSelector deltaSelect = new X509CRLStoreSelector();
-
- // 5.2.4 (a)
- try
- {
- deltaSelect.addIssuerName(CertPathValidatorUtilities
- .getIssuerPrincipal(completeCRL).getEncoded());
- }
- catch (IOException e)
- {
- throw new AnnotatedException("Cannot extract issuer from CRL.", e);
- }
-
- BigInteger completeCRLNumber = null;
- try
- {
- ASN1Primitive derObject = CertPathValidatorUtilities.getExtensionValue(completeCRL,
- CRL_NUMBER);
- if (derObject != null)
- {
- completeCRLNumber = ASN1Integer.getInstance(derObject).getPositiveValue();
- }
- }
- catch (Exception e)
- {
- throw new AnnotatedException(
- "CRL number extension could not be extracted from CRL.", e);
- }
-
- // 5.2.4 (b)
- byte[] idp = null;
- try
- {
- idp = completeCRL.getExtensionValue(ISSUING_DISTRIBUTION_POINT);
- }
- catch (Exception e)
- {
- throw new AnnotatedException(
- "Issuing distribution point extension value could not be read.",
- e);
- }
-
- // 5.2.4 (d)
-
- deltaSelect.setMinCRLNumber(completeCRLNumber == null ? null : completeCRLNumber
- .add(BigInteger.valueOf(1)));
-
- deltaSelect.setIssuingDistributionPoint(idp);
- deltaSelect.setIssuingDistributionPointEnabled(true);
-
- // 5.2.4 (c)
- deltaSelect.setMaxBaseCRLNumber(completeCRLNumber);
-
- // find delta CRLs
- Set temp = CRL_UTIL.findCRLs(deltaSelect, paramsPKIX, currentDate);
-
- Set result = new HashSet();
-
- for (Iterator it = temp.iterator(); it.hasNext(); )
- {
- X509CRL crl = (X509CRL)it.next();
-
- if (isDeltaCRL(crl))
- {
- result.add(crl);
- }
- }
-
- return result;
- }
-
- private static boolean isDeltaCRL(X509CRL crl)
- {
- Set critical = crl.getCriticalExtensionOIDs();
-
- if (critical == null)
- {
- return false;
- }
-
- return critical.contains(RFC3280CertPathUtilities.DELTA_CRL_INDICATOR);
- }
-
- /**
- * Fetches complete CRLs according to RFC 3280.
- *
- * @param dp The distribution point for which the complete CRL
- * @param cert The X509Certificate
or
- * {@link org.spongycastle.x509.X509AttributeCertificate} for
- * which the CRL should be searched.
- * @param currentDate The date for which the delta CRLs must be valid.
- * @param paramsPKIX The extended PKIX parameters.
- * @return A Set
of X509CRL
s with complete
- * CRLs.
- * @throws AnnotatedException if an exception occurs while picking the CRLs
- * or no CRLs are found.
- */
- protected static Set getCompleteCRLs(DistributionPoint dp, Object cert,
- Date currentDate, ExtendedPKIXParameters paramsPKIX)
- throws AnnotatedException
- {
- X509CRLStoreSelector crlselect = new X509CRLStoreSelector();
- try
- {
- Set issuers = new HashSet();
- if (cert instanceof X509AttributeCertificate)
- {
- issuers.add(((X509AttributeCertificate)cert)
- .getIssuer().getPrincipals()[0]);
- }
- else
- {
- issuers.add(getEncodedIssuerPrincipal(cert));
- }
- CertPathValidatorUtilities.getCRLIssuersFromDistributionPoint(dp, issuers, crlselect, paramsPKIX);
- }
- catch (AnnotatedException e)
- {
- throw new AnnotatedException(
- "Could not get issuer information from distribution point.", e);
- }
- if (cert instanceof X509Certificate)
- {
- crlselect.setCertificateChecking((X509Certificate)cert);
- }
- else if (cert instanceof X509AttributeCertificate)
- {
- crlselect.setAttrCertificateChecking((X509AttributeCertificate)cert);
- }
-
-
- crlselect.setCompleteCRLEnabled(true);
-
- Set crls = CRL_UTIL.findCRLs(crlselect, paramsPKIX, currentDate);
-
- if (crls.isEmpty())
- {
- if (cert instanceof X509AttributeCertificate)
- {
- X509AttributeCertificate aCert = (X509AttributeCertificate)cert;
-
- throw new AnnotatedException("No CRLs found for issuer \"" + aCert.getIssuer().getPrincipals()[0] + "\"");
- }
- else
- {
- X509Certificate xCert = (X509Certificate)cert;
-
- throw new AnnotatedException("No CRLs found for issuer \"" + xCert.getIssuerX500Principal() + "\"");
- }
- }
- return crls;
- }
-
- protected static Date getValidCertDateFromValidityModel(
- ExtendedPKIXParameters paramsPKIX, CertPath certPath, int index)
- throws AnnotatedException
- {
- if (paramsPKIX.getValidityModel() == ExtendedPKIXParameters.CHAIN_VALIDITY_MODEL)
- {
- // if end cert use given signing/encryption/... time
- if (index <= 0)
- {
- return CertPathValidatorUtilities.getValidDate(paramsPKIX);
- // else use time when previous cert was created
- }
- else
- {
- if (index - 1 == 0)
- {
- ASN1GeneralizedTime dateOfCertgen = null;
- try
- {
- byte[] extBytes = ((X509Certificate)certPath.getCertificates().get(index - 1)).getExtensionValue(ISISMTTObjectIdentifiers.id_isismtt_at_dateOfCertGen.getId());
- if (extBytes != null)
- {
- dateOfCertgen = ASN1GeneralizedTime.getInstance(ASN1Primitive.fromByteArray(extBytes));
- }
- }
- catch (IOException e)
- {
- throw new AnnotatedException(
- "Date of cert gen extension could not be read.");
- }
- catch (IllegalArgumentException e)
- {
- throw new AnnotatedException(
- "Date of cert gen extension could not be read.");
- }
- if (dateOfCertgen != null)
- {
- try
- {
- return dateOfCertgen.getDate();
- }
- catch (ParseException e)
- {
- throw new AnnotatedException(
- "Date from date of cert gen extension could not be parsed.",
- e);
- }
- }
- return ((X509Certificate)certPath.getCertificates().get(
- index - 1)).getNotBefore();
- }
- else
- {
- return ((X509Certificate)certPath.getCertificates().get(
- index - 1)).getNotBefore();
- }
- }
- }
- else
- {
- return getValidDate(paramsPKIX);
- }
- }
-
- /**
- * Return the next working key inheriting DSA parameters if necessary.
- * PublicKey
. The list is searched upwards, meaning the end
- * certificate is at position 0 and previous certificates are following.
- * index
extended with DSA parameters if applicable.
- * @throws AnnotatedException if DSA parameters cannot be inherited.
- */
- protected static PublicKey getNextWorkingKey(List certs, int index)
- throws CertPathValidatorException
- {
- Certificate cert = (Certificate)certs.get(index);
- PublicKey pubKey = cert.getPublicKey();
- if (!(pubKey instanceof DSAPublicKey))
- {
- return pubKey;
- }
- DSAPublicKey dsaPubKey = (DSAPublicKey)pubKey;
- if (dsaPubKey.getParams() != null)
- {
- return dsaPubKey;
- }
- for (int i = index + 1; i < certs.size(); i++)
- {
- X509Certificate parentCert = (X509Certificate)certs.get(i);
- pubKey = parentCert.getPublicKey();
- if (!(pubKey instanceof DSAPublicKey))
- {
- throw new CertPathValidatorException(
- "DSA parameters cannot be inherited from previous certificate.");
- }
- DSAPublicKey prevDSAPubKey = (DSAPublicKey)pubKey;
- if (prevDSAPubKey.getParams() == null)
- {
- continue;
- }
- DSAParams dsaParams = prevDSAPubKey.getParams();
- DSAPublicKeySpec dsaPubKeySpec = new DSAPublicKeySpec(
- dsaPubKey.getY(), dsaParams.getP(), dsaParams.getQ(), dsaParams.getG());
- try
- {
- KeyFactory keyFactory = KeyFactory.getInstance("DSA", BouncyCastleProvider.PROVIDER_NAME);
- return keyFactory.generatePublic(dsaPubKeySpec);
- }
- catch (Exception exception)
- {
- throw new RuntimeException(exception.getMessage());
- }
- }
- throw new CertPathValidatorException("DSA parameters cannot be inherited from previous certificate.");
- }
-
- /**
- * Find the issuer certificates of a given certificate.
- *
- * @param cert The certificate for which an issuer should be found.
- * @param pkixParams
- * @return A Collection
object containing the issuer
- * X509Certificate
s. Never null
.
- * @throws AnnotatedException if an error occurs.
- */
- protected static Collection findIssuerCerts(
- X509Certificate cert,
- ExtendedPKIXBuilderParameters pkixParams)
- throws AnnotatedException
- {
- X509CertStoreSelector certSelect = new X509CertStoreSelector();
- Set certs = new HashSet();
- try
- {
- certSelect.setSubject(cert.getIssuerX500Principal().getEncoded());
- }
- catch (IOException ex)
- {
- throw new AnnotatedException(
- "Subject criteria for certificate selector to find issuer certificate could not be set.", ex);
- }
-
- Iterator iter;
-
- try
- {
- List matches = new ArrayList();
-
- matches.addAll(CertPathValidatorUtilities.findCertificates(certSelect, pkixParams.getCertStores()));
- matches.addAll(CertPathValidatorUtilities.findCertificates(certSelect, pkixParams.getStores()));
- matches.addAll(CertPathValidatorUtilities.findCertificates(certSelect, pkixParams.getAdditionalStores()));
-
- iter = matches.iterator();
- }
- catch (AnnotatedException e)
- {
- throw new AnnotatedException("Issuer certificate cannot be searched.", e);
- }
-
- X509Certificate issuer = null;
- while (iter.hasNext())
- {
- issuer = (X509Certificate)iter.next();
- // issuer cannot be verified because possible DSA inheritance
- // parameters are missing
- certs.add(issuer);
- }
- return certs;
- }
-
- protected static void verifyX509Certificate(X509Certificate cert, PublicKey publicKey,
- String sigProvider)
- throws GeneralSecurityException
- {
- if (sigProvider == null)
- {
- cert.verify(publicKey);
- }
- else
- {
- cert.verify(publicKey, sigProvider);
- }
- }
-}
diff --git a/extern/spongycastle/prov/src/main/jdk1.4/org/spongycastle/jce/provider/X509SignatureUtil.java b/extern/spongycastle/prov/src/main/jdk1.4/org/spongycastle/jce/provider/X509SignatureUtil.java
deleted file mode 100644
index 93cce7a49..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.4/org/spongycastle/jce/provider/X509SignatureUtil.java
+++ /dev/null
@@ -1,125 +0,0 @@
-package org.spongycastle.jce.provider;
-
-import java.security.InvalidKeyException;
-import java.security.NoSuchAlgorithmException;
-import java.security.Signature;
-import java.security.SignatureException;
-
-import org.spongycastle.asn1.ASN1Encodable;
-import org.spongycastle.asn1.ASN1Null;
-import org.spongycastle.asn1.DERNull;
-import org.spongycastle.asn1.ASN1ObjectIdentifier;
-import org.spongycastle.asn1.cryptopro.CryptoProObjectIdentifiers;
-import org.spongycastle.asn1.nist.NISTObjectIdentifiers;
-import org.spongycastle.asn1.oiw.OIWObjectIdentifiers;
-import org.spongycastle.asn1.pkcs.PKCSObjectIdentifiers;
-import org.spongycastle.asn1.pkcs.RSASSAPSSparams;
-import org.spongycastle.asn1.teletrust.TeleTrusTObjectIdentifiers;
-import org.spongycastle.asn1.x509.AlgorithmIdentifier;
-
-class X509SignatureUtil
-{
- private static final ASN1Null derNull = new DERNull();
-
- static void setSignatureParameters(
- Signature signature,
- ASN1Encodable params)
- throws NoSuchAlgorithmException, SignatureException, InvalidKeyException
- {
- if (params != null && !derNull.equals(params))
- {
- /*
- AlgorithmParameters sigParams = AlgorithmParameters.getInstance(signature.getAlgorithm(), signature.getProvider());
-
- try
- {
- sigParams.init(params.getDERObject().getDEREncoded());
- }
- catch (IOException e)
- {
- throw new SignatureException("IOException decoding parameters: " + e.getMessage());
- }
-
- try
- {
- signature.setParameters(sigParams.getParameterSpec(PSSParameterSpec.class));
- }
- catch (GeneralSecurityException e)
- {
- throw new SignatureException("Exception extracting parameters: " + e.getMessage());
- }
- */
- }
- }
-
- static String getSignatureName(
- AlgorithmIdentifier sigAlgId)
- {
- ASN1Encodable params = sigAlgId.getParameters();
-
- if (params != null && !derNull.equals(params))
- {
- if (sigAlgId.getObjectId().equals(PKCSObjectIdentifiers.id_RSASSA_PSS))
- {
- RSASSAPSSparams rsaParams = RSASSAPSSparams.getInstance(params);
-
- return getDigestAlgName(rsaParams.getHashAlgorithm().getObjectId()) + "withRSAandMGF1";
- }
- }
-
- return sigAlgId.getObjectId().getId();
- }
-
- /**
- * Return the digest algorithm using one of the standard JCA string
- * representations rather the the algorithm identifier (if possible).
- */
- private static String getDigestAlgName(
- ASN1ObjectIdentifier digestAlgOID)
- {
- if (PKCSObjectIdentifiers.md5.equals(digestAlgOID))
- {
- return "MD5";
- }
- else if (OIWObjectIdentifiers.idSHA1.equals(digestAlgOID))
- {
- return "SHA1";
- }
- else if (NISTObjectIdentifiers.id_sha224.equals(digestAlgOID))
- {
- return "SHA224";
- }
- else if (NISTObjectIdentifiers.id_sha256.equals(digestAlgOID))
- {
- return "SHA256";
- }
- else if (NISTObjectIdentifiers.id_sha384.equals(digestAlgOID))
- {
- return "SHA384";
- }
- else if (NISTObjectIdentifiers.id_sha512.equals(digestAlgOID))
- {
- return "SHA512";
- }
- else if (TeleTrusTObjectIdentifiers.ripemd128.equals(digestAlgOID))
- {
- return "RIPEMD128";
- }
- else if (TeleTrusTObjectIdentifiers.ripemd160.equals(digestAlgOID))
- {
- return "RIPEMD160";
- }
- else if (TeleTrusTObjectIdentifiers.ripemd256.equals(digestAlgOID))
- {
- return "RIPEMD256";
- }
- else if (CryptoProObjectIdentifiers.gostR3411.equals(digestAlgOID))
- {
- return "GOST3411";
- }
- else
- {
- return digestAlgOID.getId();
- }
- }
-}
diff --git a/extern/spongycastle/prov/src/main/jdk1.4/org/spongycastle/x509/X509CRLStoreSelector.java b/extern/spongycastle/prov/src/main/jdk1.4/org/spongycastle/x509/X509CRLStoreSelector.java
deleted file mode 100644
index 4748bfc51..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.4/org/spongycastle/x509/X509CRLStoreSelector.java
+++ /dev/null
@@ -1,330 +0,0 @@
-package org.spongycastle.x509;
-
-import org.spongycastle.asn1.ASN1Integer;
-import org.spongycastle.asn1.x509.X509Extensions;
-import org.spongycastle.util.Arrays;
-import org.spongycastle.util.Selector;
-import org.spongycastle.x509.extension.X509ExtensionUtil;
-
-import java.io.IOException;
-import java.math.BigInteger;
-import java.security.cert.CRL;
-import java.security.cert.X509CRL;
-import java.security.cert.X509CRLSelector;
-
-/**
- * This class is a Selector implementation for X.509 certificate revocation
- * lists.
- *
- * @see org.spongycastle.util.Selector
- * @see org.spongycastle.x509.X509Store
- * @see org.spongycastle.jce.provider.X509StoreCRLCollection
- */
-public class X509CRLStoreSelector
- extends X509CRLSelector
- implements Selector
-{
- private boolean deltaCRLIndicator = false;
-
- private boolean completeCRLEnabled = false;
-
- private BigInteger maxBaseCRLNumber = null;
-
- private byte[] issuingDistributionPoint = null;
-
- private boolean issuingDistributionPointEnabled = false;
-
- private X509AttributeCertificate attrCertChecking;
-
- /**
- * Returns if the issuing distribution point criteria should be applied.
- * Defaults to false
.
- * true
to enable the
- * issuing distribution point check.
- */
- public void setIssuingDistributionPointEnabled(
- boolean issuingDistributionPointEnabled)
- {
- this.issuingDistributionPointEnabled = issuingDistributionPointEnabled;
- }
-
- /**
- * Sets the attribute certificate being checked. This is not a criterion.
- * Rather, it is optional information that may help a {@link X509Store} find
- * CRLs that would be relevant when checking revocation for the specified
- * attribute certificate. If null
is specified, then no such
- * optional information is provided.
- *
- * @param attrCert the X509AttributeCertificate
being checked (or
- * null
)
- * @see #getAttrCertificateChecking()
- */
- public void setAttrCertificateChecking(X509AttributeCertificate attrCert)
- {
- attrCertChecking = attrCert;
- }
-
- /**
- * Returns the attribute certificate being checked.
- *
- * @return Returns the attribute certificate being checked.
- * @see #setAttrCertificateChecking(X509AttributeCertificate)
- */
- public X509AttributeCertificate getAttrCertificateChecking()
- {
- return attrCertChecking;
- }
-
- public boolean match(Object obj)
- {
- if (!(obj instanceof X509CRL))
- {
- return false;
- }
- X509CRL crl = (X509CRL)obj;
- ASN1Integer dci = null;
- try
- {
- byte[] bytes = crl
- .getExtensionValue(X509Extensions.DeltaCRLIndicator.getId());
- if (bytes != null)
- {
- dci = ASN1Integer.getInstance(X509ExtensionUtil
- .fromExtensionValue(bytes));
- }
- }
- catch (Exception e)
- {
- return false;
- }
- if (isDeltaCRLIndicatorEnabled())
- {
- if (dci == null)
- {
- return false;
- }
- }
- if (isCompleteCRLEnabled())
- {
- if (dci != null)
- {
- return false;
- }
- }
- if (dci != null)
- {
-
- if (maxBaseCRLNumber != null)
- {
- if (dci.getPositiveValue().compareTo(maxBaseCRLNumber) == 1)
- {
- return false;
- }
- }
- }
- if (issuingDistributionPointEnabled)
- {
- byte[] idp = crl
- .getExtensionValue(X509Extensions.IssuingDistributionPoint
- .getId());
- if (issuingDistributionPoint == null)
- {
- if (idp != null)
- {
- return false;
- }
- }
- else
- {
- if (!Arrays.areEqual(idp, issuingDistributionPoint))
- {
- return false;
- }
- }
-
- }
- return super.match((X509CRL)obj);
- }
-
- public boolean match(CRL crl)
- {
- return match((Object)crl);
- }
-
- /**
- * Returns if this selector must match CRLs with the delta CRL indicator
- * extension set. Defaults to false
.
- *
- * @return Returns true
if only CRLs with the delta CRL
- * indicator extension are selected.
- */
- public boolean isDeltaCRLIndicatorEnabled()
- {
- return deltaCRLIndicator;
- }
-
- /**
- * If this is set to true
the CRL reported contains the delta
- * CRL indicator CRL extension.
- * true
if the delta CRL indicator
- * extension must be in the CRL.
- */
- public void setDeltaCRLIndicatorEnabled(boolean deltaCRLIndicator)
- {
- this.deltaCRLIndicator = deltaCRLIndicator;
- }
-
- /**
- * Returns an instance of this from a X509CRLSelector
.
- *
- * @param selector A X509CRLSelector
instance.
- * @return An instance of an X509CRLStoreSelector
.
- * @exception IllegalArgumentException if selector is null or creation
- * fails.
- */
- public static X509CRLStoreSelector getInstance(X509CRLSelector selector)
- {
- if (selector == null)
- {
- throw new IllegalArgumentException(
- "cannot create from null selector");
- }
- X509CRLStoreSelector cs = new X509CRLStoreSelector();
- cs.setCertificateChecking(selector.getCertificateChecking());
- cs.setDateAndTime(selector.getDateAndTime());
- try
- {
- cs.setIssuerNames(selector.getIssuerNames());
- }
- catch (IOException e)
- {
- // cannot happen
- throw new IllegalArgumentException(e.getMessage());
- }
- //cs.setIssuers(selector.getIssuers());
- cs.setMaxCRLNumber(selector.getMaxCRL());
- cs.setMinCRLNumber(selector.getMinCRL());
- return cs;
- }
-
- public Object clone()
- {
- X509CRLStoreSelector sel = X509CRLStoreSelector.getInstance(this);
- sel.deltaCRLIndicator = deltaCRLIndicator;
- sel.completeCRLEnabled = completeCRLEnabled;
- sel.maxBaseCRLNumber = maxBaseCRLNumber;
- sel.attrCertChecking = attrCertChecking;
- sel.issuingDistributionPointEnabled = issuingDistributionPointEnabled;
- sel.issuingDistributionPoint = Arrays.clone(issuingDistributionPoint);
- return sel;
- }
-
- /**
- * If true
only complete CRLs are returned. Defaults to
- * false
.
- *
- * @return true
if only complete CRLs are returned.
- */
- public boolean isCompleteCRLEnabled()
- {
- return completeCRLEnabled;
- }
-
- /**
- * If set to true
only complete CRLs are returned.
- * true
if only complete CRLs
- * should be returned.
- */
- public void setCompleteCRLEnabled(boolean completeCRLEnabled)
- {
- this.completeCRLEnabled = completeCRLEnabled;
- }
-
- /**
- * Get the maximum base CRL number. Defaults to null
.
- *
- * @return Returns the maximum base CRL number.
- * @see #setMaxBaseCRLNumber(BigInteger)
- */
- public BigInteger getMaxBaseCRLNumber()
- {
- return maxBaseCRLNumber;
- }
-
- /**
- * Sets the maximum base CRL number. Setting to null
disables
- * this cheack.
- * null
,
- * which is a missing issuing distribution point extension.
- * X509CertSelector
.
- *
- * @param selector A X509CertSelector
instance.
- * @return An instance of an X509CertStoreSelector
.
- * @exception IllegalArgumentException if selector is null or creation fails.
- */
- public static X509CertStoreSelector getInstance(X509CertSelector selector)
- {
- if (selector == null)
- {
- throw new IllegalArgumentException("cannot create from null selector");
- }
- X509CertStoreSelector cs = new X509CertStoreSelector();
- cs.setAuthorityKeyIdentifier(selector.getAuthorityKeyIdentifier());
- cs.setBasicConstraints(selector.getBasicConstraints());
- cs.setCertificate(selector.getCertificate());
- cs.setCertificateValid(selector.getCertificateValid());
- cs.setMatchAllSubjectAltNames(selector.getMatchAllSubjectAltNames());
- try
- {
- cs.setPathToNames(selector.getPathToNames());
- cs.setExtendedKeyUsage(selector.getExtendedKeyUsage());
- cs.setNameConstraints(selector.getNameConstraints());
- cs.setPolicy(selector.getPolicy());
- cs.setSubjectPublicKeyAlgID(selector.getSubjectPublicKeyAlgID());
- cs.setIssuer(selector.getIssuerAsBytes());
- cs.setSubject(selector.getSubjectAsBytes());
- }
- catch (IOException e)
- {
- throw new IllegalArgumentException("error in passed in selector: " + e);
- }
- cs.setKeyUsage(selector.getKeyUsage());
- cs.setPrivateKeyValid(selector.getPrivateKeyValid());
- cs.setSerialNumber(selector.getSerialNumber());
- cs.setSubjectKeyIdentifier(selector.getSubjectKeyIdentifier());
- cs.setSubjectPublicKey(selector.getSubjectPublicKey());
- return cs;
- }
-
-}
diff --git a/extern/spongycastle/prov/src/main/jdk1.4/org/spongycastle/x509/util/LDAPStoreHelper.java b/extern/spongycastle/prov/src/main/jdk1.4/org/spongycastle/x509/util/LDAPStoreHelper.java
deleted file mode 100644
index b78c4a765..000000000
--- a/extern/spongycastle/prov/src/main/jdk1.4/org/spongycastle/x509/util/LDAPStoreHelper.java
+++ /dev/null
@@ -1,1118 +0,0 @@
-package org.spongycastle.x509.util;
-
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.security.Principal;
-import java.security.cert.CertificateParsingException;
-import java.security.cert.X509CRL;
-import java.security.cert.X509Certificate;
-import java.sql.Date;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-import java.util.Set;
-
-import javax.naming.Context;
-import javax.naming.NamingEnumeration;
-import javax.naming.NamingException;
-import javax.naming.directory.Attribute;
-import javax.naming.directory.DirContext;
-import javax.naming.directory.InitialDirContext;
-import javax.naming.directory.SearchControls;
-import javax.naming.directory.SearchResult;
-import javax.security.auth.x500.X500Principal;
-
-import org.spongycastle.asn1.ASN1InputStream;
-import org.spongycastle.asn1.x509.Certificate;
-import org.spongycastle.asn1.x509.CertificatePair;
-import org.spongycastle.jce.X509LDAPCertStoreParameters;
-import org.spongycastle.jce.provider.X509AttrCertParser;
-import org.spongycastle.jce.provider.X509CRLParser;
-import org.spongycastle.jce.provider.X509CertPairParser;
-import org.spongycastle.jce.provider.X509CertParser;
-import org.spongycastle.util.StoreException;
-import org.spongycastle.x509.X509AttributeCertStoreSelector;
-import org.spongycastle.x509.X509AttributeCertificate;
-import org.spongycastle.x509.X509CRLStoreSelector;
-import org.spongycastle.x509.X509CertPairStoreSelector;
-import org.spongycastle.x509.X509CertStoreSelector;
-import org.spongycastle.x509.X509CertificatePair;
-
-/**
- * This is a general purpose implementation to get X.509 certificates, CRLs,
- * attribute certificates and cross certificates from a LDAP location.
- *
- *
- */
-public class LDAPStoreHelper
-{
-
- // TODO: cache results
-
- private X509LDAPCertStoreParameters params;
-
- public LDAPStoreHelper(X509LDAPCertStoreParameters params)
- {
- this.params = params;
- }
-
- /**
- * Initial Context Factory.
- */
- private static String LDAP_PROVIDER = "com.sun.jndi.ldap.LdapCtxFactory";
-
- /**
- * Processing referrals..
- */
- private static String REFERRALS_IGNORE = "ignore";
-
- /**
- * Security level to be used for LDAP connections.
- */
- private static final String SEARCH_SECURITY_LEVEL = "none";
-
- /**
- * Package Prefix for loading URL context factories.
- */
- private static final String URL_CONTEXT_PREFIX = "com.sun.jndi.url";
-
- private DirContext connectLDAP() throws NamingException
- {
- Properties props = new Properties();
- props.setProperty(Context.INITIAL_CONTEXT_FACTORY, LDAP_PROVIDER);
- props.setProperty(Context.BATCHSIZE, "0");
-
- props.setProperty(Context.PROVIDER_URL, params.getLdapURL());
- props.setProperty(Context.URL_PKG_PREFIXES, URL_CONTEXT_PREFIX);
- props.setProperty(Context.REFERRAL, REFERRALS_IGNORE);
- props.setProperty(Context.SECURITY_AUTHENTICATION,
- SEARCH_SECURITY_LEVEL);
-
- DirContext ctx = new InitialDirContext(props);
- return ctx;
- }
-
- private String parseDN(String subject, String dNAttributeName)
- {
- String temp = subject;
- int begin = temp.toLowerCase().indexOf(
- dNAttributeName.toLowerCase() + "=");
- if (begin == -1)
- {
- return "";
- }
- temp = temp.substring(begin + dNAttributeName.length());
- int end = temp.indexOf(',');
- if (end == -1)
- {
- end = temp.length();
- }
- while (temp.charAt(end - 1) == '\\')
- {
- end = temp.indexOf(',', end + 1);
- if (end == -1)
- {
- end = temp.length();
- }
- }
- temp = temp.substring(0, end);
- begin = temp.indexOf('=');
- temp = temp.substring(begin + 1);
- if (temp.charAt(0) == ' ')
- {
- temp = temp.substring(1);
- }
- if (temp.startsWith("\""))
- {
- temp = temp.substring(1);
- }
- if (temp.endsWith("\""))
- {
- temp = temp.substring(0, temp.length() - 1);
- }
- return temp;
- }
-
- private Set createCerts(List list, X509CertStoreSelector xselector)
- throws StoreException
- {
- Set certSet = new HashSet();
-
- Iterator it = list.iterator();
- X509CertParser parser = new X509CertParser();
- while (it.hasNext())
- {
- try
- {
- parser.engineInit(new ByteArrayInputStream((byte[])it
- .next()));
- X509Certificate cert = (X509Certificate)parser
- .engineRead();
- if (xselector.match((Object)cert))
- {
- certSet.add(cert);
- }
-
- }
- catch (Exception e)
- {
-
- }
- }
-
- return certSet;
- }
-
- /**
- * Can use the subject and serial and the subject and serialNumber of the
- * certificate of the given of the X509CertStoreSelector. If a certificate
- * for checking is given this has higher precedence.
- *
- * @param xselector The selector with the search criteria.
- * @param attrs Attributes which contain the certificates in the LDAP
- * directory.
- * @param attrNames Attribute names in teh LDAP directory which correspond to the
- * subjectAttributeNames.
- * @param subjectAttributeNames Subject attribute names (like "CN", "O", "OU") to use to
- * search in the LDAP directory
- * @return A list of found DER encoded certificates.
- * @throws StoreException if an error occurs while searching.
- */
- private List certSubjectSerialSearch(X509CertStoreSelector xselector,
- String[] attrs, String attrNames[], String subjectAttributeNames[])
- throws StoreException
- {
- // TODO: support also subjectAltNames?
- List list = new ArrayList();
-
- String subject = null;
- String serial = null;
-
- subject = getSubjectAsString(xselector);
-
- if (xselector.getSerialNumber() != null)
- {
- serial = xselector.getSerialNumber().toString();
- }
- if (xselector.getCertificate() != null)
- {
- subject = xselector.getCertificate().getSubjectX500Principal().getName("RFC1779");
- serial = xselector.getCertificate().getSerialNumber().toString();
- }
-
- String attrValue = null;
- if (subject != null)
- {
- for (int i = 0; i < subjectAttributeNames.length; i++)
- {
- attrValue = parseDN(subject, subjectAttributeNames[i]);
- list
- .addAll(search(attrNames, "*" + attrValue + "*",
- attrs));
- }
- }
- if (serial != null && params.getSearchForSerialNumberIn() != null)
- {
- attrValue = serial;
- list.addAll(search(
- splitString(params.getSearchForSerialNumberIn()),
- attrValue, attrs));
- }
- if (serial == null && subject == null)
- {
- list.addAll(search(attrNames, "*", attrs));
- }
-
- return list;
- }
-
-
-
- /**
- * Can use the subject of the forward certificate of the set certificate
- * pair or the subject of the forward
- * {@link org.spongycastle.x509.X509CertStoreSelector} of the given
- * selector.
- *
- * @param xselector The selector with the search criteria.
- * @param attrs Attributes which contain the attribute certificates in the
- * LDAP directory.
- * @param attrNames Attribute names in the LDAP directory which correspond to the
- * subjectAttributeNames.
- * @param subjectAttributeNames Subject attribute names (like "CN", "O", "OU") to use to
- * search in the LDAP directory
- * @return A list of found DER encoded certificate pairs.
- * @throws StoreException if an error occurs while searching.
- */
- private List crossCertificatePairSubjectSearch(
- X509CertPairStoreSelector xselector, String[] attrs,
- String attrNames[], String subjectAttributeNames[])
- throws StoreException
- {
- List list = new ArrayList();
-
- // search for subject
- String subject = null;
-
- if (xselector.getForwardSelector() != null)
- {
- subject = getSubjectAsString(xselector.getForwardSelector());
- }
- if (xselector.getCertPair() != null)
- {
- if (xselector.getCertPair().getForward() != null)
- {
- subject = xselector.getCertPair().getForward()
- .getSubjectX500Principal().getName("RFC1779");
- }
- }
- String attrValue = null;
- if (subject != null)
- {
- for (int i = 0; i < subjectAttributeNames.length; i++)
- {
- attrValue = parseDN(subject, subjectAttributeNames[i]);
- list
- .addAll(search(attrNames, "*" + attrValue + "*",
- attrs));
- }
- }
- if (subject == null)
- {
- list.addAll(search(attrNames, "*", attrs));
- }
-
- return list;
- }
-
- /**
- * Can use the entityName of the holder of the attribute certificate, the
- * serialNumber of attribute certificate and the serialNumber of the
- * associated certificate of the given of the X509AttributeCertSelector.
- *
- * @param xselector The selector with the search criteria.
- * @param attrs Attributes which contain the attribute certificates in the
- * LDAP directory.
- * @param attrNames Attribute names in the LDAP directory which correspond to the
- * subjectAttributeNames.
- * @param subjectAttributeNames Subject attribute names (like "CN", "O", "OU") to use to
- * search in the LDAP directory
- * @return A list of found DER encoded attribute certificates.
- * @throws StoreException if an error occurs while searching.
- */
- private List attrCertSubjectSerialSearch(
- X509AttributeCertStoreSelector xselector, String[] attrs,
- String attrNames[], String subjectAttributeNames[])
- throws StoreException
- {
- List list = new ArrayList();
-
- // search for serialNumber of associated cert,
- // serialNumber of the attribute certificate or DN in the entityName
- // of the holder
-
- String subject = null;
- String serial = null;
-
- Collection serials = new HashSet();
- Principal principals[] = null;
- if (xselector.getHolder() != null)
- {
- // serialNumber of associated cert
- if (xselector.getHolder().getSerialNumber() != null)
- {
- serials.add(xselector.getHolder().getSerialNumber()
- .toString());
- }
- // DN in the entityName of the holder
- if (xselector.getHolder().getEntityNames() != null)
- {
- principals = xselector.getHolder().getEntityNames();
- }
- }
-
- if (xselector.getAttributeCert() != null)
- {
- if (xselector.getAttributeCert().getHolder().getEntityNames() != null)
- {
- principals = xselector.getAttributeCert().getHolder()
- .getEntityNames();
- }
- // serialNumber of the attribute certificate
- serials.add(xselector.getAttributeCert().getSerialNumber()
- .toString());
- }
- if (principals != null)
- {
- // only first should be relevant
- if (principals[0] instanceof X500Principal)
- {
- subject = ((X500Principal)principals[0])
- .getName("RFC1779");
- }
- else
- {
- // strange ...
- subject = principals[0].getName();
- }
- }
- if (xselector.getSerialNumber() != null)
- {
- serials.add(xselector.getSerialNumber().toString());
- }
-
- String attrValue = null;
- if (subject != null)
- {
- for (int i = 0; i < subjectAttributeNames.length; i++)
- {
- attrValue = parseDN(subject, subjectAttributeNames[i]);
- list
- .addAll(search(attrNames, "*" + attrValue + "*",
- attrs));
- }
- }
- if (serials.size() > 0
- && params.getSearchForSerialNumberIn() != null)
- {
- Iterator it = serials.iterator();
- while (it.hasNext())
- {
- serial = (String)it.next();
- list.addAll(search(splitString(params.getSearchForSerialNumberIn()), serial, attrs));
- }
- }
- if (serials.size() == 0 && subject == null)
- {
- list.addAll(search(attrNames, "*", attrs));
- }
-
- return list;
- }
-
- /**
- * Can use the issuer of the given of the X509CRLStoreSelector.
- *
- * @param xselector The selector with the search criteria.
- * @param attrs Attributes which contain the attribute certificates in the
- * LDAP directory.
- * @param attrNames Attribute names in the LDAP directory which correspond to the
- * subjectAttributeNames.
- * @param issuerAttributeNames Issuer attribute names (like "CN", "O", "OU") to use to search
- * in the LDAP directory
- * @return A list of found DER encoded CRLs.
- * @throws StoreException if an error occurs while searching.
- */
- private List cRLIssuerSearch(X509CRLStoreSelector xselector,
- String[] attrs, String attrNames[], String issuerAttributeNames[])
- throws StoreException
- {
- List list = new ArrayList();
-
- String issuer = null;
- Collection issuers = new HashSet();
-/*
- if (xselector.getIssuers() != null)
- {
- issuers.addAll(xselector.getIssuers());
- }
-*/
- if (xselector.getCertificateChecking() != null)
- {
- issuers.add(getCertificateIssuer(xselector.getCertificateChecking()));
- }
- if (xselector.getAttrCertificateChecking() != null)
- {
- Principal principals[] = xselector.getAttrCertificateChecking().getIssuer().getPrincipals();
- for (int i=0; iList
of byte arrays with the encodings.
- * @throws StoreException if an error occurs getting the results from the LDAP
- * directory.
- */
- private List search(String attributeNames[], String attributeValue,
- String[] attrs) throws StoreException
- {
- String filter = null;
- if (attributeNames == null)
- {
- filter = null;
- }
- else
- {
- filter = "";
- if (attributeValue.equals("**"))
- {
- attributeValue = "*";
- }
- for (int i = 0; i < attributeNames.length; i++)
- {
- filter += "(" + attributeNames[i] + "=" + attributeValue + ")";
- }
- filter = "(|" + filter + ")";
- }
- String filter2 = "";
- for (int i = 0; i < attrs.length; i++)
- {
- filter2 += "(" + attrs[i] + "=*)";
- }
- filter2 = "(|" + filter2 + ")";
-
- String filter3 = "(&" + filter + "" + filter2 + ")";
- if (filter == null)
- {
- filter3 = filter2;
- }
- List list;
- list = getFromCache(filter3);
- if (list != null)
- {
- return list;
- }
- DirContext ctx = null;
- list = new ArrayList();
- try
- {
-
- ctx = connectLDAP();
-
- SearchControls constraints = new SearchControls();
- constraints.setSearchScope(SearchControls.SUBTREE_SCOPE);
- constraints.setCountLimit(0);
- constraints.setReturningAttributes(attrs);
- NamingEnumeration results = ctx.search(params.getBaseDN(), filter3,
- constraints);
- while (results.hasMoreElements())
- {
- SearchResult sr = (SearchResult)results.next();
- NamingEnumeration enumeration = ((Attribute)(sr
- .getAttributes().getAll().next())).getAll();
- while (enumeration.hasMore())
- {
- list.add(enumeration.next());
- }
- }
- addToCache(filter3, list);
- }
- catch (NamingException e)
- {
- // skip exception, unfortunately if an attribute type is not
- // supported an exception is thrown
-
- }
- finally
- {
- try
- {
- if (null != ctx)
- {
- ctx.close();
- }
- }
- catch (Exception e)
- {
- }
- }
- return list;
- }
-
- private Set createCRLs(List list, X509CRLStoreSelector xselector)
- throws StoreException
- {
- Set crlSet = new HashSet();
-
- X509CRLParser parser = new X509CRLParser();
- Iterator it = list.iterator();
- while (it.hasNext())
- {
- try
- {
- parser.engineInit(new ByteArrayInputStream((byte[])it
- .next()));
- X509CRL crl = (X509CRL)parser.engineRead();
- if (xselector.match((Object)crl))
- {
- crlSet.add(crl);
- }
- }
- catch (StreamParsingException e)
- {
-
- }
- }
-
- return crlSet;
- }
-
- private Set createCrossCertificatePairs(List list,
- X509CertPairStoreSelector xselector) throws StoreException
- {
- Set certPairSet = new HashSet();
-
- int i = 0;
- while (i < list.size())
- {
- X509CertificatePair pair;
- try
- {
- // first try to decode it as certificate pair
- try
- {
- X509CertPairParser parser = new X509CertPairParser();
- parser.engineInit(new ByteArrayInputStream(
- (byte[])list.get(i)));
- pair = (X509CertificatePair)parser.engineRead();
- }
- catch (StreamParsingException e)
- {
- // now try it to construct it the forward and reverse
- // certificate
- byte[] forward = (byte[])list.get(i);
- byte[] reverse = (byte[])list.get(i + 1);
- pair = new X509CertificatePair(new CertificatePair(
- Certificate
- .getInstance(new ASN1InputStream(
- forward).readObject()),
- Certificate
- .getInstance(new ASN1InputStream(
- reverse).readObject())));
- i++;
- }
- if (xselector.match((Object)pair))
- {
- certPairSet.add(pair);
- }
- }
- catch (CertificateParsingException e)
- {
- // try next
- }
- catch (IOException e)
- {
- // try next
- }
- i++;
- }
-
- return certPairSet;
- }
-
- private Set createAttributeCertificates(List list,
- X509AttributeCertStoreSelector xselector) throws StoreException
- {
- Set certSet = new HashSet();
-
- Iterator it = list.iterator();
- X509AttrCertParser parser = new X509AttrCertParser();
- while (it.hasNext())
- {
- try
- {
- parser.engineInit(new ByteArrayInputStream((byte[])it
- .next()));
- X509AttributeCertificate cert = (X509AttributeCertificate)parser
- .engineRead();
- if (xselector.match((Object)cert))
- {
- certSet.add(cert);
- }
- }
- catch (StreamParsingException e)
- {
-
- }
- }
-
- return certSet;
- }
-
- /**
- * Returns the CRLs for issued certificates for other CAs matching the given
- * selector.
- * The authorityRevocationList attribute includes revocation information
- * regarding certificates issued to other CAs.
- *
- * @param selector The CRL selector to use to find the CRLs.
- * @return A possible empty collection with CRLs
- * @throws StoreException
- */
- public Collection getAuthorityRevocationLists(X509CRLStoreSelector selector)
- throws StoreException
- {
- String[] attrs = splitString(params.getAuthorityRevocationListAttribute());
- String attrNames[] = splitString(params
- .getLdapAuthorityRevocationListAttributeName());
- String issuerAttributeNames[] = splitString(params
- .getAuthorityRevocationListIssuerAttributeName());
-
- List list = cRLIssuerSearch(selector, attrs, attrNames,
- issuerAttributeNames);
- Set resultSet = createCRLs(list, selector);
- if (resultSet.size() == 0)
- {
- X509CRLStoreSelector emptySelector = new X509CRLStoreSelector();
- list = cRLIssuerSearch(emptySelector, attrs, attrNames,
- issuerAttributeNames);
-
- resultSet.addAll(createCRLs(list, selector));
- }
- return resultSet;
- }
-
- /**
- * Returns the revocation list for revoked attribute certificates.
- *
- * The attributeCertificateRevocationList holds a list of attribute
- * certificates that have been revoked.
- *
- * @param selector The CRL selector to use to find the CRLs.
- * @return A possible empty collection with CRLs.
- * @throws StoreException
- */
- public Collection getAttributeCertificateRevocationLists(
- X509CRLStoreSelector selector) throws StoreException
- {
- String[] attrs = splitString(params
- .getAttributeCertificateRevocationListAttribute());
- String attrNames[] = splitString(params
- .getLdapAttributeCertificateRevocationListAttributeName());
- String issuerAttributeNames[] = splitString(params
- .getAttributeCertificateRevocationListIssuerAttributeName());
-
- List list = cRLIssuerSearch(selector, attrs, attrNames,
- issuerAttributeNames);
- Set resultSet = createCRLs(list, selector);
- if (resultSet.size() == 0)
- {
- X509CRLStoreSelector emptySelector = new X509CRLStoreSelector();
- list = cRLIssuerSearch(emptySelector, attrs, attrNames,
- issuerAttributeNames);
-
- resultSet.addAll(createCRLs(list, selector));
- }
- return resultSet;
- }
-
- /**
- * Returns the revocation list for revoked attribute certificates for an
- * attribute authority
- *
- * The attributeAuthorityList holds a list of AA certificates that have been
- * revoked.
- *
- * @param selector The CRL selector to use to find the CRLs.
- * @return A possible empty collection with CRLs
- * @throws StoreException
- */
- public Collection getAttributeAuthorityRevocationLists(
- X509CRLStoreSelector selector) throws StoreException
- {
- String[] attrs = splitString(params.getAttributeAuthorityRevocationListAttribute());
- String attrNames[] = splitString(params
- .getLdapAttributeAuthorityRevocationListAttributeName());
- String issuerAttributeNames[] = splitString(params
- .getAttributeAuthorityRevocationListIssuerAttributeName());
-
- List list = cRLIssuerSearch(selector, attrs, attrNames,
- issuerAttributeNames);
- Set resultSet = createCRLs(list, selector);
- if (resultSet.size() == 0)
- {
- X509CRLStoreSelector emptySelector = new X509CRLStoreSelector();
- list = cRLIssuerSearch(emptySelector, attrs, attrNames,
- issuerAttributeNames);
-
- resultSet.addAll(createCRLs(list, selector));
- }
- return resultSet;
- }
-
- /**
- * Returns cross certificate pairs.
- *
- * @param selector The selector to use to find the cross certificates.
- * @return A possible empty collection with {@link X509CertificatePair}s
- * @throws StoreException
- */
- public Collection getCrossCertificatePairs(
- X509CertPairStoreSelector selector) throws StoreException
- {
- String[] attrs = splitString(params.getCrossCertificateAttribute());
- String attrNames[] = splitString(params.getLdapCrossCertificateAttributeName());
- String subjectAttributeNames[] = splitString(params
- .getCrossCertificateSubjectAttributeName());
- List list = crossCertificatePairSubjectSearch(selector, attrs,
- attrNames, subjectAttributeNames);
- Set resultSet = createCrossCertificatePairs(list, selector);
- if (resultSet.size() == 0)
- {
- X509CertStoreSelector emptyCertselector = new X509CertStoreSelector();
- X509CertPairStoreSelector emptySelector = new X509CertPairStoreSelector();
-
- emptySelector.setForwardSelector(emptyCertselector);
- emptySelector.setReverseSelector(emptyCertselector);
- list = crossCertificatePairSubjectSearch(emptySelector, attrs,
- attrNames, subjectAttributeNames);
- resultSet.addAll(createCrossCertificatePairs(list, selector));
- }
- return resultSet;
- }
-
- /**
- * Returns end certificates.
- *
- * The attributeDescriptorCertificate is self signed by a source of
- * authority and holds a description of the privilege and its delegation
- * rules.
- *
- * @param selector The selector to find the certificates.
- * @return A possible empty collection with certificates.
- * @throws StoreException
- */
- public Collection getUserCertificates(X509CertStoreSelector selector)
- throws StoreException
- {
- String[] attrs = splitString(params.getUserCertificateAttribute());
- String attrNames[] = splitString(params.getLdapUserCertificateAttributeName());
- String subjectAttributeNames[] = splitString(params
- .getUserCertificateSubjectAttributeName());
-
- List list = certSubjectSerialSearch(selector, attrs, attrNames,
- subjectAttributeNames);
- Set resultSet = createCerts(list, selector);
- if (resultSet.size() == 0)
- {
- X509CertStoreSelector emptySelector = new X509CertStoreSelector();
- list = certSubjectSerialSearch(emptySelector, attrs, attrNames,
- subjectAttributeNames);
- resultSet.addAll(createCerts(list, selector));
- }
-
- return resultSet;
- }
-
- /**
- * Returns attribute certificates for an attribute authority
- *
- * The aAcertificate holds the privileges of an attribute authority.
- *
- * @param selector The selector to find the attribute certificates.
- * @return A possible empty collection with attribute certificates.
- * @throws StoreException
- */
- public Collection getAACertificates(X509AttributeCertStoreSelector selector)
- throws StoreException
- {
- String[] attrs = splitString(params.getAACertificateAttribute());
- String attrNames[] = splitString(params.getLdapAACertificateAttributeName());
- String subjectAttributeNames[] = splitString(params.getAACertificateSubjectAttributeName());
-
- List list = attrCertSubjectSerialSearch(selector, attrs, attrNames,
- subjectAttributeNames);
- Set resultSet = createAttributeCertificates(list, selector);
- if (resultSet.size() == 0)
- {
- X509AttributeCertStoreSelector emptySelector = new X509AttributeCertStoreSelector();
- list = attrCertSubjectSerialSearch(emptySelector, attrs, attrNames,
- subjectAttributeNames);
- resultSet.addAll(createAttributeCertificates(list, selector));
- }
-
- return resultSet;
- }
-
- /**
- * Returns an attribute certificate for an authority
- *
- * The attributeDescriptorCertificate is self signed by a source of
- * authority and holds a description of the privilege and its delegation
- * rules.
- *
- * @param selector The selector to find the attribute certificates.
- * @return A possible empty collection with attribute certificates.
- * @throws StoreException
- */
- public Collection getAttributeDescriptorCertificates(
- X509AttributeCertStoreSelector selector) throws StoreException
- {
- String[] attrs = splitString(params.getAttributeDescriptorCertificateAttribute());
- String attrNames[] = splitString(params
- .getLdapAttributeDescriptorCertificateAttributeName());
- String subjectAttributeNames[] = splitString(params
- .getAttributeDescriptorCertificateSubjectAttributeName());
-
- List list = attrCertSubjectSerialSearch(selector, attrs, attrNames,
- subjectAttributeNames);
- Set resultSet = createAttributeCertificates(list, selector);
- if (resultSet.size() == 0)
- {
- X509AttributeCertStoreSelector emptySelector = new X509AttributeCertStoreSelector();
- list = attrCertSubjectSerialSearch(emptySelector, attrs, attrNames,
- subjectAttributeNames);
- resultSet.addAll(createAttributeCertificates(list, selector));
- }
-
- return resultSet;
- }
-
- /**
- * Returns CA certificates.
- *
- * The cACertificate attribute of a CA's directory entry shall be used to
- * store self-issued certificates (if any) and certificates issued to this
- * CA by CAs in the same realm as this CA.
- *
- * @param selector The selector to find the certificates.
- * @return A possible empty collection with certificates.
- * @throws StoreException
- */
- public Collection getCACertificates(X509CertStoreSelector selector)
- throws StoreException
- {
- String[] attrs = splitString(params.getCACertificateAttribute());
- String attrNames[] = splitString(params.getLdapCACertificateAttributeName());
- String subjectAttributeNames[] = splitString(params
- .getCACertificateSubjectAttributeName());
- List list = certSubjectSerialSearch(selector, attrs, attrNames,
- subjectAttributeNames);
- Set resultSet = createCerts(list, selector);
- if (resultSet.size() == 0)
- {
- X509CertStoreSelector emptySelector = new X509CertStoreSelector();
- list = certSubjectSerialSearch(emptySelector, attrs, attrNames,
- subjectAttributeNames);
- resultSet.addAll(createCerts(list, selector));
- }
- return resultSet;
- }
-
- /**
- * Returns the delta revocation list for revoked certificates.
- *
- * @param selector The CRL selector to use to find the CRLs.
- * @return A possible empty collection with CRLs.
- * @throws StoreException
- */
- public Collection getDeltaCertificateRevocationLists(
- X509CRLStoreSelector selector) throws StoreException
- {
- String[] attrs = splitString(params.getDeltaRevocationListAttribute());
- String attrNames[] = splitString(params.getLdapDeltaRevocationListAttributeName());
- String issuerAttributeNames[] = splitString(params
- .getDeltaRevocationListIssuerAttributeName());
- List list = cRLIssuerSearch(selector, attrs, attrNames,
- issuerAttributeNames);
- Set resultSet = createCRLs(list, selector);
- if (resultSet.size() == 0)
- {
- X509CRLStoreSelector emptySelector = new X509CRLStoreSelector();
- list = cRLIssuerSearch(emptySelector, attrs, attrNames,
- issuerAttributeNames);
-
- resultSet.addAll(createCRLs(list, selector));
- }
- return resultSet;
- }
-
- /**
- * Returns an attribute certificate for an user.
- *
- * The attributeCertificateAttribute holds the privileges of a user
- *
- * @param selector The selector to find the attribute certificates.
- * @return A possible empty collection with attribute certificates.
- * @throws StoreException
- */
- public Collection getAttributeCertificateAttributes(
- X509AttributeCertStoreSelector selector) throws StoreException
- {
- String[] attrs = splitString(params.getAttributeCertificateAttributeAttribute());
- String attrNames[] = splitString(params
- .getLdapAttributeCertificateAttributeAttributeName());
- String subjectAttributeNames[] = splitString(params
- .getAttributeCertificateAttributeSubjectAttributeName());
- List list = attrCertSubjectSerialSearch(selector, attrs, attrNames,
- subjectAttributeNames);
- Set resultSet = createAttributeCertificates(list, selector);
- if (resultSet.size() == 0)
- {
- X509AttributeCertStoreSelector emptySelector = new X509AttributeCertStoreSelector();
- list = attrCertSubjectSerialSearch(emptySelector, attrs, attrNames,
- subjectAttributeNames);
- resultSet.addAll(createAttributeCertificates(list, selector));
- }
-
- return resultSet;
- }
-
- /**
- * Returns the certificate revocation lists for revoked certificates.
- *
- * @param selector The CRL selector to use to find the CRLs.
- * @return A possible empty collection with CRLs.
- * @throws StoreException
- */
- public Collection getCertificateRevocationLists(
- X509CRLStoreSelector selector) throws StoreException
- {
- String[] attrs = splitString(params.getCertificateRevocationListAttribute());
- String attrNames[] = splitString(params
- .getLdapCertificateRevocationListAttributeName());
- String issuerAttributeNames[] = splitString(params
- .getCertificateRevocationListIssuerAttributeName());
- List list = cRLIssuerSearch(selector, attrs, attrNames,
- issuerAttributeNames);
- Set resultSet = createCRLs(list, selector);
- if (resultSet.size() == 0)
- {
- X509CRLStoreSelector emptySelector = new X509CRLStoreSelector();
- list = cRLIssuerSearch(emptySelector, attrs, attrNames,
- issuerAttributeNames);
-
- resultSet.addAll(createCRLs(list, selector));
- }
- return resultSet;
- }
-
- private Map cacheMap = new HashMap(cacheSize);
-
- private static int cacheSize = 32;
-
- private static long lifeTime = 60 * 1000;
-
- private synchronized void addToCache(String searchCriteria, List list)
- {
- Date now = new Date(System.currentTimeMillis());
- List cacheEntry = new ArrayList();
- cacheEntry.add(now);
- cacheEntry.add(list);
- if (cacheMap.containsKey(searchCriteria))
- {
- cacheMap.put(searchCriteria, cacheEntry);
- }
- else
- {
- if (cacheMap.size() >= cacheSize)
- {
- // replace oldest
- Iterator it = cacheMap.entrySet().iterator();
- long oldest = now.getTime();
- Object replace = null;
- while (it.hasNext())
- {
- Map.Entry entry = (Map.Entry)it.next();
- long current = ((Date)((List)entry.getValue()).get(0))
- .getTime();
- if (current < oldest)
- {
- oldest = current;
- replace = entry.getKey();
- }
- }
- cacheMap.remove(replace);
- }
- cacheMap.put(searchCriteria, cacheEntry);
- }
- }
-
- private List getFromCache(String searchCriteria)
- {
- List entry = (List)cacheMap.get(searchCriteria);
- long now = System.currentTimeMillis();
- if (entry != null)
- {
- // too old
- if (((Date)entry.get(0)).getTime() < (now - lifeTime))
- {
- return null;
- }
- return (List)entry.get(1);
- }
- return null;
- }
-
- /*
- * spilt string based on spaces
- */
- private String[] splitString(String str)
- {
- return str.split("\\s+");
- }
-
- private String getSubjectAsString(X509CertStoreSelector xselector)
- {
- try
- {
- byte[] encSubject = xselector.getSubjectAsBytes();
- if (encSubject != null)
- {
- return new X500Principal(encSubject).getName("RFC1779");
- }
- }
- catch (IOException e)
- {
- throw new StoreException("exception processing name: " + e.getMessage(), e);
- }
- return null;
- }
-
- private X500Principal getCertificateIssuer(X509Certificate cert)
- {
- return cert.getIssuerX500Principal();
- }
-}