签名验证

trident-java提供了通过交易id和签名消息来验证签名正确性的方法,用于广播交易之前的离线验证。

签名验证的原理

在已知交易发起者(contract owner)地址的情况下,通过签名消息逆推公钥(recover),并将公钥转换为地址,与发起者地址进行比较。如果地址一致,即为验证成功。

验证签名的方法

验证方法需要三个参数:

  • 交易id(即交易哈希,通过Transaction.rawData计算SHA256得到)

  • 签名消息(即Transaction.signature

  • 发起者地址(即Transaction.rawData.contract.parameter.ownerAddress,其中parameter的类型是com.google.protobuf.Any,需要根据具体交易类型来进行unpack操作)

签名验证方法能接收两种类型的参数:byte[]String

//parent function
public static boolean verify(byte[] txid, byte[] signature, byte[] owner)
  
public static boolean verify(String txid, String signature, String owner)

如果返回true即为验证成功。