Skip to content

Commit 212ecb0

Browse files
cursoragentlovasoa
andcommitted
feat: Use custom RSA RNG adapter for encryption
Co-authored-by: contact <[email protected]>
1 parent a206a2d commit 212ecb0

File tree

1 file changed

+28
-2
lines changed
  • sqlx-core/src/mysql/connection

1 file changed

+28
-2
lines changed

sqlx-core/src/mysql/connection/auth.rs

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,29 @@ use crate::mysql::connection::stream::MySqlStream;
1010
use crate::mysql::protocol::auth::AuthPlugin;
1111
use crate::mysql::protocol::Packet;
1212

13+
struct RandRngAdapter {
14+
rng: rand::rngs::ThreadRng,
15+
}
16+
17+
impl rsa::rand_core::RngCore for RandRngAdapter {
18+
fn next_u32(&mut self) -> u32 {
19+
use rand::RngCore;
20+
self.rng.next_u32()
21+
}
22+
23+
fn next_u64(&mut self) -> u64 {
24+
use rand::RngCore;
25+
self.rng.next_u64()
26+
}
27+
28+
fn fill_bytes(&mut self, dest: &mut [u8]) {
29+
use rand::RngCore;
30+
self.rng.fill_bytes(dest)
31+
}
32+
}
33+
34+
impl rsa::rand_core::CryptoRng for RandRngAdapter {}
35+
1336
impl AuthPlugin {
1437
pub(super) async fn scramble(
1538
self,
@@ -148,8 +171,11 @@ async fn encrypt_rsa<'s>(
148171

149172
// client sends an RSA encrypted password
150173
let pkey = parse_rsa_pub_key(rsa_pub_key)?;
151-
let padding = Oaep::new::<sha1::Sha1>();
152-
pkey.encrypt(&mut rand::thread_rng(), padding, &pass[..])
174+
let padding = Oaep::<sha1::Sha1>::new();
175+
let mut rng = RandRngAdapter {
176+
rng: rand::thread_rng(),
177+
};
178+
pkey.encrypt(&mut rng, padding, &pass[..])
153179
.map_err(Error::protocol)
154180
}
155181

0 commit comments

Comments
 (0)