代码拉取完成,页面将自动刷新
package backend
import (
"crypto/rand"
"fmt"
"github.com/ethereum/go-ethereum/crypto/secp256k1"
"gitee.com/aiou-official/go-aiou/ilog"
)
// Secp256k1 is the secp256k1 crypto algorithm
type Secp256k1 struct{}
// Sign will signature the message with seckey by secp256k1
func (b *Secp256k1) Sign(message []byte, seckey []byte) []byte {
sig, err := secp256k1.Sign(message, seckey)
if err != nil {
ilog.Errorf("Failed to sign, %v", err)
return nil
}
return sig[:64]
}
// Verify will verify the message with pubkey and sig by secp256k1
func (b *Secp256k1) Verify(message []byte, pubkey []byte, sig []byte) bool {
return secp256k1.VerifySignature(pubkey, message, sig)
}
// GetPubkey will get the public key of the secret key by secp256k1
func (b *Secp256k1) GetPubkey(seckey []byte) []byte {
x, y := secp256k1.S256().ScalarBaseMult(seckey)
return secp256k1.CompressPubkey(x, y)
}
// GenSeckey will generate the secret key by secp256k1
func (b *Secp256k1) GenSeckey() []byte {
seckey := make([]byte, 32)
_, err := rand.Read(seckey)
if err != nil {
ilog.Errorf("Failed to random seckey, %v", err)
return nil
}
return seckey
}
// CheckSeckey ...
func (b *Secp256k1) CheckSeckey(seckey []byte) error {
if len(seckey) != 32 {
return fmt.Errorf("seckey length error secp256k1 seckey length should not be %v", len(seckey))
}
return nil
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。