github.com/linapex/ethereum-dpos-chinese@v0.0.0-20190316121959-b78b3a4a1ece/swarm/storage/mru/resource_sign.go (about)

     1  
     2  //<developer>
     3  //    <name>linapex 曹一峰</name>
     4  //    <email>linapex@163.com</email>
     5  //    <wx>superexc</wx>
     6  //    <qqgroup>128148617</qqgroup>
     7  //    <url>https://jsq.ink</url>
     8  //    <role>pku engineer</role>
     9  //    <date>2019-03-16 12:09:50</date>
    10  //</624342683581681664>
    11  
    12  //
    13  //
    14  //
    15  //
    16  //
    17  //
    18  //
    19  //
    20  //
    21  //
    22  //
    23  //
    24  //
    25  //
    26  //
    27  
    28  package mru
    29  
    30  import (
    31  	"crypto/ecdsa"
    32  
    33  	"github.com/ethereum/go-ethereum/common"
    34  	"github.com/ethereum/go-ethereum/crypto"
    35  )
    36  
    37  const signatureLength = 65
    38  
    39  //
    40  type Signature [signatureLength]byte
    41  
    42  //
    43  type Signer interface {
    44  	Sign(common.Hash) (Signature, error)
    45  	Address() common.Address
    46  }
    47  
    48  //
    49  //
    50  type GenericSigner struct {
    51  	PrivKey *ecdsa.PrivateKey
    52  	address common.Address
    53  }
    54  
    55  //
    56  func NewGenericSigner(privKey *ecdsa.PrivateKey) *GenericSigner {
    57  	return &GenericSigner{
    58  		PrivKey: privKey,
    59  		address: crypto.PubkeyToAddress(privKey.PublicKey),
    60  	}
    61  }
    62  
    63  //
    64  //
    65  func (s *GenericSigner) Sign(data common.Hash) (signature Signature, err error) {
    66  	signaturebytes, err := crypto.Sign(data.Bytes(), s.PrivKey)
    67  	if err != nil {
    68  		return
    69  	}
    70  	copy(signature[:], signaturebytes)
    71  	return
    72  }
    73  
    74  //
    75  func (s *GenericSigner) Address() common.Address {
    76  	return s.address
    77  }
    78