forked from mergermarket/go-pkcs7
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpkcs7.go
40 lines (32 loc) · 878 Bytes
/
pkcs7.go
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
package pkcs7
import "errors"
func Pad(buf []byte, size int) ([]byte, error) {
bufLen := len(buf)
padLen := size - bufLen%size
padded := make([]byte, bufLen+padLen)
copy(padded, buf)
for i := 0; i < padLen; i++ {
padded[bufLen+i] = byte(padLen)
}
return padded, nil
}
func Unpad(padded []byte, size int) ([]byte, error) {
paddedLen := len(padded)
if paddedLen%size != 0 {
return nil, errors.New("pkcs7: Padded value wasn't in correct size.")
}
lastPad := padded[paddedLen-1]
padLen := int(lastPad)
if padLen > size {
return nil, errors.New("pkcs7: Padded value larger than size.")
}
for i := paddedLen - padLen; i < paddedLen; i++ {
if padded[i] != lastPad {
return nil, errors.New("pkcs7: Padded value wasn't in correct format.")
}
}
bufLen := paddedLen - padLen
buf := make([]byte, bufLen)
copy(buf, padded[:bufLen])
return buf, nil
}