-
Notifications
You must be signed in to change notification settings - Fork 14
Send实现
基于libsnark
自带的sha256
的电路,重新构造sha256_two_block_gadget
电路,支持两个blocks
的哈希,
证明cmt_A == sha256(value_A, sn_A, r_A)
重新构造sha256_three_block_gadget
电路,支持三个blocks
的哈希,
证明cmt_S == sha256(value_s, pk_B, sn_s, r_s, sn_A)
基于libsnark
自带的comparison_gadget
的, 重新构造less_comparison_gadget
电路,证明A < B
的关系
整合上述子电路,构造支持send
的电路,根据以下已知条件:
* ************* for cmtA_old **************
* publicData: sn_A_old,
* privateData: value_old, r_old, cmtA_old
* ************** for cmtS **************
* publicData: cmtS, sn_A_old
* privateData: value_s, sn_s, r_s, pk_B
证明以下等式成立:
cmt_A_old == sha256(value_old, sn_old, r_old)
cmt_S == sha256(value_s, pk_B, sn_s, r_s, sn_old)
value_s < value_old
基于libsnark
自带的packing_gadget
的, 重新改写get_field_element_from_bits_by_order()
函数,实现域上二进制到域上十进制的转化
重写libsnark
自带的比较电路,添加加法约束,构造note_gadget_with_comparison_for_value_old
的电路,
证明 value_s < value_old
包含gadget
辅助函数,实现类型转化等操作
该目录复制于zcash
,主要是使用正常sha256
函数所依赖的的库文件,需要特别说明的是libsodium
,该库主要用来产生uint256
类型的随机数;
libsodium
库下载地址:https://download.libsodium.org/libsodium/releases/old/unsupported/libsodium-1.0.8.tar.gz
libsodium
安装方法:https://download.libsodium.org/doc/installation
libsodium
编译方法:在CMakeLists.txt
的target_link_libraries()
中添加sodium
,并在相应的文件中导入#include "deps/sodium.h"
简单封装,内含函数入口,支持测试
仿照zcash
封装Init
,Generate
,Prove
和Verify
操作
仿照zcash
实现Init
,Generate
,Prove
和Verify
操作
含有Note
结构体,用于包装value
,sn
和r
,计算cmtA
的哈希值
含有NoteS
结构体,用于包装value_s
,pk_B
, sn_s
, r_s
和sn_A_old
,计算cmtS
的哈希值
从bitcoin
中导入的文件,支持uint256
相关操作,添加uint160
的方法
包含辅助函数,实现vector
类型的相关转换等操作