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) } }