func TestPKCS7UnPadding(t *testing.T) { // Verify the PKCS7 unpadding, using a human readable plaintext. // 0 byte/length message expected := []byte("") msg := []byte{16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16} result, _ := primitives.PKCS7UnPadding(msg) if !bytes.Equal(expected, result) { t.Fatal("UnPadding error! Expected: '", expected, "', received: '", result, "'") } // 1 byte/length message expected = []byte("0") msg = []byte{'0', 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15} result, _ = primitives.PKCS7UnPadding(msg) if !bytes.Equal(expected, result) { t.Fatal("UnPadding error! Expected: '", expected, "', received: '", result, "'") } // 2 byte/length message expected = []byte("01") msg = []byte{'0', '1', 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14} result, _ = primitives.PKCS7UnPadding(msg) if !bytes.Equal(expected, result) { t.Fatal("UnPadding error! Expected: '", expected, "', received: '", result, "'") } // 3 to aes.BlockSize-1 byte messages for i := 3; i < aes.BlockSize; i++ { base := []byte("0123456789ABCDEF") iPad := aes.BlockSize - i padding := bytes.Repeat([]byte{byte(iPad)}, iPad) msg = append(base[:i], padding...) expected := base[:i] result, _ := primitives.PKCS7UnPadding(msg) if !bytes.Equal(result, expected) { t.Fatal("UnPadding error! Expected: '", expected, "', received: '", result, "'") } } // aes.BlockSize length message expected = bytes.Repeat([]byte{byte('x')}, aes.BlockSize) padding := bytes.Repeat([]byte{byte(aes.BlockSize)}, aes.BlockSize) msg = append(expected, padding...) result, _ = primitives.PKCS7UnPadding(msg) if !bytes.Equal(expected, result) { t.Fatal("UnPadding error! Expected: '", expected, "', received: '", result, "'") } }
// TestPKCS7UnPadding verifies the PKCS#7 unpadding, using a human readable plaintext. func TestPKCS7UnPadding(t *testing.T) { // 0 byte/length ptext expected := []byte("") ptext := []byte{16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16} result, _ := primitives.PKCS7UnPadding(ptext) if !bytes.Equal(expected, result) { t.Fatal("UnPadding error! Expected: '", expected, "', received: '", result, "'") } // 1 byte/length ptext expected = []byte("1") ptext = []byte{'1', 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15} result, _ = primitives.PKCS7UnPadding(ptext) if !bytes.Equal(expected, result) { t.Fatal("UnPadding error! Expected: '", expected, "', received: '", result, "'") } // 2 byte/length ptext expected = []byte("12") ptext = []byte{'1', '2', 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14} result, _ = primitives.PKCS7UnPadding(ptext) if !bytes.Equal(expected, result) { t.Fatal("UnPadding error! Expected: '", expected, "', received: '", result, "'") } // 3 to aes.BlockSize-1 byte plaintext base := []byte("1234567890ABCDEF") for i := 3; i < aes.BlockSize; i++ { iPad := aes.BlockSize - i padding := bytes.Repeat([]byte{byte(iPad)}, iPad) ptext = append(base[:i], padding...) expected := base[:i] result, _ := primitives.PKCS7UnPadding(ptext) if !bytes.Equal(result, expected) { t.Fatal("UnPadding error! Expected: '", expected, "', received: '", result, "'") } } // aes.BlockSize length ptext expected = bytes.Repeat([]byte{byte('x')}, aes.BlockSize) padding := bytes.Repeat([]byte{byte(aes.BlockSize)}, aes.BlockSize) ptext = append(expected, padding...) result, _ = primitives.PKCS7UnPadding(ptext) if !bytes.Equal(expected, result) { t.Fatal("UnPadding error! Expected: '", expected, "', received: '", result, "'") } }