1
0
miroir de https://github.com/henrydcase/nobs.git synchronisé 2024-11-22 15:18:57 +00:00

CTR-DRBG: Use hardware acceleration on X86 (#18)

benchmark              old ns/op     new ns/op     delta
BenchmarkInit-4        3403          397           -88.33%
BenchmarkRead-4        14535         1560          -89.27%
Cette révision appartient à :
Henry Case 2019-04-09 23:50:21 +01:00 révisé par GitHub
Parent 71624cdc4c
révision 6f9706df01
Signature inconnue de Gitea
ID de la clé GPG: 4AEE18F83AFDEB23
3 fichiers modifiés avec 15 ajouts et 4 suppressions

Voir le fichier

@ -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() {

Voir le fichier

@ -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 {

Voir le fichier

@ -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 {