mirror of
https://github.com/GopeedLab/gopeed.git
synced 2026-11-05 16:15:43 +00:00
67 lines
1.7 KiB
Go
67 lines
1.7 KiB
Go
package hls
|
|
|
|
import (
|
|
"bytes"
|
|
"crypto/aes"
|
|
"crypto/cipher"
|
|
"crypto/rand"
|
|
"testing"
|
|
)
|
|
|
|
func pkcs7Pad(data []byte, blockSize int) []byte {
|
|
pad := blockSize - len(data)%blockSize
|
|
return append(data, bytes.Repeat([]byte{byte(pad)}, pad)...)
|
|
}
|
|
|
|
func TestDecryptAES128Roundtrip(t *testing.T) {
|
|
key := make([]byte, 16)
|
|
iv := make([]byte, 16)
|
|
if _, err := rand.Read(key); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if _, err := rand.Read(iv); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
plain := []byte("hello hls segment payload, padded to block size!")
|
|
padded := pkcs7Pad(plain, aes.BlockSize)
|
|
block, err := aes.NewCipher(key)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
encrypted := make([]byte, len(padded))
|
|
cipher.NewCBCEncrypter(block, iv).CryptBlocks(encrypted, padded)
|
|
|
|
got, err := decryptAES128(encrypted, key, iv)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if !bytes.Equal(got, plain) {
|
|
t.Errorf("roundtrip mismatch: %q", got)
|
|
}
|
|
}
|
|
|
|
func TestDecryptAES128InvalidInput(t *testing.T) {
|
|
if _, err := decryptAES128([]byte{1, 2, 3}, make([]byte, 16), make([]byte, 16)); err == nil {
|
|
t.Error("non-block-aligned data should fail")
|
|
}
|
|
if _, err := decryptAES128(make([]byte, 16), make([]byte, 15), make([]byte, 16)); err == nil {
|
|
t.Error("short key should fail")
|
|
}
|
|
if _, err := decryptAES128(make([]byte, 16), make([]byte, 16), make([]byte, 16)); err == nil {
|
|
t.Error("all-zero block has invalid padding and should fail")
|
|
}
|
|
}
|
|
|
|
func TestSequenceIV(t *testing.T) {
|
|
iv := sequenceIV(1)
|
|
if len(iv) != 16 || iv[15] != 1 {
|
|
t.Errorf("sequence 1 IV wrong: %v", iv)
|
|
}
|
|
iv = sequenceIV(0x0102030405060708)
|
|
for i, want := range []byte{1, 2, 3, 4, 5, 6, 7, 8} {
|
|
if iv[8+i] != want {
|
|
t.Errorf("sequence IV byte %d: want %d got %d", i, want, iv[8+i])
|
|
}
|
|
}
|
|
}
|