mirror of
https://github.com/PretendoNetwork/nex-go.git
synced 2025-04-02 11:02:14 -04:00
37 lines
1.2 KiB
Go
37 lines
1.2 KiB
Go
package main
|
|
|
|
import (
|
|
"crypto/rand"
|
|
|
|
"github.com/PretendoNetwork/nex-go/v2"
|
|
"github.com/PretendoNetwork/nex-go/v2/types"
|
|
)
|
|
|
|
func generateTicket(source *nex.Account, target *nex.Account, sessionKeyLength int) []byte {
|
|
sourceKey := nex.DeriveKerberosKey(source.PID, []byte(source.Password))
|
|
targetKey := nex.DeriveKerberosKey(target.PID, []byte(target.Password))
|
|
sessionKey := make([]byte, sessionKeyLength)
|
|
|
|
_, err := rand.Read(sessionKey)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
ticketInternalData := nex.NewKerberosTicketInternalData(authServer)
|
|
serverTime := types.NewDateTime(0).Now()
|
|
|
|
ticketInternalData.Issued = serverTime
|
|
ticketInternalData.SourcePID = source.PID
|
|
ticketInternalData.SessionKey = sessionKey
|
|
|
|
encryptedTicketInternalData, _ := ticketInternalData.Encrypt(targetKey, nex.NewByteStreamOut(authServer.LibraryVersions, authServer.ByteStreamSettings))
|
|
|
|
ticket := nex.NewKerberosTicket()
|
|
ticket.SessionKey = sessionKey
|
|
ticket.TargetPID = target.PID
|
|
ticket.InternalData = types.NewBuffer(encryptedTicketInternalData)
|
|
|
|
encryptedTicket, _ := ticket.Encrypt(sourceKey, nex.NewByteStreamOut(authServer.LibraryVersions, authServer.ByteStreamSettings))
|
|
|
|
return encryptedTicket
|
|
}
|