Header.java

 1package im.conversations.android.xmpp.model.axolotl;
 2
 3import com.google.common.base.Optional;
 4import com.google.common.collect.Iterables;
 5import im.conversations.android.annotation.XmlElement;
 6import im.conversations.android.xmpp.model.Extension;
 7import java.util.Collection;
 8import java.util.Objects;
 9
10@XmlElement
11public class Header extends Extension {
12
13    public Header() {
14        super(Header.class);
15    }
16
17    public void addIv(byte[] iv) {
18        this.addExtension(new IV()).setContent(iv);
19    }
20
21    public void setSourceDevice(long sourceDeviceId) {
22        this.setAttribute("sid", sourceDeviceId);
23    }
24
25    public Optional<Integer> getSourceDevice() {
26        return getOptionalIntAttribute("sid");
27    }
28
29    public Collection<Key> getKeys() {
30        return this.getExtensions(Key.class);
31    }
32
33    public Key getKey(final int deviceId) {
34        return Iterables.find(
35                getKeys(), key -> Objects.equals(key.getRemoteDeviceId(), deviceId), null);
36    }
37
38    public byte[] getIv() {
39        final IV iv = this.getExtension(IV.class);
40        if (iv == null) {
41            throw new IllegalStateException("No IV in header");
42        }
43        return iv.asBytes();
44    }
45}