mirror of
https://github.com/arnaucube/slowlorisdb.git
synced 2026-02-28 05:46:48 +01:00
add initial node
This commit is contained in:
@@ -2,8 +2,9 @@ package core
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"slothdb/db"
|
||||
"time"
|
||||
|
||||
"github.com/arnaucube/slowlorisdb/db"
|
||||
)
|
||||
|
||||
type Blockchain struct {
|
||||
|
||||
@@ -2,9 +2,9 @@ package core
|
||||
|
||||
import (
|
||||
"io/ioutil"
|
||||
"slothdb/db"
|
||||
"testing"
|
||||
|
||||
"github.com/arnaucube/slowlorisdb/db"
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
|
||||
48
core/keys.go
48
core/keys.go
@@ -45,26 +45,35 @@ func AddressFromPrivK(privK *ecdsa.PrivateKey) Address {
|
||||
return Address(h)
|
||||
}
|
||||
|
||||
func PackSignature(r, s *big.Int) []byte {
|
||||
sig := r.Bytes()
|
||||
sig = append(sig, s.Bytes()...)
|
||||
return sig
|
||||
func (sig *Signature) Bytes(r, s *big.Int) []byte {
|
||||
b := r.Bytes()
|
||||
b = append(b, s.Bytes()...)
|
||||
return b
|
||||
}
|
||||
|
||||
func UnpackSignature(sig []byte) (*big.Int, *big.Int, error) {
|
||||
if len(sig) != 64 {
|
||||
return nil, nil, errors.New("Invalid signature")
|
||||
func SignatureFromBytes(b []byte) (*Signature, error) {
|
||||
if len(b) != 64 {
|
||||
return nil, errors.New("Invalid signature")
|
||||
}
|
||||
rBytes := sig[:32]
|
||||
sBytes := sig[32:]
|
||||
rBytes := b[:32]
|
||||
sBytes := b[32:]
|
||||
|
||||
r := new(big.Int).SetBytes(rBytes)
|
||||
s := new(big.Int).SetBytes(sBytes)
|
||||
|
||||
return r, s, nil
|
||||
sig := &Signature{
|
||||
R: r,
|
||||
S: s,
|
||||
}
|
||||
return sig, nil
|
||||
}
|
||||
|
||||
func Sign(privK *ecdsa.PrivateKey, m []byte) ([]byte, error) {
|
||||
type Signature struct {
|
||||
R *big.Int
|
||||
S *big.Int
|
||||
}
|
||||
|
||||
func Sign(privK *ecdsa.PrivateKey, m []byte) (*Signature, error) {
|
||||
r := big.NewInt(0)
|
||||
s := big.NewInt(0)
|
||||
|
||||
@@ -72,23 +81,20 @@ func Sign(privK *ecdsa.PrivateKey, m []byte) ([]byte, error) {
|
||||
|
||||
r, s, err := ecdsa.Sign(rand.Reader, privK, hashMsg[:])
|
||||
if err != nil {
|
||||
return []byte{}, err
|
||||
return nil, err
|
||||
}
|
||||
sig := &Signature{
|
||||
R: r,
|
||||
S: s,
|
||||
}
|
||||
|
||||
sig := PackSignature(r, s)
|
||||
|
||||
return sig, nil
|
||||
|
||||
}
|
||||
|
||||
func VerifySignature(pubK *ecdsa.PublicKey, m []byte, sig []byte) bool {
|
||||
func VerifySignature(pubK *ecdsa.PublicKey, m []byte, sig Signature) bool {
|
||||
hashMsg := HashBytes(m)
|
||||
|
||||
r, s, err := UnpackSignature(sig)
|
||||
if err != nil {
|
||||
return false
|
||||
}
|
||||
|
||||
verified := ecdsa.Verify(pubK, hashMsg[:], r, s)
|
||||
verified := ecdsa.Verify(pubK, hashMsg[:], sig.R, sig.S)
|
||||
return verified
|
||||
}
|
||||
|
||||
@@ -29,6 +29,6 @@ func TestSignAndVerify(t *testing.T) {
|
||||
assert.Nil(t, err)
|
||||
|
||||
// Verify
|
||||
verified := VerifySignature(&privK.PublicKey, m, sig)
|
||||
verified := VerifySignature(&privK.PublicKey, m, *sig)
|
||||
assert.True(t, verified)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user