Files
hk4e/common/region/region.go

78 lines
2.2 KiB
Go

package region
import (
"os"
"hk4e/pkg/endec"
"hk4e/pkg/logger"
"hk4e/pkg/random"
"hk4e/protocol/proto"
)
func LoadRsaKey() (signRsaKey []byte, encRsaKeyMap map[string][]byte, pwdRsaKey []byte) {
var err error = nil
encRsaKeyMap = make(map[string][]byte)
signRsaKey, err = os.ReadFile("key/region_sign_key.pem")
if err != nil {
logger.Error("open region_sign_key.pem error: %v", err)
return nil, nil, nil
}
encKeyIdList := []string{"2", "3", "4", "5"}
for _, v := range encKeyIdList {
encRsaKeyMap[v], err = os.ReadFile("key/region_enc_key_" + v + ".pem")
if err != nil {
logger.Error("open region_enc_key_"+v+".pem error: %v", err)
return nil, nil, nil
}
}
pwdRsaKey, err = os.ReadFile("key/account_password_key.pem")
if err != nil {
logger.Error("open account_password_key.pem error: %v", err)
return nil, nil, nil
}
return signRsaKey, encRsaKeyMap, pwdRsaKey
}
func InitRegion(kcpAddr string, kcpPort int32, ec2b *random.Ec2b) (*proto.QueryCurrRegionHttpRsp, *proto.QueryRegionListHttpRsp, *random.Ec2b) {
dispatchEc2b := random.NewEc2b()
if ec2b != nil {
dispatchEc2b = ec2b
}
dispatchEc2bData := dispatchEc2b.Bytes()
dispatchXorKey := dispatchEc2b.XorKey()
// RegionCurr
regionCurr := new(proto.QueryCurrRegionHttpRsp)
regionCurr.RegionInfo = &proto.RegionInfo{
GateserverIp: kcpAddr,
GateserverPort: uint32(kcpPort),
SecretKey: dispatchEc2bData,
}
// RegionList
customConfigStr := `
{
"sdkenv": "2",
"checkdevice": "false",
"loadPatch": "false",
"showexception": "false",
"regionConfig": "pm|fk|add",
"downloadMode": "0",
}
`
customConfig := []byte(customConfigStr)
endec.Xor(customConfig, dispatchXorKey)
serverList := make([]*proto.RegionSimpleInfo, 0)
server := &proto.RegionSimpleInfo{
Name: "os_usa",
Title: "America",
Type: "DEV_PUBLIC",
DispatchUrl: "https://osusadispatch.yuanshen.com/query_cur_region",
}
serverList = append(serverList, server)
regionList := new(proto.QueryRegionListHttpRsp)
regionList.RegionList = serverList
regionList.ClientSecretKey = dispatchEc2bData
regionList.ClientCustomConfigEncrypted = customConfig
regionList.EnableLoginPc = true
return regionCurr, regionList, dispatchEc2b
}