protected List<UseKeyWithType> genUseKeyWithAttributes(X509Certificate cert, List<UseKeyWithType> reqUsages) throws Exception{
ArrayList<UseKeyWithType> retval = new ArrayList<UseKeyWithType>();
Iterator<UseKeyWithType> iter = reqUsages.iterator();
while(iter.hasNext()){
UseKeyWithType useKeyWithType = iter.next();
DNFieldExtractor altNameExtractor = new DNFieldExtractor(CertTools.getSubjectAlternativeName(cert),DNFieldExtractor.TYPE_SUBJECTALTNAME);
String cn = CertTools.getPartFromDN(cert.getSubjectDN().toString(), "CN");
if(useKeyWithType.getApplication().equals(XKMSConstants.USEKEYWITH_XKMS)||
useKeyWithType.getApplication().equals(XKMSConstants.USEKEYWITH_XKMSPROFILE) ||
useKeyWithType.getApplication().equals(XKMSConstants.USEKEYWITH_TLS)){
if(altNameExtractor.getField(DNFieldExtractor.URI, 0).startsWith(useKeyWithType.getIdentifier())){
retval.add(useKeyWithType);
}
}
if(useKeyWithType.getApplication().equals(XKMSConstants.USEKEYWITH_SMIME)||
useKeyWithType.getApplication().equals(XKMSConstants.USEKEYWITH_PGP)){
if(altNameExtractor.getField(DNFieldExtractor.RFC822NAME, 0).startsWith(useKeyWithType.getIdentifier())){
retval.add(useKeyWithType);
}
}
if(useKeyWithType.getApplication().equals(XKMSConstants.USEKEYWITH_TLSHTTP)){
if(cn.startsWith(useKeyWithType.getIdentifier())){
retval.add(useKeyWithType);
}
}
if(useKeyWithType.getApplication().equals(XKMSConstants.USEKEYWITH_TLSSMTP)){
if(altNameExtractor.getField(DNFieldExtractor.DNSNAME, 0).startsWith(useKeyWithType.getIdentifier())){
retval.add(useKeyWithType);
}
}
if(useKeyWithType.getApplication().equals(XKMSConstants.USEKEYWITH_IPSEC)){
if(altNameExtractor.getField(DNFieldExtractor.IPADDRESS, 0).startsWith(useKeyWithType.getIdentifier())){
retval.add(useKeyWithType);
}
}
if(useKeyWithType.getApplication().equals(XKMSConstants.USEKEYWITH_PKIX)){
if(CertTools.getSubjectDN(cert).equalsIgnoreCase(CertTools.stringToBCDNString(useKeyWithType.getIdentifier()))){
retval.add(useKeyWithType);
}
}
}