diff --git a/gumble/gumble/udp15.go b/gumble/gumble/udp15.go index 1132c53..a91b7ec 100644 --- a/gumble/gumble/udp15.go +++ b/gumble/gumble/udp15.go @@ -412,6 +412,8 @@ var udp15Client *cryptState15 var udp15Server *cryptState15 // SetUDP15Crypto installs the 1.5 native UDP crypto state from CryptSetup. +// udp15Client: encrypts with client_nonce (outbound). +// udp15Server: decrypts with server_nonce (inbound). func SetUDP15Crypto(key, clientNonce, serverNonce []byte) { csClient := &cryptState15{} if err := csClient.setup15(key, clientNonce, serverNonce); err != nil { @@ -420,11 +422,12 @@ func SetUDP15Crypto(key, clientNonce, serverNonce []byte) { } udp15Client = csClient + // Server state: we only use decryptIV (to decrypt server→client packets). + // The server encrypts with server_nonce, so our decryptIV must be server_nonce. csServer := &cryptState15{} - if err := csServer.setup15(key, serverNonce, clientNonce); err != nil { - log.Error("SetUDP15Crypto server: %v", err) - return - } + copy(csServer.key[:], key) + copy(csServer.decryptIV[:], serverNonce) + csServer.initialized = true udp15Server = csServer log.Info("Mumble 1.5 native UDP crypto initialized")