Skip to content

Commit a2173c8

Browse files
authored
Audit public API to take arguments by reference where possible (#1373)
2 parents 2b19582 + 89572f7 commit a2173c8

6 files changed

Lines changed: 22 additions & 23 deletions

File tree

payjoin-cli/src/app/v2/ohttp.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ async fn fetch_ohttp_keys(
8585
payjoin::io::fetch_ohttp_keys_with_cert(
8686
selected_relay.as_str(),
8787
payjoin_directory.as_str(),
88-
cert_der,
88+
&cert_der,
8989
)
9090
.await
9191
} else {

payjoin-test-utils/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ impl TestServices {
103103
fetch_ohttp_keys_with_cert(
104104
self.ohttp_relay_url().as_str(),
105105
self.directory_url().as_str(),
106-
self.cert(),
106+
&self.cert(),
107107
)
108108
.await
109109
}

payjoin/src/core/hpke.rs

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@ impl<'de> serde::Deserialize<'de> for HpkePublicKey {
171171

172172
/// Message A is sent from the sender to the receiver containing an Original PSBT payload
173173
pub fn encrypt_message_a(
174-
body: Vec<u8>,
174+
mut body: Vec<u8>,
175175
reply_pk: &HpkePublicKey,
176176
receiver_pk: &HpkePublicKey,
177177
) -> Result<Vec<u8>, HpkeError> {
@@ -182,7 +182,6 @@ pub fn encrypt_message_a(
182182
INFO_A,
183183
&mut OsRng,
184184
)?;
185-
let mut body = body;
186185
pad_plaintext(&mut body, PADDED_PLAINTEXT_A_LENGTH)?;
187186
let mut plaintext = compressed_bytes_from_pubkey(reply_pk).to_vec();
188187
plaintext.extend(body);
@@ -194,7 +193,7 @@ pub fn encrypt_message_a(
194193

195194
pub fn decrypt_message_a(
196195
message_a: &[u8],
197-
receiver_sk: HpkeSecretKey,
196+
receiver_sk: &HpkeSecretKey,
198197
) -> Result<(Vec<u8>, HpkePublicKey), HpkeError> {
199198
use std::io::{Cursor, Read};
200199

@@ -247,7 +246,7 @@ pub fn encrypt_message_b(
247246
pub fn decrypt_message_b(
248247
message_b: &[u8],
249248
receiver_pk: HpkePublicKey,
250-
sender_sk: HpkeSecretKey,
249+
sender_sk: &HpkeSecretKey,
251250
) -> Result<Vec<u8>, HpkeError> {
252251
let enc = message_b.get(..ELLSWIFT_ENCODING_SIZE).ok_or(HpkeError::PayloadTooShort)?;
253252
let enc = encapped_key_from_ellswift_bytes(enc)?;
@@ -345,7 +344,7 @@ mod test {
345344
.expect("encryption should work");
346345
assert_eq!(message_a.len(), PADDED_MESSAGE_BYTES);
347346

348-
let decrypted = decrypt_message_a(&message_a, receiver_keypair.secret_key().clone())
347+
let decrypted = decrypt_message_a(&message_a, receiver_keypair.secret_key())
349348
.expect("decryption should work");
350349

351350
assert_eq!(decrypted.0.len(), PADDED_PLAINTEXT_A_LENGTH);
@@ -363,28 +362,28 @@ mod test {
363362
)
364363
.expect("encryption should work");
365364

366-
let decrypted = decrypt_message_a(&message_a, receiver_keypair.secret_key().clone())
365+
let decrypted = decrypt_message_a(&message_a, receiver_keypair.secret_key())
367366
.expect("decryption should work");
368367

369368
assert_eq!(decrypted.0.len(), plaintext.len());
370369
assert_eq!(decrypted, (plaintext.to_vec(), reply_keypair.public_key().clone()));
371370

372371
let unrelated_keypair = HpkeKeyPair::gen_keypair();
373372
assert_eq!(
374-
decrypt_message_a(&message_a, unrelated_keypair.secret_key().clone()),
373+
decrypt_message_a(&message_a, unrelated_keypair.secret_key()),
375374
Err(HpkeError::Hpke(hpke::HpkeError::OpenError))
376375
);
377376

378377
let mut corrupted_message_a = message_a.clone();
379378
corrupted_message_a[3] ^= 1; // corrupt dhkem
380379
assert_eq!(
381-
decrypt_message_a(&corrupted_message_a, receiver_keypair.secret_key().clone()),
380+
decrypt_message_a(&corrupted_message_a, receiver_keypair.secret_key()),
382381
Err(HpkeError::Hpke(hpke::HpkeError::OpenError))
383382
);
384383
let mut corrupted_message_a = message_a.clone();
385384
corrupted_message_a[PADDED_MESSAGE_BYTES - 3] ^= 1; // corrupt aead ciphertext
386385
assert_eq!(
387-
decrypt_message_a(&corrupted_message_a, receiver_keypair.secret_key().clone()),
386+
decrypt_message_a(&corrupted_message_a, receiver_keypair.secret_key()),
388387
Err(HpkeError::Hpke(hpke::HpkeError::OpenError))
389388
);
390389

@@ -418,7 +417,7 @@ mod test {
418417
let decrypted = decrypt_message_b(
419418
&message_b,
420419
receiver_keypair.public_key().clone(),
421-
reply_keypair.secret_key().clone(),
420+
reply_keypair.secret_key(),
422421
)
423422
.expect("decryption should work");
424423

@@ -437,7 +436,7 @@ mod test {
437436
let decrypted = decrypt_message_b(
438437
&message_b,
439438
receiver_keypair.public_key().clone(),
440-
reply_keypair.secret_key().clone(),
439+
reply_keypair.secret_key(),
441440
)
442441
.expect("decryption should work");
443442
assert_eq!(decrypted.len(), plaintext.len());
@@ -448,15 +447,15 @@ mod test {
448447
decrypt_message_b(
449448
&message_b,
450449
receiver_keypair.public_key().clone(),
451-
unrelated_keypair.secret_key().clone() // wrong decryption key
450+
unrelated_keypair.secret_key() // wrong decryption key
452451
),
453452
Err(HpkeError::Hpke(hpke::HpkeError::OpenError))
454453
);
455454
assert_eq!(
456455
decrypt_message_b(
457456
&message_b,
458457
unrelated_keypair.public_key().clone(), // wrong auth key
459-
reply_keypair.secret_key().clone()
458+
reply_keypair.secret_key()
460459
),
461460
Err(HpkeError::Hpke(hpke::HpkeError::OpenError))
462461
);
@@ -467,7 +466,7 @@ mod test {
467466
decrypt_message_b(
468467
&corrupted_message_b,
469468
receiver_keypair.public_key().clone(),
470-
reply_keypair.secret_key().clone()
469+
reply_keypair.secret_key()
471470
),
472471
Err(HpkeError::Hpke(hpke::HpkeError::OpenError))
473472
);
@@ -477,7 +476,7 @@ mod test {
477476
decrypt_message_b(
478477
&corrupted_message_b,
479478
receiver_keypair.public_key().clone(),
480-
reply_keypair.secret_key().clone()
479+
reply_keypair.secret_key()
481480
),
482481
Err(HpkeError::Hpke(hpke::HpkeError::OpenError))
483482
);

payjoin/src/core/io.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,13 +45,13 @@ pub async fn fetch_ohttp_keys(
4545
pub async fn fetch_ohttp_keys_with_cert(
4646
ohttp_relay: impl IntoUrl,
4747
payjoin_directory: impl IntoUrl,
48-
cert_der: Vec<u8>,
48+
cert_der: &[u8],
4949
) -> Result<OhttpKeys, Error> {
5050
let ohttp_keys_url = payjoin_directory.into_url()?.join("/.well-known/ohttp-gateway")?;
5151
let proxy = Proxy::all(ohttp_relay.into_url()?.as_str())?;
5252
let client = Client::builder()
5353
.use_rustls_tls()
54-
.add_root_certificate(reqwest::tls::Certificate::from_der(&cert_der)?)
54+
.add_root_certificate(reqwest::tls::Certificate::from_der(cert_der)?)
5555
.proxy(proxy)
5656
.http1_only()
5757
.build()?;

payjoin/src/core/receive/v2/mod.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -473,7 +473,7 @@ impl Receiver<Initialized> {
473473
response: Vec<u8>,
474474
) -> Result<(OriginalPayload, HpkePublicKey), ProtocolError> {
475475
let (payload_bytes, reply_key) =
476-
decrypt_message_a(&response, self.session_context.receiver_key.secret_key().clone())
476+
decrypt_message_a(&response, self.session_context.receiver_key.secret_key())
477477
.map_err(|e| ProtocolError::V2(InternalSessionError::Hpke(e).into()))?;
478478
let payload = std::str::from_utf8(&payload_bytes)
479479
.map_err(|e| ProtocolError::OriginalPayload(InternalPayloadError::Utf8(e).into()))?;
@@ -1187,7 +1187,7 @@ impl Receiver<HasReplyableError> {
11871187
let body = {
11881188
if let Some(reply_key) = &session_context.reply_key {
11891189
encrypt_message_b(
1190-
self.error_reply.to_json().to_string().as_bytes().to_vec(),
1190+
self.error_reply.to_json().to_string().into_bytes(),
11911191
&session_context.receiver_key,
11921192
reply_key,
11931193
)

payjoin/src/core/send/v2/mod.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -377,7 +377,7 @@ pub(crate) fn extract_request(
377377
) -> Result<(Request, ClientResponse), CreateRequestError> {
378378
let body = encrypt_message_a(
379379
body,
380-
&HpkeKeyPair::from_secret_key(&session_context.reply_key).public_key().clone(),
380+
HpkeKeyPair::from_secret_key(&session_context.reply_key).public_key(),
381381
session_context.pj_param.receiver_pubkey(),
382382
)
383383
.map_err(InternalCreateRequestError::Hpke)?;
@@ -495,7 +495,7 @@ impl Sender<PollingForProposal> {
495495
let body = match decrypt_message_b(
496496
&body,
497497
self.session_context.pj_param.receiver_pubkey().clone(),
498-
self.session_context.reply_key.clone(),
498+
&self.session_context.reply_key,
499499
) {
500500
Ok(body) => body,
501501
Err(e) =>

0 commit comments

Comments
 (0)