diff options
author | Teddy Wing | 2018-11-05 08:30:35 +0100 |
---|---|---|
committer | Teddy Wing | 2018-11-05 16:24:53 +0100 |
commit | d064a73d6befb4119934a3e3c8b19698d9a780cd (patch) | |
tree | 570896062101eef8b49ababfabfb84fcc84e2d8f | |
parent | e4a026cd6ae29c0febd5bed380991a25d2558017 (diff) | |
download | dome-key-web-d064a73d6befb4119934a3e3c8b19698d9a780cd.tar.bz2 |
aquatic-prime: Add an rough interface and a test for `sign()`
The `sign()` method will take a `HashMap` and return a signed digest of
the map.
Replicated the test from the Ruby edition of Aquatic Prime:
https://github.com/bdrister/AquaticPrime/blob/ce892dc/Source/Ruby/lib/aquaticprime.rb
Copied the expected values in after running the script.
-rw-r--r-- | license-generator/aquatic-prime/src/lib.rs | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/license-generator/aquatic-prime/src/lib.rs b/license-generator/aquatic-prime/src/lib.rs index e69de29..4df34bc 100644 --- a/license-generator/aquatic-prime/src/lib.rs +++ b/license-generator/aquatic-prime/src/lib.rs @@ -0,0 +1,57 @@ +extern crate openssl; + +use std::collections::HashMap; + +struct AquaticPrime<'a> { + public_key: &'a str, + private_key: &'a str, +} + +impl<'a> AquaticPrime<'a> { + fn sign(&self, input_data: &HashMap<&str, &str>) -> String { + String::new() + } +} + + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn sign_produces_a_correct_signature() { + let public_key = "0xAAD0DC5705017D4AA1CD3FA194771E97B263E68308DC09D3D9297247D175CCD05DFE410B9426D3C8019BA6B92D34F21B454D8D8AC8CAD2FB37850987C02592012D658911442C27F4D9B050CFA3F7C07FF81CFEEBE33E1E43595B2ACCC2019DC7247829017A91D40020F9D8BF67300CE744263B4F34FF42E3A7BE3CF37C4004EB"; + let private_key = "0x71E092E4AE00FE31C1337FC10DA4BF0FCC4299ACB092B137E61BA185364E888AE9542B5D0D6F37DAABBD19D0C8CDF6BCD8DE5E5C85DC8CA77A58B1052AC3B6AA5C7EA2E58BD484050184D2E241CFCB1D6AB4AC8617499056060833D8F6699B9C54E3BAA36123AFD5B4DDE6F2ADFC08F6970C3BA5C80B9A0A04CB6C6B73DD512B"; + + let aquatic_prime = AquaticPrime { + public_key: public_key, + private_key: private_key, + }; + + let mut license_data = HashMap::new(); + license_data.insert("Email", "user@email.com"); + license_data.insert("Name", "User"); + + let signature = aquatic_prime.sign(&license_data); + + let expected = "Nhe6U/8XCMm7/+2OIzrHjcOsYHNZTg4k8nTajp1dTb+pU5H1cybgQzUJYA1n3IIQAbWe \ + qD7a48WFqbzC3powTk6x42b+WpH6boe+u7LW4AXo2ZqGPasVlr1/lUWVHvt5J0OI9oR7 \ + vmzdXHbbQD7RPXp0ezttrKBFHxNNCbJHMr0="; + + assert_eq!(signature, expected); + + + let mut license_data = HashMap::new(); + license_data.insert("Email", "user@email.com"); + license_data.insert("Name", "Üsér Diacriticà"); + license_data.insert("lowercase key", "Keys should be sorted case-insensitive"); + + let signature = aquatic_prime.sign(&license_data); + + let expected = "RIhF/3CgyXzPg2wCQ5LShf6W9khtqPcqUDLAHcAZdOIcoeR7PoOHi15423kxq5jOh1lm \ + cztBoUJFu8mB45MHE0jmmbRw3qK6FJz9Py2gi1XvGOgH3GW713OCvQBE7vfBj4ZriP0+ \ + FS18nLfrtM6Xp0mAd1la4DD4oh7d35dlYTY="; + + assert_eq!(signature, expected); + } +} |