diff --git a/domain/src/main/java/org/jivesoftware/smackx/ikey/IkeyManager.java b/domain/src/main/java/org/jivesoftware/smackx/ikey/IkeyManager.java index 291ae7d..a856861 100644 --- a/domain/src/main/java/org/jivesoftware/smackx/ikey/IkeyManager.java +++ b/domain/src/main/java/org/jivesoftware/smackx/ikey/IkeyManager.java @@ -6,8 +6,12 @@ import org.jivesoftware.smack.SmackException; import org.jivesoftware.smack.XMPPConnection; import org.jivesoftware.smack.XMPPException; import org.jivesoftware.smack.packet.Message; +import org.jivesoftware.smack.provider.ProviderManager; import org.jivesoftware.smackx.ikey.element.IkeyElement; +import org.jivesoftware.smackx.ikey.element.SubordinateListElement; import org.jivesoftware.smackx.ikey.mechanism.IkeySignatureVerificationMechanism; +import org.jivesoftware.smackx.ikey.provider.IkeyElementProvider; +import org.jivesoftware.smackx.ikey.provider.SubordinateListElementProvider; import org.jivesoftware.smackx.ikey.record.IkeyStore; import org.jivesoftware.smackx.ikey.util.IkeyConstants; import org.jivesoftware.smackx.ikey.util.UnsupportedSignatureAlgorithmException; @@ -34,6 +38,12 @@ public final class IkeyManager extends Manager { private static final Logger LOGGER = Logger.getLogger(IkeyManager.class.getName()); private static final Map INSTANCES = new WeakHashMap<>(); + static { + // TODO: Replace with .providers file once merged into Smack + ProviderManager.addExtensionProvider(IkeyElement.ELEMENT, IkeyElement.NAMESPACE, new IkeyElementProvider()); + ProviderManager.addExtensionProvider(SubordinateListElement.ELEMENT, SubordinateListElement.NAMESPACE, new SubordinateListElementProvider()); + } + private IkeyStore store; private IkeyManager(XMPPConnection connection) { diff --git a/domain/src/main/java/org/jivesoftware/smackx/ikey/IkeySignatureCreator.java b/domain/src/main/java/org/jivesoftware/smackx/ikey/IkeySignatureCreator.java index 952fcb9..cb74b1c 100644 --- a/domain/src/main/java/org/jivesoftware/smackx/ikey/IkeySignatureCreator.java +++ b/domain/src/main/java/org/jivesoftware/smackx/ikey/IkeySignatureCreator.java @@ -18,8 +18,8 @@ public class IkeySignatureCreator { public ProofElement createProofFor(SubordinateListElement subordinateListElement) throws IOException { - byte[] canonicalized = new SignedElement(subordinateListElement).getUtf8Bytes(); - byte[] signature = signatureCreationMechanism.createSignature(canonicalized); + byte[] utf8 = new SignedElement(subordinateListElement).getUtf8Bytes(); + byte[] signature = signatureCreationMechanism.createSignature(utf8); return new ProofElement(Base64.encodeToString(signature)); } diff --git a/domain/src/main/java/org/jivesoftware/smackx/ikey/IkeySignatureVerifier.java b/domain/src/main/java/org/jivesoftware/smackx/ikey/IkeySignatureVerifier.java index 95ed7cb..ec3f153 100644 --- a/domain/src/main/java/org/jivesoftware/smackx/ikey/IkeySignatureVerifier.java +++ b/domain/src/main/java/org/jivesoftware/smackx/ikey/IkeySignatureVerifier.java @@ -20,10 +20,10 @@ public class IkeySignatureVerifier { throwIfMismatchingMechanism(element); throwIfMismatchingOwnerJid(element, owner); - byte[] canonicalizedXml = element.getSignedElement().getUtf8Bytes(); + byte[] utf8 = element.getSignedElement().getUtf8Bytes(); byte[] signature = Base64.decode(element.getProof().getBase64Signature()); - return signatureVerificationMechanism.isSignatureValid(canonicalizedXml, signature); + return signatureVerificationMechanism.isSignatureValid(utf8, signature); } private static void throwIfMismatchingOwnerJid(IkeyElement element, EntityBareJid owner) { diff --git a/domain/src/main/java/org/jivesoftware/smackx/ikey/element/SubordinateElement.java b/domain/src/main/java/org/jivesoftware/smackx/ikey/element/SubordinateElement.java index 8c1e90b..62c824d 100644 --- a/domain/src/main/java/org/jivesoftware/smackx/ikey/element/SubordinateElement.java +++ b/domain/src/main/java/org/jivesoftware/smackx/ikey/element/SubordinateElement.java @@ -39,11 +39,10 @@ public class SubordinateElement implements NamedElement { @Override public XmlStringBuilder toXML(XmlEnvironment xmlEnvironment) { - XmlStringBuilder xml = new XmlStringBuilder(this) + return new XmlStringBuilder(this) .attribute(ATTR_SUB_URI, getUri().toString()) .attribute(ATTR_SUB_FINGERPRINT, getFingerprint()) .closeEmptyElement(); - return xml; } @Override diff --git a/domain/src/main/java/org/jivesoftware/smackx/ikey/element/SubordinateListElement.java b/domain/src/main/java/org/jivesoftware/smackx/ikey/element/SubordinateListElement.java index 57a4b42..920e428 100644 --- a/domain/src/main/java/org/jivesoftware/smackx/ikey/element/SubordinateListElement.java +++ b/domain/src/main/java/org/jivesoftware/smackx/ikey/element/SubordinateListElement.java @@ -1,12 +1,10 @@ package org.jivesoftware.smackx.ikey.element; import org.jivesoftware.smack.packet.ExtensionElement; -import org.jivesoftware.smack.packet.NamedElement; import org.jivesoftware.smack.packet.XmlEnvironment; import org.jivesoftware.smack.util.EqualsUtil; import org.jivesoftware.smack.util.HashCode; import org.jivesoftware.smack.util.Objects; -import org.jivesoftware.smack.util.ParserUtils; import org.jivesoftware.smack.util.XmlStringBuilder; import org.jivesoftware.smack.util.stringencoder.Base64; import org.jivesoftware.smackx.ikey.util.IkeyConstants; diff --git a/domain/src/main/java/org/jivesoftware/smackx/ikey/provider/IkeyElementProvider.java b/domain/src/main/java/org/jivesoftware/smackx/ikey/provider/IkeyElementProvider.java index babbf95..ca18d09 100644 --- a/domain/src/main/java/org/jivesoftware/smackx/ikey/provider/IkeyElementProvider.java +++ b/domain/src/main/java/org/jivesoftware/smackx/ikey/provider/IkeyElementProvider.java @@ -3,25 +3,16 @@ package org.jivesoftware.smackx.ikey.provider; import org.jivesoftware.smack.packet.XmlEnvironment; import org.jivesoftware.smack.parsing.SmackParsingException; import org.jivesoftware.smack.provider.ExtensionElementProvider; -import org.jivesoftware.smack.util.PacketParserUtils; import org.jivesoftware.smack.util.ParserUtils; -import org.jivesoftware.smack.util.stringencoder.Base64; import org.jivesoftware.smack.xml.XmlPullParser; import org.jivesoftware.smack.xml.XmlPullParserException; import org.jivesoftware.smackx.ikey.element.IkeyElement; -import org.jivesoftware.smackx.ikey.element.SignedElement; import org.jivesoftware.smackx.ikey.element.ProofElement; -import org.jivesoftware.smackx.ikey.element.SubordinateElement; -import org.jivesoftware.smackx.ikey.element.SubordinateListElement; +import org.jivesoftware.smackx.ikey.element.SignedElement; import org.jivesoftware.smackx.ikey.element.SuperordinateElement; import org.jivesoftware.smackx.ikey.mechanism.IkeyType; -import org.jxmpp.jid.EntityBareJid; import java.io.IOException; -import java.net.URI; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; public class IkeyElementProvider extends ExtensionElementProvider { diff --git a/domain/src/main/java/org/jivesoftware/smackx/ikey/record/FileBasedIkeyStore.java b/domain/src/main/java/org/jivesoftware/smackx/ikey/record/FileBasedIkeyStore.java index aca14ea..590d142 100644 --- a/domain/src/main/java/org/jivesoftware/smackx/ikey/record/FileBasedIkeyStore.java +++ b/domain/src/main/java/org/jivesoftware/smackx/ikey/record/FileBasedIkeyStore.java @@ -2,12 +2,10 @@ package org.jivesoftware.smackx.ikey.record; import org.jivesoftware.smack.parsing.SmackParsingException; import org.jivesoftware.smack.util.Objects; -import org.jivesoftware.smack.xml.SmackXmlParser; -import org.jivesoftware.smack.xml.XmlPullParser; +import org.jivesoftware.smack.util.PacketParserUtils; import org.jivesoftware.smack.xml.XmlPullParserException; import org.jivesoftware.smackx.ikey.element.IkeyElement; import org.jivesoftware.smackx.ikey.provider.IkeyElementProvider; -import org.jivesoftware.smackx.ikey.record.IkeyStore; import org.jxmpp.jid.EntityBareJid; import java.io.BufferedReader; @@ -18,8 +16,6 @@ import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; -import java.io.Reader; -import java.io.StringReader; import java.nio.charset.StandardCharsets; public class FileBasedIkeyStore implements IkeyStore { @@ -38,7 +34,7 @@ public class FileBasedIkeyStore implements IkeyStore { } try { String content = getFileContent(new FileInputStream(file)); - return IkeyElementProvider.INSTANCE.parse(getParser(content)); + return IkeyElementProvider.INSTANCE.parse(PacketParserUtils.getParserFor(content)); } catch (XmlPullParserException | SmackParsingException e) { throw new IOException(e); } @@ -71,36 +67,4 @@ public class FileBasedIkeyStore implements IkeyStore { } } - private static XmlPullParser getParser(String xml) { - return getParser(new StringReader(xml), null); - } - - private static XmlPullParser getParser(Reader reader, String startTag) { - XmlPullParser parser; - try { - parser = SmackXmlParser.newXmlParser(reader); - if (startTag == null) { - while (parser.getEventType() != XmlPullParser.Event.START_ELEMENT) { - parser.next(); - } - return parser; - } - boolean found = false; - - while (!found) { - if ((parser.next() == XmlPullParser.Event.START_ELEMENT) && parser.getName().equals(startTag)) - found = true; - } - - if (!found) - throw new IllegalArgumentException("Can not find start tag '" + startTag + "'"); - } catch (XmlPullParserException e) { - throw new RuntimeException(e); - } catch (IOException e) { - throw new RuntimeException(e); - } - return parser; - } - - } diff --git a/domain/src/main/java/org/jivesoftware/smackx/ikey/util/IkeyConstants.java b/domain/src/main/java/org/jivesoftware/smackx/ikey/util/IkeyConstants.java index 07453b2..15dc516 100644 --- a/domain/src/main/java/org/jivesoftware/smackx/ikey/util/IkeyConstants.java +++ b/domain/src/main/java/org/jivesoftware/smackx/ikey/util/IkeyConstants.java @@ -4,5 +4,4 @@ public class IkeyConstants { public static final String NAMESPACE = "urn:xmpp:ikey:0"; public static final String IKEY_NODE = NAMESPACE + ":ikey"; - public static final String SUB_NODE = NAMESPACE + ":sub"; }