mirror of
https://github.com/Mrs4s/MiraiGo.git
synced 2025-05-04 19:17:38 +08:00
name old time/op new time/op delta TEAen/16-8 237ns ± 0% 227ns ± 1% -4.03% (p=0.008 n=5+5) TEAen/256-8 1.69µs ± 0% 1.60µs ± 1% -4.83% (p=0.008 n=5+5) TEAen/4K-8 25.0µs ± 1% 23.8µs ± 2% -4.73% (p=0.008 n=5+5) TEAen/32K-8 199µs ± 1% 188µs ± 1% -5.30% (p=0.008 n=5+5) TEAde/16-8 196ns ± 1% 194ns ± 1% -0.89% (p=0.016 n=5+5) TEAde/256-8 1.56µs ± 0% 1.54µs ± 0% -1.50% (p=0.008 n=5+5) TEAde/4K-8 23.5µs ± 0% 23.2µs ± 0% -1.46% (p=0.008 n=5+5) TEAde/32K-8 187µs ± 1% 184µs ± 1% -1.50% (p=0.008 n=5+5) name old speed new speed delta TEAen/16-8 67.6MB/s ± 1% 70.5MB/s ± 1% +4.20% (p=0.008 n=5+5) TEAen/256-8 152MB/s ± 0% 160MB/s ± 1% +5.07% (p=0.008 n=5+5) TEAen/4K-8 164MB/s ± 1% 172MB/s ± 2% +4.98% (p=0.008 n=5+5) TEAen/32K-8 165MB/s ± 1% 174MB/s ± 1% +5.60% (p=0.008 n=5+5) TEAde/16-8 163MB/s ± 1% 165MB/s ± 1% +0.90% (p=0.016 n=5+5) TEAde/256-8 174MB/s ± 0% 177MB/s ± 0% +1.51% (p=0.008 n=5+5) TEAde/4K-8 175MB/s ± 0% 177MB/s ± 0% +1.48% (p=0.008 n=5+5) TEAde/32K-8 175MB/s ± 1% 178MB/s ± 1% +1.52% (p=0.008 n=5+5)
152 lines
3.2 KiB
Go
152 lines
3.2 KiB
Go
package binary
|
|
|
|
import (
|
|
"bytes"
|
|
"crypto/rand"
|
|
"encoding/hex"
|
|
"testing"
|
|
|
|
"github.com/Mrs4s/MiraiGo/utils"
|
|
)
|
|
|
|
var testTEA = NewTeaCipher([]byte("0123456789ABCDEF"))
|
|
|
|
const (
|
|
KEY = iota
|
|
DAT
|
|
ENC
|
|
)
|
|
|
|
var sampleData = func() [][3]string {
|
|
out := [][3]string{
|
|
{"0123456789ABCDEF", "MiraiGO Here", "b7b2e52af7f5b1fbf37fc3d5546ac7569aecd01bbacf09bf"},
|
|
{"0123456789ABCDEF", "LXY Testing~", "9d0ab85aa14f5434ee83cd2a6b28bf306263cdf88e01264c"},
|
|
|
|
{"0123456789ABCDEF", "s", "528e8b5c48300b548e94262736ebb8b7"},
|
|
{"0123456789ABCDEF", "long long long long long long long", "95715fab6efbd0fd4b76dbc80bd633ebe805849dbc242053b06557f87e748effd9f613f782749fb9fdfa3f45c0c26161"},
|
|
|
|
{"LXY1226 Mrs4s", "LXY Testing~", "ab20caa63f3a6503a84f3cb28f9e26b6c18c051e995d1721"},
|
|
}
|
|
for i := range out {
|
|
c, _ := hex.DecodeString(out[i][ENC])
|
|
out[i][ENC] = utils.B2S(c)
|
|
}
|
|
return out
|
|
}()
|
|
|
|
func TestTEA(t *testing.T) {
|
|
// Self Testing
|
|
for _, sample := range sampleData {
|
|
tea := NewTeaCipher(utils.S2B(sample[KEY]))
|
|
dat := utils.B2S(tea.Decrypt(utils.S2B(sample[ENC])))
|
|
if dat != sample[DAT] {
|
|
t.Fatalf("error decrypt %v %x", sample, dat)
|
|
}
|
|
enc := utils.B2S(tea.Encrypt(utils.S2B(sample[DAT])))
|
|
dat = utils.B2S(tea.Decrypt(utils.S2B(enc)))
|
|
if dat != sample[DAT] {
|
|
t.Fatal("error self test", sample)
|
|
}
|
|
}
|
|
|
|
key := make([]byte, 16)
|
|
_, err := rand.Read(key)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
// Random data testing
|
|
for i := 1; i < 0xFF; i++ {
|
|
_, err := rand.Read(key)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
tea := NewTeaCipher(key)
|
|
|
|
dat := make([]byte, i)
|
|
_, err = rand.Read(dat)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
enc := tea.Encrypt(dat)
|
|
dec := tea.Decrypt(enc)
|
|
if !bytes.Equal(dat, dec) {
|
|
t.Fatalf("error in %d, %x %x %x", i, key, dat, enc)
|
|
}
|
|
}
|
|
}
|
|
|
|
func benchEncrypt(b *testing.B, data []byte) {
|
|
_, err := rand.Read(data)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
b.SetBytes(int64(len(data)))
|
|
b.ResetTimer()
|
|
for i := 0; i < b.N; i++ {
|
|
testTEA.Encrypt(data)
|
|
}
|
|
}
|
|
|
|
func benchDecrypt(b *testing.B, data []byte) {
|
|
_, err := rand.Read(data)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
data = testTEA.Encrypt(data)
|
|
b.SetBytes(int64(len(data)))
|
|
b.ResetTimer()
|
|
for i := 0; i < b.N; i++ {
|
|
testTEA.Decrypt(data)
|
|
}
|
|
}
|
|
|
|
func BenchmarkTEAen(b *testing.B) {
|
|
b.Run("16", func(b *testing.B) {
|
|
data := make([]byte, 16)
|
|
benchEncrypt(b, data)
|
|
})
|
|
b.Run("256", func(b *testing.B) {
|
|
data := make([]byte, 256)
|
|
benchEncrypt(b, data)
|
|
})
|
|
b.Run("4K", func(b *testing.B) {
|
|
data := make([]byte, 1024*4)
|
|
benchEncrypt(b, data)
|
|
})
|
|
b.Run("32K", func(b *testing.B) {
|
|
data := make([]byte, 1024*32)
|
|
benchEncrypt(b, data)
|
|
})
|
|
}
|
|
|
|
func BenchmarkTEAde(b *testing.B) {
|
|
b.Run("16", func(b *testing.B) {
|
|
data := make([]byte, 16)
|
|
benchDecrypt(b, data)
|
|
})
|
|
b.Run("256", func(b *testing.B) {
|
|
data := make([]byte, 256)
|
|
benchDecrypt(b, data)
|
|
})
|
|
b.Run("4K", func(b *testing.B) {
|
|
data := make([]byte, 4096)
|
|
benchDecrypt(b, data)
|
|
})
|
|
b.Run("32K", func(b *testing.B) {
|
|
data := make([]byte, 1024*32)
|
|
benchDecrypt(b, data)
|
|
})
|
|
}
|
|
|
|
func BenchmarkTEA_encode(b *testing.B) {
|
|
for i := 0; i < b.N; i++ {
|
|
testTEA.encode(114514)
|
|
}
|
|
}
|
|
|
|
func BenchmarkTEA_decode(b *testing.B) {
|
|
for i := 0; i < b.N; i++ {
|
|
testTEA.decode(114514)
|
|
}
|
|
}
|