github.com/avahowell/sia@v0.5.1-beta.0.20160524050156-83dcc3d37c94/crypto/signatures_mock.go (about)

     1  package crypto
     2  
     3  import (
     4  	"crypto/rand"
     5  	"io"
     6  
     7  	"github.com/NebulousLabs/ed25519"
     8  )
     9  
    10  type (
    11  	// keyDeriver contains all of the dependencies for a signature key
    12  	// generator. The dependencies are separated to enable mocking.
    13  	keyDeriver interface {
    14  		deriveKeyPair([EntropySize]byte) (ed25519.SecretKey, ed25519.PublicKey)
    15  	}
    16  )
    17  
    18  var (
    19  	// stdKeyGen is a signature generator that can be used to generate random
    20  	// and deterministic keys for signing objects.
    21  	stdKeyGen sigKeyGen = sigKeyGen{entropySource: rand.Reader, keyDeriver: &stdKeyDeriver{}}
    22  )
    23  
    24  // sigKeyGen contains a set of dependencies that are used to build out the core
    25  // logic for generating keys in Sia.
    26  type sigKeyGen struct {
    27  	entropySource io.Reader
    28  	keyDeriver    keyDeriver
    29  }
    30  
    31  // generate builds a signature keypair using a sigKeyGen to manage
    32  // dependencies.
    33  func (skg sigKeyGen) generate() (sk SecretKey, pk PublicKey, err error) {
    34  	var entropy [EntropySize]byte
    35  	_, err = io.ReadFull(skg.entropySource, entropy[:])
    36  	if err != nil {
    37  		return
    38  	}
    39  
    40  	skPointer, pkPointer := skg.keyDeriver.deriveKeyPair(entropy)
    41  	return *skPointer, *pkPointer, nil
    42  }
    43  
    44  // generateDeterministic builds a signature keypair deterministically using a
    45  // sigKeyGen to manage dependencies.
    46  func (skg sigKeyGen) generateDeterministic(entropy [EntropySize]byte) (SecretKey, PublicKey) {
    47  	skPointer, pkPointer := skg.keyDeriver.deriveKeyPair(entropy)
    48  	return *skPointer, *pkPointer
    49  }
    50  
    51  // stdKeyDeriver implements the keyDeriver dependency for the sigKeyGen.
    52  type stdKeyDeriver struct{}
    53  
    54  func (skd *stdKeyDeriver) deriveKeyPair(entropy [EntropySize]byte) (ed25519.SecretKey, ed25519.PublicKey) {
    55  	return ed25519.GenerateKey(entropy)
    56  }