46 lines
1.8 KiB
Java
46 lines
1.8 KiB
Java
package org.jivesoftware.smackx.signed.xep0285.provider;
|
|
|
|
import org.jivesoftware.smack.packet.XmlEnvironment;
|
|
import org.jivesoftware.smack.provider.ExtensionElementProvider;
|
|
import org.jivesoftware.smack.util.Objects;
|
|
import org.jivesoftware.smack.util.ParserUtils;
|
|
import org.jivesoftware.smack.xml.XmlPullParser;
|
|
import org.jivesoftware.smack.xml.XmlPullParserException;
|
|
import org.jivesoftware.smackx.signed.xep0285.element.DataElement;
|
|
import org.jivesoftware.smackx.signed.xep0285.element.SignatureElement;
|
|
import org.jivesoftware.smackx.signed.xep0285.element.SignedElement;
|
|
|
|
import java.io.IOException;
|
|
|
|
public class SignedElementProvider extends ExtensionElementProvider<SignedElement> {
|
|
|
|
@Override
|
|
public SignedElement parse(XmlPullParser parser, int initialDepth, XmlEnvironment xmlEnvironment)
|
|
throws XmlPullParserException, IOException {
|
|
|
|
SignatureElement signature = null;
|
|
DataElement data = null;
|
|
|
|
XmlPullParser.TagEvent tag;
|
|
String name;
|
|
do {
|
|
tag = parser.nextTag();
|
|
name = parser.getName();
|
|
if (tag == XmlPullParser.TagEvent.START_ELEMENT) {
|
|
switch (name) {
|
|
case SignatureElement.ELEMENT:
|
|
String algorithm = ParserUtils.getRequiredAttribute(parser, SignatureElement.ATTR_ALGORITHM);
|
|
signature = SignatureElement.fromBase64Content(algorithm, parser.nextText());
|
|
break;
|
|
|
|
case DataElement.ELEMENT:
|
|
data = DataElement.fromBase64Content(parser.nextText());
|
|
break;
|
|
}
|
|
}
|
|
} while (parser.getDepth() != initialDepth);
|
|
|
|
return new SignedElement(Objects.requireNonNull(signature), Objects.requireNonNull(data));
|
|
}
|
|
}
|