You are viewing a plain text version of this content. The canonical link for it is here.
Posted to wss4j-dev@ws.apache.org by Maciej Kwiecien <ma...@gmail.com> on 2008/01/17 10:23:03 UTC

How to encrypt message with RSA/DES ?

Hello,

How can I encrypt message using RSA algorithm, I try do encrypt in that way:

public void encryptMessage(Document doc) throws WSSecurityException {

 WSSecEncrypt builder = new WSSecEncrypt();
builder.setUserInfo("myalias", "mykeypass");
builder.setKeyIdentifierType(WSConstants.BST_DIRECT_REFERENCE);
builder.setSymmetricEncAlgorithm(WSConstants.RSA);
WSSecHeader secHeader = new WSSecHeader();
secHeader.insertSecurityHeader(doc);
/*
* Prepare the Encrypt object with the token, setup data structure
*/
builder.prepare(doc, crypto);
/*
 * Set up the parts structure to encrypt the body
 */
 SOAPConstants soapConstants = WSSecurityUtil.getSOAPConstants(doc
                .getDocumentElement());
        Vector parts = new Vector();
        WSEncryptionPart encP = new WSEncryptionPart(soapConstants
                .getBodyQName().getLocalPart(), soapConstants.getEnvelopeURI
(),
                "Content");
        parts.add(encP);

        /*
         * Encrypt the parts (Body), create EncrypedData elements that
reference
         * the EncryptedKey, and get a ReferenceList that can be put into
the
         * Security header. Be sure that the ReferenceList is after the
         * EncryptedKey element in the Security header (strict layout)
         */
        Element refs = builder.encryptForExternalRef(null, parts);
        builder.addExternalRefElement(refs, secHeader);

        /*
         * now add (prepend) the EncryptedKey element, then a
         * BinarySecurityToken if one was setup during prepare
         */
        builder.prependToHeader(secHeader);

        builder.prependBSTElementToHeader(secHeader);
}

I catch following exception:
org.apache.ws.security.WSSecurityException: An unsupported signature or
encryption algorithm was used (unsupported key transport encryption
algorithm: No such algorithm: http://www.w3.org/2001/04/xmlenc#rsa-1_5)
    at org.apache.ws.security.util.WSSecurityUtil.getCipherInstance(
WSSecurityUtil.java:703)
    at org.apache.ws.security.message.WSSecEncryptedKey.prepareInternal(
WSSecEncryptedKey.java:189)
    at org.apache.ws.security.message.WSSecEncrypt.prepare(WSSecEncrypt.java
:216)
    at com.sabre.ssg.common.xml.wse.WSSecuritySample.encryptMessage(
WSSecuritySample.java:182)
    at com.sabre.ssg.common.xml.wse.WSSecuritySample.main(
WSSecuritySample.java:104)


My question is if there is no way to encrypt message with RSA using WSS4J?
What is more, if DES is supported by WSS4J?

Any help will be appreciated.

Regards,
Maciej