Package org.apache.xml.security.keys

Examples of org.apache.xml.security.keys.KeyInfo


      // check to see if we are signing and if we have to create a keyinfo
      if ((this._state == MODE_SIGN) && (this._keyInfo == null)) {

         // create the KeyInfo
         this._keyInfo = new KeyInfo(this._doc);

         // get the Element from KeyInfo
         Element keyInfoElement = this._keyInfo.getElement();
         Element firstObject=null;
         Node sibling= this._constructionElement.getFirstChild();
View Full Code Here


      dbf.setNamespaceAware(true);

      javax.xml.parsers.DocumentBuilder db = dbf.newDocumentBuilder();
      org.w3c.dom.Document doc = db.newDocument();
      KeyInfo ki = new KeyInfo(doc);

      doc.appendChild(ki.getElement());
      ki.setId("myKI");
      ki.addKeyName("A simple key");

      X509Certificate cert = (X509Certificate) ks.getCertificate("test");

      ki.addKeyValue(cert.getPublicKey());

      X509Data x509Data = new X509Data(doc);

      ki.add(x509Data);
      x509Data.addCertificate(cert);
      x509Data.addSubjectName("Subject name");
      x509Data.addIssuerSerial("Subject nfsdfhs", 6786);
      ki.add(new RSAKeyValue(doc, new BigInteger("678"),
                             new BigInteger("6870")));
      XMLUtils.outputDOMc14nWithComments(doc, System.out);
   }
View Full Code Here

    if (_key == null) {

      logger.debug("Trying to find a KEK via key resolvers");

      KeyInfo ki = encryptedKey.getKeyInfo();
      if (ki != null) {
        try {
          _key = ki.getSecretKey();
        }
        catch (Exception e) {
        }
      }
      if (_key == null) {
View Full Code Here

        EncryptedData encryptedData = _factory.newEncryptedData(element);

    if (_key == null) {

      KeyInfo ki = encryptedData.getKeyInfo();

      if (ki != null) {
        try {
          // Add a EncryptedKey resolver
          ki.registerInternalKeyResolver(
                   new EncryptedKeyResolver(encryptedData.
                          getEncryptionMethod().
                          getAlgorithm(),
                          _kek));
          _key = ki.getSecretKey();
        } catch (KeyResolverException kre) {
          // We will throw in a second...
        }
      }
View Full Code Here

                    EncryptionConstants.EncryptionSpecNS,
                    EncryptionConstants._TAG_ORIGINATORKEYINFO).item(0);
            if (null != originatorKeyInfoElement) {
                try {
                    result.setOriginatorKeyInfo(
                        new KeyInfo(originatorKeyInfoElement, null));
                } catch (XMLSecurityException xse) {
                    throw new XMLEncryptionException("empty", xse);
                }
            }

            // TODO: Work out how to handle relative URI

            Element recipientKeyInfoElement =
                (Element) element.getElementsByTagNameNS(
                    EncryptionConstants.EncryptionSpecNS,
                    EncryptionConstants._TAG_RECIPIENTKEYINFO).item(0);
            if (null != recipientKeyInfoElement) {
                try {
                    result.setRecipientKeyInfo(
                        new KeyInfo(recipientKeyInfoElement, null));
                } catch (XMLSecurityException xse) {
                    throw new XMLEncryptionException("empty", xse);
                }
            }
View Full Code Here

            Element keyInfoElement =
                (Element) element.getElementsByTagNameNS(
                    Constants.SignatureSpecNS, Constants._TAG_KEYINFO).item(0);
            if (null != keyInfoElement) {
        try {
          result.setKeyInfo(new KeyInfo(keyInfoElement, null));
        } catch (XMLSecurityException xse) {
          throw new XMLEncryptionException("Error loading Key Info",
                           xse);
        }
            }
View Full Code Here

            Element keyInfoElement =
                (Element) element.getElementsByTagNameNS(
                    Constants.SignatureSpecNS, Constants._TAG_KEYINFO).item(0);
            if (null != keyInfoElement) {
        try {
          result.setKeyInfo(new KeyInfo(keyInfoElement, null));
        } catch (XMLSecurityException xse) {
          throw new XMLEncryptionException("Error loading Key Info",
                           xse);
        }
            }
View Full Code Here

            default :
                throw new WSSecurityException(WSSecurityException.FAILURE,
                        "unsupportedKeyId");
        }
        KeyInfo keyInfo = new KeyInfo(doc);
        keyInfo.addUnknownElement(secToken.getElement());
        WSSecurityUtil.appendChildElement(
                doc, xencEncryptedKey, keyInfo.getElement());

        Element xencCipherValue = createCipherValue(doc, xencEncryptedKey);
        xencCipherValue.appendChild(keyText);
        createDataRefList(doc, xencEncryptedKey, encDataRefs);
        log.debug("Encryption complete.");
View Full Code Here

            this.encryptionKey = WSSecurityUtil.prepareSecretKey(
                    symEncAlgo,
                    embeddedKey);
        }

        KeyInfo keyInfo = null;
        if (this.keyIdentifierType == WSConstants.EMBEDDED_KEYNAME) {
            keyInfo = new KeyInfo(doc);
            keyInfo.addKeyName(embeddedKeyName == null ? user : embeddedKeyName);
        } else if (this.keyIdentifierType == WSConstants.EMBED_SECURITY_TOKEN_REF) {
            /* This means that we want to embed a <wsse:SecurityTokenReference>
            * into keyInfo element.
            * If we need this functionality, this.secRef MUST be set before
            * calling the build(doc, crypto) method.
            * So if secRef is null then throw an exception.
            */
            if (this.securityTokenReference == null) {
                throw new WSSecurityException(
                        WSSecurityException.SECURITY_TOKEN_UNAVAILABLE,
                        "You must set keyInfo element, if the keyIdentifier " +
                        "== EMBED_SECURITY_TOKEN_REF");
            } else {
                keyInfo = new KeyInfo(doc);
                Element tmpE = securityTokenReference.getElement();
                tmpE.setAttributeNS(WSConstants.XMLNS_NS,
                        "xmlns:" + tmpE.getPrefix(),
                        tmpE.getNamespaceURI());
                keyInfo.addUnknownElement(securityTokenReference.getElement());
            }
        }

        Vector encDataRefs = doEncryption(doc, this.encryptionKey, keyInfo);

