Skip to content

Commit acb3e2a

Browse files
committed
First step in resolving #70
This adds a notion of a `VersionList` to `VER` and `VERS`, where before only a single `ProtocolVersion` in each. Blast radius is fairly high as the single-ProtocolVersion concept shows up in a couple of places. Follow-on PRs to: 1. enable clients to create new Requests with multiple ProtocolVersions 2. server to validate requested ProtocolVersions against its own list of supported ones
1 parent 17dd6e2 commit acb3e2a

File tree

21 files changed

+645
-271
lines changed

21 files changed

+645
-271
lines changed

Cargo.lock

Lines changed: 94 additions & 14 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ resolver = "3"
5757
members = [
5858
"crates/roughenough-client",
5959
"crates/roughenough-common",
60+
"crates/roughenough-embedded",
6061
"crates/roughenough-integration",
6162
"crates/roughenough-merkle",
6263
"crates/roughenough-protocol",
@@ -66,6 +67,7 @@ members = [
6667
default-members = [
6768
"crates/roughenough-client",
6869
"crates/roughenough-common",
70+
"crates/roughenough-embedded",
6971
"crates/roughenough-integration",
7072
"crates/roughenough-merkle",
7173
"crates/roughenough-protocol",

crates/roughenough-client/src/reporting.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ use ReportingError::HttpError;
44
use data_encoding::BASE64;
55
use roughenough_protocol::ToFrame;
66
use serde::{Deserialize, Serialize};
7-
use tracing::{error, info};
7+
use tracing::{info};
88

99
use crate::CausalityViolation;
1010
use crate::measurement::Measurement;

crates/roughenough-keys/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ mod tests {
1010
use std::time::Duration;
1111

1212
use aws_lc_rs::signature::{ED25519, UnparsedPublicKey};
13-
use roughenough_protocol::tags::Version::RfcDraft14;
13+
use roughenough_protocol::tags::ProtocolVersion::RfcDraft14;
1414
use roughenough_protocol::tags::{MerkleRoot, PublicKey, SupportedVersions};
1515
use roughenough_protocol::util::ClockSource;
1616
use roughenough_protocol::wire::ToWire;

crates/roughenough-keys/src/longterm/identity.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
use std::time::Duration;
22

33
use roughenough_protocol::ToWire;
4-
use roughenough_protocol::tags::Version::RfcDraft14;
5-
use roughenough_protocol::tags::{Certificate, Delegation, PublicKey, Signature, Version};
4+
use roughenough_protocol::tags::ProtocolVersion::RfcDraft14;
5+
use roughenough_protocol::tags::{Certificate, Delegation, ProtocolVersion, PublicKey, Signature};
66
use roughenough_protocol::util::ClockSource;
77

88
use crate::online::onlinekey::OnlineKey;
@@ -11,11 +11,11 @@ use crate::seed::SeedBackend;
1111
/// The server's long-term Ed25519 identity.
1212
pub struct LongTermIdentity {
1313
seed: Box<dyn SeedBackend>,
14-
version: Version,
14+
version: ProtocolVersion,
1515
}
1616

1717
impl LongTermIdentity {
18-
pub fn new(version: Version, seed: Box<dyn SeedBackend>) -> LongTermIdentity {
18+
pub fn new(version: ProtocolVersion, seed: Box<dyn SeedBackend>) -> LongTermIdentity {
1919
assert_eq!(seed.seed_len(), 32, "seed must be 32 bytes long");
2020

2121
LongTermIdentity { seed, version }

crates/roughenough-keys/src/online/onlinekey.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@ use aws_lc_rs::signature::{Ed25519KeyPair, KeyPair};
22
use roughenough_protocol::ToWire;
33
use roughenough_protocol::cursor::ParseCursor;
44
use roughenough_protocol::tags::{
5-
Certificate, MerkleRoot, PublicKey, Signature, SignedResponse, SupportedVersions, Version,
5+
Certificate, MerkleRoot, ProtocolVersion, PublicKey, Signature, SignedResponse,
6+
SupportedVersions,
67
};
78
use roughenough_protocol::util::ClockSource;
89

@@ -17,14 +18,14 @@ use roughenough_protocol::util::ClockSource;
1718
pub struct OnlineKey {
1819
signer: OnlineSigner,
1920
cert: Certificate,
20-
version: Version,
21+
version: ProtocolVersion,
2122
clock_source: ClockSource,
2223
template_srep: SignedResponse,
2324
signing_buf: Vec<u8>,
2425
}
2526

2627
impl OnlineKey {
27-
pub fn new(version: Version, clock_source: ClockSource) -> OnlineKey {
28+
pub fn new(version: ProtocolVersion, clock_source: ClockSource) -> OnlineKey {
2829
let mut srep = SignedResponse::default();
2930
srep.set_radi(SignedResponse::DEFAULT_RADI_SECONDS);
3031
srep.set_vers(&SupportedVersions::from([version].as_ref()));

crates/roughenough-keys/src/storage.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use roughenough_common::encoding;
2-
use tracing::{debug, error, trace};
2+
use tracing::{debug, trace};
33

44
use crate::longterm::envelope::SeedEnvelope;
55
use crate::seed::Seed;

crates/roughenough-keys/src/tests/lifecycle_tests.rs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
mod tests {
33
use std::time::Duration;
44

5-
use roughenough_protocol::tags::Version;
5+
use roughenough_protocol::tags::ProtocolVersion;
66
use roughenough_protocol::util::ClockSource;
77

88
use crate::longterm::LongTermIdentity;
@@ -31,7 +31,7 @@ mod tests {
3131
let validity_duration = Duration::from_secs(3600); // 1 hour
3232

3333
let backend = Box::new(MemoryBackend::from_random());
34-
let mut identity = LongTermIdentity::new(Version::RfcDraft14, backend);
34+
let mut identity = LongTermIdentity::new(ProtocolVersion::RfcDraft14, backend);
3535

3636
// When: An online key is created
3737
let online_key = identity.make_online_key(&clock, validity_duration);
@@ -48,7 +48,7 @@ mod tests {
4848
let validity_duration = Duration::from_secs(3600);
4949

5050
let backend = Box::new(MemoryBackend::from_random());
51-
let mut identity = LongTermIdentity::new(Version::RfcDraft14, backend);
51+
let mut identity = LongTermIdentity::new(ProtocolVersion::RfcDraft14, backend);
5252
let online_key = identity.make_online_key(&clock, validity_duration);
5353

5454
// Initially, key should not be expired
@@ -78,7 +78,7 @@ mod tests {
7878
let rotation_interval = 50u64; // Rotate every 50 seconds
7979

8080
let backend = Box::new(MemoryBackend::from_random());
81-
let mut identity = LongTermIdentity::new(Version::RfcDraft14, backend);
81+
let mut identity = LongTermIdentity::new(ProtocolVersion::RfcDraft14, backend);
8282

8383
let mut keys = Vec::new();
8484
let mut current_time = start_time;
@@ -123,7 +123,7 @@ mod tests {
123123
let validity_duration = Duration::from_secs(3600);
124124

125125
let backend = Box::new(MemoryBackend::from_random());
126-
let mut identity = LongTermIdentity::new(Version::RfcDraft14, backend);
126+
let mut identity = LongTermIdentity::new(ProtocolVersion::RfcDraft14, backend);
127127
let mut online_key = identity.make_online_key(&clock, validity_duration);
128128

129129
// Advance to 1 second before expiration
@@ -148,7 +148,7 @@ mod tests {
148148
let rotation_interval = 1800u64; // 30 minute rotation
149149

150150
let backend = Box::new(MemoryBackend::from_random());
151-
let mut identity = LongTermIdentity::new(Version::RfcDraft14, backend);
151+
let mut identity = LongTermIdentity::new(ProtocolVersion::RfcDraft14, backend);
152152

153153
// Create first key
154154
let first_key = identity.make_online_key(&clock, validity_duration);
@@ -186,15 +186,15 @@ mod tests {
186186
let validity_duration = Duration::from_secs(3600);
187187

188188
let backend = Box::new(MemoryBackend::from_random());
189-
let mut identity = LongTermIdentity::new(Version::RfcDraft14, backend);
189+
let mut identity = LongTermIdentity::new(ProtocolVersion::RfcDraft14, backend);
190190
let mut online_key = identity.make_online_key(&clock, validity_duration);
191191

192192
// Create SREP and verify it has correct properties
193193
let merkle_root = roughenough_protocol::tags::MerkleRoot::from([0x77; 32]);
194194
let (srep, _) = online_key.make_srep(&merkle_root);
195195

196196
assert_eq!(srep.midp(), start_time);
197-
assert_eq!(*srep.ver(), Version::RfcDraft14);
197+
assert_eq!(*srep.ver(), ProtocolVersion::RfcDraft14);
198198
assert_eq!(srep.root(), &merkle_root);
199199
}
200200
}

crates/roughenough-protocol/src/lib.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,13 @@
44
pub mod cursor;
55
pub mod error;
66
pub mod header;
7+
pub mod protocol_ver;
78
pub mod request;
89
pub mod response;
910
pub mod tag;
1011
pub mod tags;
1112
pub mod util;
13+
pub mod version_list;
1214
pub mod wire;
1315

1416
// Re-export commonly used types

0 commit comments

Comments
 (0)