From e0822da417e0015905694843a4493e23fd8b8845 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: Mon, 6 May 2024 18:24:24 +0900 Subject: [PATCH] optimize(utils): hash & image_resolver --- client/client.go | 8 ++-- client/highway.go | 2 +- client/ntlogin.go | 2 +- go.mod | 3 +- go.sum | 6 ++- info/device.go | 4 +- info/serialize.go | 4 +- packets/oidb/GroupImageUpload.go | 13 +++--- packets/oidb/PrivateImageUpload.go | 13 +++--- packets/tlv/common.go | 6 +-- packets/wtlogin/exchange.go | 3 +- packets/wtlogin/oicq.go | 10 ++--- utils/hash.go | 24 +++++----- utils/image_resolver.go | 72 ++++++++++-------------------- utils/operator.go | 12 +++-- utils/packet.go | 2 +- utils/proto/dynamic.go | 22 ++++----- utils/proto/wrapper.go | 9 ---- utils/sign.go | 7 ++- 19 files changed, 99 insertions(+), 123 deletions(-) diff --git a/client/client.go b/client/client.go index b250a00c..4bb549eb 100644 --- a/client/client.go +++ b/client/client.go @@ -87,10 +87,10 @@ func (c *QQClient) FecthQrcode() ([]byte, string, error) { WriteU8(0). WriteTlv([][]byte{ tlv.T16(c.appInfo.AppID, c.appInfo.SubAppID, - utils.GetBytesFromHex(c.deviceInfo.Guid), c.appInfo.PTVersion, c.appInfo.PackageName), + utils.MustParseHexStr(c.deviceInfo.Guid), c.appInfo.PTVersion, c.appInfo.PackageName), tlv.T1b(), tlv.T1d(c.appInfo.MiscBitmap), - tlv.T33(utils.GetBytesFromHex(c.deviceInfo.Guid)), + tlv.T33(utils.MustParseHexStr(c.deviceInfo.Guid)), tlv.T35(c.appInfo.PTOSVersion), tlv.T66(c.appInfo.PTOSVersion), tlv.Td1(c.appInfo.OS, c.deviceInfo.DeviceName), @@ -172,7 +172,7 @@ func (c *QQClient) KeyExchange() { } func (c *QQClient) PasswordLogin(password string) (loginState.State, error) { - md5Password := utils.Md5Digest([]byte(password)) + md5Password := utils.MD5Digest([]byte(password)) cr := tlv.T106( c.appInfo.AppID, @@ -233,7 +233,7 @@ func (c *QQClient) QrcodeLogin(refreshInterval int) (bool, error) { tlv.T144(c.sig.Tgtgt, app, device), tlv.T116(app.SubSigmap), tlv.T142(app.PackageName, 0), - tlv.T145(utils.GetBytesFromHex(device.Guid)), + tlv.T145(utils.MustParseHexStr(device.Guid)), tlv.T18(0, app.AppClientVersion, int(c.Uin), 0, 5, 0), tlv.T141([]byte("Unknown"), make([]byte, 0)), tlv.T177(app.WTLoginSDK, 0), diff --git a/client/highway.go b/client/highway.go index 5c324162..327965a1 100644 --- a/client/highway.go +++ b/client/highway.go @@ -137,7 +137,7 @@ func (c *QQClient) SendUpBlockAsync(block UpBlock, server string) bool { DataFlag: 16, CommandId: uint32(block.CommandId), } - md5 := utils.Md5Digest(block.Block) + md5 := utils.MD5Digest(block.Block) segHead := &highway.SegHead{ ServiceId: proto.Some(uint32(0)), Filesize: block.FileSize, diff --git a/client/ntlogin.go b/client/ntlogin.go index f4345392..f0ab1691 100644 --- a/client/ntlogin.go +++ b/client/ntlogin.go @@ -36,7 +36,7 @@ func buildNtloginRequest(uin uint32, app *info.AppInfo, device *info.DeviceInfo, 1: app.OS, 2: device.DeviceName, 3: app.NTLoginType, - 4: utils.GetBytesFromHex(device.Guid), + 4: utils.MustParseHexStr(device.Guid), }, 3: proto.DynamicMessage{ 1: device.KernelVersion, diff --git a/go.mod b/go.mod index fef60168..4b4f965d 100644 --- a/go.mod +++ b/go.mod @@ -4,6 +4,7 @@ go 1.19 require ( github.com/RomiChan/protobuf v0.1.1-0.20230204044148-2ed269a2e54d + github.com/fumiama/imgsz v0.0.4 github.com/mattn/go-colorable v0.1.13 github.com/sirupsen/logrus v1.9.3 ) @@ -11,6 +12,6 @@ require ( require ( github.com/RomiChan/syncx v0.0.0-20220404072119-d7ea0ae15a4c // indirect github.com/mattn/go-isatty v0.0.16 // indirect + golang.org/x/image v0.16.0 // indirect golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab // indirect - google.golang.org/protobuf v1.33.0 // indirect ) diff --git a/go.sum b/go.sum index 881b87fe..ceaa400a 100644 --- a/go.sum +++ b/go.sum @@ -5,6 +5,8 @@ github.com/RomiChan/syncx v0.0.0-20220404072119-d7ea0ae15a4c/go.mod h1:KqZzu7slN github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/fumiama/imgsz v0.0.4 h1:Lsasu2hdSSFS+vnD+nvR1UkiRMK7hcpyYCC0FzgSMFI= +github.com/fumiama/imgsz v0.0.4/go.mod h1:bISOQVTlw9sRytPwe8ir7tAaEmyz9hSNj9n8mXMBG0E= github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= github.com/mattn/go-isatty v0.0.16 h1:bq3VjFmv/sOjHtdEhmkEV4x1AJtvUvOJ2PFAZ5+peKQ= @@ -16,11 +18,11 @@ github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVs github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +golang.org/x/image v0.16.0 h1:9kloLAKhUufZhA12l5fwnx2NZW39/we1UhBesW433jw= +golang.org/x/image v0.16.0/go.mod h1:ugSZItdV4nOxyqp56HmXwH0Ry0nBCpjnZdpDaIHdoPs= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab h1:2QkjZIsXupsJbJIdSjjUOgWK3aEtzyuh2mPt3l/CkeU= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= -google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/info/device.go b/info/device.go index 438ee287..f8d3d2b7 100644 --- a/info/device.go +++ b/info/device.go @@ -18,8 +18,8 @@ type DeviceInfo struct { func NewDeviceInfo(uin int) *DeviceInfo { return &DeviceInfo{ - Guid: fmt.Sprintf("%X", utils.Md5Digest([]byte(strconv.Itoa(uin)))), - DeviceName: fmt.Sprintf("Lagrange-%X", utils.Md5Digest([]byte(strconv.Itoa(uin)))[0:4]), + Guid: fmt.Sprintf("%X", utils.MD5Digest([]byte(strconv.Itoa(uin)))), + DeviceName: fmt.Sprintf("Lagrange-%X", utils.MD5Digest([]byte(strconv.Itoa(uin)))[0:4]), SystemKernel: fmt.Sprintf("%s %s", platform.GetSystem(), platform.GetVersion()), KernelVersion: platform.GetVersion(), } diff --git a/info/serialize.go b/info/serialize.go index 6a04c03c..74e7eb95 100644 --- a/info/serialize.go +++ b/info/serialize.go @@ -22,7 +22,7 @@ func Encode(sig *SigInfo) []byte { if err != nil { panic(err) } - dataHash := utils.Md5Digest(buffer.Bytes()) + dataHash := utils.MD5Digest(buffer.Bytes()) return binary.NewBuilder(nil). WriteBytes(dataHash, true). @@ -35,7 +35,7 @@ func Decode(buf []byte, verify bool) *SigInfo { dataHash := reader.ReadBytesWithLength("u16", false) data := reader.ReadBytesWithLength("u16", false) - if verify && string(dataHash) != string(utils.Md5Digest(data)) { + if verify && string(dataHash) != string(utils.MD5Digest(data)) { panic("Data hash does not match") } buffer := bytes.NewBuffer(data) diff --git a/packets/oidb/GroupImageUpload.go b/packets/oidb/GroupImageUpload.go index c2ea13e1..621930c6 100644 --- a/packets/oidb/GroupImageUpload.go +++ b/packets/oidb/GroupImageUpload.go @@ -4,20 +4,21 @@ import ( "encoding/hex" "errors" "fmt" + "math/rand" + "github.com/LagrangeDev/LagrangeGo/packets/pb/service/oidb" "github.com/LagrangeDev/LagrangeGo/utils" - "math/rand" ) func BuildGroupImageUploadReq(groupUin uint32, data []byte) (*OidbPacket, error) { // OidbSvcTrpcTcp.0x11c4_100 - md5Hash := utils.Md5Digest(data) - sha1Hash := utils.Sha1Digest(data) + md5Hash := utils.MD5Digest(data) + sha1Hash := utils.SHA1Digest(data) format, size, err := utils.ImageResolve(data) if err != nil { return nil, err } - imageExt := utils.GetImageExt(format) + imageExt := format.String() hexString := "0800180020004a00500062009201009a0100aa010c080012001800200028003a00" bytesPbReserveTroop, err := hex.DecodeString(hexString) @@ -57,8 +58,8 @@ func BuildGroupImageUploadReq(groupUin uint32, data []byte) (*OidbPacket, error) VideoFormat: 0, VoiceFormat: 0, }, - Width: size.X, - Height: size.Y, + Width: uint32(size.Width), + Height: uint32(size.Height), Time: 0, Original: 1, }, diff --git a/packets/oidb/PrivateImageUpload.go b/packets/oidb/PrivateImageUpload.go index 12c34402..f35e6ea7 100644 --- a/packets/oidb/PrivateImageUpload.go +++ b/packets/oidb/PrivateImageUpload.go @@ -4,20 +4,21 @@ import ( "encoding/hex" "errors" "fmt" + "math/rand" + "github.com/LagrangeDev/LagrangeGo/packets/pb/service/oidb" "github.com/LagrangeDev/LagrangeGo/utils" - "math/rand" ) func BuildImageUploadReq(targetUid string, data []byte) (*OidbPacket, error) { // OidbSvcTrpcTcp.0x11c5_100 - md5Hash := utils.Md5Digest(data) - sha1Hash := utils.Sha1Digest(data) + md5Hash := utils.MD5Digest(data) + sha1Hash := utils.SHA1Digest(data) format, size, err := utils.ImageResolve(data) if err != nil { return nil, err } - imageExt := utils.GetImageExt(format) + imageExt := format.String() hexString := "0800180020004200500062009201009a0100a2010c080012001800200028003a00" bytesPbReserveC2c, err := hex.DecodeString(hexString) @@ -58,8 +59,8 @@ func BuildImageUploadReq(targetUid string, data []byte) (*OidbPacket, error) { VideoFormat: 0, VoiceFormat: 0, }, - Width: size.X, - Height: size.Y, + Width: uint32(size.Width), + Height: uint32(size.Height), Time: 0, Original: 1, }, diff --git a/packets/tlv/common.go b/packets/tlv/common.go index d7db7998..1bd882d3 100644 --- a/packets/tlv/common.go +++ b/packets/tlv/common.go @@ -36,7 +36,7 @@ func T100(ssoVersion, appID, subAppID, appClientVersion, sigmap, dbBufVer int) [ // T106 抄的时候注意参数顺序 func T106(appId, appClientVersion, uin int, guid string, passwordMd5, tgtgtKey, ip []byte, savePassword bool) []byte { // password_md5 + bytes(4) + write_u32(uin).pack() - key := utils.Md5Digest(append(passwordMd5, append(make([]byte, 4), + key := utils.MD5Digest(append(passwordMd5, append(make([]byte, 4), utils.NewPacketBuilder(nil).WriteU32(uint32(uin)).Pack(-1)...)...)) body := utils.NewPacketBuilder(nil). @@ -53,7 +53,7 @@ func T106(appId, appClientVersion, uin int, guid string, passwordMd5, tgtgtKey, WriteBytes(tgtgtKey, "", true). WriteU32(0). WriteBool(true). - WriteBytes(utils.GetBytesFromHex(guid), "", true). + WriteBytes(utils.MustParseHexStr(guid), "", true). WriteU32(0). WriteU32(1). WriteString(strconv.Itoa(uin), "u16", false). @@ -125,7 +125,7 @@ func T144(tgtgtKey []byte, appInfo *info.AppInfo, device *info.DeviceInfo) []byt WriteTlv([][]byte{ T16e(device.DeviceName), T147(appInfo.AppID, appInfo.PTVersion, appInfo.PackageName), - T128(appInfo.OS, utils.GetBytesFromHex(device.Guid)), + T128(appInfo.OS, utils.MustParseHexStr(device.Guid)), T124(), }).Pack(0x144) } diff --git a/packets/wtlogin/exchange.go b/packets/wtlogin/exchange.go index 5cb0fa63..8f9a034b 100644 --- a/packets/wtlogin/exchange.go +++ b/packets/wtlogin/exchange.go @@ -2,6 +2,7 @@ package wtlogin import ( "encoding/hex" + "github.com/LagrangeDev/LagrangeGo/packets/pb/login" "github.com/LagrangeDev/LagrangeGo/info" @@ -31,7 +32,7 @@ func BuildKexExchangeRequest(uin uint32, guid string) []byte { WriteU32(uint32(utils.TimeStamp())). Pack(-1) - p2Hash := utils.Sha256Digest(p2) + p2Hash := utils.SHA256Digest(p2) encP2Hash := crypto.AesGCMEncrypt(p2Hash, encKey) return proto.DynamicMessage{ diff --git a/packets/wtlogin/oicq.go b/packets/wtlogin/oicq.go index 24f61c68..b3d2c582 100644 --- a/packets/wtlogin/oicq.go +++ b/packets/wtlogin/oicq.go @@ -98,9 +98,9 @@ func BuildUniPacket(uin, seq int, cmd string, sign map[string]string, if sign != nil { head[24] = proto.DynamicMessage{ - 1: utils.GetBytesFromHex(sign["sign"]), - 2: utils.GetBytesFromHex(sign["token"]), - 3: utils.GetBytesFromHex(sign["extra"]), + 1: utils.MustParseHexStr(sign["sign"]), + 2: utils.MustParseHexStr(sign["token"]), + 3: utils.MustParseHexStr(sign["extra"]), } } @@ -112,7 +112,7 @@ func BuildUniPacket(uin, seq int, cmd string, sign map[string]string, WriteBytes(sigInfo.Tgt, "u32", true). WriteString(cmd, "u32", true). WriteBytes(make([]byte, 0), "u32", true). - WriteBytes(utils.GetBytesFromHex(deviceInfo.Guid), "u32", true). + WriteBytes(utils.MustParseHexStr(deviceInfo.Guid), "u32", true). WriteBytes(make([]byte, 0), "u32", true). WriteString(appInfo.CurrentVersion, "u16", true). WriteBytes(head.Encode(), "u32", true). @@ -172,7 +172,7 @@ func DecodeLoginResponse(buf []byte, sig *info.SigInfo) (bool, error) { sig.Gender = tlvReader.ReadU8() sig.Nickname = tlvReader.ReadStringWithLength("u8", false) } - sig.Tgtgt = utils.Md5Digest(sig.D2Key) + sig.Tgtgt = utils.MD5Digest(sig.D2Key) sig.TempPwd = tlv[0x106] var resp pb.Tlv543 diff --git a/utils/hash.go b/utils/hash.go index 4b3342b9..20ea0edf 100644 --- a/utils/hash.go +++ b/utils/hash.go @@ -6,20 +6,20 @@ import ( "crypto/sha256" ) -func Md5Digest(v []byte) []byte { - hasher := md5.New() - hasher.Write(v) - return hasher.Sum(nil) +func MD5Digest(v []byte) []byte { + h := md5.New() + h.Write(v) + return h.Sum(make([]byte, 0, md5.Size)) } -func Sha256Digest(v []byte) []byte { - sha256er := sha256.New() - sha256er.Write(v) - return sha256er.Sum(nil) +func SHA256Digest(v []byte) []byte { + h := sha256.New() + h.Write(v) + return h.Sum(make([]byte, 0, sha256.Size)) } -func Sha1Digest(v []byte) []byte { - sha1er := sha1.New() - sha1er.Write(v) - return sha1er.Sum(nil) +func SHA1Digest(v []byte) []byte { + h := sha1.New() + h.Write(v) + return h.Sum(make([]byte, 0, sha1.Size)) } diff --git a/utils/image_resolver.go b/utils/image_resolver.go index f53c5804..0775528b 100644 --- a/utils/image_resolver.go +++ b/utils/image_resolver.go @@ -2,20 +2,19 @@ package utils import ( "bytes" - "encoding/binary" "errors" + + "github.com/fumiama/imgsz" ) -// Vector2 二维向量 -type Vector2 struct { - X uint32 - Y uint32 -} +var ( + ErrImageDataTooShort = errors.New("image data is too short") +) type ImageFormat uint32 const ( - Unknown ImageFormat = iota + Unknown ImageFormat = 0000 Jpeg ImageFormat = 1000 Png ImageFormat = 1001 Gif ImageFormat = 2000 @@ -24,7 +23,16 @@ const ( Tiff ImageFormat = 1006 ) -func GetImageExt(format ImageFormat) string { +var formatmap = map[string]ImageFormat{ + "jpeg": Jpeg, + "png": Png, + "gif": Gif, + "webp": Webp, + "bmp": Bmp, + "tiff": Tiff, +} + +func (format ImageFormat) String() string { switch format { case Jpeg: return "jpg" @@ -43,50 +51,16 @@ func GetImageExt(format ImageFormat) string { } } -func ImageResolve(image []byte) (format ImageFormat, size Vector2, err error) { +func ImageResolve(image []byte) (format ImageFormat, size imgsz.Size, err error) { if len(image) < 10 { // 最小长度检查 - return Unknown, Vector2{}, errors.New("image data is too short") + err = ErrImageDataTooShort + return } - switch { - case bytes.Equal(image[:6], []byte{0x47, 0x49, 0x46, 0x38, 0x39, 0x61}) || bytes.Equal(image[:6], []byte{0x47, 0x49, 0x46, 0x38, 0x37, 0x61}): // GIF - size = Vector2{X: uint32(binary.LittleEndian.Uint16(image[6:8])), Y: uint32(binary.LittleEndian.Uint16(image[8:10]))} - format = Gif - - case bytes.Equal(image[:2], []byte{0xFF, 0xD8}): // JPEG - for i := 2; i < len(image)-10; i++ { - if binary.LittleEndian.Uint16(image[i:i+2])&0xFCFF == 0xC0FF { // SOF0 ~ SOF3 - size = Vector2{X: uint32(binary.BigEndian.Uint16(image[i+7 : i+9])), Y: uint32(binary.BigEndian.Uint16(image[i+5 : i+7]))} - break - } - } - format = Jpeg - - case bytes.Equal(image[:8], []byte{0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A}): // PNG - size = Vector2{X: binary.BigEndian.Uint32(image[16:20]), Y: binary.BigEndian.Uint32(image[20:24])} - format = Png - - case bytes.Equal(image[:4], []byte{0x52, 0x49, 0x46, 0x46}) && bytes.Equal(image[8:12], []byte{0x57, 0x45, 0x42, 0x50}): // WEBP - if bytes.Equal(image[12:16], []byte{0x56, 0x50, 0x38, 0x58}) { // VP8X - size = Vector2{X: uint32(binary.LittleEndian.Uint16(image[24:27]) + 1), Y: uint32(binary.LittleEndian.Uint16(image[27:30]) + 1)} - } else if bytes.Equal(image[12:16], []byte{0x56, 0x50, 0x38, 0x4C}) { // VP8L - size = Vector2{X: uint32(int32(binary.LittleEndian.Uint32(image[21:25]))&0x3FFF) + 1, Y: uint32(int32(binary.LittleEndian.Uint32(image[20:22])&0xFFFC000)>>0x0E) + 1} - } else { - size = Vector2{X: uint32(binary.LittleEndian.Uint16(image[26:28])), Y: uint32(binary.LittleEndian.Uint16(image[28:30]))} - } - format = Webp - - case bytes.Equal(image[:2], []byte{0x42, 0x4D}): // BMP - size = Vector2{X: binary.LittleEndian.Uint32(image[18:22]), Y: binary.LittleEndian.Uint32(image[22:26])} - format = Bmp - - case bytes.Equal(image[:2], []byte{0x49, 0x49}) || bytes.Equal(image[:2], []byte{0x4D, 0x4D}): // TIFF - size = Vector2{X: uint32(binary.LittleEndian.Uint16(image[18:20])), Y: uint32(binary.LittleEndian.Uint16(image[30:32]))} - format = Tiff - - default: - return Unknown, Vector2{}, nil + sz, fmts, err := imgsz.DecodeSize(bytes.NewReader(image)) + if err != nil { + return } - return format, size, nil + return formatmap[fmts], sz, nil } diff --git a/utils/operator.go b/utils/operator.go index 844d44fb..3382d6f0 100644 --- a/utils/operator.go +++ b/utils/operator.go @@ -13,15 +13,21 @@ func TimeStamp() int64 { return time.Now().Unix() } -func GetBytesFromHex(s string) []byte { - result, _ := hex.DecodeString(s) +func MustParseHexStr(s string) []byte { + result, err := hex.DecodeString(s) + if err != nil { + panic(err) + } return result } func ReadLine(s string) string { inputReader := bufio.NewReader(os.Stdin) fmt.Print(s) - rs, _ := inputReader.ReadString('\n') + rs, err := inputReader.ReadString('\n') + if err != nil { + panic(err) + } return strings.TrimSpace(rs) } diff --git a/utils/packet.go b/utils/packet.go index 14c8f09b..b48d5310 100644 --- a/utils/packet.go +++ b/utils/packet.go @@ -15,7 +15,7 @@ type PacketBuilder struct { func NewPacketBuilder(encryptKey []byte) *PacketBuilder { return &PacketBuilder{ - buffer: make([]byte, 0), + buffer: make([]byte, 0, 64), encryptKey: encryptKey, } } diff --git a/utils/proto/dynamic.go b/utils/proto/dynamic.go index b408d2a6..d1506c78 100644 --- a/utils/proto/dynamic.go +++ b/utils/proto/dynamic.go @@ -42,38 +42,38 @@ func (msg DynamicMessage) Encode() []byte { key := item.key << 3 switch v := item.value.(type) { case bool: - en.uvarint(key | 0) + en.uvarint(key) vi := uint64(0) if v { vi = 1 } en.uvarint(vi) case int: - en.uvarint(key | 0) + en.uvarint(key) en.uvarint(uint64(v)) case uint: - en.uvarint(key | 0) + en.uvarint(key) en.uvarint(uint64(v)) case int32: - en.uvarint(key | 0) + en.uvarint(key) en.uvarint(uint64(v)) case int64: - en.uvarint(key | 0) + en.uvarint(key) en.uvarint(uint64(v)) case uint32: - en.uvarint(key | 0) + en.uvarint(key) en.uvarint(uint64(v)) case uint64: - en.uvarint(key | 0) + en.uvarint(key) en.uvarint(v) case SInt: - en.uvarint(key | 0) + en.uvarint(key) en.svarint(int64(v)) case SInt32: - en.uvarint(key | 0) + en.uvarint(key) en.svarint(int64(v)) case SInt64: - en.uvarint(key | 0) + en.uvarint(key) en.svarint(int64(v)) case float32: en.uvarint(key | 5) @@ -87,7 +87,7 @@ func (msg DynamicMessage) Encode() []byte { en.buf = append(en.buf, v...) case []uint64: for i := 0; i < len(v); i++ { - en.uvarint(key | 0) + en.uvarint(key) en.uvarint(v[i]) } case []byte: diff --git a/utils/proto/wrapper.go b/utils/proto/wrapper.go index 735531df..d5b86e62 100644 --- a/utils/proto/wrapper.go +++ b/utils/proto/wrapper.go @@ -5,8 +5,6 @@ package proto import ( "reflect" - "google.golang.org/protobuf/types/known/anypb" - "github.com/RomiChan/protobuf/proto" ) @@ -38,13 +36,6 @@ func Unmarshal(b []byte, m Message) error { return proto.Unmarshal(b, m) } -func Any(pb any) *anypb.Any { - data, _ := Marshal(pb) - return &anypb.Any{ - Value: data, - } -} - func Some[T any](val T) proto.Option[T] { return proto.Some(val) } diff --git a/utils/sign.go b/utils/sign.go index 6699a988..caeee28f 100644 --- a/utils/sign.go +++ b/utils/sign.go @@ -9,14 +9,13 @@ import ( "net/http" "net/url" "strconv" - "sync" "time" ) var ( signLogger = GetLogger("sign") - SIGN_PKG_LIST sync.Map + signMap = map[string]struct{}{} // 只在启动时初始化, 无并发问题 ) func init() { @@ -60,12 +59,12 @@ func init() { } for _, cmd := range signPkgList { - SIGN_PKG_LIST.Store(cmd, true) + signMap[cmd] = struct{}{} } } func containSignPKG(cmd string) bool { - _, ok := SIGN_PKG_LIST.Load(cmd) + _, ok := signMap[cmd] return ok }