package org.asamk.signal.manager.groups; import java.util.Arrays; import java.util.Base64; public abstract class GroupId { private final byte[] id; public static GroupIdV1 v1(byte[] id) { return new GroupIdV1(id); } public static GroupIdV2 v2(byte[] id) { return new GroupIdV2(id); } public static GroupId unknownVersion(byte[] id) { if (id.length == 16) { return new GroupIdV1(id); } else if (id.length == 32) { return new GroupIdV2(id); } throw new AssertionError("Invalid group id of size " + id.length); } public static GroupId fromBase64(String id) throws GroupIdFormatException { try { return unknownVersion(java.util.Base64.getDecoder().decode(id)); } catch (Throwable e) { throw new GroupIdFormatException(id, e); } } public GroupId(final byte[] id) { this.id = id; } public byte[] serialize() { return id; } public String toBase64() { return Base64.getEncoder().encodeToString(id); } @Override public boolean equals(final Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; final GroupId groupId = (GroupId) o; return Arrays.equals(id, groupId.id); } @Override public int hashCode() { return Arrays.hashCode(id); } }