2020-11-25 13:01:53 +02:00
|
|
|
package crypto_test
|
|
|
|
|
|
|
|
import (
|
|
|
|
"crypto/cipher"
|
|
|
|
"testing"
|
|
|
|
|
2020-12-04 03:36:16 +02:00
|
|
|
. "github.com/xtls/xray-core/common/crypto"
|
2020-11-25 13:01:53 +02:00
|
|
|
)
|
|
|
|
|
|
|
|
const benchSize = 1024 * 1024
|
|
|
|
|
|
|
|
func benchmarkStream(b *testing.B, c cipher.Stream) {
|
|
|
|
b.SetBytes(benchSize)
|
|
|
|
input := make([]byte, benchSize)
|
|
|
|
output := make([]byte, benchSize)
|
|
|
|
b.ResetTimer()
|
|
|
|
for i := 0; i < b.N; i++ {
|
|
|
|
c.XORKeyStream(output, input)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func BenchmarkChaCha20(b *testing.B) {
|
|
|
|
key := make([]byte, 32)
|
|
|
|
nonce := make([]byte, 8)
|
|
|
|
c := NewChaCha20Stream(key, nonce)
|
|
|
|
benchmarkStream(b, c)
|
|
|
|
}
|
|
|
|
|
|
|
|
func BenchmarkChaCha20IETF(b *testing.B) {
|
|
|
|
key := make([]byte, 32)
|
|
|
|
nonce := make([]byte, 12)
|
|
|
|
c := NewChaCha20Stream(key, nonce)
|
|
|
|
benchmarkStream(b, c)
|
|
|
|
}
|
|
|
|
|
|
|
|
func BenchmarkAESEncryption(b *testing.B) {
|
|
|
|
key := make([]byte, 32)
|
|
|
|
iv := make([]byte, 16)
|
|
|
|
c := NewAesEncryptionStream(key, iv)
|
|
|
|
|
|
|
|
benchmarkStream(b, c)
|
|
|
|
}
|
|
|
|
|
|
|
|
func BenchmarkAESDecryption(b *testing.B) {
|
|
|
|
key := make([]byte, 32)
|
|
|
|
iv := make([]byte, 16)
|
|
|
|
c := NewAesDecryptionStream(key, iv)
|
|
|
|
|
|
|
|
benchmarkStream(b, c)
|
|
|
|
}
|