Hi Ulrich!
Thanks for your time to answer my query. My problem is not so much with
using the APIs. In fact I have successfully sent encrypted and signed
messages between two communicators. However, my problem lies here. The code
hereunder shows how I am signing the XML document, and it uses a PrivateKey
to do the signature. That is ok, and I want it that way. My problem is that
I ALSO want to sign the document with the PUBLIC key of the other person.
However, when I try to change localPrivateKey to a Public Key, I get an
exception that it needs a PrivateKey. Is it possible to work it out that
way?
public org.dom4j.Document sign (Document xmlDoc, PrivateKey localPrivateKey)
throws CustomException
{
org.dom4j.Document dc = null;
try {
String providerName =
System.getProperty(
"jsr105Provider",
"org.jcp.xml.dsig.internal.dom.XMLDSigRI"
);
XMLSignatureFactory fac =
XMLSignatureFactory.getInstance(
"DOM",
(Provider)
Class.forName(providerName).newInstance()
);
//fac.newSignatureMethod(SignatureMethod.DSA_SHA1,
null);
Reference ref = fac.newReference(
"#root",
fac.newDigestMethod(DigestMethod.SHA1, null)
);
Node rootNote =
xmlDoc.getDocumentElement();
XMLStructure content = new
DOMStructure(rootNote);
XMLObject obj = fac.newXMLObject(
Collections.singletonList(content),
"root",
null,
null
);
SignedInfo si = fac.newSignedInfo(
fac.newCanonicalizationMethod(
CanonicalizationMethod.INCLUSIVE_WITH_COMMENTS,
(C14NMethodParameterSpec) null
),
fac.newSignatureMethod(SignatureMethod.DSA_SHA1, null),
Collections.singletonList(ref)
);
XMLSignature xmlSig = fac.newXMLSignature(
si,
null,
Collections.singletonList(obj),
null,
null
); // Check Key Info
Document doc =
DocumentBuilderFactory.newInstance()
.newDocumentBuilder()
.newDocument();
DOMSignContext dsc = new
DOMSignContext(localPrivateKey, doc);
//Sign XML
xmlSig.sign(dsc);
dc = new org.dom4j.io.DOMReader().read(doc);
} // end try
catch (NoSuchAlgorithmException ex) {
throw new CustomException (ex.getMessage(), ex);
} // end catch
catch (ClassNotFoundException ex) {
throw new CustomException (ex.getMessage(), ex);
} // end catch
catch (InstantiationException ex) {
throw new CustomException (ex.getMessage(), ex);
} // end catch
catch (IllegalAccessException ex) {
throw new CustomException (ex.getMessage(), ex);
} // end catch
catch (InvalidAlgorithmParameterException ex) {
throw new CustomException (ex.getMessage(), ex);
} // end catch
catch (MarshalException ex) {
throw new CustomException (ex.getMessage(), ex);
} // end catch
catch (XMLSignatureException ex) {
throw new CustomException (ex.getMessage(), ex);
} // end catch
catch (ParserConfigurationException pce) {
pce.printStackTrace();
} // end catch
return dc;
} // end sign()
Kind regards
-----Original Message-----
From: Ulrich Ackermann
Sent: 06 June 2007 23:57
To: [email protected]
Subject: RE: Encrypt with public key
Hi Joseph,
There are a lot of sample classes shipped with the Apache XML Security
framework.
How to perform encryption and decryption is shown the classes Decrypter and
Encrypter in the package org.apache.xml.security.samples.encryption.
How to perform signature and verification is shown the classes
CreateEnvelopingSignature CreateSignature and VerifySignature in the package
org.apache.xml.security.samples.signature.
We have used both BouncyCastle and IAIK as JCE providers and both worked
fine for us.
HTH,
Ulrich
-----Ursprüngliche Nachricht-----
Von: [email protected]
Gesendet: 06.06.07 08:41:36
An: <[email protected]>
Betreff: RE: Encrypt with public key
Dear Ulrich
Thanks for your response and the advice. I am using Bouncy Castle as my
security provider. Is there some code that I can use as an example for what
I need? The public key is stored in a public key object in a database, so
there is no difficutly retrieving it.
Thanks and Regards
Joseph
-----Original Message-----
From: Ulrich Ackermann
Sent: 05 June 2007 22:50
To: [email protected]
Subject: Re: Encrypt with public key
Hi Joseph,
Sure is this possible. That's what Apache XML Security is all about, isn't
it? :)
But I would first sign the message and encrypt it afterwards. That gives a
hacker less information because all signature related information is in the
encrypted part of the receipt.
Cheers,
Ulrich
-----Ursprüngliche Nachricht-----
Von: [email protected]
Gesendet: 05.06.07 07:59:24
An: <[email protected]>
Betreff: Encrypt with public key
Hi
I am writing an XML exchange program in which I would like a
mechanism if acknowledgements using encrypted XML receipts.
The receipt is an XML file simply stating that a message has
been received. It is sent by the receiver to the sender. I would like to
encrypt the message with the public key of the sender, and then signing the
message with the private key of the receiver.
Is it possible to encrypt the message using the public key
with the Apache Encryption library?
Thanks for your help in advance.
Kind regards
Joseph
_______________________________________________________________
SMS schreiben mit WEB.DE FreeMail - einfach, schnell und
kostenguenstig. Jetzt gleich testen! http://f.web.de/?mc=021192
_______________________________________________________________
SMS schreiben mit WEB.DE FreeMail - einfach, schnell und
kostenguenstig. Jetzt gleich testen! http://f.web.de/?mc=021192