Skip to content

Commit

Permalink
Chore: Update xsalsa20poly1305 -> 0.9
Browse files Browse the repository at this point in the history
A few extra error types needed adding and handling due to the new `KeyInit::new_from_slice` returning a non-exported error.
  • Loading branch information
FelixMcFelix committed Nov 20, 2023
1 parent 893dbaa commit 48db45f
Show file tree
Hide file tree
Showing 5 changed files with 12 additions and 6 deletions.
2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ twilight-model = { default-features = false, optional = true, version = "0.12.0"
typemap_rev = { optional = true, version = "0.1" }
url = { optional = true, version = "2" }
uuid = { features = ["v4"], optional = true, version = "1" }
xsalsa20poly1305 = { features = ["std"], optional = true, version = "0.8" }
xsalsa20poly1305 = { features = ["std"], optional = true, version = "0.9" }

[dependencies.serenity]
version = "0.11"
Expand Down
6 changes: 5 additions & 1 deletion src/driver/connection/error.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,10 @@ pub enum Error {
/// The driver hung up an internal signaller, either due to another connection attempt
/// or a crash.
AttemptDiscarded,
/// An error occurred during [en/de]cryption of voice packets or key generation.
/// An error occurred during [en/de]cryption of voice packets.
Crypto(CryptoError),
/// The symmetric key supplied by Discord had the wrong size.
CryptoInvalidLength,
/// Server did not return the expected crypto mode during negotiation.
CryptoModeInvalid,
/// Selected crypto mode was not offered by server.
Expand Down Expand Up @@ -97,6 +99,7 @@ impl fmt::Display for Error {
match self {
Self::AttemptDiscarded => write!(f, "connection attempt was aborted/discarded"),
Self::Crypto(e) => e.fmt(f),
Self::CryptoInvalidLength => write!(f, "server supplied key of wrong length"),
Self::CryptoModeInvalid => write!(f, "server changed negotiated encryption mode"),
Self::CryptoModeUnavailable => write!(f, "server did not offer chosen encryption mode"),
Self::EndpointUrl => write!(f, "endpoint URL received from gateway was invalid"),
Expand All @@ -117,6 +120,7 @@ impl StdError for Error {
fn source(&self) -> Option<&(dyn StdError + 'static)> {
match self {
Error::AttemptDiscarded
| Error::CryptoInvalidLength
| Error::CryptoModeInvalid
| Error::CryptoModeUnavailable
| Error::EndpointUrl
Expand Down
5 changes: 3 additions & 2 deletions src/driver/connection/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ use std::{net::IpAddr, str::FromStr};
use tokio::{net::UdpSocket, spawn, time::timeout};
use tracing::{debug, info, instrument};
use url::Url;
use xsalsa20poly1305::{aead::NewAead, XSalsa20Poly1305 as Cipher};
use xsalsa20poly1305::{KeyInit, XSalsa20Poly1305 as Cipher};

pub(crate) struct Connection {
pub(crate) info: ConnectionInfo,
Expand Down Expand Up @@ -353,7 +353,8 @@ async fn init_cipher(client: &mut WsStream, mode: CryptoMode) -> Result<Cipher>
return Err(Error::CryptoModeInvalid);
}

return Ok(Cipher::new_from_slice(&desc.secret_key)?);
return Cipher::new_from_slice(&desc.secret_key)
.map_err(|_| Error::CryptoInvalidLength);
},
other => {
debug!(
Expand Down
2 changes: 1 addition & 1 deletion src/driver/crypto.rs
Original file line number Diff line number Diff line change
Expand Up @@ -254,7 +254,7 @@ impl CryptoState {
mod test {
use super::*;
use discortp::rtp::MutableRtpPacket;
use xsalsa20poly1305::{aead::NewAead, KEY_SIZE, TAG_SIZE};
use xsalsa20poly1305::{KeyInit, KEY_SIZE, TAG_SIZE};

#[test]
fn small_packet_decrypts_error() {
Expand Down
3 changes: 2 additions & 1 deletion src/events/context/data/disconnect.rs
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,8 @@ impl From<&ConnectionError> for DisconnectReason {
fn from(e: &ConnectionError) -> Self {
match e {
ConnectionError::AttemptDiscarded => Self::AttemptDiscarded,
ConnectionError::CryptoModeInvalid
ConnectionError::CryptoInvalidLength
| ConnectionError::CryptoModeInvalid
| ConnectionError::CryptoModeUnavailable
| ConnectionError::EndpointUrl
| ConnectionError::ExpectedHandshake
Expand Down

0 comments on commit 48db45f

Please sign in to comment.