40 lines
1006 B
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
|
|
}
|