Files
wechat_ipad_pro/clientsdk/mmtls/mmstructures.go

271 lines
5.3 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package mmtls
import (
"bufio"
"crypto"
"math/big"
"net"
"golang.org/x/net/proxy"
)
// GlobalProxyConfig 全局代理配置(由 srv 层设置)
var GlobalProxyConfig = struct {
LongConnTimeout int
LongConnReadTimeout int
LongConnRetryTimes int
LongConnRetryInterval int
ShortConnTimeout int
AllowDirectOnProxyFail bool
}{
LongConnTimeout: 15,
LongConnReadTimeout: 210,
LongConnRetryTimes: 30,
LongConnRetryInterval: 500,
ShortConnTimeout: 15,
AllowDirectOnProxyFail: false,
}
// AesGcmParam AesGcm加密解密参数
type AesGcmParam struct {
AesKey []byte
Nonce []byte
}
// ClientEcdhKeys 客户端随机的两个EcdhKey私钥
type ClientEcdhKeys struct {
PriKey1 crypto.PrivateKey
PubKeyBuf1 []byte
PriKey2 crypto.PrivateKey
PubKeyBuf2 []byte
}
// HkdfKey28 HkdfKey28
type HkdfKey28 struct {
AesKey []byte
Nonce []byte
}
// HkdfKey56 HkdfKey56
type HkdfKey56 struct {
EncodeAesKey []byte
EncodeNonce []byte
DecodeAesKey []byte
DecodeNonce []byte
}
// MMInfo MMInfo
type MMInfo struct {
// 短链接 属性
// mmtls 协议host 例如hkextshort.weixin.qq.com这个需要保存这数据库
ShortHost string
// mmtls路径 -- 例如:/mmtls/12345678(随机8位16进制字符串),每次握手都随机一个
ShortURL string
// 短链接会话票据(服务端返回, 第一次握手不设置), 下一次握手选择其中一个发给服务器, 需要保存到数据库
ShortPskList []*Psk
// 握手扩展出来的用于后续加密的Key
PskAccessKey []byte
// 长链接 属性
LongHost string
LONGPort uint32
// Deprecated:
LONGClientSeq uint32 `json:"-"` // 不持久化
// Deprecated:
LONGServerSeq uint32 `json:"-"` // 不持久化
// Deprecated:
Conn net.Conn `json:"-"` // 不持久化
reader *bufio.Reader
LongHdkfKey *HkdfKey56
// ClientEcdhKeys
ClientEcdhKeys *ClientEcdhKeys
// 代理
Dialer proxy.Dialer
LongConnTimeout int
LongConnReadTimeout int
LongConnRetryTimes int
LongConnRetryInterval int
ShortConnTimeout int
AllowDirectOnProxyFail bool
}
// EcdsaSignature 服务端传过来的校验数据
type EcdsaSignature struct {
R, S *big.Int
}
// CipherSuiteInfo CipherSuiteInfo
type CipherSuiteInfo struct {
SuiteCode uint16
Clipher1 string
Clipher2 string
Clipher3 string
Clipher4 string
Clipher5 string
Length1 uint32
Length2 uint32
Length3 uint32
}
// CipherSuite CipherSuite
type CipherSuite struct {
SuiteCode uint16
SuiteInfo *CipherSuiteInfo
}
// ClientKeyOffer ClientKeyOffer
type ClientKeyOffer struct {
Version uint32
PublicValue []byte
}
// CertificateVerify CertificateVerify
type CertificateVerify struct {
Signature []byte
}
// ClientKeyShareExtension ClientKeyShareExtension
type ClientKeyShareExtension struct {
ClientKeyOfferList []*ClientKeyOffer
CertificateVersion uint32
}
// EarlyEncryptDataExtension EarlyEncryptDataExtension
type EarlyEncryptDataExtension struct {
ClientGmtTime uint32
}
// PreSharedKeyExtension PreSharedKeyExtension
type PreSharedKeyExtension struct {
PskList []*Psk
}
// ServerKeyShareExtension ServerKeyShareExtension
type ServerKeyShareExtension struct {
KeyOfferNameGroup uint32
PublicValue []byte
}
// Extension Extension
type Extension struct {
ExtensionType uint16
ExtensionData []byte
}
// EncryptedExtensions EncryptedExtensions
type EncryptedExtensions struct {
ExtensionList []*Extension
}
// ClientHello ClientHello
type ClientHello struct {
Version uint16
CipherSuiteList []*CipherSuite
RandomBytes []byte
ClientGmtTime uint32
ExtensionList []*Extension
}
// ServerHello ServerHello
type ServerHello struct {
Version uint16
CipherSuite *CipherSuite
RandomBytes []byte
ExtensionList []*Extension
}
// Psk Psk
type Psk struct {
Type byte
TicketKLifeTimeHint uint32
MacValue []byte
KeyVersion uint32
Iv []byte
EncryptedTicket []byte
}
// ClientPsk CLientPsk
type ClientPsk struct {
Psk *Psk
PskExpiredTime uint64
PreSharedKey []byte
}
// Finished Finished
type Finished struct {
VerifyData []byte
}
// HTTPHandler HttpHandler
type HTTPHandler struct {
URL string
Host string
MMPkg []byte
}
// KeyPair ECDH信息
type KeyPair struct {
Version uint32
Nid uint32
PublicKey []byte
PrivateKey []byte
}
// NewSessionTicket NewSessionTicket
type NewSessionTicket struct {
PskList []*Psk
}
// PskTicket PskTicket
type PskTicket struct {
Version byte
MMTlsVersion uint16
CipherSuite *CipherSuite
KeyVersion uint32
TicketKLifeTimeHint uint32
PreSharedKey []byte
MacKey []byte
ClientGmtTime uint32
ServerGmtTime uint32
EcdhVersion uint32
Valid byte
}
// RecordHead RecordHead
type RecordHead struct {
Type byte
Tag uint16
Size uint16
}
// Alert Alert
type Alert struct {
AlertLevel byte
AlertType uint16
FallBackURL []byte
SignatureURL []byte
}
// PackItem 包数量
type PackItem struct {
RecordHead []byte
PackData []byte
}
// LongPackHeaderInfo 长链接请求包头部信息
type LongPackHeaderInfo struct {
HeaderLen uint16
Version uint16
Operation uint32
SequenceNumber uint32
}
// LongRecvInfo 长链接接收信息
type LongRecvInfo struct {
HeaderInfo *LongPackHeaderInfo
RespData []byte
}