more refactor
This commit is contained in:
@@ -36,9 +36,14 @@ pub fn best_crypto_kind() -> CryptoKind {
|
||||
VALID_CRYPTO_KINDS[0]
|
||||
}
|
||||
|
||||
/// Envelope versions in order of preference, best envelope version is the first one, worst is the last one
|
||||
// Version number of envelope format
|
||||
pub type EnvelopeVersion = u8;
|
||||
|
||||
/// Envelope versions in order of preference, best envelope version is the first one, worst is the last one
|
||||
pub const VALID_ENVELOPE_VERSIONS: [EnvelopeVersion; 1] = [0u8];
|
||||
/// Number of envelope versions to keep on structures if many are present beyond the ones we consider valid
|
||||
pub const MAX_ENVELOPE_VERSIONS: usize = 3;
|
||||
/// Return the best envelope version we support
|
||||
pub fn best_envelope_version() -> EnvelopeVersion {
|
||||
VALID_ENVELOPE_VERSIONS[0]
|
||||
}
|
||||
@@ -218,17 +223,19 @@ impl Crypto {
|
||||
node_ids: &[TypedKey],
|
||||
data: &[u8],
|
||||
typed_signatures: &[TypedSignature],
|
||||
) -> Result<(), VeilidAPIError> {
|
||||
) -> Result<Vec<CryptoKind>, VeilidAPIError> {
|
||||
let mut out = Vec::with_capacity(node_ids.len());
|
||||
for sig in typed_signatures {
|
||||
for nid in node_ids {
|
||||
if nid.kind == sig.kind {
|
||||
if let Some(vcrypto) = self.get(sig.kind) {
|
||||
vcrypto.verify(&nid.key, data, &sig.signature)?;
|
||||
out.push(nid.kind);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Ok(())
|
||||
Ok(out)
|
||||
}
|
||||
|
||||
/// Signature set generation
|
||||
|
@@ -27,6 +27,17 @@ pub fn compare_crypto_kind(a: &CryptoKind, b: &CryptoKind) -> cmp::Ordering {
|
||||
}
|
||||
}
|
||||
|
||||
/// Intersection of crypto kind vectors
|
||||
pub fn common_crypto_kinds(a: &[CryptoKind], b: &[CryptoKind]) -> Vec<CryptoKind> {
|
||||
let mut out = Vec::new();
|
||||
for ack in a {
|
||||
if b.contains(ack) {
|
||||
out.push(*ack);
|
||||
}
|
||||
}
|
||||
out
|
||||
}
|
||||
|
||||
#[derive(
|
||||
Clone,
|
||||
Copy,
|
||||
@@ -42,7 +53,7 @@ pub fn compare_crypto_kind(a: &CryptoKind, b: &CryptoKind) -> cmp::Ordering {
|
||||
RkyvSerialize,
|
||||
RkyvDeserialize,
|
||||
)]
|
||||
#[archive_attr(repr(C), derive(CheckBytes))]
|
||||
#[archive_attr(repr(C), derive(CheckBytes, Hash, PartialEq, Eq))]
|
||||
pub struct KeyPair {
|
||||
pub key: PublicKey,
|
||||
pub secret: SecretKey,
|
||||
@@ -67,7 +78,7 @@ impl KeyPair {
|
||||
RkyvSerialize,
|
||||
RkyvDeserialize,
|
||||
)]
|
||||
#[archive_attr(repr(C), derive(CheckBytes))]
|
||||
#[archive_attr(repr(C), derive(CheckBytes, Hash, PartialEq, Eq))]
|
||||
pub struct TypedKey {
|
||||
pub kind: CryptoKind,
|
||||
pub key: PublicKey,
|
||||
@@ -126,7 +137,7 @@ impl FromStr for TypedKey {
|
||||
RkyvSerialize,
|
||||
RkyvDeserialize,
|
||||
)]
|
||||
#[archive_attr(repr(C), derive(CheckBytes))]
|
||||
#[archive_attr(repr(C), derive(CheckBytes, Hash, PartialEq, Eq))]
|
||||
pub struct TypedKeySet {
|
||||
items: Vec<TypedKey>,
|
||||
}
|
||||
@@ -178,6 +189,11 @@ impl TypedKeySet {
|
||||
self.items.remove(idx);
|
||||
}
|
||||
}
|
||||
pub fn remove_all(&self, kinds: &[CryptoKind]) {
|
||||
for k in kinds {
|
||||
self.remove(*k);
|
||||
}
|
||||
}
|
||||
pub fn best(&self) -> Option<TypedKey> {
|
||||
self.items.first().copied()
|
||||
}
|
||||
@@ -255,7 +271,7 @@ impl FromStr for TypedKeySet {
|
||||
RkyvSerialize,
|
||||
RkyvDeserialize,
|
||||
)]
|
||||
#[archive_attr(repr(C), derive(CheckBytes))]
|
||||
#[archive_attr(repr(C), derive(CheckBytes, Hash, PartialEq, Eq))]
|
||||
pub struct TypedKeyPair {
|
||||
pub kind: CryptoKind,
|
||||
pub key: PublicKey,
|
||||
@@ -329,7 +345,7 @@ impl FromStr for TypedKeyPair {
|
||||
RkyvSerialize,
|
||||
RkyvDeserialize,
|
||||
)]
|
||||
#[archive_attr(repr(C), derive(CheckBytes))]
|
||||
#[archive_attr(repr(C), derive(CheckBytes, Hash, PartialEq, Eq))]
|
||||
pub struct TypedSignature {
|
||||
pub kind: CryptoKind,
|
||||
pub signature: Signature,
|
||||
@@ -399,7 +415,7 @@ impl FromStr for TypedSignature {
|
||||
RkyvSerialize,
|
||||
RkyvDeserialize,
|
||||
)]
|
||||
#[archive_attr(repr(C), derive(CheckBytes))]
|
||||
#[archive_attr(repr(C), derive(CheckBytes, Hash, PartialEq, Eq))]
|
||||
pub struct TypedKeySignature {
|
||||
pub kind: CryptoKind,
|
||||
pub key: PublicKey,
|
||||
|
Reference in New Issue
Block a user