隐私保护接口

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

  • 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 inputs, final List 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 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 字段。