mirror of
https://github.com/fumiama/gofastTEA.git
synced 2026-06-04 23:40:29 +08:00
optimize: drop linkname
This commit is contained in:
19
rand_1.21.go
Normal file
19
rand_1.21.go
Normal file
@@ -0,0 +1,19 @@
|
||||
//go:build !go1.22
|
||||
|
||||
package tea
|
||||
|
||||
import (
|
||||
_ "unsafe" // required by go:linkname
|
||||
)
|
||||
|
||||
// randuint32 returns a lock free uint32 value.
|
||||
//
|
||||
// Too much legacy code has go:linkname references
|
||||
// to runtime.fastrand and friends, so keep these around for now.
|
||||
// Code should migrate to math/rand/v2.Uint64,
|
||||
// which is just as fast, but that's only available in Go 1.22+.
|
||||
// It would be reasonable to remove these in Go 1.24.
|
||||
// Do not call these from package runtime.
|
||||
//
|
||||
//go:linkname randuint32 runtime.fastrand
|
||||
func randuint32() uint32
|
||||
11
rand_1.22.go
Normal file
11
rand_1.22.go
Normal file
@@ -0,0 +1,11 @@
|
||||
//go:build go1.22
|
||||
|
||||
package tea
|
||||
|
||||
import (
|
||||
"math/rand/v2"
|
||||
)
|
||||
|
||||
func randuint32() uint32 {
|
||||
return rand.Uint32()
|
||||
}
|
||||
5
tea.go
5
tea.go
@@ -4,15 +4,10 @@ package tea
|
||||
|
||||
import (
|
||||
"encoding/binary"
|
||||
_ "unsafe" // required by go:linkname
|
||||
)
|
||||
|
||||
type TEA [4]uint32
|
||||
|
||||
// randuint32 returns a lock free uint32 value.
|
||||
//go:linkname randuint32 runtime.fastrand
|
||||
func randuint32() uint32
|
||||
|
||||
//go:nosplit
|
||||
func NewTeaCipher(key []byte) (t TEA) {
|
||||
if len(key) == 16 {
|
||||
|
||||
15
tea_test.go
15
tea_test.go
@@ -1,6 +1,3 @@
|
||||
//go:build ignore
|
||||
// +build ignore
|
||||
|
||||
package tea
|
||||
|
||||
import (
|
||||
@@ -8,8 +5,6 @@ import (
|
||||
"crypto/rand"
|
||||
"encoding/hex"
|
||||
"testing"
|
||||
|
||||
"github.com/Mrs4s/MiraiGo/utils"
|
||||
)
|
||||
|
||||
var testTEA = NewTeaCipher([]byte("0123456789ABCDEF"))
|
||||
@@ -32,7 +27,7 @@ var sampleData = func() [][3]string {
|
||||
}
|
||||
for i := range out {
|
||||
c, _ := hex.DecodeString(out[i][ENC])
|
||||
out[i][ENC] = utils.B2S(c)
|
||||
out[i][ENC] = string(c)
|
||||
}
|
||||
return out
|
||||
}()
|
||||
@@ -40,13 +35,13 @@ var sampleData = func() [][3]string {
|
||||
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])))
|
||||
tea := NewTeaCipher([]byte(sample[KEY]))
|
||||
dat := string(tea.Decrypt([]byte(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)))
|
||||
enc := string(tea.Encrypt([]byte(sample[DAT])))
|
||||
dat = string(tea.Decrypt([]byte(enc)))
|
||||
if dat != sample[DAT] {
|
||||
t.Fatal("error self test", sample)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user