diff --git a/tea_1.16.go b/tea_1.16.go index 9384703..2c7cf56 100644 --- a/tea_1.16.go +++ b/tea_1.16.go @@ -48,7 +48,7 @@ func (t TEA) EncryptLittleEndianTo(src []byte, sumtable [0x10]uint32, dst []byte var iv1, iv2, holder uint64 var v0, v1 uint32 - for i := 0; i < len(dst); i += 8 { + for i := 0; i < fill+lens+7; i += 8 { holder = binary.LittleEndian.Uint64(dst[i:]) ^ iv1 v0, v1 = uint32(holder>>32), uint32(holder) for i := 0; i < 0x10; i++ { @@ -124,7 +124,7 @@ func (t TEA) DecryptTo(data []byte, dst []byte) (from, to int) { var iv1, iv2, holder uint64 var v0, v1 uint32 - for i := 0; i < len(dst); i += 8 { + for i := 0; i < len(data); i += 8 { iv1 = binary.BigEndian.Uint64(data[i:]) iv2 ^= iv1 v0, v1 = uint32(iv2>>32), uint32(iv2) @@ -201,7 +201,7 @@ func (t TEA) DecryptLittleEndianTo(data []byte, sumtable [0x10]uint32, dst []byt var iv1, iv2, holder uint64 var v0, v1 uint32 - for i := 0; i < len(dst); i += 8 { + for i := 0; i < len(data); i += 8 { iv1 = binary.LittleEndian.Uint64(data[i:]) iv2 ^= iv1 v0, v1 = uint32(iv2>>32), uint32(iv2) diff --git a/tea_1.16_amd64.go b/tea_1.16_amd64.go index ac0c4e1..1010468 100644 --- a/tea_1.16_amd64.go +++ b/tea_1.16_amd64.go @@ -35,8 +35,9 @@ func (t TEA) EncryptTo(src []byte, dst []byte) int { binary.LittleEndian.PutUint32(dst[8:], randuint32()) dst[0] = byte(fill-3) | 0xF8 // 存储pad长度 copy(dst[fill:], src) - encrypt(uintptr(*(*unsafe.Pointer)(unsafe.Pointer(&dst)))|uintptr(len(dst)<<40), uintptr(unsafe.Pointer(&t))|(uintptr(len(dst)<<16)&0xffffff00_00000000)) - return fill + lens + 7 + dstlen := fill + lens + 7 + encrypt(uintptr(*(*unsafe.Pointer)(unsafe.Pointer(&dst)))|uintptr(dstlen<<40), uintptr(unsafe.Pointer(&t))|(uintptr(dstlen<<16)&0xffffff00_00000000)) + return dstlen } /* diff --git a/tea_1.16_pure.go b/tea_1.16_pure.go index 169e716..4176d25 100644 --- a/tea_1.16_pure.go +++ b/tea_1.16_pure.go @@ -78,7 +78,7 @@ func (t TEA) EncryptTo(src []byte, dst []byte) int { var iv1, iv2, holder uint64 var v0, v1 uint32 - for i := 0; i < len(dst); i += 8 { + for i := 0; i < fill+lens+7; i += 8 { holder = binary.BigEndian.Uint64(dst[i:]) ^ iv1 v0, v1 = uint32(holder>>32), uint32(holder) v0 += (v1 + 0x9e3779b9) ^ ((v1 << 4) + t[0]) ^ ((v1 >> 5) + t[1]) diff --git a/tea_1.17.go b/tea_1.17.go index 9ba2fea..9d6a468 100644 --- a/tea_1.17.go +++ b/tea_1.17.go @@ -86,7 +86,7 @@ func (t TEA) EncryptLittleEndianTo(src []byte, sumtable [0x10]uint32, dst []byte copy(dst[fill:], src) var iv1, iv2, holder uint64 - for i := 0; i < len(dst); i += 8 { + for i := 0; i < fill+lens+7; i += 8 { block := binary.LittleEndian.Uint64(dst[i:]) holder = block ^ iv1 iv1 = t.encodeTable(holder, sumtable) @@ -119,7 +119,7 @@ func (t TEA) DecryptTo(data []byte, dst []byte) (from, to int) { return -1, -1 } var iv1, iv2, holder uint64 - for i := 0; i < len(dst); i += 8 { + for i := 0; i < len(data); i += 8 { iv1 = binary.BigEndian.Uint64(data[i:]) iv2 ^= iv1 iv2 = t.decode(iv2) @@ -150,7 +150,7 @@ func (t TEA) DecryptLittleEndianTo(data []byte, sumtable [0x10]uint32, dst []byt return -1, -1 } var iv1, iv2, holder uint64 - for i := 0; i < len(dst); i += 8 { + for i := 0; i < len(data); i += 8 { iv1 = binary.LittleEndian.Uint64(data[i:]) iv2 ^= iv1 iv2 = t.decodeTable(iv2, sumtable)