From d47127dc7502438a5a3ae2b3e6d8779ab15c7302 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=BA=90=E6=96=87=E9=9B=A8?= <41315874+fumiama@users.noreply.github.com> Date: Sat, 17 Sep 2022 20:46:22 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81=E7=BB=93?= =?UTF-8?q?=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- base14_generic.go | 73 +++++++++++++++++++---------------------------- 1 file changed, 29 insertions(+), 44 deletions(-) diff --git a/base14_generic.go b/base14_generic.go index 2b00c86..c32d705 100644 --- a/base14_generic.go +++ b/base14_generic.go @@ -6,8 +6,10 @@ import "encoding/binary" func encodeGeneric(offset, outlen int, b, encd []byte) { var n int i := 0 - if len(b) == 7 { + if len(b)%7 == 0 { b = append(b, 0) + } + for ; i <= len(b)-7; i += 7 { shift := binary.BigEndian.Uint64(b[i:]) >> 2 sum := shift sum &= 0x3fff000000000000 @@ -19,54 +21,37 @@ func encodeGeneric(offset, outlen int, b, encd []byte) { sum |= shift & 0x0000000000003fff sum += 0x4e004e004e004e00 binary.BigEndian.PutUint64(encd[n:], sum) - } else { - if len(b)%7 == 0 { - b = append(b, 0) - } - for ; i <= len(b)-7; i += 7 { - shift := binary.BigEndian.Uint64(b[i:]) >> 2 - sum := shift - sum &= 0x3fff000000000000 - shift >>= 2 - sum |= shift & 0x00003fff00000000 - shift >>= 2 - sum |= shift & 0x000000003fff0000 - shift >>= 2 - sum |= shift & 0x0000000000003fff - sum += 0x4e004e004e004e00 - binary.BigEndian.PutUint64(encd[n:], sum) - n += 8 - } - if offset > 0 { - sum := 0x000000000000003f & ((uint64)(b[i]) >> 2) - sum |= ((uint64)(b[i]) << 14) & 0x000000000000c000 - if offset > 1 { - sum |= ((uint64)(b[i+1]) << 6) & 0x0000000000003f00 - sum |= ((uint64)(b[i+1]) << 20) & 0x0000000000300000 - if offset > 2 { - sum |= ((uint64)(b[i+2]) << 12) & 0x00000000000f0000 - sum |= ((uint64)(b[i+2]) << 28) & 0x00000000f0000000 - if offset > 3 { - sum |= ((uint64)(b[i+3]) << 20) & 0x000000000f000000 - sum |= ((uint64)(b[i+3]) << 34) & 0x0000003c00000000 - if offset > 4 { - sum |= ((uint64)(b[i+4]) << 26) & 0x0000000300000000 - sum |= ((uint64)(b[i+4]) << 42) & 0x0000fc0000000000 - if offset > 5 { - sum |= ((uint64)(b[i+5]) << 34) & 0x0000030000000000 - sum |= ((uint64)(b[i+5]) << 48) & 0x003f000000000000 - } + n += 8 + } + if offset > 0 { + sum := 0x000000000000003f & ((uint64)(b[i]) >> 2) + sum |= ((uint64)(b[i]) << 14) & 0x000000000000c000 + if offset > 1 { + sum |= ((uint64)(b[i+1]) << 6) & 0x0000000000003f00 + sum |= ((uint64)(b[i+1]) << 20) & 0x0000000000300000 + if offset > 2 { + sum |= ((uint64)(b[i+2]) << 12) & 0x00000000000f0000 + sum |= ((uint64)(b[i+2]) << 28) & 0x00000000f0000000 + if offset > 3 { + sum |= ((uint64)(b[i+3]) << 20) & 0x000000000f000000 + sum |= ((uint64)(b[i+3]) << 34) & 0x0000003c00000000 + if offset > 4 { + sum |= ((uint64)(b[i+4]) << 26) & 0x0000000300000000 + sum |= ((uint64)(b[i+4]) << 42) & 0x0000fc0000000000 + if offset > 5 { + sum |= ((uint64)(b[i+5]) << 34) & 0x0000030000000000 + sum |= ((uint64)(b[i+5]) << 48) & 0x003f000000000000 } } } } - sum += 0x004e004e004e004e - var tmp [8]byte - binary.LittleEndian.PutUint64(tmp[:], sum) - copy(encd[n:], tmp[:]) - encd[outlen-2] = '=' - encd[outlen-1] = byte(offset) } + sum += 0x004e004e004e004e + var tmp [8]byte + binary.LittleEndian.PutUint64(tmp[:], sum) + copy(encd[n:], tmp[:]) + encd[outlen-2] = '=' + encd[outlen-1] = byte(offset) } }