github.com/braveheart12/just@v0.8.7/pulsar/entropygenerator/entropygenerator.go (about)

     1  /*
     2   *    Copyright 2019 Insolar Technologies
     3   *
     4   *    Licensed under the Apache License, Version 2.0 (the "License");
     5   *    you may not use this file except in compliance with the License.
     6   *    You may obtain a copy of the License at
     7   *
     8   *        http://www.apache.org/licenses/LICENSE-2.0
     9   *
    10   *    Unless required by applicable law or agreed to in writing, software
    11   *    distributed under the License is distributed on an "AS IS" BASIS,
    12   *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13   *    See the License for the specific language governing permissions and
    14   *    limitations under the License.
    15   */
    16  
    17  package entropygenerator
    18  
    19  import (
    20  	"crypto/rand"
    21  
    22  	"github.com/insolar/insolar/core"
    23  )
    24  
    25  // EntropyGenerator is the base interface for generation of entropy for pulses
    26  type EntropyGenerator interface {
    27  	GenerateEntropy() core.Entropy
    28  }
    29  
    30  // StandardEntropyGenerator is the base impl of EntropyGenerator with using of crypto/rand
    31  type StandardEntropyGenerator struct {
    32  }
    33  
    34  // GenerateEntropy generate entropy with using of EntropyGenerator
    35  func (generator *StandardEntropyGenerator) GenerateEntropy() core.Entropy {
    36  	entropy := make([]byte, core.EntropySize)
    37  	_, err := rand.Read(entropy)
    38  	if err != nil {
    39  		panic(err)
    40  	}
    41  	var result core.Entropy
    42  	copy(result[:], entropy[:core.EntropySize])
    43  	return result
    44  }