blob: 1f90643c21a5220116ec37cb0c2eddace1fa9e77 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
package pkcs7
// Shamelessly stolen from: https://wgallagher86.medium.com/pkcs-7-padding-in-go-6da5d1d14590
import "errors"
func Unpad(input []byte) ([]byte, error) {
if input == nil || len(input) == 0 {
return nil, nil
}
pc := input[len(input)-1]
pl := int(pc)
err := checkPaddingIsValid(input, pl)
if err != nil {
return nil, err
}
return input[:len(input)-pl], nil
}
func checkPaddingIsValid(input []byte, paddingLength int) error {
if len(input) < paddingLength {
return errors.New("invalid padding")
}
p := input[len(input)-(paddingLength):]
for _, pc := range p {
if uint(pc) != uint(len(p)) {
return errors.New("invalid padding")
}
}
return nil
}
func Pad(input []byte, blockSize int) []byte {
r := len(input) % blockSize
pl := blockSize - r
for i := 0; i < pl; i++ {
input = append(input, byte(pl))
}
return input
}
|