95 lines
2.2 KiB
Go
95 lines
2.2 KiB
Go
|
|
package paddingx
|
||
|
|
|
||
|
|
import (
|
||
|
|
"bytes"
|
||
|
|
"testing"
|
||
|
|
)
|
||
|
|
|
||
|
|
func TestPadAndUnpadPKCS7(t *testing.T) {
|
||
|
|
plain := []byte("hello-world")
|
||
|
|
padded, err := Pad(plain, 16, PKCS7)
|
||
|
|
if err != nil {
|
||
|
|
t.Fatalf("Pad PKCS7 failed: %v", err)
|
||
|
|
}
|
||
|
|
if len(padded)%16 != 0 {
|
||
|
|
t.Fatalf("padded length should be block aligned, got %d", len(padded))
|
||
|
|
}
|
||
|
|
got, err := Unpad(padded, 16, PKCS7)
|
||
|
|
if err != nil {
|
||
|
|
t.Fatalf("Unpad PKCS7 failed: %v", err)
|
||
|
|
}
|
||
|
|
if !bytes.Equal(got, plain) {
|
||
|
|
t.Fatalf("roundtrip mismatch, got %x want %x", got, plain)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestPadAndUnpadPKCS5Compatibility(t *testing.T) {
|
||
|
|
plain := []byte("DES-plaintext")
|
||
|
|
padded, err := Pad(plain, 8, PKCS5)
|
||
|
|
if err != nil {
|
||
|
|
t.Fatalf("Pad PKCS5 failed: %v", err)
|
||
|
|
}
|
||
|
|
got, err := Unpad(padded, 8, PKCS5)
|
||
|
|
if err != nil {
|
||
|
|
t.Fatalf("Unpad PKCS5 failed: %v", err)
|
||
|
|
}
|
||
|
|
if !bytes.Equal(got, plain) {
|
||
|
|
t.Fatalf("roundtrip mismatch, got %x want %x", got, plain)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestPadAndUnpadZero(t *testing.T) {
|
||
|
|
plain := []byte("abc\x00\x00")
|
||
|
|
padded, err := Pad(plain, 8, ZERO)
|
||
|
|
if err != nil {
|
||
|
|
t.Fatalf("Pad ZERO failed: %v", err)
|
||
|
|
}
|
||
|
|
got, err := Unpad(padded, 8, ZERO)
|
||
|
|
if err != nil {
|
||
|
|
t.Fatalf("Unpad ZERO failed: %v", err)
|
||
|
|
}
|
||
|
|
if !bytes.Equal(got, []byte("abc")) {
|
||
|
|
t.Fatalf("zero unpadding mismatch, got %q", got)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestPadAndUnpadANSIX923(t *testing.T) {
|
||
|
|
plain := []byte("ansi-x923")
|
||
|
|
padded, err := Pad(plain, 16, ANSIX923)
|
||
|
|
if err != nil {
|
||
|
|
t.Fatalf("Pad ANSIX923 failed: %v", err)
|
||
|
|
}
|
||
|
|
got, err := Unpad(padded, 16, ANSIX923)
|
||
|
|
if err != nil {
|
||
|
|
t.Fatalf("Unpad ANSIX923 failed: %v", err)
|
||
|
|
}
|
||
|
|
if !bytes.Equal(got, plain) {
|
||
|
|
t.Fatalf("roundtrip mismatch, got %x want %x", got, plain)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestPadUnsupportedMode(t *testing.T) {
|
||
|
|
if _, err := Pad([]byte("x"), 8, "UNKNOWN"); err == nil {
|
||
|
|
t.Fatalf("expected error for unsupported mode")
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestUnpadInvalidPKCS7(t *testing.T) {
|
||
|
|
_, err := Unpad([]byte{1, 2, 3, 4}, 4, PKCS7)
|
||
|
|
if err == nil {
|
||
|
|
t.Fatalf("expected invalid PKCS7 padding error")
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestPKCS5Helpers(t *testing.T) {
|
||
|
|
plain := []byte("1234567")
|
||
|
|
padded := PKCS5Padding(plain)
|
||
|
|
got, err := PKCS5Unpadding(padded)
|
||
|
|
if err != nil {
|
||
|
|
t.Fatalf("PKCS5Unpadding failed: %v", err)
|
||
|
|
}
|
||
|
|
if !bytes.Equal(got, plain) {
|
||
|
|
t.Fatalf("PKCS5 helper mismatch, got %x want %x", got, plain)
|
||
|
|
}
|
||
|
|
}
|