1
0
Fork 0
mirror of https://github.com/vanitasvitae/Smack.git synced 2025-12-07 11:31:10 +01:00

BouncycastleOpenPgpProvider implementatioN

This commit is contained in:
Paul Schaub 2018-05-15 21:12:03 +02:00
parent 2acf9689fe
commit 9ee47e1711
10 changed files with 346 additions and 88 deletions

View file

@ -1,8 +0,0 @@
package org.jivesoftware.smackx.ox;
public class OpenPgpKeyStore {
public OpenPgpKeyStore() {
}
}

View file

@ -36,7 +36,7 @@ public class OpenPgpMessage {
}
private final String element;
private final State state;
private State state;
private OpenPgpContentElement openPgpContentElement;
@ -56,6 +56,16 @@ public class OpenPgpMessage {
return;
openPgpContentElement = OpenPgpContentElementProvider.parseOpenPgpContentElement(element);
if (state == null) {
if (openPgpContentElement instanceof SigncryptElement) {
state = State.signcrypt;
} else if (openPgpContentElement instanceof SignElement) {
state = State.sign;
} else {
state = State.crypt;
}
return;
}
switch (state) {
case signcrypt:
if (!(openPgpContentElement instanceof SigncryptElement)) {

View file

@ -17,9 +17,15 @@
package org.jivesoftware.smackx.ox;
import java.io.InputStream;
import java.util.Set;
import org.jivesoftware.smackx.ox.element.OpenPgpElement;
import org.jxmpp.jid.BareJid;
public interface OpenPgpProvider {
OpenPgpMessage toOpenPgpMessage(InputStream is);
OpenPgpMessage decryptAndVerify(OpenPgpElement element, BareJid sender) throws Exception;
OpenPgpElement signAndEncrypt(InputStream inputStream, Set<BareJid> recipients) throws Exception;
}

View file

@ -16,6 +16,9 @@
*/
package org.jivesoftware.smackx.ox.element;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.nio.charset.Charset;
import java.util.Date;
import java.util.List;
import java.util.Set;
@ -99,4 +102,9 @@ public abstract class OpenPgpContentElement implements ExtensionElement {
}
xml.closeElement(ELEM_PAYLOAD);
}
public InputStream toInputStream() {
byte[] encoded = toXML(null).toString().getBytes(Charset.forName("UTF-8"));
return new ByteArrayInputStream(encoded);
}
}

View file

@ -25,6 +25,7 @@ import org.jivesoftware.smack.util.XmlStringBuilder;
import org.jivesoftware.smack.util.stringencoder.Base64;
import org.jivesoftware.smackx.ox.OpenPgpManager;
import org.jivesoftware.smackx.ox.OpenPgpMessage;
import org.jivesoftware.smackx.ox.OpenPgpProvider;
import org.xmlpull.v1.XmlPullParserException;
@ -47,7 +48,7 @@ public class OpenPgpElement implements ExtensionElement {
this.base64EncodedOpenPgpMessage = base64EncodedOpenPgpMessage;
}
public OpenPgpMessage getOpenPgpMessage() {
public OpenPgpMessage getOpenPgpMessage(OpenPgpProvider provider) {
if (openPgpMessage == null) {
ensureOpenPgpMessageBytesSet();
InputStream is = new ByteArrayInputStream(openPgpMessageBytes);
@ -57,14 +58,18 @@ public class OpenPgpElement implements ExtensionElement {
return openPgpMessage;
}
public OpenPgpContentElement getContentElement() throws XmlPullParserException, IOException {
public OpenPgpContentElement getContentElement(OpenPgpProvider provider) throws XmlPullParserException, IOException {
if (openPgpContentElement == null) {
openPgpContentElement = getOpenPgpMessage().getOpenPgpContentElement();
openPgpContentElement = getOpenPgpMessage(provider).getOpenPgpContentElement();
}
return openPgpContentElement;
}
public String getEncryptedBase64MessageContent() {
return base64EncodedOpenPgpMessage;
}
@Override
public String getElementName() {
return ELEMENT;

View file

@ -55,9 +55,20 @@ public abstract class OpenPgpContentElementProvider<O extends OpenPgpContentElem
}
public static OpenPgpContentElement parseOpenPgpContentElement(XmlPullParser parser)
throws IOException, XmlPullParserException {
// TODO
return null;
throws XmlPullParserException, IOException {
try {
switch (parser.getName()) {
case SigncryptElement.ELEMENT:
return SigncryptElementProvider.TEST_INSTANCE.parse(parser);
case SignElement.ELEMENT:
return SignElementProvider.TEST_INSTANCE.parse(parser);
case CryptElement.ELEMENT:
return CryptElementProvider.TEST_INSTANCE.parse(parser);
default: return null;
}
} catch (Exception e) {
throw new XmlPullParserException(e.getMessage());
}
}
@Override