(srcbindata []byte)
| 9 | ) |
| 10 | |
| 11 | func (httpclient *HttpClientModel) MmtlsDecryptData(srcbindata []byte) []byte { |
| 12 | |
| 13 | var packetHeader MmtlsPacketHeader |
| 14 | recv_data := srcbindata |
| 15 | readerHeader := bytes.NewReader(recv_data[:5]) |
| 16 | mmtlsheader := []byte(string(recv_data[:5])) |
| 17 | binary.Read(readerHeader, binary.BigEndian, &packetHeader.headerbyte) |
| 18 | binary.Read(readerHeader, binary.BigEndian, &packetHeader.headerversion) |
| 19 | binary.Read(readerHeader, binary.BigEndian, &packetHeader.headerpacketLen) |
| 20 | |
| 21 | server_data := recv_data[5 : 5+packetHeader.headerpacketLen] |
| 22 | newsendbufferhashs := new(bytes.Buffer) |
| 23 | newsendbufferhashs.Write(httpclient.mmtlsClient.Newsendbufferhashs) |
| 24 | newsendbufferhashs.Write(server_data) |
| 25 | decrypt_serverdata_hash256 := Getsha256(newsendbufferhashs.Bytes()) |
| 26 | |
| 27 | var HkdfExpand_handshake = new(bytes.Buffer) |
| 28 | HkdfExpand_handshake.Write([]byte{0x68, 0x61, 0x6e, 0x64, 0x73, 0x68, 0x61, 0x6b, 0x65, 0x20, 0x6b, 0x65, 0x79, 0x20, 0x65, 0x78, 0x70, 0x61, 0x6e, 0x73, 0x69, 0x6f, 0x6e}) |
| 29 | HkdfExpand_handshake.Write(decrypt_serverdata_hash256) |
| 30 | |
| 31 | HkdfExpand_handshake_key := Cilent.Hkdf_Expand(sha256.New, httpclient.mmtlsClient.Hkdfexpand_pskaccess_key, HkdfExpand_handshake.Bytes(), 28) |
| 32 | httpclient.mmtlsClient.Decrptshortmmtlskey = HkdfExpand_handshake_key[:16] |
| 33 | httpclient.mmtlsClient.Decrptshortmmtlsiv = HkdfExpand_handshake_key[16:28] |
| 34 | |
| 35 | datapos := 5 + packetHeader.headerpacketLen |
| 36 | |
| 37 | recv_data = recv_data[datapos:len(recv_data)] |
| 38 | readerHeader = bytes.NewReader(recv_data[:5]) |
| 39 | mmtlsheader = []byte(string(recv_data[:5])) |
| 40 | binary.Read(readerHeader, binary.BigEndian, &packetHeader.headerbyte) |
| 41 | binary.Read(readerHeader, binary.BigEndian, &packetHeader.headerversion) |
| 42 | binary.Read(readerHeader, binary.BigEndian, &packetHeader.headerpacketLen) |
| 43 | |
| 44 | serverfinishdata := recv_data[5 : 5+packetHeader.headerpacketLen] |
| 45 | serverfinishdata_aad := new(bytes.Buffer) |
| 46 | serverfinishdata_aad.Write([]byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01}) |
| 47 | serverfinishdata_aad.Write(mmtlsheader) |
| 48 | |
| 49 | var xorkeyBuffer = bytes.NewReader(httpclient.mmtlsClient.Decrptshortmmtlsiv[8:12]) |
| 50 | var xorkeyint uint32 |
| 51 | binary.Read(xorkeyBuffer, binary.BigEndian, &xorkeyint) |
| 52 | xorkeyint = xorkeyint ^ uint32(httpclient.mmtlsClient.ServerSeq) |
| 53 | buf := new(bytes.Buffer) |
| 54 | binary.Write(buf, binary.BigEndian, xorkeyint) |
| 55 | |
| 56 | var decryptmmtlsIv_seq = new(bytes.Buffer) |
| 57 | decryptmmtlsIv_seq.Write(httpclient.mmtlsClient.Decrptshortmmtlsiv[:8]) |
| 58 | decryptmmtlsIv_seq.Write(buf.Bytes()) |
| 59 | |
| 60 | decryptserverfinishdata := Cilent.NewAES_GCMDecrypter(httpclient.mmtlsClient.Decrptshortmmtlskey, serverfinishdata, decryptmmtlsIv_seq.Bytes(), serverfinishdata_aad.Bytes()) |
| 61 | if decryptserverfinishdata != nil { |
| 62 | httpclient.mmtlsClient.ServerSeq += 1 |
| 63 | var HkdfExpand_serverfinish_datakey = new(bytes.Buffer) |
| 64 | HkdfExpand_serverfinish_datakey.Write([]byte{0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x20, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64}) |
| 65 | hkdfexpand_shortencryptkey := Cilent.Hkdf_Expand(sha256.New, httpclient.mmtlsClient.Hkdfexpand_pskaccess_key, HkdfExpand_serverfinish_datakey.Bytes(), 32) |
| 66 | |
| 67 | h := hmac.New(sha256.New, hkdfexpand_shortencryptkey) |
| 68 | h.Write(decrypt_serverdata_hash256) |
no test coverage detected