/** Creates the certificate from the KeyInfo element. */ public static X509Credential loadCredentialFromSignature(Signature signature) throws RelyingPartyException { X509Credential credential = null; KeyInfo kinfo = signature.getKeyInfo(); List<X509Data> dataList = null; List<KeyValue> keyValueList = null; if (kinfo == null) { return null; } try { dataList = kinfo.getX509Datas(); keyValueList = kinfo.getKeyValues(); if (dataList.size() > 0) { if (dataList.size() > 1) { throw new RelyingPartyException("invalidKeyValueCount"); } X509Data data = dataList.get(0); List<X509Certificate> certList = data.getX509Certificates(); Iterator<X509Certificate> certIterator = certList.iterator(); while (certIterator.hasNext()) { X509Certificate certElem = null; String certValue = null; byte[] certInBytes = null; ByteArrayInputStream inputStream = null; CertificateFactory factory = null; java.security.cert.X509Certificate x509Cert = null; certElem = (X509Certificate) certIterator.next(); certValue = certElem.getValue(); certInBytes = Base64.decode(certValue); inputStream = new ByteArrayInputStream(certInBytes); factory = CertificateFactory.getInstance("X509"); x509Cert = (java.security.cert.X509Certificate) factory.generateCertificate(inputStream); credential = new X509CredentialImpl(x509Cert); } } else if (keyValueList.size() > 0) { if (keyValueList.size() > 1) { throw new RelyingPartyException("invalidKeyValueCount"); } KeyValue val = null; RSAKeyValue rsaKey = null; Element modElem = null; Element expElem = null; Element elem = null; OMElement omElem = null; BigInteger mod = null; BigInteger exp = null; val = (KeyValue) keyValueList.get(0); rsaKey = val.getRSAKeyValue(); elem = rsaKey.getDOM(); omElem = (OMElement) new OMDOMFactory().getDocument().importNode(elem, true); modElem = (Element) omElem.getFirstChildWithName(Modulus.DEFAULT_ELEMENT_NAME); expElem = (Element) omElem.getFirstChildWithName(Exponent.DEFAULT_ELEMENT_NAME); mod = Base64.decodeBigIntegerFromElement(modElem); if (expElem != null) { exp = Base64.decodeBigIntegerFromElement(expElem); } else { exp = DEFAULT_EXPONENET; } credential = new X509CredentialImpl(mod, exp); } else { if (log.isDebugEnabled()) { log.debug("unknown key info"); } } } catch (RuntimeException e) { throw e; } catch (Exception e) { log.error("Error while loading credentials from signature", e); throw new RelyingPartyException("Error while loading credentials from signature", e); } return credential; }