Skip to content

Commit

Permalink
feat: avoid Seek
Browse files Browse the repository at this point in the history
- integrates `LineReader` into `Base64Reader` for simpler operations
- avoid `Seek` trait in favor of `BufRead` to read ahead
- make default public apis only use `Read` as requirement
- add public apis that take `BufRead` to avoid double buffering when possible
- armor benchmarks are improved by ~~5-10%~~  1-5% 
- drop usage of `Cursor`
  • Loading branch information
dignifiedquire committed Mar 31, 2024
1 parent 93ca7d8 commit fa82b12
Show file tree
Hide file tree
Showing 24 changed files with 20,844 additions and 593 deletions.
7 changes: 3 additions & 4 deletions benches/benchmarks/key.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
use std::fs::File;
use std::io::Cursor;

use criterion::{black_box, criterion_group, Criterion};
use pgp::composed::{Deserializable, KeyType, SignedSecretKey};
Expand All @@ -24,7 +23,7 @@ fn bench_key(c: &mut Criterion) {
.unwrap();
let bytes = key.to_bytes().unwrap();

b.iter(|| black_box(SignedSecretKey::from_bytes(Cursor::new(&bytes)).unwrap()))
b.iter(|| black_box(SignedSecretKey::from_bytes(&bytes[..]).unwrap()))
});

g.bench_function("parse_armored_rsa", |b| {
Expand All @@ -33,7 +32,7 @@ fn bench_key(c: &mut Criterion) {
.unwrap();
let bytes = key.to_armored_bytes(None.into()).unwrap();

b.iter(|| black_box(SignedSecretKey::from_armor_single(Cursor::new(&bytes)).unwrap()));
b.iter(|| black_box(SignedSecretKey::from_armor_single(&bytes[..]).unwrap()));
});

g.bench_function("x25519_parse_armored", |b| {
Expand All @@ -42,7 +41,7 @@ fn bench_key(c: &mut Criterion) {
.unwrap();
let bytes = key.to_armored_bytes(None.into()).unwrap();

b.iter(|| black_box(SignedSecretKey::from_armor_single(Cursor::new(&bytes)).unwrap()));
b.iter(|| black_box(SignedSecretKey::from_armor_single(&bytes[..]).unwrap()));
});

g.bench_function("x25519_generate", |b| {
Expand Down
14 changes: 3 additions & 11 deletions benches/benchmarks/message.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
use std::fs::{self, File};
use std::io::Cursor;
use std::io::Read;

use criterion::{black_box, criterion_group, BenchmarkId, Criterion, Throughput};
Expand All @@ -21,10 +20,7 @@ fn bench_message(c: &mut Criterion) {
let mut bytes = Vec::new();
message_file.read_to_end(&mut bytes).unwrap();

b.iter(|| {
let c = Cursor::new(bytes.clone());
black_box(Message::from_armor_single(c).unwrap())
});
b.iter(|| black_box(Message::from_armor_single(&bytes[..]).unwrap()));
});

g.bench_function("parse_armored_x25519", |b| {
Expand All @@ -33,10 +29,7 @@ fn bench_message(c: &mut Criterion) {
let mut bytes = Vec::new();
message_file.read_to_end(&mut bytes).unwrap();

b.iter(|| {
let c = Cursor::new(bytes.clone());
black_box(Message::from_armor_single(c).unwrap())
});
b.iter(|| black_box(Message::from_armor_single(&bytes[..]).unwrap()));
});

g.bench_function("rsa_decrypt", |b| {
Expand All @@ -49,8 +42,7 @@ fn bench_message(c: &mut Criterion) {
let message_file = fs::read(message_file_path).unwrap();

b.iter(|| {
let (message, _headers) =
Message::from_armor_single(Cursor::new(message_file.clone())).unwrap();
let (message, _headers) = Message::from_armor_single(&message_file[..]).unwrap();

black_box(
message
Expand Down
Loading

0 comments on commit fa82b12

Please sign in to comment.