View Full Code Here

         * only the last Transforms is put into the according ds:Reference
         * element, i.e. the first ds:Reference does not contain a Transforms
         * element. Thus the verification fails (somehow)
         */

        KeyInfo info = sig.getKeyInfo();
        String keyInfoUri = "KeyId-" + info.hashCode();
        info.setId(keyInfoUri);

        SecurityTokenReference secRef = new SecurityTokenReference(wssConfig, doc);
        String strUri = "STRId-" + secRef.hashCode();
        secRef.setID(strUri);


        if (tlog.isDebugEnabled()) {
            t1 = System.currentTimeMillis();
        }

        if (parts == null) {
            parts = new Vector();
            WSEncryptionPart encP =
                    new WSEncryptionPart(soapConstants.getBodyQName().getLocalPart(),
                            soapConstants.getEnvelopeURI(),
                            "Content");
            parts.add(encP);
        }

        Transforms transforms = null;

        for (int part = 0; part < parts.size(); part++) {
            WSEncryptionPart encPart = (WSEncryptionPart) parts.get(part);
            String elemName = encPart.getName();
            String nmSpace = encPart.getNamespace();

            /*
             * Set up the elements to sign. There are two resevered element
             * names: "Token" and "STRTransform" "Token": Setup the Signature to
             * either sign the information that points to the security token or
             * the token itself. If its a direct reference sign the token,
             * otherwise sign the KeyInfo Element. "STRTransform": Setup the
             * ds:Reference to use STR Transform
             *
             */
            try {
                if (elemName.equals("Token")) {
                    transforms = new Transforms(doc);
                    transforms.addTransform(Transforms.TRANSFORM_C14N_EXCL_OMIT_COMMENTS);
                    if (keyIdentifierType == WSConstants.BST_DIRECT_REFERENCE) {
                        if (wssConfig.isWsiBSPCompliant()) {
                            transforms.item(0).getElement().appendChild(
                                    new InclusiveNamespaces(
                                            doc, getInclusivePrefixes(
                                                    securityHeader)).getElement());
                        }
                        sig.addDocument("#" + certUri, transforms);
                    } else {
                        if (wssConfig.isWsiBSPCompliant()) {
                            transforms.item(0).getElement().appendChild(
                                    new InclusiveNamespaces(
                                            doc, getInclusivePrefixes(
                                                    info.getElement())).getElement());
                        }
                        sig.addDocument("#" + keyInfoUri, transforms);
                    }
                } else if (elemName.equals("STRTransform")) { // STRTransform
                    Element ctx = createSTRParameter(doc);
                    transforms = new Transforms(doc);
                    transforms.addTransform(STRTransform.implementedTransformURI,
                            ctx);
                    sig.addDocument("#" + strUri, transforms);
                } else if (elemName.equals("Assertion")) { // Assertion
                // Make the AssertionID the wsu:Id and the signature reference the same
                SAMLAssertion assertion;
               
                Element assertionElement =
                                    (Element) WSSecurityUtil.findElement(envelope,
                                            elemName,
                                            nmSpace);
               
                try {
              assertion = new SAMLAssertion(assertionElement);
                }
                catch (Exception e1) {
              log.error(e1);
              throw new WSSecurityException(WSSecurityException.FAILED_SIGNATURE,
                          "noXMLSig", null, e1);
                }

                           Element body =
                                    (Element) WSSecurityUtil.findElement(envelope,
                                            elemName,
                                            nmSpace);
                            if (body == null) {
                                throw new WSSecurityException(WSSecurityException.FAILURE,
                                        "noEncElement",
                                        new Object[]{nmSpace + ", " + elemName});
                            }
                            transforms = new Transforms(doc);
                            transforms.addTransform(
                                    Transforms.TRANSFORM_C14N_EXCL_OMIT_COMMENTS);
                            if (wssConfig.isWsiBSPCompliant()) {
                                transforms.item(0).getElement().appendChild(
                                        new InclusiveNamespaces(
                                                doc, getInclusivePrefixes(body)).getElement());
                            }
                String prefix =
                                WSSecurityUtil.setNamespace(body,
                        wssConfig.getWsuNS(),
                        WSConstants.WSU_PREFIX);
                body.setAttributeNS(wssConfig.getWsuNS(), prefix + ":Id", assertion.getId());
                            sig.addDocument("#" + assertion.getId(), transforms);


                } else {
                    Element body =
                            (Element) WSSecurityUtil.findElement(envelope,
                                    elemName,
                                    nmSpace);
                    if (body == null) {
                        throw new WSSecurityException(WSSecurityException.FAILURE,
                                "noEncElement",
                                new Object[]{nmSpace + ", " + elemName});
                    }
                    transforms = new Transforms(doc);
                    transforms.addTransform(
                            Transforms.TRANSFORM_C14N_EXCL_OMIT_COMMENTS);
                    if (wssConfig.isWsiBSPCompliant()) {
                        transforms.item(0).getElement().appendChild(
                                new InclusiveNamespaces(
                                        doc, getInclusivePrefixes(body)).getElement());
                    }
                    sig.addDocument("#" + setWsuId(body), transforms);
                }
            } catch (TransformationException e1) {
                throw new WSSecurityException(WSSecurityException.FAILED_SIGNATURE,
                        "noXMLSig",
                        null,
                        e1);
            } catch (XMLSignatureException e1) {
                throw new WSSecurityException(WSSecurityException.FAILED_SIGNATURE,
                        "noXMLSig",
                        null,
                        e1);
            }
        }

        sig.addResourceResolver(EnvelopeIdResolver.getInstance(wssConfig));

        WSSecurityUtil.prependChildElement(doc,
                securityHeader,
                sig.getElement(),
                false);
        if (tlog.isDebugEnabled()) {
            t2 = System.currentTimeMillis();
        }

        byte[] secretKey = null;
        switch (keyIdentifierType) {
            case WSConstants.BST_DIRECT_REFERENCE:
                Reference ref = new Reference(wssConfig, doc);
                ref.setURI("#" + certUri);
                BinarySecurity bstToken = null;
                if (!useSingleCert) {
                    bstToken = new PKIPathSecurity(wssConfig, doc);
                    ((PKIPathSecurity) bstToken).setX509Certificates(certs,
                            false,
                            crypto);
                } else {
                    bstToken = new X509Security(wssConfig, doc);
                    ((X509Security) bstToken).setX509Certificate(certs[0]);
                }
                ref.setValueType(bstToken.getValueType());
                secRef.setReference(ref);
                bstToken.setID(certUri);
                WSSecurityUtil.prependChildElement(doc,
                        securityHeader,
                        bstToken.getElement(),
                        false);
                wsDocInfo.setBst(bstToken.getElement());
                break;

            case WSConstants.ISSUER_SERIAL:
                XMLX509IssuerSerial data =
                        new XMLX509IssuerSerial(doc, certs[0]);
                secRef.setX509IssuerSerial(data);
                break;

            case WSConstants.X509_KEY_IDENTIFIER:
                secRef.setKeyIdentifier(certs[0]);
                break;

            case WSConstants.SKI_KEY_IDENTIFIER:
                secRef.setKeyIdentifierSKI(certs[0], crypto);
                break;

            case WSConstants.UT_SIGNING:
                Reference refUt = new Reference(wssConfig, doc);
                refUt.setValueType(WSConstants.USERNAMETOKEN_NS + "#UsernameToken");
                String utId = usernameToken.getId();
                if (utId == null) {
                    utId = "usernameTokenId-" + usernameToken.hashCode();
                    usernameToken.setId(utId);
                }
                refUt.setURI("#" + utId);
                secRef.setReference(refUt);
                secretKey = usernameToken.getSecretKey();
                break;

            default :
                throw new WSSecurityException(WSSecurityException.FAILURE,
                        "unsupportedKeyId");
        }
        if (tlog.isDebugEnabled()) {
            t3 = System.currentTimeMillis();
        }
        info.addUnknownElement(secRef.getElement());

        WSDocInfoStore.store(wsDocInfo);
        try {
            if (keyIdentifierType == WSConstants.UT_SIGNING) {
                sig.sign(sig.createSecretKey(secretKey));
View Full Code Here

TOP

Related Classes of org.apache.xml.security.keys.KeyInfo

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.