全部产品
Search
文档中心

隐私保护接口

更新时间: 2020-05-08

Java SDK 提供隐私保护的接口。用来隐藏智能合约交易中的交易金额。主要有三个接口:

  • ValueHiding:用于加密交易金额。
  • PedersenCommitment:用于创建交易金额的承诺,以及使用 ValueHiding 加密交易金额。
  • Proofs:用于创建交易所需的证明。

ValueHiding

函数原型 函数说明
ValueHiding() 创建一个默认的 ValueHiding。
ValueHiding(final byte[] pub, final byte[] priv, HidingType type) 创建一个 ValueHiding,pub 为公钥,priv 为私钥。通过 type 指定加解密方式,可以为 HidingType.ECIES 或者 HidingType.RSA_2048。该函数可以通过 priv 推导出 pub;如果只提供了 pub,那么 ValueHiding 只能用来加密。
public boolean loadKey(final String path, final String passwd) 使用 path 指定密钥文件初始化 ValueHiding;passwd 为秘钥文件对应的密码。
public static ValueHiding genKeyPair(HidingType type) 随机一个生成 ValueHiding;通过 type 指定加解密方式,可以为 HidingType.ECIES 或者 HidingType.RSA_2048。

PedersenCommitment

函数原型 函数说明
public native static byte[] genBlind() 生成盲因子,用于创建 pedersen commitment 和范围证明。
public static PedersenCommitment createCommitment(long value, final byte[] blind, ValueHiding keypair, final byte[] extensions) 为交易金额 value 创建承诺,blind 为盲因子,keypair 用于加密交易金额和 blind。
public static long getDecryptedValue(final byte[] commitment, ValueHiding keypair) 使用 keypair 从 commitment 表示的承诺中解密交易金额。
public static byte[] getDecryptedBlind(final byte[] commitment, ValueHiding keypair) 使用 keypair 从 commitment 表示的承诺中解密交易盲因子。
public static byte[] computeBlindDelta(final List<byte[]> inputs, final List<byte[]> outputs) 计算 inputs 表示的盲因子列表和 outputs 表示的盲因子列表之差,盲因子之差用于证明输入金额总数和输出金额总数相等。

Proofs

函数原型 函数说明
Proofs() 创建 Proofs 对象。
public boolean addCommitment(PedersenCommitment commitment) 添加一个创建好的输出金额的 pedersen commitment。
public void setBlindDelta(final byte[] delta) 设置输入总金额和输出总金额的盲因子之差。
public boolean addRangeProof(final List values, final List minValues, final List<byte[]> blindValues,final List commitments) 添加范围证明。values 为输入金额列表;min_value 一般设置为 0,表示范围证明要证明的最小值;blind_values,创建输入金额对应的 pedersen commitment 时所用的盲因子;commitments,values 里的金额对应的 pedersen commitment 在 Proofs 对象中的索引值。索引值从 0 开始,pedersen commitment 对应的索引值和调用 AddCommitment时次序对应。
public final byte[] toBytes() 将 Proofs 对象序列化为 bytes。创建隐私保护交易时需要将 Proofs 序列化后的 bytes 添加到 Transaction 里的 extensions 字段。