package aes
import (
"crypto/cipher"
"crypto/internal/alias"
"crypto/internal/boring"
"strconv"
)
const BlockSize = 16
type aesCipher struct {
enc []uint32
dec []uint32
}
type KeySizeError int
func (k KeySizeError ) Error () string {
return "crypto/aes: invalid key size " + strconv .Itoa (int (k ))
}
func NewCipher (key []byte ) (cipher .Block , error ) {
k := len (key )
switch k {
default :
return nil , KeySizeError (k )
case 16 , 24 , 32 :
break
}
if boring .Enabled {
return boring .NewAESCipher (key )
}
return newCipher (key )
}
func newCipherGeneric (key []byte ) (cipher .Block , error ) {
n := len (key ) + 28
c := aesCipher {make ([]uint32 , n ), make ([]uint32 , n )}
expandKeyGo (key , c .enc , c .dec )
return &c , nil
}
func (c *aesCipher ) BlockSize () int { return BlockSize }
func (c *aesCipher ) Encrypt (dst , src []byte ) {
if len (src ) < BlockSize {
panic ("crypto/aes: input not full block" )
}
if len (dst ) < BlockSize {
panic ("crypto/aes: output not full block" )
}
if alias .InexactOverlap (dst [:BlockSize ], src [:BlockSize ]) {
panic ("crypto/aes: invalid buffer overlap" )
}
encryptBlockGo (c .enc , dst , src )
}
func (c *aesCipher ) Decrypt (dst , src []byte ) {
if len (src ) < BlockSize {
panic ("crypto/aes: input not full block" )
}
if len (dst ) < BlockSize {
panic ("crypto/aes: output not full block" )
}
if alias .InexactOverlap (dst [:BlockSize ], src [:BlockSize ]) {
panic ("crypto/aes: invalid buffer overlap" )
}
decryptBlockGo (c .dec , dst , src )
}
The pages are generated with Golds v0.6.7 . (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu .
PR and bug reports are welcome and can be submitted to the issue list .
Please follow @Go100and1 (reachable from the left QR code) to get the latest news of Golds .