1 /* 2 * Copyright (C) 2021 Finn Herzfeld 3 * 4 * This program is free software: you can redistribute it and/or modify 5 * it under the terms of the GNU General Public License as published by 6 * the Free Software Foundation, either version 3 of the License, or 7 * (at your option) any later version. 8 * 9 * This program is distributed in the hope that it will be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 * GNU General Public License for more details. 13 * 14 * You should have received a copy of the GNU General Public License 15 * along with this program. If not, see <http://www.gnu.org/licenses/>. 16 */ 17 18 package io.finn.signald; 19 20 import com.fasterxml.jackson.annotation.JsonProperty; 21 import io.finn.signald.annotations.Deprecated; 22 import io.finn.signald.clientprotocol.v1.JsonAddress; 23 import io.finn.signald.db.IdentityKeysTable; 24 import io.finn.signald.db.Recipient; 25 import io.finn.signald.util.SafetyNumberHelper; 26 import java.io.IOException; 27 import java.sql.SQLException; 28 import org.asamk.signal.util.Hex; 29 import org.whispersystems.libsignal.fingerprint.Fingerprint; 30 import org.whispersystems.util.Base64; 31 32 @Deprecated(1641027661) 33 class JsonIdentity { 34 public String trust_level; 35 public long added; 36 public String fingerprint; 37 public String safety_number; 38 public String qr_code_data; 39 public JsonAddress address; 40 JsonIdentity(IdentityKeysTable.IdentityKeyRow identity, Manager m)41 JsonIdentity(IdentityKeysTable.IdentityKeyRow identity, Manager m) throws IOException, SQLException { 42 this.trust_level = identity.getTrustLevel().name(); 43 this.added = identity.getDateAdded().getTime(); 44 this.fingerprint = Hex.toStringCondensed(identity.getFingerprint()); 45 if (identity.getAddress() != null) { 46 this.address = new JsonAddress(identity.getAddress()); 47 generateSafetyNumber(identity, m); 48 } 49 } 50 JsonIdentity(IdentityKeysTable.IdentityKeyRow identity, Manager m, Recipient recipient)51 JsonIdentity(IdentityKeysTable.IdentityKeyRow identity, Manager m, Recipient recipient) throws IOException, SQLException { 52 this(identity, m); 53 this.address = new JsonAddress(recipient.getAddress()); 54 generateSafetyNumber(identity, m); 55 } 56 generateSafetyNumber(IdentityKeysTable.IdentityKeyRow identity, Manager m)57 private void generateSafetyNumber(IdentityKeysTable.IdentityKeyRow identity, Manager m) throws IOException, SQLException { 58 if (address != null) { 59 Fingerprint fingerprint = SafetyNumberHelper.computeFingerprint(m.getOwnRecipient(), m.getIdentity(), m.getRecipientsTable().get(address), identity.getKey()); 60 if (fingerprint == null) { 61 safety_number = "INVALID ID"; 62 } else { 63 safety_number = fingerprint.getDisplayableFingerprint().getDisplayText(); 64 qr_code_data = Base64.encodeBytes(fingerprint.getScannableFingerprint().getSerialized()); 65 } 66 } 67 } 68 69 @JsonProperty setNumber(String number)70 public void setNumber(String number) { 71 if (this.address == null) { 72 this.address = new JsonAddress(number); 73 } else { 74 this.address.number = number; 75 } 76 } 77 } 78