隐私保护接口

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 字段。