Author: coheigea Date: Fri Oct 23 16:27:25 2009 New Revision: 829117 URL: http://svn.apache.org/viewvc?rev=829117&view=rev Log: [WSS-214] - SignatureProcessor is not reusing results from BinarySecurityTokenProcessor or DerivedKeyTokenProcessor - Already fixed on trunk.
Modified: webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/processor/BinarySecurityTokenProcessor.java webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/processor/DerivedKeyTokenProcessor.java webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/processor/SignatureProcessor.java Modified: webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/processor/BinarySecurityTokenProcessor.java URL: http://svn.apache.org/viewvc/webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/processor/BinarySecurityTokenProcessor.java?rev=829117&r1=829116&r2=829117&view=diff ============================================================================== --- webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/processor/BinarySecurityTokenProcessor.java (original) +++ webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/processor/BinarySecurityTokenProcessor.java Fri Oct 23 16:27:25 2009 @@ -118,7 +118,7 @@ */ private void createSecurityToken(Element element) throws WSSecurityException { this.token = new BinarySecurity(element); - String type = token.getValueType(); + type = token.getValueType(); if (X509Security.X509_V3_TYPE.equals(type)) { this.token = new X509Security(element); Modified: webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/processor/DerivedKeyTokenProcessor.java URL: http://svn.apache.org/viewvc/webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/processor/DerivedKeyTokenProcessor.java?rev=829117&r1=829116&r2=829117&view=diff ============================================================================== --- webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/processor/DerivedKeyTokenProcessor.java (original) +++ webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/processor/DerivedKeyTokenProcessor.java Fri Oct 23 16:27:25 2009 @@ -52,6 +52,7 @@ private String id; private byte[] keyBytes; + private DerivedKeyToken dkt; private byte[] secret; private int length; @@ -71,7 +72,7 @@ ) throws WSSecurityException { // Deserialize the DKT - DerivedKeyToken dkt = new DerivedKeyToken(elem); + dkt = new DerivedKeyToken(elem); this.extractSecret(wsDocInfo, dkt, cb, crypto); String tempNonce = dkt.getNonce(); @@ -327,4 +328,11 @@ return keyBytes; } + /** + * Return the DerivedKeyToken object + */ + public DerivedKeyToken getDerivedKeyToken() { + return dkt; + } + } Modified: webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/processor/SignatureProcessor.java URL: http://svn.apache.org/viewvc/webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/processor/SignatureProcessor.java?rev=829117&r1=829116&r2=829117&view=diff ============================================================================== --- webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/processor/SignatureProcessor.java (original) +++ webservices/wss4j/branches/1_5_x-fixes/src/org/apache/ws/security/processor/SignatureProcessor.java Fri Oct 23 16:27:25 2009 @@ -255,19 +255,18 @@ } } else if (el.equals(WSSecurityEngine.DERIVED_KEY_TOKEN_05_02) || el.equals(WSSecurityEngine.DERIVED_KEY_TOKEN_05_12)) { - dkt = new DerivedKeyToken(token); - String id = dkt.getID(); + String id = token.getAttributeNS(WSConstants.WSU_NS, "Id"); DerivedKeyTokenProcessor dktProcessor = (DerivedKeyTokenProcessor) wsDocInfo.getProcessor(id); String signatureMethodURI = sig.getSignedInfo().getSignatureMethodURI(); + dkt = dktProcessor.getDerivedKeyToken(); int keyLength = (dkt.getLength() > 0) ? dkt.getLength() : WSSecurityUtil.getKeyLength(signatureMethodURI); secretKey = dktProcessor.getKeyBytes(keyLength); } else { if (el.equals(WSSecurityEngine.binaryToken)) { - // TODO: Use results from BinarySecurityTokenProcessor - certs = getCertificatesTokenReference(token, crypto); + certs = getCertificates(token, wsDocInfo, crypto); } else if (el.equals(WSSecurityEngine.SAML_TOKEN)) { if (crypto == null) { throw new WSSecurityException( @@ -535,6 +534,38 @@ } } + + /** + * Get the X509 Certificates from the BinarySecurityToken DOM element. It first tries to + * get the certificates from the BinarySecurityTokenProcessor, if the BST has been previously + * processed. If this fails, it gets the certificates directly from the token. + * @param The BinarySecurityToken element + * @wsDocInfo The WSDocInfo structure that contains information on previous processing + * @crypto The crypto instance that is needed to get the certificates from the BST + * @throws WSSecurityException + */ + public X509Certificate[] + getCertificates(Element elem, WSDocInfo wsDocInfo, Crypto crypto) throws WSSecurityException { + + String id = elem.getAttributeNS(WSConstants.WSU_NS, "Id"); + BinarySecurityTokenProcessor bstProcessor = + (BinarySecurityTokenProcessor) wsDocInfo.getProcessor(id); + if (bstProcessor != null) { + String type = bstProcessor.getType(); + if (!(X509Security.X509_V3_TYPE.equals(type) + || PKIPathSecurity.getType().equals(type))) { + throw new WSSecurityException( + WSSecurityException.UNSUPPORTED_SECURITY_TOKEN, + "unsupportedBinaryTokenType", + new Object[]{type} + ); + } + return bstProcessor.getCertificates(); + } else { + return getCertificatesTokenReference(elem, crypto); + } + } + /** * Extracts the certificate(s) from the Binary Security token reference. * @@ -553,9 +584,7 @@ return ((PKIPathSecurity) token).getX509Certificates(false, crypto); } else if (token instanceof X509Security) { X509Certificate cert = ((X509Security) token).getX509Certificate(crypto); - X509Certificate[] certs = new X509Certificate[1]; - certs[0] = cert; - return certs; + return new X509Certificate[]{cert}; } return null; } @@ -572,16 +601,13 @@ * @throws WSSecurityException */ private BinarySecurity createSecurityToken(Element element) throws WSSecurityException { - BinarySecurity token = new BinarySecurity(element); - String type = token.getValueType(); - X509Security x509 = null; - PKIPathSecurity pkiPath = null; + String type = element.getAttribute("ValueType"); if (X509Security.X509_V3_TYPE.equals(type)) { - x509 = new X509Security(element); + X509Security x509 = new X509Security(element); return (BinarySecurity) x509; } else if (PKIPathSecurity.getType().equals(type)) { - pkiPath = new PKIPathSecurity(element); + PKIPathSecurity pkiPath = new PKIPathSecurity(element); return (BinarySecurity) pkiPath; } throw new WSSecurityException( --------------------------------------------------------------------- To unsubscribe, e-mail: wss4j-dev-unsubscr...@ws.apache.org For additional commands, e-mail: wss4j-dev-h...@ws.apache.org