golang pederson commitment 实现,基于椭圆曲线

这篇博客介绍了如何在Go中使用Edwards25519椭圆曲线实现Pederson承诺,依赖于go-ristretto包,并提供了代码示例和相关参考资料链接。
摘要由CSDN通过智能技术生成

golang 实现的EC pederson-commitment

EC 曲线使用的是 Edwards25519,由 go-ristretto 包提供,文档参考 https://pkg.go.dev/github.com/bwesterb/go-ristretto?tab=doc ,GitHub库 https://github.com/bwesterb/go-ristretto

另外参考了 https://github.com/threehook/go-pedersen-commitment 的实现,这里的封装是为了实现我自己的一些需求,同时也分享出来给需要的朋友

pederson-commitment 原论文可见 https://link.springer.com/content/pdf/10.1007%2F3-540-46766-1_9.pdf

下面直接上代码了,里面涉及到转字符串的都是是由标准库hex来转,要参考的话需要先导包 “github.com/bwesterb/go-ristretto” ,直接去github下来放到GOPATH下即可

package go_ec_pederson_commitment

import (
	"encoding/hex"
	"github.com/bwesterb/go-ristretto"
	"math/big"
)

/**
基于EC的 pederson commitment
原论文:Non-Interactive and Information-Theoretic Secure Verifiable Secret Sharing
在原论文里是基于循环群的实现,说的是g,h是群里的元素,没有人知道log_g(h)
对应到椭圆曲线的话,就是对G、H的要求是G和H是椭圆曲线上的点,没有人知道 H=aG 中a的值,那么G和H都采用随机选取的方式,应该是满足要求的?! 或者更简单的方式就是G使用基点,H随机选,这里采用都随机生成的方式
秘密x,随机数r, G和H是椭圆曲线上的随机的点, --> c = xG + rH
G,H 由被承诺方选定,r由承诺方选定
*/

//生成两个曲线上的点,用于计算承诺
func ParamsGen() (G, H ristretto.Point) {
   
	G.Rand()
	H.Rand()
	return G, H
}

func ParamsGenToString() (GString, HString string) {
   
	var G, H ristretto.Point
	G.Rand()
	H.Rand()
	GBytes, _ := G.MarshalText()
	HBytes, _ := H.MarshalText()
	GString = hex.EncodeToString(GBytes)
	HString = hex.EncodeToString(HBytes)
	return
}

//生成一个随机阶数
func RandomGen() (r ristretto.Scalar) {
   
	r.Rand()
	return r
}

func RandomGenToNumberString() string {
   
	var r ristretto.Scalar
	r.Rand()
	return r.BigInt().String()
}

//计算 秘密 的 Pederson 承诺, 返回曲线上的点
func Commit(G,
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值