Chore: Update xsalsa20poly1305 -> 0.9

A few extra error types needed adding and handling due to the new `KeyInit::new_from_slice` returning a non-exported error.
This commit is contained in:
Kyle Simpson
2022-08-09 17:11:07 +01:00
parent 893dbaae34
commit 48db45ffd8
5 changed files with 12 additions and 6 deletions

View File

@@ -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"

View File

@@ -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.
@@ -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"),
@@ -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

View File

@@ -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,
@@ -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!(

View File

@@ -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() {

View File

@@ -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