Browse Source

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%
pull/19/head
Henry Case 5 years ago
committed by GitHub
parent
commit
6f9706df01
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 15 additions and 4 deletions
  1. +6
    -2
      drbg/ctr_drbg.go
  2. +7
    -0
      drbg/internal/aes/cipher.go
  3. +2
    -2
      drbg/internal/aes/cipher_asm.go

+ 6
- 2
drbg/ctr_drbg.go 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() {


+ 7
- 0
drbg/internal/aes/cipher.go 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 {


+ 2
- 2
drbg/internal/aes/cipher_asm.go 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 {


Loading…
Cancel
Save