PublicKey.java
package com.syntifi.near.api.model.key;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonValue;
import com.syntifi.crypto.key.AbstractPublicKey;
import com.syntifi.crypto.key.Ed25519PublicKey;
import com.syntifi.near.api.exception.NoSuchTypeException;
import com.syntifi.near.borshj.Borsh;
import lombok.Builder;
import lombok.EqualsAndHashCode;
/**
* Holds a Near PublicKey
*
* @author Alexandre Carvalho
* @author Andre Bertolace
* @since 0.0.1
*/
@EqualsAndHashCode(callSuper = true)
public class PublicKey extends KeySig implements Borsh {
private static final int KEY_SIZE = 32;
public PublicKey() {
// This solves the case for borsh deserialization for keys of
// type ED25591 because to read the 'fixed' byte array we must know
// its size.
// If any other key (and signature) is implemented, a different
// approach is needed (like getters and setters annotation on borsh)
this.data = new byte[KEY_SIZE];
}
/**
* Instantiate a Public Key
*
* @param keyType the KeyType
* @param data the key bytes
*/
@Builder
public PublicKey(KeyType keyType, byte[] data) {
super(keyType, data);
}
public AbstractPublicKey getPublicKey() {
if (type == KeyType.ED25519) {
return new Ed25519PublicKey(data);
}
throw new NoSuchTypeException(String.format("No implementation found for key type %s", type));
}
@JsonCreator
public static PublicKey getPublicKeyFromJson(String base58String) {
return PublicKey.fromEncodedBase58String(base58String, PublicKey.class);
}
@JsonValue
public String getJsonPublicKey() {
return this.toEncodedBase58String();
}
}