package internal

import (
	"io"
)

// RawDrng 未初始化状态，初始化后返回Drng状态
// Note: 状态模式
type RawDrng interface {
	// Instantiate 初始化，personalization_string为可选,返回成功则内部状态初始化完成。
	Instantiate(personalizationString []byte, nonce []byte, entropySource io.Reader) (Drng, error)
}

// Drng is the low level interface for DRNG.
//
// For most users, use DrngUtil instead.
type Drng interface {
	// Reseed 重播种，entropyInput为输入熵
	// additionalInput为来自应用的比特串，可以为nil
	Reseed(entropyInput, additionalInput []byte)

	// Generate 将输出缓冲区b用随机数填充，additionalInputt为来自应用的比特串，可为nil
	Generate(b []byte, additionalInput []byte) error

	// 每次调用输出的最大字节数(32)
	OutLen() int

	Config() *DrngConfig
}
