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