72 lines
1.6 KiB
Go
72 lines
1.6 KiB
Go
package hashrng
|
|
|
|
import (
|
|
_ "crypto/sha256"
|
|
"fmt"
|
|
"testing"
|
|
"time"
|
|
|
|
"xdx.jelly/xgcl/grand/drng/entropy"
|
|
"xdx.jelly/xgcl/grand/drng/internal"
|
|
"xdx.jelly/xgcl/sm"
|
|
)
|
|
|
|
func TestSysEntropySource(t *testing.T) {
|
|
e := entropy.GetEntropyPool()
|
|
b, err := e.GetEntropy(128, 128, 128)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
fmt.Printf("%x\n", b)
|
|
}
|
|
|
|
func TestSm3Df(t *testing.T) {
|
|
input := make([]byte, 10)
|
|
for n := 0; n < 100; n++ {
|
|
output := newDF(sm.SM3)(input, n)
|
|
if len(output) != n {
|
|
t.Fatal()
|
|
}
|
|
}
|
|
}
|
|
|
|
// 0.03GBps, 主要是internal.Outlen太小
|
|
func TestDrngSpeed(t *testing.T) {
|
|
raw, _ := NewHashDrng(sm.SM3, Config(internal.SecureLevel2))
|
|
rng, _ := raw.Instantiate(nil, internal.Nonce(), entropy.GetEntropyPool())
|
|
msg := make([]byte, rng.OutLen())
|
|
|
|
start := time.Now()
|
|
times := 10000
|
|
buf := make([]byte, 32)
|
|
for i := 0; i < times; i++ {
|
|
if err := rng.Generate(msg, nil); err == internal.ErrNeedReseed {
|
|
entropy.GetEntropyPool().Read(buf)
|
|
rng.Reseed(buf, nil)
|
|
} else if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|
|
|
|
end := time.Now()
|
|
elapsed := end.Sub(start)
|
|
t.Logf("Generate Random speed: %.2f MBps\n", float64(times*len(msg))/float64(1024*1024)/elapsed.Seconds())
|
|
}
|
|
|
|
// func TestSm3DrngRandomness(t *testing.T) {
|
|
// // 测试Sm3Drng的随机性测试通过率
|
|
// total := 10
|
|
// pass := 0
|
|
// for i := 0; i < total; i++ {
|
|
// fmt.Println("======================================", i)
|
|
// if statistics.SampleSelfTests(Reader) {
|
|
// fmt.Printf("%d-th test: [O]\n", i)
|
|
// pass += 1
|
|
// } else {
|
|
// fmt.Printf("%d-th test: [X]\n", i)
|
|
// }
|
|
// }
|
|
|
|
// fmt.Printf("Pass Rate: %d/%d\n", pass, total)
|
|
// }
|