|
10 | 10 |
|
11 | 11 | use std::{fmt::Display, hash::Hash};
|
12 | 12 |
|
| 13 | +use base64::{engine, Engine}; |
13 | 14 | use smtp_proto::{
|
14 | 15 | response::generate::BitToString, EhloResponse, AUTH_CRAM_MD5, AUTH_DIGEST_MD5, AUTH_LOGIN,
|
15 | 16 | AUTH_OAUTHBEARER, AUTH_PLAIN, AUTH_XOAUTH2,
|
@@ -139,14 +140,14 @@ impl<T: AsRef<str> + PartialEq + Eq + Hash> Credentials<T> {
|
139 | 140 | }
|
140 | 141 |
|
141 | 142 | pub fn encode(&self, mechanism: u64, challenge: &str) -> crate::Result<String> {
|
142 |
| - Ok(base64::encode( |
| 143 | + Ok(engine::general_purpose::STANDARD.encode( |
143 | 144 | match (mechanism, self) {
|
144 | 145 | (AUTH_PLAIN, Credentials::Plain { username, secret }) => {
|
145 | 146 | format!("\u{0}{}\u{0}{}", username.as_ref(), secret.as_ref())
|
146 | 147 | }
|
147 | 148 |
|
148 | 149 | (AUTH_LOGIN, Credentials::Plain { username, secret }) => {
|
149 |
| - let challenge = base64::decode(challenge)?; |
| 150 | + let challenge = engine::general_purpose::STANDARD.decode(challenge)?; |
150 | 151 | let username = username.as_ref();
|
151 | 152 | let secret = secret.as_ref();
|
152 | 153 |
|
@@ -174,7 +175,7 @@ impl<T: AsRef<str> + PartialEq + Eq + Hash> Credentials<T> {
|
174 | 175 | let mut key = None;
|
175 | 176 | let mut in_quote = false;
|
176 | 177 | let mut values = std::collections::HashMap::new();
|
177 |
| - let challenge = base64::decode(challenge)?; |
| 178 | + let challenge = engine::general_purpose::STANDARD.decode(challenge)?; |
178 | 179 | let challenge_len = challenge.len();
|
179 | 180 | let username = username.as_ref();
|
180 | 181 | let secret = secret.as_ref();
|
@@ -239,7 +240,7 @@ impl<T: AsRef<str> + PartialEq + Eq + Hash> Credentials<T> {
|
239 | 240 | use rand::RngCore;
|
240 | 241 | let mut buf = [0u8; 16];
|
241 | 242 | rand::thread_rng().fill_bytes(&mut buf);
|
242 |
| - base64::encode(buf) |
| 243 | + engine::general_purpose::STANDARD.encode(buf) |
243 | 244 | };
|
244 | 245 |
|
245 | 246 | #[cfg(test)]
|
@@ -288,7 +289,8 @@ impl<T: AsRef<str> + PartialEq + Eq + Hash> Credentials<T> {
|
288 | 289 | }
|
289 | 290 | }
|
290 | 291 |
|
291 |
| - secret_ipad.extend_from_slice(&base64::decode(challenge)?); |
| 292 | + secret_ipad |
| 293 | + .extend_from_slice(&engine::general_purpose::STANDARD.decode(challenge)?); |
292 | 294 | secret_opad.extend_from_slice(&md5::compute(&secret_ipad).0);
|
293 | 295 |
|
294 | 296 | format!("{} {:x}", username, md5::compute(&secret_opad))
|
|
0 commit comments