content: package im.actor.core.network;
  
  import java.io.IOException;
  
  import im.actor.runtime.Crypto;
  import im.actor.runtime.bser.Bser;
  import im.actor.runtime.bser.BserObject;
  import im.actor.runtime.bser.BserValues;
  import im.actor.runtime.bser.BserWriter;
  import im.actor.runtime.crypto.Digest;
  import im.actor.runtime.crypto.primitives.util.ByteStrings;
  import im.actor.runtime.util.Hex;
  
  // Disabling Bounds checks for speeding up calculations
  
  /*-[
  #define J2OBJC_DISABLE_ARRAY_BOUND_CHECKS 1
  ]-*/
  
  public class TrustedKey extends BserObject {
  
      private boolean isLoaded = false;
      private String hexKey;
      private long keyId;
      private byte[] key;
  
      public TrustedKey() {
      }
  
      public TrustedKey(String hexKey) {
          this.hexKey = hexKey;
      }
  
      public long getKeyId() {
          load();
          return keyId;
      }
  
      public byte[] getKey() {
          load();
          return key;
      }
  
      private synchronized void load() {
          if (!isLoaded) {
              isLoaded = true;
  
              this.key = Hex.fromHex(hexKey);
  
              byte[] hash = new byte[32];
              Digest sha256 = Crypto.createSHA256();
              sha256.update(key, 0, key.length);
              sha256.doFinal(hash, 0);
              this.keyId = ByteStrings.bytesToLong(hash);
          }
      }
  
      public static TrustedKey fromBytes(byte[] data) throws IOException {
          return Bser.parse(new TrustedKey(), data);
      }
  
      @Override
      public boolean equals(Object o) {
          if (this == o) return true;
          if (o == null || getClass() != o.getClass()) return false;
  
          TrustedKey that = (TrustedKey) o;
  
          return hexKey.equals(that.hexKey);
  
      }
  
      @Override
      public void parse(BserValues values) throws IOException {
          isLoaded = values.getBool(1);
          hexKey = values.getString(2);
          keyId = values.getLong(3);
          key = values.getBytes(4);
      }
  
      @Override
      public void serialize(BserWriter writer) throws IOException {
          writer.writeBool(1, isLoaded);
          writer.writeString(2, hexKey);
          writer.writeLong(3, keyId);
          writer.writeBytes(4, key);
      }
  }
  