mirror of
				https://github.com/0glabs/0g-chain.git
				synced 2025-11-04 11:07:26 +00:00 
			
		
		
		
	add vrf
This commit is contained in:
		
							parent
							
								
									154b1af1c4
								
							
						
					
					
						commit
						7f625389a7
					
				@ -8,6 +8,7 @@ import (
 | 
				
			|||||||
	"github.com/cosmos/cosmos-sdk/client/config"
 | 
						"github.com/cosmos/cosmos-sdk/client/config"
 | 
				
			||||||
	"github.com/cosmos/cosmos-sdk/client/debug"
 | 
						"github.com/cosmos/cosmos-sdk/client/debug"
 | 
				
			||||||
	"github.com/cosmos/cosmos-sdk/client/flags"
 | 
						"github.com/cosmos/cosmos-sdk/client/flags"
 | 
				
			||||||
 | 
						"github.com/cosmos/cosmos-sdk/crypto/keyring"
 | 
				
			||||||
	"github.com/cosmos/cosmos-sdk/server"
 | 
						"github.com/cosmos/cosmos-sdk/server"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	tmcfg "github.com/cometbft/cometbft/config"
 | 
						tmcfg "github.com/cometbft/cometbft/config"
 | 
				
			||||||
@ -25,18 +26,21 @@ import (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	"github.com/0glabs/0g-chain/app"
 | 
						"github.com/0glabs/0g-chain/app"
 | 
				
			||||||
	"github.com/0glabs/0g-chain/app/params"
 | 
						"github.com/0glabs/0g-chain/app/params"
 | 
				
			||||||
 | 
						"github.com/0glabs/0g-chain/chaincfg"
 | 
				
			||||||
	"github.com/0glabs/0g-chain/cmd/opendb"
 | 
						"github.com/0glabs/0g-chain/cmd/opendb"
 | 
				
			||||||
 | 
						"github.com/0glabs/0g-chain/crypto/vrf"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// EnvPrefix is the prefix environment variables must have to configure the app.
 | 
					func customKeyringOptions() keyring.Option {
 | 
				
			||||||
const EnvPrefix = "KAVA"
 | 
						return func(options *keyring.Options) {
 | 
				
			||||||
 | 
							options.SupportedAlgos = append(hd.SupportedAlgorithms, vrf.VrfAlgo)
 | 
				
			||||||
 | 
							options.SupportedAlgosLedger = append(hd.SupportedAlgorithmsLedger, vrf.VrfAlgo)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// NewRootCmd creates a new root command for the kava blockchain.
 | 
					// NewRootCmd creates a new root command for the 0g-chain blockchain.
 | 
				
			||||||
func NewRootCmd() *cobra.Command {
 | 
					func NewRootCmd() *cobra.Command {
 | 
				
			||||||
	app.SetSDKConfig().Seal()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	encodingConfig := app.MakeEncodingConfig()
 | 
						encodingConfig := app.MakeEncodingConfig()
 | 
				
			||||||
 | 
					 | 
				
			||||||
	initClientCtx := client.Context{}.
 | 
						initClientCtx := client.Context{}.
 | 
				
			||||||
		WithCodec(encodingConfig.Marshaler).
 | 
							WithCodec(encodingConfig.Marshaler).
 | 
				
			||||||
		WithInterfaceRegistry(encodingConfig.InterfaceRegistry).
 | 
							WithInterfaceRegistry(encodingConfig.InterfaceRegistry).
 | 
				
			||||||
@ -44,14 +48,21 @@ func NewRootCmd() *cobra.Command {
 | 
				
			|||||||
		WithLegacyAmino(encodingConfig.Amino).
 | 
							WithLegacyAmino(encodingConfig.Amino).
 | 
				
			||||||
		WithInput(os.Stdin).
 | 
							WithInput(os.Stdin).
 | 
				
			||||||
		WithAccountRetriever(types.AccountRetriever{}).
 | 
							WithAccountRetriever(types.AccountRetriever{}).
 | 
				
			||||||
 | 
					<<<<<<< HEAD
 | 
				
			||||||
		WithBroadcastMode(flags.FlagBroadcastMode).
 | 
							WithBroadcastMode(flags.FlagBroadcastMode).
 | 
				
			||||||
		WithHomeDir(app.DefaultNodeHome).
 | 
							WithHomeDir(app.DefaultNodeHome).
 | 
				
			||||||
		WithKeyringOptions(hd.EthSecp256k1Option()).
 | 
							WithKeyringOptions(hd.EthSecp256k1Option()).
 | 
				
			||||||
		WithViper(EnvPrefix)
 | 
							WithViper(EnvPrefix)
 | 
				
			||||||
 | 
					=======
 | 
				
			||||||
 | 
							WithBroadcastMode(flags.BroadcastBlock).
 | 
				
			||||||
 | 
							WithHomeDir(chaincfg.DefaultNodeHome).
 | 
				
			||||||
 | 
							WithKeyringOptions(customKeyringOptions()).
 | 
				
			||||||
 | 
							WithViper(chaincfg.EnvPrefix)
 | 
				
			||||||
 | 
					>>>>>>> be1cd76f (add vrf)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	rootCmd := &cobra.Command{
 | 
						rootCmd := &cobra.Command{
 | 
				
			||||||
		Use:   "kava",
 | 
							Use:   chaincfg.AppName,
 | 
				
			||||||
		Short: "Daemon and CLI for the Kava blockchain.",
 | 
							Short: "Daemon and CLI for the 0g-chain blockchain.",
 | 
				
			||||||
		PersistentPreRunE: func(cmd *cobra.Command, _ []string) error {
 | 
							PersistentPreRunE: func(cmd *cobra.Command, _ []string) error {
 | 
				
			||||||
			cmd.SetOut(cmd.OutOrStdout())
 | 
								cmd.SetOut(cmd.OutOrStdout())
 | 
				
			||||||
			cmd.SetErr(cmd.ErrOrStderr())
 | 
								cmd.SetErr(cmd.ErrOrStderr())
 | 
				
			||||||
@ -70,7 +81,7 @@ func NewRootCmd() *cobra.Command {
 | 
				
			|||||||
				return err
 | 
									return err
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			customAppTemplate, customAppConfig := servercfg.AppConfig("ukava")
 | 
								customAppTemplate, customAppConfig := servercfg.AppConfig(chaincfg.BaseDenom)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			return server.InterceptConfigsPreRunHandler(
 | 
								return server.InterceptConfigsPreRunHandler(
 | 
				
			||||||
				cmd,
 | 
									cmd,
 | 
				
			||||||
@ -81,12 +92,12 @@ func NewRootCmd() *cobra.Command {
 | 
				
			|||||||
		},
 | 
							},
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	addSubCmds(rootCmd, encodingConfig, app.DefaultNodeHome)
 | 
						addSubCmds(rootCmd, encodingConfig, chaincfg.DefaultNodeHome)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return rootCmd
 | 
						return rootCmd
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// addSubCmds registers all the sub commands used by kava.
 | 
					// addSubCmds registers all the sub commands used by 0g-chain.
 | 
				
			||||||
func addSubCmds(rootCmd *cobra.Command, encodingConfig params.EncodingConfig, defaultNodeHome string) {
 | 
					func addSubCmds(rootCmd *cobra.Command, encodingConfig params.EncodingConfig, defaultNodeHome string) {
 | 
				
			||||||
	gentxModule, ok := app.ModuleBasics[genutiltypes.ModuleName].(genutil.AppModuleBasic)
 | 
						gentxModule, ok := app.ModuleBasics[genutiltypes.ModuleName].(genutil.AppModuleBasic)
 | 
				
			||||||
	if !ok {
 | 
						if !ok {
 | 
				
			||||||
@ -115,7 +126,7 @@ func addSubCmds(rootCmd *cobra.Command, encodingConfig params.EncodingConfig, de
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	opts := ethermintserver.StartOptions{
 | 
						opts := ethermintserver.StartOptions{
 | 
				
			||||||
		AppCreator:      ac.newApp,
 | 
							AppCreator:      ac.newApp,
 | 
				
			||||||
		DefaultNodeHome: app.DefaultNodeHome,
 | 
							DefaultNodeHome: chaincfg.DefaultNodeHome,
 | 
				
			||||||
		DBOpener:        opendb.OpenDB,
 | 
							DBOpener:        opendb.OpenDB,
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	// ethermintserver adds additional flags to start the JSON-RPC server for evm support
 | 
						// ethermintserver adds additional flags to start the JSON-RPC server for evm support
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										58
									
								
								crypto/vrf/algorithm.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								crypto/vrf/algorithm.go
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,58 @@
 | 
				
			|||||||
 | 
					package vrf
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"github.com/cosmos/cosmos-sdk/crypto/hd"
 | 
				
			||||||
 | 
						"github.com/cosmos/cosmos-sdk/crypto/keyring"
 | 
				
			||||||
 | 
						cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var (
 | 
				
			||||||
 | 
						// SupportedAlgorithms defines the list of signing algorithms used on Evmos:
 | 
				
			||||||
 | 
						//  - eth_secp256k1 (Ethereum)
 | 
				
			||||||
 | 
						//  - secp256k1 (Tendermint)
 | 
				
			||||||
 | 
						SupportedAlgorithms = keyring.SigningAlgoList{VrfAlgo}
 | 
				
			||||||
 | 
						// SupportedAlgorithmsLedger defines the list of signing algorithms used on Evmos for the Ledger device:
 | 
				
			||||||
 | 
						//  - eth_secp256k1 (Ethereum)
 | 
				
			||||||
 | 
						//  - secp256k1 (Tendermint)
 | 
				
			||||||
 | 
						SupportedAlgorithmsLedger = keyring.SigningAlgoList{VrfAlgo}
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func VrfOption() keyring.Option {
 | 
				
			||||||
 | 
						return func(options *keyring.Options) {
 | 
				
			||||||
 | 
							options.SupportedAlgos = SupportedAlgorithms
 | 
				
			||||||
 | 
							options.SupportedAlgosLedger = SupportedAlgorithmsLedger
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const (
 | 
				
			||||||
 | 
						VrfType = hd.PubKeyType(KeyType)
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var (
 | 
				
			||||||
 | 
						_       keyring.SignatureAlgo = VrfAlgo
 | 
				
			||||||
 | 
						VrfAlgo                       = vrfAlgo{}
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type vrfAlgo struct{}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (s vrfAlgo) Name() hd.PubKeyType {
 | 
				
			||||||
 | 
						return VrfType
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (s vrfAlgo) Derive() hd.DeriveFn {
 | 
				
			||||||
 | 
						return func(mnemonic, bip39Passphrase, path string) ([]byte, error) {
 | 
				
			||||||
 | 
							key, err := GenerateKey()
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								return nil, err
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							return key.Bytes(), nil
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (s vrfAlgo) Generate() hd.GenerateFn {
 | 
				
			||||||
 | 
						return func(bz []byte) cryptotypes.PrivKey {
 | 
				
			||||||
 | 
							key, _ := GenerateKey()
 | 
				
			||||||
 | 
							return key
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										496
									
								
								crypto/vrf/keys.pb.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										496
									
								
								crypto/vrf/keys.pb.go
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,496 @@
 | 
				
			|||||||
 | 
					// Code generated by protoc-gen-gogo. DO NOT EDIT.
 | 
				
			||||||
 | 
					// source: crypto/vrf/keys.proto
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					package vrf
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						fmt "fmt"
 | 
				
			||||||
 | 
						_ "github.com/gogo/protobuf/gogoproto"
 | 
				
			||||||
 | 
						proto "github.com/gogo/protobuf/proto"
 | 
				
			||||||
 | 
						io "io"
 | 
				
			||||||
 | 
						math "math"
 | 
				
			||||||
 | 
						math_bits "math/bits"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Reference imports to suppress errors if they are not otherwise used.
 | 
				
			||||||
 | 
					var _ = proto.Marshal
 | 
				
			||||||
 | 
					var _ = fmt.Errorf
 | 
				
			||||||
 | 
					var _ = math.Inf
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// This is a compile-time assertion to ensure that this generated file
 | 
				
			||||||
 | 
					// is compatible with the proto package it is being compiled against.
 | 
				
			||||||
 | 
					// A compilation error at this line likely means your copy of the
 | 
				
			||||||
 | 
					// proto package needs to be updated.
 | 
				
			||||||
 | 
					const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// PubKey defines a type alias for an vrf.PublicKey that implements
 | 
				
			||||||
 | 
					// Vrf's PubKey interface. It represents the 32-byte compressed public
 | 
				
			||||||
 | 
					// key format.
 | 
				
			||||||
 | 
					type PubKey struct {
 | 
				
			||||||
 | 
						// key is the public key in byte form
 | 
				
			||||||
 | 
						Key []byte `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"`
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (m *PubKey) Reset()      { *m = PubKey{} }
 | 
				
			||||||
 | 
					func (*PubKey) ProtoMessage() {}
 | 
				
			||||||
 | 
					func (*PubKey) Descriptor() ([]byte, []int) {
 | 
				
			||||||
 | 
						return fileDescriptor_eae59d1af27f5957, []int{0}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					func (m *PubKey) XXX_Unmarshal(b []byte) error {
 | 
				
			||||||
 | 
						return m.Unmarshal(b)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					func (m *PubKey) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
 | 
				
			||||||
 | 
						if deterministic {
 | 
				
			||||||
 | 
							return xxx_messageInfo_PubKey.Marshal(b, m, deterministic)
 | 
				
			||||||
 | 
						} else {
 | 
				
			||||||
 | 
							b = b[:cap(b)]
 | 
				
			||||||
 | 
							n, err := m.MarshalToSizedBuffer(b)
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								return nil, err
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							return b[:n], nil
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					func (m *PubKey) XXX_Merge(src proto.Message) {
 | 
				
			||||||
 | 
						xxx_messageInfo_PubKey.Merge(m, src)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					func (m *PubKey) XXX_Size() int {
 | 
				
			||||||
 | 
						return m.Size()
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					func (m *PubKey) XXX_DiscardUnknown() {
 | 
				
			||||||
 | 
						xxx_messageInfo_PubKey.DiscardUnknown(m)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var xxx_messageInfo_PubKey proto.InternalMessageInfo
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (m *PubKey) GetKey() []byte {
 | 
				
			||||||
 | 
						if m != nil {
 | 
				
			||||||
 | 
							return m.Key
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// PrivKey defines a type alias for an vrf.PrivateKey that implements
 | 
				
			||||||
 | 
					// Vrf's PrivateKey interface.
 | 
				
			||||||
 | 
					type PrivKey struct {
 | 
				
			||||||
 | 
						// key is the private key in byte form
 | 
				
			||||||
 | 
						Key []byte `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"`
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (m *PrivKey) Reset()         { *m = PrivKey{} }
 | 
				
			||||||
 | 
					func (m *PrivKey) String() string { return proto.CompactTextString(m) }
 | 
				
			||||||
 | 
					func (*PrivKey) ProtoMessage()    {}
 | 
				
			||||||
 | 
					func (*PrivKey) Descriptor() ([]byte, []int) {
 | 
				
			||||||
 | 
						return fileDescriptor_eae59d1af27f5957, []int{1}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					func (m *PrivKey) XXX_Unmarshal(b []byte) error {
 | 
				
			||||||
 | 
						return m.Unmarshal(b)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					func (m *PrivKey) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
 | 
				
			||||||
 | 
						if deterministic {
 | 
				
			||||||
 | 
							return xxx_messageInfo_PrivKey.Marshal(b, m, deterministic)
 | 
				
			||||||
 | 
						} else {
 | 
				
			||||||
 | 
							b = b[:cap(b)]
 | 
				
			||||||
 | 
							n, err := m.MarshalToSizedBuffer(b)
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								return nil, err
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							return b[:n], nil
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					func (m *PrivKey) XXX_Merge(src proto.Message) {
 | 
				
			||||||
 | 
						xxx_messageInfo_PrivKey.Merge(m, src)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					func (m *PrivKey) XXX_Size() int {
 | 
				
			||||||
 | 
						return m.Size()
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					func (m *PrivKey) XXX_DiscardUnknown() {
 | 
				
			||||||
 | 
						xxx_messageInfo_PrivKey.DiscardUnknown(m)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var xxx_messageInfo_PrivKey proto.InternalMessageInfo
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (m *PrivKey) GetKey() []byte {
 | 
				
			||||||
 | 
						if m != nil {
 | 
				
			||||||
 | 
							return m.Key
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func init() {
 | 
				
			||||||
 | 
						proto.RegisterType((*PubKey)(nil), "crypto.vrf.PubKey")
 | 
				
			||||||
 | 
						proto.RegisterType((*PrivKey)(nil), "crypto.vrf.PrivKey")
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func init() { proto.RegisterFile("crypto/vrf/keys.proto", fileDescriptor_eae59d1af27f5957) }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var fileDescriptor_eae59d1af27f5957 = []byte{
 | 
				
			||||||
 | 
						// 174 bytes of a gzipped FileDescriptorProto
 | 
				
			||||||
 | 
						0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x12, 0x4d, 0x2e, 0xaa, 0x2c,
 | 
				
			||||||
 | 
						0x28, 0xc9, 0xd7, 0x2f, 0x2b, 0x4a, 0xd3, 0xcf, 0x4e, 0xad, 0x2c, 0xd6, 0x2b, 0x28, 0xca, 0x2f,
 | 
				
			||||||
 | 
						0xc9, 0x17, 0xe2, 0x82, 0x08, 0xeb, 0x95, 0x15, 0xa5, 0x49, 0x89, 0xa4, 0xe7, 0xa7, 0xe7, 0x83,
 | 
				
			||||||
 | 
						0x85, 0xf5, 0x41, 0x2c, 0x88, 0x0a, 0x25, 0x05, 0x2e, 0xb6, 0x80, 0xd2, 0x24, 0xef, 0xd4, 0x4a,
 | 
				
			||||||
 | 
						0x21, 0x01, 0x2e, 0xe6, 0xec, 0xd4, 0x4a, 0x09, 0x46, 0x05, 0x46, 0x0d, 0x9e, 0x20, 0x10, 0xd3,
 | 
				
			||||||
 | 
						0x8a, 0x65, 0xc6, 0x02, 0x79, 0x06, 0x25, 0x69, 0x2e, 0xf6, 0x80, 0xa2, 0xcc, 0x32, 0xac, 0x4a,
 | 
				
			||||||
 | 
						0x9c, 0xec, 0x4f, 0x3c, 0x92, 0x63, 0xbc, 0xf0, 0x48, 0x8e, 0xf1, 0xc1, 0x23, 0x39, 0xc6, 0x09,
 | 
				
			||||||
 | 
						0x8f, 0xe5, 0x18, 0x2e, 0x3c, 0x96, 0x63, 0xb8, 0xf1, 0x58, 0x8e, 0x21, 0x4a, 0x35, 0x3d, 0xb3,
 | 
				
			||||||
 | 
						0x24, 0xa3, 0x34, 0x49, 0x2f, 0x39, 0x3f, 0x57, 0xdf, 0x20, 0x3d, 0x27, 0x31, 0xa9, 0x58, 0xdf,
 | 
				
			||||||
 | 
						0x20, 0x5d, 0x37, 0x39, 0x23, 0x31, 0x33, 0x4f, 0x1f, 0xe1, 0xd8, 0x24, 0x36, 0xb0, 0x33, 0x8c,
 | 
				
			||||||
 | 
						0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0xdb, 0xb8, 0x32, 0x07, 0xc1, 0x00, 0x00, 0x00,
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (m *PubKey) Marshal() (dAtA []byte, err error) {
 | 
				
			||||||
 | 
						size := m.Size()
 | 
				
			||||||
 | 
						dAtA = make([]byte, size)
 | 
				
			||||||
 | 
						n, err := m.MarshalToSizedBuffer(dAtA[:size])
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return dAtA[:n], nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (m *PubKey) MarshalTo(dAtA []byte) (int, error) {
 | 
				
			||||||
 | 
						size := m.Size()
 | 
				
			||||||
 | 
						return m.MarshalToSizedBuffer(dAtA[:size])
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (m *PubKey) MarshalToSizedBuffer(dAtA []byte) (int, error) {
 | 
				
			||||||
 | 
						i := len(dAtA)
 | 
				
			||||||
 | 
						_ = i
 | 
				
			||||||
 | 
						var l int
 | 
				
			||||||
 | 
						_ = l
 | 
				
			||||||
 | 
						if len(m.Key) > 0 {
 | 
				
			||||||
 | 
							i -= len(m.Key)
 | 
				
			||||||
 | 
							copy(dAtA[i:], m.Key)
 | 
				
			||||||
 | 
							i = encodeVarintKeys(dAtA, i, uint64(len(m.Key)))
 | 
				
			||||||
 | 
							i--
 | 
				
			||||||
 | 
							dAtA[i] = 0xa
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return len(dAtA) - i, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (m *PrivKey) Marshal() (dAtA []byte, err error) {
 | 
				
			||||||
 | 
						size := m.Size()
 | 
				
			||||||
 | 
						dAtA = make([]byte, size)
 | 
				
			||||||
 | 
						n, err := m.MarshalToSizedBuffer(dAtA[:size])
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return dAtA[:n], nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (m *PrivKey) MarshalTo(dAtA []byte) (int, error) {
 | 
				
			||||||
 | 
						size := m.Size()
 | 
				
			||||||
 | 
						return m.MarshalToSizedBuffer(dAtA[:size])
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (m *PrivKey) MarshalToSizedBuffer(dAtA []byte) (int, error) {
 | 
				
			||||||
 | 
						i := len(dAtA)
 | 
				
			||||||
 | 
						_ = i
 | 
				
			||||||
 | 
						var l int
 | 
				
			||||||
 | 
						_ = l
 | 
				
			||||||
 | 
						if len(m.Key) > 0 {
 | 
				
			||||||
 | 
							i -= len(m.Key)
 | 
				
			||||||
 | 
							copy(dAtA[i:], m.Key)
 | 
				
			||||||
 | 
							i = encodeVarintKeys(dAtA, i, uint64(len(m.Key)))
 | 
				
			||||||
 | 
							i--
 | 
				
			||||||
 | 
							dAtA[i] = 0xa
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return len(dAtA) - i, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func encodeVarintKeys(dAtA []byte, offset int, v uint64) int {
 | 
				
			||||||
 | 
						offset -= sovKeys(v)
 | 
				
			||||||
 | 
						base := offset
 | 
				
			||||||
 | 
						for v >= 1<<7 {
 | 
				
			||||||
 | 
							dAtA[offset] = uint8(v&0x7f | 0x80)
 | 
				
			||||||
 | 
							v >>= 7
 | 
				
			||||||
 | 
							offset++
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						dAtA[offset] = uint8(v)
 | 
				
			||||||
 | 
						return base
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					func (m *PubKey) Size() (n int) {
 | 
				
			||||||
 | 
						if m == nil {
 | 
				
			||||||
 | 
							return 0
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						var l int
 | 
				
			||||||
 | 
						_ = l
 | 
				
			||||||
 | 
						l = len(m.Key)
 | 
				
			||||||
 | 
						if l > 0 {
 | 
				
			||||||
 | 
							n += 1 + l + sovKeys(uint64(l))
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return n
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (m *PrivKey) Size() (n int) {
 | 
				
			||||||
 | 
						if m == nil {
 | 
				
			||||||
 | 
							return 0
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						var l int
 | 
				
			||||||
 | 
						_ = l
 | 
				
			||||||
 | 
						l = len(m.Key)
 | 
				
			||||||
 | 
						if l > 0 {
 | 
				
			||||||
 | 
							n += 1 + l + sovKeys(uint64(l))
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return n
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func sovKeys(x uint64) (n int) {
 | 
				
			||||||
 | 
						return (math_bits.Len64(x|1) + 6) / 7
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					func sozKeys(x uint64) (n int) {
 | 
				
			||||||
 | 
						return sovKeys(uint64((x << 1) ^ uint64((int64(x) >> 63))))
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					func (m *PubKey) Unmarshal(dAtA []byte) error {
 | 
				
			||||||
 | 
						l := len(dAtA)
 | 
				
			||||||
 | 
						iNdEx := 0
 | 
				
			||||||
 | 
						for iNdEx < l {
 | 
				
			||||||
 | 
							preIndex := iNdEx
 | 
				
			||||||
 | 
							var wire uint64
 | 
				
			||||||
 | 
							for shift := uint(0); ; shift += 7 {
 | 
				
			||||||
 | 
								if shift >= 64 {
 | 
				
			||||||
 | 
									return ErrIntOverflowKeys
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								if iNdEx >= l {
 | 
				
			||||||
 | 
									return io.ErrUnexpectedEOF
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								b := dAtA[iNdEx]
 | 
				
			||||||
 | 
								iNdEx++
 | 
				
			||||||
 | 
								wire |= uint64(b&0x7F) << shift
 | 
				
			||||||
 | 
								if b < 0x80 {
 | 
				
			||||||
 | 
									break
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							fieldNum := int32(wire >> 3)
 | 
				
			||||||
 | 
							wireType := int(wire & 0x7)
 | 
				
			||||||
 | 
							if wireType == 4 {
 | 
				
			||||||
 | 
								return fmt.Errorf("proto: PubKey: wiretype end group for non-group")
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							if fieldNum <= 0 {
 | 
				
			||||||
 | 
								return fmt.Errorf("proto: PubKey: illegal tag %d (wire type %d)", fieldNum, wire)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							switch fieldNum {
 | 
				
			||||||
 | 
							case 1:
 | 
				
			||||||
 | 
								if wireType != 2 {
 | 
				
			||||||
 | 
									return fmt.Errorf("proto: wrong wireType = %d for field Key", wireType)
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								var byteLen int
 | 
				
			||||||
 | 
								for shift := uint(0); ; shift += 7 {
 | 
				
			||||||
 | 
									if shift >= 64 {
 | 
				
			||||||
 | 
										return ErrIntOverflowKeys
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									if iNdEx >= l {
 | 
				
			||||||
 | 
										return io.ErrUnexpectedEOF
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									b := dAtA[iNdEx]
 | 
				
			||||||
 | 
									iNdEx++
 | 
				
			||||||
 | 
									byteLen |= int(b&0x7F) << shift
 | 
				
			||||||
 | 
									if b < 0x80 {
 | 
				
			||||||
 | 
										break
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								if byteLen < 0 {
 | 
				
			||||||
 | 
									return ErrInvalidLengthKeys
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								postIndex := iNdEx + byteLen
 | 
				
			||||||
 | 
								if postIndex < 0 {
 | 
				
			||||||
 | 
									return ErrInvalidLengthKeys
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								if postIndex > l {
 | 
				
			||||||
 | 
									return io.ErrUnexpectedEOF
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								m.Key = append(m.Key[:0], dAtA[iNdEx:postIndex]...)
 | 
				
			||||||
 | 
								if m.Key == nil {
 | 
				
			||||||
 | 
									m.Key = []byte{}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								iNdEx = postIndex
 | 
				
			||||||
 | 
							default:
 | 
				
			||||||
 | 
								iNdEx = preIndex
 | 
				
			||||||
 | 
								skippy, err := skipKeys(dAtA[iNdEx:])
 | 
				
			||||||
 | 
								if err != nil {
 | 
				
			||||||
 | 
									return err
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								if (skippy < 0) || (iNdEx+skippy) < 0 {
 | 
				
			||||||
 | 
									return ErrInvalidLengthKeys
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								if (iNdEx + skippy) > l {
 | 
				
			||||||
 | 
									return io.ErrUnexpectedEOF
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								iNdEx += skippy
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if iNdEx > l {
 | 
				
			||||||
 | 
							return io.ErrUnexpectedEOF
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					func (m *PrivKey) Unmarshal(dAtA []byte) error {
 | 
				
			||||||
 | 
						l := len(dAtA)
 | 
				
			||||||
 | 
						iNdEx := 0
 | 
				
			||||||
 | 
						for iNdEx < l {
 | 
				
			||||||
 | 
							preIndex := iNdEx
 | 
				
			||||||
 | 
							var wire uint64
 | 
				
			||||||
 | 
							for shift := uint(0); ; shift += 7 {
 | 
				
			||||||
 | 
								if shift >= 64 {
 | 
				
			||||||
 | 
									return ErrIntOverflowKeys
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								if iNdEx >= l {
 | 
				
			||||||
 | 
									return io.ErrUnexpectedEOF
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								b := dAtA[iNdEx]
 | 
				
			||||||
 | 
								iNdEx++
 | 
				
			||||||
 | 
								wire |= uint64(b&0x7F) << shift
 | 
				
			||||||
 | 
								if b < 0x80 {
 | 
				
			||||||
 | 
									break
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							fieldNum := int32(wire >> 3)
 | 
				
			||||||
 | 
							wireType := int(wire & 0x7)
 | 
				
			||||||
 | 
							if wireType == 4 {
 | 
				
			||||||
 | 
								return fmt.Errorf("proto: PrivKey: wiretype end group for non-group")
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							if fieldNum <= 0 {
 | 
				
			||||||
 | 
								return fmt.Errorf("proto: PrivKey: illegal tag %d (wire type %d)", fieldNum, wire)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							switch fieldNum {
 | 
				
			||||||
 | 
							case 1:
 | 
				
			||||||
 | 
								if wireType != 2 {
 | 
				
			||||||
 | 
									return fmt.Errorf("proto: wrong wireType = %d for field Key", wireType)
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								var byteLen int
 | 
				
			||||||
 | 
								for shift := uint(0); ; shift += 7 {
 | 
				
			||||||
 | 
									if shift >= 64 {
 | 
				
			||||||
 | 
										return ErrIntOverflowKeys
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									if iNdEx >= l {
 | 
				
			||||||
 | 
										return io.ErrUnexpectedEOF
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									b := dAtA[iNdEx]
 | 
				
			||||||
 | 
									iNdEx++
 | 
				
			||||||
 | 
									byteLen |= int(b&0x7F) << shift
 | 
				
			||||||
 | 
									if b < 0x80 {
 | 
				
			||||||
 | 
										break
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								if byteLen < 0 {
 | 
				
			||||||
 | 
									return ErrInvalidLengthKeys
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								postIndex := iNdEx + byteLen
 | 
				
			||||||
 | 
								if postIndex < 0 {
 | 
				
			||||||
 | 
									return ErrInvalidLengthKeys
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								if postIndex > l {
 | 
				
			||||||
 | 
									return io.ErrUnexpectedEOF
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								m.Key = append(m.Key[:0], dAtA[iNdEx:postIndex]...)
 | 
				
			||||||
 | 
								if m.Key == nil {
 | 
				
			||||||
 | 
									m.Key = []byte{}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								iNdEx = postIndex
 | 
				
			||||||
 | 
							default:
 | 
				
			||||||
 | 
								iNdEx = preIndex
 | 
				
			||||||
 | 
								skippy, err := skipKeys(dAtA[iNdEx:])
 | 
				
			||||||
 | 
								if err != nil {
 | 
				
			||||||
 | 
									return err
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								if (skippy < 0) || (iNdEx+skippy) < 0 {
 | 
				
			||||||
 | 
									return ErrInvalidLengthKeys
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								if (iNdEx + skippy) > l {
 | 
				
			||||||
 | 
									return io.ErrUnexpectedEOF
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								iNdEx += skippy
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if iNdEx > l {
 | 
				
			||||||
 | 
							return io.ErrUnexpectedEOF
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					func skipKeys(dAtA []byte) (n int, err error) {
 | 
				
			||||||
 | 
						l := len(dAtA)
 | 
				
			||||||
 | 
						iNdEx := 0
 | 
				
			||||||
 | 
						depth := 0
 | 
				
			||||||
 | 
						for iNdEx < l {
 | 
				
			||||||
 | 
							var wire uint64
 | 
				
			||||||
 | 
							for shift := uint(0); ; shift += 7 {
 | 
				
			||||||
 | 
								if shift >= 64 {
 | 
				
			||||||
 | 
									return 0, ErrIntOverflowKeys
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								if iNdEx >= l {
 | 
				
			||||||
 | 
									return 0, io.ErrUnexpectedEOF
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								b := dAtA[iNdEx]
 | 
				
			||||||
 | 
								iNdEx++
 | 
				
			||||||
 | 
								wire |= (uint64(b) & 0x7F) << shift
 | 
				
			||||||
 | 
								if b < 0x80 {
 | 
				
			||||||
 | 
									break
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							wireType := int(wire & 0x7)
 | 
				
			||||||
 | 
							switch wireType {
 | 
				
			||||||
 | 
							case 0:
 | 
				
			||||||
 | 
								for shift := uint(0); ; shift += 7 {
 | 
				
			||||||
 | 
									if shift >= 64 {
 | 
				
			||||||
 | 
										return 0, ErrIntOverflowKeys
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									if iNdEx >= l {
 | 
				
			||||||
 | 
										return 0, io.ErrUnexpectedEOF
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									iNdEx++
 | 
				
			||||||
 | 
									if dAtA[iNdEx-1] < 0x80 {
 | 
				
			||||||
 | 
										break
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							case 1:
 | 
				
			||||||
 | 
								iNdEx += 8
 | 
				
			||||||
 | 
							case 2:
 | 
				
			||||||
 | 
								var length int
 | 
				
			||||||
 | 
								for shift := uint(0); ; shift += 7 {
 | 
				
			||||||
 | 
									if shift >= 64 {
 | 
				
			||||||
 | 
										return 0, ErrIntOverflowKeys
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									if iNdEx >= l {
 | 
				
			||||||
 | 
										return 0, io.ErrUnexpectedEOF
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									b := dAtA[iNdEx]
 | 
				
			||||||
 | 
									iNdEx++
 | 
				
			||||||
 | 
									length |= (int(b) & 0x7F) << shift
 | 
				
			||||||
 | 
									if b < 0x80 {
 | 
				
			||||||
 | 
										break
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								if length < 0 {
 | 
				
			||||||
 | 
									return 0, ErrInvalidLengthKeys
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								iNdEx += length
 | 
				
			||||||
 | 
							case 3:
 | 
				
			||||||
 | 
								depth++
 | 
				
			||||||
 | 
							case 4:
 | 
				
			||||||
 | 
								if depth == 0 {
 | 
				
			||||||
 | 
									return 0, ErrUnexpectedEndOfGroupKeys
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								depth--
 | 
				
			||||||
 | 
							case 5:
 | 
				
			||||||
 | 
								iNdEx += 4
 | 
				
			||||||
 | 
							default:
 | 
				
			||||||
 | 
								return 0, fmt.Errorf("proto: illegal wireType %d", wireType)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							if iNdEx < 0 {
 | 
				
			||||||
 | 
								return 0, ErrInvalidLengthKeys
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							if depth == 0 {
 | 
				
			||||||
 | 
								return iNdEx, nil
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return 0, io.ErrUnexpectedEOF
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var (
 | 
				
			||||||
 | 
						ErrInvalidLengthKeys        = fmt.Errorf("proto: negative length found during unmarshaling")
 | 
				
			||||||
 | 
						ErrIntOverflowKeys          = fmt.Errorf("proto: integer overflow")
 | 
				
			||||||
 | 
						ErrUnexpectedEndOfGroupKeys = fmt.Errorf("proto: unexpected end of group")
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
							
								
								
									
										194
									
								
								crypto/vrf/vrf.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										194
									
								
								crypto/vrf/vrf.go
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,194 @@
 | 
				
			|||||||
 | 
					package vrf
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"bytes"
 | 
				
			||||||
 | 
						"crypto/subtle"
 | 
				
			||||||
 | 
						"fmt"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						errorsmod "cosmossdk.io/errors"
 | 
				
			||||||
 | 
						vrfalgo "github.com/coniks-sys/coniks-go/crypto/vrf"
 | 
				
			||||||
 | 
						"github.com/cosmos/cosmos-sdk/codec"
 | 
				
			||||||
 | 
						cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types"
 | 
				
			||||||
 | 
						errortypes "github.com/cosmos/cosmos-sdk/types/errors"
 | 
				
			||||||
 | 
						"github.com/ethereum/go-ethereum/common"
 | 
				
			||||||
 | 
						tmcrypto "github.com/tendermint/tendermint/crypto"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const (
 | 
				
			||||||
 | 
						// PrivKeySize defines the size of the PrivKey bytes
 | 
				
			||||||
 | 
						PrivKeySize = 64
 | 
				
			||||||
 | 
						// PubKeySize defines the size of the PubKey bytes
 | 
				
			||||||
 | 
						PubKeySize = 32
 | 
				
			||||||
 | 
						// KeyType is the string constant for the vrf algorithm
 | 
				
			||||||
 | 
						KeyType = "vrf"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Amino encoding names
 | 
				
			||||||
 | 
					const (
 | 
				
			||||||
 | 
						// PrivKeyName defines the amino encoding name for the vrf private key
 | 
				
			||||||
 | 
						PrivKeyName = "vrf/PrivKey"
 | 
				
			||||||
 | 
						// PubKeyName defines the amino encoding name for the vrf public key
 | 
				
			||||||
 | 
						PubKeyName = "vrf/PubKey"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// ----------------------------------------------------------------------------
 | 
				
			||||||
 | 
					// vrf Private Key
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var (
 | 
				
			||||||
 | 
						_ cryptotypes.PrivKey  = &PrivKey{}
 | 
				
			||||||
 | 
						_ codec.AminoMarshaler = &PrivKey{}
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// GenerateKey generates a new random private key. It returns an error upon
 | 
				
			||||||
 | 
					// failure.
 | 
				
			||||||
 | 
					func GenerateKey() (*PrivKey, error) {
 | 
				
			||||||
 | 
						priv, err := vrfalgo.GenerateKey(nil)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return &PrivKey{
 | 
				
			||||||
 | 
							Key: priv,
 | 
				
			||||||
 | 
						}, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (privKey PrivKey) getVrfPrivateKey() vrfalgo.PrivateKey {
 | 
				
			||||||
 | 
						return vrfalgo.PrivateKey(privKey.Key)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Bytes returns the byte representation of the Private Key.
 | 
				
			||||||
 | 
					func (privKey PrivKey) Bytes() []byte {
 | 
				
			||||||
 | 
						bz := make([]byte, len(privKey.Key))
 | 
				
			||||||
 | 
						copy(bz, privKey.Key)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return bz
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// PubKey returns the private key's public key. If the privkey is not valid
 | 
				
			||||||
 | 
					// it returns a nil value.
 | 
				
			||||||
 | 
					func (privKey PrivKey) PubKey() cryptotypes.PubKey {
 | 
				
			||||||
 | 
						pk, _ := vrfalgo.PrivateKey(privKey.Key).Public()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return &PubKey{
 | 
				
			||||||
 | 
							Key: pk,
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Equals returns true if two private keys are equal and false otherwise.
 | 
				
			||||||
 | 
					func (privKey PrivKey) Equals(other cryptotypes.LedgerPrivKey) bool {
 | 
				
			||||||
 | 
						return privKey.Type() == other.Type() && subtle.ConstantTimeCompare(privKey.Bytes(), other.Bytes()) == 1
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Type returns vrf
 | 
				
			||||||
 | 
					func (privKey PrivKey) Type() string {
 | 
				
			||||||
 | 
						return KeyType
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Compute generates the vrf value for the byte slice m using the
 | 
				
			||||||
 | 
					// underlying private key sk.
 | 
				
			||||||
 | 
					func (privKey PrivKey) Sign(digestBz []byte) ([]byte, error) {
 | 
				
			||||||
 | 
						sk := privKey.getVrfPrivateKey()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return sk.Compute(digestBz), nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// MarshalAmino overrides Amino binary marshaling.
 | 
				
			||||||
 | 
					func (privKey PrivKey) MarshalAmino() ([]byte, error) {
 | 
				
			||||||
 | 
						return privKey.Key, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// UnmarshalAmino overrides Amino binary marshaling.
 | 
				
			||||||
 | 
					func (privKey *PrivKey) UnmarshalAmino(bz []byte) error {
 | 
				
			||||||
 | 
						if len(bz) != PrivKeySize {
 | 
				
			||||||
 | 
							return fmt.Errorf("invalid privkey size, expected %d got %d", PrivKeySize, len(bz))
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						privKey.Key = bz
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// MarshalAminoJSON overrides Amino JSON marshaling.
 | 
				
			||||||
 | 
					func (privKey PrivKey) MarshalAminoJSON() ([]byte, error) {
 | 
				
			||||||
 | 
						// When we marshal to Amino JSON, we don't marshal the "key" field itself,
 | 
				
			||||||
 | 
						// just its contents (i.e. the key bytes).
 | 
				
			||||||
 | 
						return privKey.MarshalAmino()
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// UnmarshalAminoJSON overrides Amino JSON marshaling.
 | 
				
			||||||
 | 
					func (privKey *PrivKey) UnmarshalAminoJSON(bz []byte) error {
 | 
				
			||||||
 | 
						return privKey.UnmarshalAmino(bz)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// ----------------------------------------------------------------------------
 | 
				
			||||||
 | 
					// vrf Public Key
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var (
 | 
				
			||||||
 | 
						_ cryptotypes.PubKey   = &PubKey{}
 | 
				
			||||||
 | 
						_ codec.AminoMarshaler = &PubKey{}
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// func (pubKey PubKey) getVrfPublicKey() vrfalgo.PublicKey {
 | 
				
			||||||
 | 
					// 	return vrfalgo.PublicKey(pubKey.Key)
 | 
				
			||||||
 | 
					// }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Address returns the address of the ECDSA public key.
 | 
				
			||||||
 | 
					// The function will return an empty address if the public key is invalid.
 | 
				
			||||||
 | 
					func (pubKey PubKey) Address() tmcrypto.Address {
 | 
				
			||||||
 | 
						return tmcrypto.Address(common.BytesToAddress(pubKey.Key).Bytes())
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Bytes returns the raw bytes of the ECDSA public key.
 | 
				
			||||||
 | 
					func (pubKey PubKey) Bytes() []byte {
 | 
				
			||||||
 | 
						bz := make([]byte, len(pubKey.Key))
 | 
				
			||||||
 | 
						copy(bz, pubKey.Key)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return bz
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// String implements the fmt.Stringer interface.
 | 
				
			||||||
 | 
					func (pubKey PubKey) String() string {
 | 
				
			||||||
 | 
						return fmt.Sprintf("vrf{%X}", pubKey.Key)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Type returns vrf
 | 
				
			||||||
 | 
					func (pubKey PubKey) Type() string {
 | 
				
			||||||
 | 
						return KeyType
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Equals returns true if the pubkey type is the same and their bytes are deeply equal.
 | 
				
			||||||
 | 
					func (pubKey PubKey) Equals(other cryptotypes.PubKey) bool {
 | 
				
			||||||
 | 
						return pubKey.Type() == other.Type() && bytes.Equal(pubKey.Bytes(), other.Bytes())
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Verify returns true iff vrf=Compute(m) for the sk that
 | 
				
			||||||
 | 
					// corresponds to pk.
 | 
				
			||||||
 | 
					func (pubKey PubKey) VerifySignature(msg, sig []byte) bool {
 | 
				
			||||||
 | 
						panic("not implement")
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// MarshalAmino overrides Amino binary marshaling.
 | 
				
			||||||
 | 
					func (pubKey PubKey) MarshalAmino() ([]byte, error) {
 | 
				
			||||||
 | 
						return pubKey.Key, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// UnmarshalAmino overrides Amino binary marshaling.
 | 
				
			||||||
 | 
					func (pubKey *PubKey) UnmarshalAmino(bz []byte) error {
 | 
				
			||||||
 | 
						if len(bz) != PubKeySize {
 | 
				
			||||||
 | 
							return errorsmod.Wrapf(errortypes.ErrInvalidPubKey, "invalid pubkey size, expected %d, got %d", PubKeySize, len(bz))
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						pubKey.Key = bz
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// MarshalAminoJSON overrides Amino JSON marshaling.
 | 
				
			||||||
 | 
					func (pubKey PubKey) MarshalAminoJSON() ([]byte, error) {
 | 
				
			||||||
 | 
						// When we marshal to Amino JSON, we don't marshal the "key" field itself,
 | 
				
			||||||
 | 
						// just its contents (i.e. the key bytes).
 | 
				
			||||||
 | 
						return pubKey.MarshalAmino()
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// UnmarshalAminoJSON overrides Amino JSON marshaling.
 | 
				
			||||||
 | 
					func (pubKey *PubKey) UnmarshalAminoJSON(bz []byte) error {
 | 
				
			||||||
 | 
						return pubKey.UnmarshalAmino(bz)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										96
									
								
								crypto/vrf/vrf_test.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										96
									
								
								crypto/vrf/vrf_test.go
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,96 @@
 | 
				
			|||||||
 | 
					package vrf
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"testing"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"encoding/base64"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"github.com/stretchr/testify/require"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"github.com/cosmos/cosmos-sdk/codec"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func TestPrivKey(t *testing.T) {
 | 
				
			||||||
 | 
						// validate type and equality
 | 
				
			||||||
 | 
						privKey, err := GenerateKey()
 | 
				
			||||||
 | 
						require.NoError(t, err)
 | 
				
			||||||
 | 
						require.Implements(t, (*cryptotypes.PrivKey)(nil), privKey)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// validate inequality
 | 
				
			||||||
 | 
						privKey2, err := GenerateKey()
 | 
				
			||||||
 | 
						require.NoError(t, err)
 | 
				
			||||||
 | 
						require.False(t, privKey.Equals(privKey2))
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func TestPrivKey_PubKey(t *testing.T) {
 | 
				
			||||||
 | 
						privKey, err := GenerateKey()
 | 
				
			||||||
 | 
						require.NoError(t, err)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// validate type and equality
 | 
				
			||||||
 | 
						pubKey := &PubKey{
 | 
				
			||||||
 | 
							Key: privKey.PubKey().Bytes(),
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						require.Implements(t, (*cryptotypes.PubKey)(nil), pubKey)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// validate inequality
 | 
				
			||||||
 | 
						privKey2, err := GenerateKey()
 | 
				
			||||||
 | 
						require.NoError(t, err)
 | 
				
			||||||
 | 
						require.False(t, pubKey.Equals(privKey2.PubKey()))
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func TestMarshalAmino(t *testing.T) {
 | 
				
			||||||
 | 
						aminoCdc := codec.NewLegacyAmino()
 | 
				
			||||||
 | 
						privKey, err := GenerateKey()
 | 
				
			||||||
 | 
						require.NoError(t, err)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						pubKey := privKey.PubKey().(*PubKey)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						testCases := []struct {
 | 
				
			||||||
 | 
							desc      string
 | 
				
			||||||
 | 
							msg       codec.AminoMarshaler
 | 
				
			||||||
 | 
							typ       interface{}
 | 
				
			||||||
 | 
							expBinary []byte
 | 
				
			||||||
 | 
							expJSON   string
 | 
				
			||||||
 | 
						}{
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								"vrf private key",
 | 
				
			||||||
 | 
								privKey,
 | 
				
			||||||
 | 
								&PrivKey{},
 | 
				
			||||||
 | 
								append([]byte{64}, privKey.Bytes()...), // Length-prefixed.
 | 
				
			||||||
 | 
								"\"" + base64.StdEncoding.EncodeToString(privKey.Bytes()) + "\"",
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								"vrf public key",
 | 
				
			||||||
 | 
								pubKey,
 | 
				
			||||||
 | 
								&PubKey{},
 | 
				
			||||||
 | 
								append([]byte{32}, pubKey.Bytes()...), // Length-prefixed.
 | 
				
			||||||
 | 
								"\"" + base64.StdEncoding.EncodeToString(pubKey.Bytes()) + "\"",
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						for _, tc := range testCases {
 | 
				
			||||||
 | 
							t.Run(tc.desc, func(t *testing.T) {
 | 
				
			||||||
 | 
								// Do a round trip of encoding/decoding binary.
 | 
				
			||||||
 | 
								bz, err := aminoCdc.Marshal(tc.msg)
 | 
				
			||||||
 | 
								require.NoError(t, err)
 | 
				
			||||||
 | 
								require.Equal(t, tc.expBinary, bz)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								err = aminoCdc.Unmarshal(bz, tc.typ)
 | 
				
			||||||
 | 
								require.NoError(t, err)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								require.Equal(t, tc.msg, tc.typ)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								// Do a round trip of encoding/decoding JSON.
 | 
				
			||||||
 | 
								bz, err = aminoCdc.MarshalJSON(tc.msg)
 | 
				
			||||||
 | 
								require.NoError(t, err)
 | 
				
			||||||
 | 
								require.Equal(t, tc.expJSON, string(bz))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								err = aminoCdc.UnmarshalJSON(bz, tc.typ)
 | 
				
			||||||
 | 
								require.NoError(t, err)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								require.Equal(t, tc.msg, tc.typ)
 | 
				
			||||||
 | 
							})
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										1
									
								
								go.mod
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								go.mod
									
									
									
									
									
								
							@ -9,6 +9,7 @@ require (
 | 
				
			|||||||
	github.com/cenkalti/backoff/v4 v4.1.3
 | 
						github.com/cenkalti/backoff/v4 v4.1.3
 | 
				
			||||||
	github.com/cometbft/cometbft v0.37.4
 | 
						github.com/cometbft/cometbft v0.37.4
 | 
				
			||||||
	github.com/cometbft/cometbft-db v0.9.1
 | 
						github.com/cometbft/cometbft-db v0.9.1
 | 
				
			||||||
 | 
						github.com/coniks-sys/coniks-go v0.0.0-20180722014011-11acf4819b71
 | 
				
			||||||
	github.com/cosmos/cosmos-proto v1.0.0-beta.3
 | 
						github.com/cosmos/cosmos-proto v1.0.0-beta.3
 | 
				
			||||||
	github.com/cosmos/cosmos-sdk v0.47.7
 | 
						github.com/cosmos/cosmos-sdk v0.47.7
 | 
				
			||||||
	github.com/cosmos/go-bip39 v1.0.0
 | 
						github.com/cosmos/go-bip39 v1.0.0
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										2
									
								
								go.sum
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								go.sum
									
									
									
									
									
								
							@ -390,6 +390,8 @@ github.com/coinbase/rosetta-sdk-go v0.7.9 h1:lqllBjMnazTjIqYrOGv8h8jxjg9+hJazIGZ
 | 
				
			|||||||
github.com/coinbase/rosetta-sdk-go v0.7.9/go.mod h1:0/knutI7XGVqXmmH4OQD8OckFrbQ8yMsUZTG7FXCR2M=
 | 
					github.com/coinbase/rosetta-sdk-go v0.7.9/go.mod h1:0/knutI7XGVqXmmH4OQD8OckFrbQ8yMsUZTG7FXCR2M=
 | 
				
			||||||
github.com/confio/ics23/go v0.9.0 h1:cWs+wdbS2KRPZezoaaj+qBleXgUk5WOQFMP3CQFGTr4=
 | 
					github.com/confio/ics23/go v0.9.0 h1:cWs+wdbS2KRPZezoaaj+qBleXgUk5WOQFMP3CQFGTr4=
 | 
				
			||||||
github.com/confio/ics23/go v0.9.0/go.mod h1:4LPZ2NYqnYIVRklaozjNR1FScgDJ2s5Xrp+e/mYVRak=
 | 
					github.com/confio/ics23/go v0.9.0/go.mod h1:4LPZ2NYqnYIVRklaozjNR1FScgDJ2s5Xrp+e/mYVRak=
 | 
				
			||||||
 | 
					github.com/coniks-sys/coniks-go v0.0.0-20180722014011-11acf4819b71 h1:MFLTqgfJclmtaQ1SRUrWwmDX/1UBok3XWUethkJ2swQ=
 | 
				
			||||||
 | 
					github.com/coniks-sys/coniks-go v0.0.0-20180722014011-11acf4819b71/go.mod h1:TrHYHH4Wze7v7Hkwu1MH1W+mCPQKM+gs+PicdEV14o8=
 | 
				
			||||||
github.com/consensys/bavard v0.1.8-0.20210406032232-f3452dc9b572/go.mod h1:Bpd0/3mZuaj6Sj+PqrmIquiOKy397AKGThQPaGzNXAQ=
 | 
					github.com/consensys/bavard v0.1.8-0.20210406032232-f3452dc9b572/go.mod h1:Bpd0/3mZuaj6Sj+PqrmIquiOKy397AKGThQPaGzNXAQ=
 | 
				
			||||||
github.com/consensys/bavard v0.1.8-0.20210915155054-088da2f7f54a/go.mod h1:9ItSMtA/dXMAiL7BG6bqW2m3NdSEObYWoH223nGHukI=
 | 
					github.com/consensys/bavard v0.1.8-0.20210915155054-088da2f7f54a/go.mod h1:9ItSMtA/dXMAiL7BG6bqW2m3NdSEObYWoH223nGHukI=
 | 
				
			||||||
github.com/consensys/gnark-crypto v0.4.1-0.20210426202927-39ac3d4b3f1f/go.mod h1:815PAHg3wvysy0SyIqanF8gZ0Y1wjk/hrDHD/iT88+Q=
 | 
					github.com/consensys/gnark-crypto v0.4.1-0.20210426202927-39ac3d4b3f1f/go.mod h1:815PAHg3wvysy0SyIqanF8gZ0Y1wjk/hrDHD/iT88+Q=
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										25
									
								
								proto/crypto/vrf/keys.proto
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								proto/crypto/vrf/keys.proto
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,25 @@
 | 
				
			|||||||
 | 
					// Copyright Tharsis Labs Ltd.(Evmos)
 | 
				
			||||||
 | 
					// SPDX-License-Identifier:ENCL-1.0(https://github.com/evmos/evmos/blob/main/LICENSE)
 | 
				
			||||||
 | 
					syntax = "proto3";
 | 
				
			||||||
 | 
					package crypto.vrf;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import "gogoproto/gogo.proto";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					option go_package = "github.com/0glabs/0g-chain/crypto/vrf";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// PubKey defines a type alias for an vrf.PublicKey that implements
 | 
				
			||||||
 | 
					// Vrf's PubKey interface. It represents the 32-byte compressed public
 | 
				
			||||||
 | 
					// key format.
 | 
				
			||||||
 | 
					message PubKey {
 | 
				
			||||||
 | 
					  option (gogoproto.goproto_stringer) = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // key is the public key in byte form
 | 
				
			||||||
 | 
					  bytes key = 1;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// PrivKey defines a type alias for an vrf.PrivateKey that implements
 | 
				
			||||||
 | 
					// Vrf's PrivateKey interface.
 | 
				
			||||||
 | 
					message PrivKey {
 | 
				
			||||||
 | 
					  // key is the private key in byte form
 | 
				
			||||||
 | 
					  bytes key = 1;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user