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