mirror of
https://github.com/emmansun/gmsm.git
synced 2025-04-26 20:26:19 +08:00
drbg: add comments
This commit is contained in:
parent
95bc8792f8
commit
212fae1dda
@ -62,13 +62,14 @@ func NewCtrDrbgPrng(cipherProvider func(key []byte) (cipher.Block, error), keyLe
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get nonce
|
// Get nonce, reference to NIST SP 800-90A, 8.6.7
|
||||||
nonce := make([]byte, prng.securityStrength/2)
|
nonce := make([]byte, prng.securityStrength/2)
|
||||||
err = prng.getEntropy(nonce)
|
err = prng.getEntropy(nonce)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// inital working state
|
||||||
prng.impl, err = NewCtrDrbg(cipherProvider, keyLen, securityLevel, gm, entropyInput, nonce, personalization)
|
prng.impl, err = NewCtrDrbg(cipherProvider, keyLen, securityLevel, gm, entropyInput, nonce, personalization)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@ -107,13 +108,14 @@ func NewHashDrbgPrng(newHash func() hash.Hash, entropySource io.Reader, security
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get nonce from entropy source here
|
// Get nonce, reference to NIST SP 800-90A, 8.6.7
|
||||||
nonce := make([]byte, prng.securityStrength/2)
|
nonce := make([]byte, prng.securityStrength/2)
|
||||||
err = prng.getEntropy(nonce)
|
err = prng.getEntropy(nonce)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// inital working state
|
||||||
prng.impl, err = NewHashDrbg(newHash, securityLevel, gm, entropyInput, nonce, personalization)
|
prng.impl, err = NewHashDrbg(newHash, securityLevel, gm, entropyInput, nonce, personalization)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@ -149,13 +151,14 @@ func NewHmacDrbgPrng(newHash func() hash.Hash, entropySource io.Reader, security
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get nonce from entropy source here
|
// Get nonce, reference to NIST SP 800-90A, 8.6.7
|
||||||
nonce := make([]byte, prng.securityStrength/2)
|
nonce := make([]byte, prng.securityStrength/2)
|
||||||
err = prng.getEntropy(nonce)
|
err = prng.getEntropy(nonce)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// inital working state
|
||||||
prng.impl, err = NewHmacDrbg(newHash, securityLevel, gm, entropyInput, nonce, personalization)
|
prng.impl, err = NewHmacDrbg(newHash, securityLevel, gm, entropyInput, nonce, personalization)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@ -253,6 +256,8 @@ func (hd *BaseDrbg) setSecurityLevel(securityLevel SecurityLevel) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Set security_strength to the lowest security strength greater than or equal to
|
||||||
|
// requested_instantiation_security_strength from the set {112, 128, 192, 256}.
|
||||||
func selectSecurityStrength(requested int) int {
|
func selectSecurityStrength(requested int) int {
|
||||||
switch {
|
switch {
|
||||||
case requested <= 14:
|
case requested <= 14:
|
||||||
|
@ -5,8 +5,6 @@ import (
|
|||||||
"errors"
|
"errors"
|
||||||
"hash"
|
"hash"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/emmansun/gmsm/sm3"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// HmacDrbg hmac DRBG structure, its instance is NOT goroutine safe!!!
|
// HmacDrbg hmac DRBG structure, its instance is NOT goroutine safe!!!
|
||||||
@ -44,11 +42,6 @@ func NewHmacDrbg(newHash func() hash.Hash, securityLevel SecurityLevel, gm bool,
|
|||||||
return nil, errors.New("drbg: personalization is too long")
|
return nil, errors.New("drbg: personalization is too long")
|
||||||
}
|
}
|
||||||
|
|
||||||
if hd.hashSize <= sm3.Size {
|
|
||||||
hd.seedLength = HASH_DRBG_SEED_SIZE
|
|
||||||
} else {
|
|
||||||
hd.seedLength = HASH_DRBG_MAX_SEED_SIZE
|
|
||||||
}
|
|
||||||
// HMAC_DRBG_Instantiate_process
|
// HMAC_DRBG_Instantiate_process
|
||||||
hd.key = make([]byte, hd.hashSize)
|
hd.key = make([]byte, hd.hashSize)
|
||||||
hd.v = make([]byte, hd.hashSize)
|
hd.v = make([]byte, hd.hashSize)
|
||||||
@ -119,6 +112,10 @@ func (hd *HmacDrbg) MaxBytesPerRequest() int {
|
|||||||
return MAX_BYTES_PER_GENERATE
|
return MAX_BYTES_PER_GENERATE
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// The HMAC_DRBG_Update function updates the internal state of
|
||||||
|
// HMAC_DRBG using the provided_data. Note that for this DRBG mechanism, the
|
||||||
|
// HMAC_DRBG_Update function also serves as a derivation function for the
|
||||||
|
// instantiate and reseed functions.
|
||||||
func (hd *HmacDrbg) update(byteSlices ...[]byte) error {
|
func (hd *HmacDrbg) update(byteSlices ...[]byte) error {
|
||||||
// step 1. K = HMAC(K, V || 0x00 || provided_data)
|
// step 1. K = HMAC(K, V || 0x00 || provided_data)
|
||||||
md := hmac.New(hd.newHash, hd.key)
|
md := hmac.New(hd.newHash, hd.key)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user