MCPcopy Create free account
hub / github.com/LagrangeDev/LagrangeGo / decodeLoginResponse

Method decodeLoginResponse

client/oicq.go:94–175  ·  view source on GitHub ↗
(buf []byte, sig *auth.SigInfo)

Source from the content-addressed store, hash-verified

92}
93
94func (c *QQClient) decodeLoginResponse(buf []byte, sig *auth.SigInfo) (LoginResponse, error) {
95 reader := binary.NewReader(buf)
96 reader.SkipBytes(2)
97 typ := reader.ReadU8()
98 tlv := reader.ReadTlv()
99
100 switch typ {
101 case 0:
102 reader = binary.NewReader(tea.NewTeaCipher(sig.Tgtgt).Decrypt(tlv[0x119]))
103 tlv = reader.ReadTlv()
104 if tgt, ok := tlv[0x10A]; ok {
105 sig.Tgt = tgt
106 }
107 if d2, ok := tlv[0x143]; ok {
108 sig.D2 = d2
109 }
110 if d2Key, ok := tlv[0x305]; ok {
111 sig.D2Key = d2Key
112 }
113 if tlv11a, ok := tlv[0x11A]; ok {
114 c.debug("tlv11a data: %x", tlv11a)
115 tlvReader := binary.NewReader(tlv11a)
116 tlvReader.ReadU16()
117 sig.Age = tlvReader.ReadU8()
118 sig.Gender = tlvReader.ReadU8()
119 sig.Nickname = tlvReader.ReadStringWithLength("u8", false)
120 }
121 sig.Tgtgt = crypto.MD5Digest(sig.D2Key)
122 sig.TempPwd = tlv[0x106]
123
124 var resp pb.Tlv543
125 err := proto.Unmarshal(tlv[0x543], &resp)
126 if err != nil {
127 err = fmt.Errorf("parsing login response error: %w", err)
128 c.errorln(err)
129 return LoginResponse{
130 Success: false,
131 Code: typ,
132 Error: UnknownLoginError,
133 ErrorMessage: err.Error(),
134 }, err
135 }
136 sig.UID = resp.Layer1.Layer2.Uid
137
138 c.debugln("SigInfo got")
139
140 return LoginResponse{
141 Success: true,
142 }, nil
143 default:
144 }
145
146 var loginErr LoginError
147 var title, content string
148
149 if t146, ok := tlv[0x146]; ok {
150 errBuf := binary.NewReader(t146)
151 errBuf.SkipBytes(4)

Callers 1

QRCodeLoginMethod · 0.95

Calls 13

SkipBytesMethod · 0.95
ReadU8Method · 0.95
ReadTlvMethod · 0.95
debugMethod · 0.95
ReadU16Method · 0.95
ReadStringWithLengthMethod · 0.95
errorlnMethod · 0.95
debuglnMethod · 0.95
ReadStringMethod · 0.95
NewReaderFunction · 0.92
MD5DigestFunction · 0.92
UnmarshalMethod · 0.80

Tested by

no test coverage detected