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); +    } +} | 
