super-mario-maker/connect.go
2021-09-12 00:08:32 -04:00

38 lines
1.1 KiB
Go

package main
import (
nex "github.com/PretendoNetwork/nex-go"
)
func connect(packet *nex.PacketV1) {
payload := packet.Payload()
stream := nex.NewStreamIn(payload, nexServer)
_, _ = stream.ReadBuffer()
checkData, _ := stream.ReadBuffer()
sessionKey := make([]byte, nexServer.KerberosKeySize())
kerberos := nex.NewKerberosEncryption(sessionKey)
checkDataDecrypted := kerberos.Decrypt(checkData)
checkDataStream := nex.NewStreamIn(checkDataDecrypted, nexServer)
userPID := checkDataStream.ReadUInt32LE() // User PID
packet.Sender().SetPID(userPID)
_ = checkDataStream.ReadUInt32LE() //CID of secure server station url
responseCheck := checkDataStream.ReadUInt32LE()
responseValueStream := nex.NewStreamOut(nexServer)
responseValueStream.WriteUInt32LE(responseCheck + 1)
responseValueBufferStream := nex.NewStreamOut(nexServer)
responseValueBufferStream.WriteBuffer(responseValueStream.Bytes())
nexServer.AcknowledgePacket(packet, responseValueBufferStream.Bytes())
packet.Sender().UpdateRC4Key(sessionKey)
packet.Sender().SetSessionKey(sessionKey)
}