From 48fa27649f1cfeb27a1beffd2d28b8a746b4c558 Mon Sep 17 00:00:00 2001 From: Brian Warner Date: Sat, 6 May 2017 01:25:23 -0700 Subject: initial sketches, help from hdevalence --- src/lib.rs | 22 ++++++++++++++++++++++ src/spake2.rs | 44 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 66 insertions(+) create mode 100644 src/lib.rs create mode 100644 src/spake2.rs (limited to 'src') diff --git a/src/lib.rs b/src/lib.rs new file mode 100644 index 0000000..abab8b1 --- /dev/null +++ b/src/lib.rs @@ -0,0 +1,22 @@ + +pub mod spake2; +//use spake2::*; + +#[cfg(test)] +mod tests { + use spake2; + #[test] + fn test_foo() { + assert_eq!(spake2::foo(), 1); + } + + #[test] + fn it_works() { + } + + #[test] + #[should_panic(expected = "nope")] + fn it_panics() { + assert!(false, "nope"); + } +} diff --git a/src/spake2.rs b/src/spake2.rs new file mode 100644 index 0000000..7d813d9 --- /dev/null +++ b/src/spake2.rs @@ -0,0 +1,44 @@ + +pub fn foo() -> u8 { + 1 +} + + +trait Group { + type Scalar; + type Element; + pub fn scalarmult(s: Scalar) -> Element; + pub fn scalar_from_integer(u8) -> Scalar; +} + + +struct SPAKE2 { + x: G::Scalar, + password: Vec, + idA: Vec, + idB: Vec, + pw: G::Scalar, +} + +impl for SPAKE2 { + pub fn new(password: &[u8], idA: &[u8], idB: &[u8]) -> SPAKE2 { + let pw: G::Scalar = hash_to_scalar::(password); + let x: G::Scalar = random_scalar::; + + let M1 G::Element = MAGIC(); + let msg1 = ... + let mut pv = Vec::new(); + pv.extend_from_slice(password); + (SPAKE2 {x: x, password: pv, ... }, msg1) + } + + pub fn finish(self, msg2: &[u8]) -> Result { + } +} + + +{ + let (mut s, msg1) = SPAKE2::(&password, &idA, &idB); + //let msg1 = s.msg1; + let key = s.finish(msg2); +} -- cgit v1.2.3