main
lensfrex 2 years ago
parent d81861467a
commit 5d1a9b2dea
Signed by: lensfrex
GPG Key ID: B9127026310852D9
  1. 31
      app/cmd/main.go
  2. 94
      app/codecs/encode.go
  3. 48
      app/encode/encode.go

@ -2,6 +2,7 @@ package main
import (
"fmt"
"trailblazer2/app/codecs"
)
func main() {
@ -10,6 +11,12 @@ func main() {
aa = append(aa, 23)
fmt.Println(aa)
a := "asdfasdf"
b := "3c6d08d667d0ee0ccad77c55b19d3e4ab2552f7163ec40a9389095a18f86c398"
//fmt.Println()
fmt.Println(codecs.Encode(a, b))
}
func s(origin string, b bool) (result []int32) {
@ -40,3 +47,27 @@ func getCharAt(data []int32, index int, length int) int32 {
return data[index]
}
}
func l(a []int32, b bool) (result []int32) {
d := len(a)
c := d - 1<<2
if b {
m := int(a[d-1])
if m < c-3 || m > c {
return nil
}
c = m
}
for i := 0; i < d; i++ {
result = append(result, a[i]&0xff, a[i]>>8&0xff, a[i]>>16&0xff, a[i]>>24&0xff)
}
if b {
return append(result, int32(c))
} else {
return result
}
}

@ -0,0 +1,94 @@
package codecs
import "math"
func Encode(str string, key string) []int32 {
v := magicEncode(str, true)
k := magicEncode(key, false)
if len(k) < 4 {
}
n := len(v) - 1
z := int(v[n])
y := int(v[0])
c := -1640531527
q := math.Floor(float64(6 + 52/(n+1)))
d := 0
var m, e, p int
for ; q > 0; q-- {
d = d + c&(-1)
e = d >> 2 & 3
for i := 0; i < n; i++ {
y = int(v[p+1])
m = z>>5 ^ y<<2
m += y>>3 ^ z<<4 ^ (d ^ y)
m += int(k[p&3^e]) ^ z
v[p] = v[p] + int32(m&(-1))
z = int(v[p])
}
y = int(v[0])
m = z>>5 ^ y<<2
m += y>>3 ^ z<<4 ^ (d ^ y)
m += int(k[p&3^e]) ^ z
v[n] = v[n] + int32(m&(0xBB390742|0x44C6F8BD))
z = int(v[n])
}
return magicDecode(v, false)
}
func magicEncode(source string, sizeOnLast bool) (result []int32) {
data := []int32(source)
dataLen := len(data)
resultLen := dataLen / 4
if sizeOnLast {
result = make([]int32, resultLen+1)
result[resultLen] = int32(dataLen)
} else {
result = make([]int32, resultLen)
}
for i := 0; i < dataLen; i += 4 {
result[i>>2] = get(data, i, dataLen) | get(data, i+1, dataLen)<<8 | get(data, i+2, dataLen)<<16 | get(data, i+3, dataLen)<<24
}
return result
}
func magicDecode(data []int32, sizeOnLast bool) (result []int32) {
dataLength := len(data)
c := dataLength - 1<<2
if sizeOnLast {
m := int(data[dataLength-1])
if m < c-3 || m > c {
return nil
}
c = m
}
for i := 0; i < dataLength; i++ {
result = append(result, data[i]&0xff, data[i]>>8&0xff, data[i]>>16&0xff, data[i]>>24&0xff)
}
if sizeOnLast {
return append(result, int32(c))
} else {
return result
}
}
func get(data []int32, index int, length int) int32 {
if index >= length {
return 0
} else {
return data[index]
}
}

@ -1,48 +0,0 @@
package encode
//func XEncode(str string, key string) string {
//
//}
func s(origin string, b bool) (result []int32) {
data := []int32(origin)
dataLen := len(origin)
resultLen := (dataLen / 4) + 1
if b {
result = make([]int32, resultLen+1)
result[resultLen] = int32(resultLen)
} else {
result = make([]int32, resultLen)
}
for i := 0; i < dataLen; i += 4 {
result[i>>2] = get(data, i, dataLen) | get(data, i+1, dataLen)<<8 | get(data, i+2, dataLen)<<16 | get(data, i+3, dataLen)<<24
}
return result
}
//
//func l(a string, b bool) (result []int32) {
// d := len(a)
// data := []int32(a)
//
// c := d - 1<<2
//
// if b {
// m := int(data[d-1])
// if m < c-3 || m > c {
// return nil
// }
// c = m
// }
//}
func get(data []int32, index int, length int) int32 {
if index >= length {
return 0
} else {
return data[index]
}
}
Loading…
Cancel
Save