1
0
mirror of https://github.com/henrydcase/nobs.git synced 2024-11-22 15:18:57 +00:00

CTR-DRBG: Use hardware acceleration on X86

benchmark              old ns/op     new ns/op     delta
BenchmarkInit-4        3403          397           -88.33%
BenchmarkRead-4        14535         1560          -89.27%
This commit is contained in:
Henry Case 2019-04-09 23:47:53 +01:00
parent 71624cdc4c
commit 1c04e859d9
3 changed files with 15 additions and 4 deletions

View File

@ -14,6 +14,7 @@ package drbg
import (
"github.com/henrydcase/nobs/drbg/internal/aes"
"github.com/henrydcase/nobs/utils"
)
// Constants below correspond to AES-256, which is currently
@ -30,12 +31,15 @@ type CtrDrbg struct {
counter uint
strength uint
resistance bool
blockEnc aes.AES
blockEnc aes.IAES
tmpBlk [3 * BlockLen]byte
}
func NewCtrDrbg() *CtrDrbg {
return new(CtrDrbg)
if utils.X86.HasAES {
return &CtrDrbg{blockEnc: &aes.AESAsm{}}
}
return &CtrDrbg{blockEnc: &aes.AES{}}
}
func (c *CtrDrbg) inc() {

View File

@ -18,6 +18,13 @@ type AES struct {
keyLen int
}
// AES interface
type IAES interface {
SetKey(key []byte) error
Encrypt(dst, src []byte)
Decrypt(dst, src []byte)
}
type KeySizeError int
func (k KeySizeError) Error() string {

View File

@ -21,8 +21,8 @@ func decryptBlockAsm(nr int, xk *uint32, dst, src *byte)
func expandKeyAsm(nr int, key *byte, enc *uint32, dec *uint32)
type AESAsm struct {
enc []uint32
dec []uint32
enc [32 + 28]uint32
dec [32 + 28]uint32
}
func (c *AESAsm) SetKey(key []byte) error {