voucher/internal/pkg/cmb/sm4/util.go

40 lines
1006 B
Go

package sm4
import (
"bytes"
"fmt"
)
func PKCS5Padding(src []byte, blockSize int) []byte {
padding := blockSize - len(src)%blockSize
padBytes := bytes.Repeat([]byte{byte(padding)}, padding)
return append(src, padBytes...)
}
func PKCS5UnPadding(src []byte) []byte {
length := len(src)
unPadding := int(src[length-1])
return src[:(length - unPadding)]
}
func PKCS7Padding(src []byte) []byte {
padding := BlockSize - len(src)%BlockSize
padBytes := bytes.Repeat([]byte{byte(padding)}, padding)
return append(src, padBytes...)
}
func PKCS7UnPadding(src []byte) ([]byte, error) {
length := len(src)
unPadding := int(src[length-1])
if unPadding > BlockSize || unPadding == 0 {
return nil, fmt.Errorf("invalid pkcs7 padding (unPadding > BlockSize || unPadding == 0)")
}
pad := src[len(src)-unPadding:]
for i := 0; i < unPadding; i++ {
if pad[i] != byte(unPadding) {
return nil, fmt.Errorf("invalid pkcs7 padding (pad[i] != unPadding)")
}
}
return src[:(length - unPadding)], nil
}