secp256k1_zkpライブラリの関数概要のメモです。
スカラー値は小文字、楕円曲線上の点は大文字で表現します。
未調査の部分は?としてあります。
/// seedを指定してハッシュ関数を通した点を返す // 同じseedを指定した場合、いつも同じ点が返されることが保証されている secp256k1_generator_generate() /// seedを指定してハッシュ関数を通した点 + blind * G を返す secp256k1_generator_generate_blinded() /// ペダーセンコミットメントを生成する /// C = blind * G + value * H secp256k1_pedersen_commit() /// blind[0] + blind[1] + ... + blind[n] secp256k1_pedersen_blind_sum() /// C[0] + ... + C[n] + NC[0] + ... + NC[m] がO(無限遠点)かどうかを返す secp256k1_pedersen_verify_tally() /// value[0] * generator_blind[0] + blinding_factor[0] /// + ... /// + value[n] * generator_blind[n] + blinding_factor[n] /// を加算した和が0になるように、最後の値blinding_factor[n]を書き換える /// 各行は入力の場合は加算ではなく減算する secp256k1_pedersen_blind_generator_blind_sum() /// ? secp256k1_rangeproof_verify() secp256k1_rangeproof_rewind() secp256k1_rangeproof_sign() secp256k1_rangeproof_info() /// ? secp256k1_surjectionproof_n_total_inputs() secp256k1_surjectionproof_n_used_inputs() secp256k1_surjectionproof_initialize() secp256k1_surjectionproof_generate() secp256k1_surjectionproof_verify() /// ? secp256k1_whitelist_signature_parse() secp256k1_whitelist_signature_n_keys() secp256k1_whitelist_signature_serialize() secp256k1_whitelist_sign() secp256k1_whitelist_verify()
ジェネレーターポイントを生成するのに、constant time でスカラー値を楕円曲線上の点に割りあてるハッシュ関数についてのpaper
https://www.di.ens.fr/~fouque/pub/latincrypt12.pdf