sm2rsign

package module
v0.0.0-...-c4b14e7 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 11, 2024 License: MIT Imports: 7 Imported by: 0

README

sm2rsign

Ring Signature Schemes Based on SM2 Digital Signature Algorithm

test GitHub go.mod Go version (branch)

本实验性实现基于SM2数字签名算法的环签名方案,参考资料:

其实这两个方案除了签名参与者的随机数生成方式不同,其它没有区别。本实验性实现暂未考虑环签名的ASN.1编码。

不管是环签名还是可链接环签名,L={P1, P2, ..., Pn}的公钥顺序至关重要,直接影响签名、验签结果。如何处理成员公钥列表的变化呢?

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Linkable

func Linkable(signature1, signature2 []*big.Int) bool

func SM2ParticipantRandInt

func SM2ParticipantRandInt(rand io.Reader, pub *ecdsa.PublicKey, msg []byte) (*big.Int, error)

https://www.wangan.com/p/7fyg8kdf13655a55 完全采用了sm2签名随机数r的生成方式,只是这里我们使用的默认uid

func SimpleParticipantRandInt

func SimpleParticipantRandInt(rand io.Reader, pub *ecdsa.PublicKey, msg []byte) (*big.Int, error)

func Verify

func Verify(pubs []*ecdsa.PublicKey, msg []byte, signature []*big.Int) bool

Types

type BaseLinkableSigner

type BaseLinkableSigner struct {
	BaseLinkableVerfier
	// contains filtered or unexported fields
}

func NewBaseLinkableSigner

func NewBaseLinkableSigner(privateKey *sm2.PrivateKey, pubs []*ecdsa.PublicKey) *BaseLinkableSigner

func (*BaseLinkableSigner) Sign

func (signer *BaseLinkableSigner) Sign(rand io.Reader, participantRandInt ParticipantRandInt, msg []byte) ([]*big.Int, error)

type BaseLinkableVerfier

type BaseLinkableVerfier struct {
	// contains filtered or unexported fields
}

func NewBaseLinkableVerfier

func NewBaseLinkableVerfier(pubs []*ecdsa.PublicKey) *BaseLinkableVerfier

func (*BaseLinkableVerfier) Verify

func (v *BaseLinkableVerfier) Verify(msg []byte, signature []*big.Int) bool

type LinkableSignerVariant1

type LinkableSignerVariant1 struct {
	LinkableVerfierVariant1
	// contains filtered or unexported fields
}

func NewLinkableSignerVariant1

func NewLinkableSignerVariant1(privateKey *sm2.PrivateKey, pubs []*ecdsa.PublicKey) *LinkableSignerVariant1

func NewLinkableSignerVariant2

func NewLinkableSignerVariant2(privateKey *sm2.PrivateKey, pubs []*ecdsa.PublicKey) *LinkableSignerVariant1

func (*LinkableSignerVariant1) Sign

func (signer *LinkableSignerVariant1) Sign(rand io.Reader, participantRandInt ParticipantRandInt, msg []byte) ([]*big.Int, error)

func (*LinkableSignerVariant1) Verify

func (v *LinkableSignerVariant1) Verify(msg []byte, signature []*big.Int) bool

type LinkableSignerVariant2

type LinkableSignerVariant2 struct {
	LinkableVerfierVariant2
	// contains filtered or unexported fields
}

func (*LinkableSignerVariant2) Sign

func (signer *LinkableSignerVariant2) Sign(rand io.Reader, participantRandInt ParticipantRandInt, msg []byte) ([]*big.Int, error)

func (*LinkableSignerVariant2) Verify

func (v *LinkableSignerVariant2) Verify(msg []byte, signature []*big.Int) bool

type LinkableVerfierVariant1

type LinkableVerfierVariant1 struct {
	// contains filtered or unexported fields
}

func NewLinkableVerfierVariant1

func NewLinkableVerfierVariant1(pubs []*ecdsa.PublicKey) *LinkableVerfierVariant1

func NewLinkableVerfierVariant2

func NewLinkableVerfierVariant2(pubs []*ecdsa.PublicKey) *LinkableVerfierVariant1

type LinkableVerfierVariant2

type LinkableVerfierVariant2 struct {
	// contains filtered or unexported fields
}

type ParticipantRandInt

type ParticipantRandInt func(rand io.Reader, pub *ecdsa.PublicKey, msg []byte) (*big.Int, error)

type RingSigner

type RingSigner interface {
	Sign(rand io.Reader, participantRandInt ParticipantRandInt, msg []byte) ([]*big.Int, error)
}

type RingVerifier

type RingVerifier interface {
	Verify(msg []byte, signature []*big.Int) bool
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL