Files
waf-platform/EdgeHttpDNS/internal/encrypt/method_aes_256_cfb.go
2026-02-27 10:35:22 +08:00

65 lines
1.1 KiB
Go

package encrypt
import (
"bytes"
"crypto/aes"
"crypto/cipher"
)
type AES256CFBMethod struct {
block cipher.Block
iv []byte
}
func (m *AES256CFBMethod) Init(key, iv []byte) error {
keyLen := len(key)
if keyLen > 32 {
key = key[:32]
} else if keyLen < 32 {
key = append(key, bytes.Repeat([]byte{' '}, 32-keyLen)...)
}
block, err := aes.NewCipher(key)
if err != nil {
return err
}
m.block = block
ivLen := len(iv)
if ivLen > aes.BlockSize {
iv = iv[:aes.BlockSize]
} else if ivLen < aes.BlockSize {
iv = append(iv, bytes.Repeat([]byte{' '}, aes.BlockSize-ivLen)...)
}
m.iv = iv
return nil
}
func (m *AES256CFBMethod) Encrypt(src []byte) (dst []byte, err error) {
if len(src) == 0 {
return
}
defer func() {
err = RecoverMethodPanic(recover())
}()
dst = make([]byte, len(src))
cipher.NewCFBEncrypter(m.block, m.iv).XORKeyStream(dst, src)
return
}
func (m *AES256CFBMethod) Decrypt(dst []byte) (src []byte, err error) {
if len(dst) == 0 {
return
}
defer func() {
err = RecoverMethodPanic(recover())
}()
src = make([]byte, len(dst))
cipher.NewCFBDecrypter(m.block, m.iv).XORKeyStream(src, dst)
return
}