diff options
| -rw-r--r-- | license-generator/aquatic-prime/src/lib.rs | 40 | 
1 files changed, 39 insertions, 1 deletions
| diff --git a/license-generator/aquatic-prime/src/lib.rs b/license-generator/aquatic-prime/src/lib.rs index f92ad30..80db363 100644 --- a/license-generator/aquatic-prime/src/lib.rs +++ b/license-generator/aquatic-prime/src/lib.rs @@ -2,6 +2,14 @@ extern crate openssl;  use std::collections::HashMap; +use openssl::bn::BigNum; +use openssl::hash::MessageDigest; +use openssl::rsa::Padding; +use openssl::pkey::PKey; +use openssl::rsa::RsaPrivateKeyBuilder; +use openssl::sha::sha1; +use openssl::sign::Signer; +  struct AquaticPrime<'a> {      public_key: &'a str,      private_key: &'a str, @@ -20,7 +28,37 @@ impl<'a> AquaticPrime<'a> {              .collect::<Vec<&str>>()              .concat(); -        println!("{:?}", data); +        let public_key = BigNum::from_hex_str(self.public_key).unwrap(); +        let private_key = BigNum::from_hex_str(self.private_key).unwrap(); +        let rsa_e = BigNum::from_u32(3).unwrap(); + +        if public_key.num_bits() != 1024 { +            // TODO: Return Err +        } + +        let digest = sha1(data.as_bytes()); + +        let keypair = RsaPrivateKeyBuilder::new( +            public_key, +            rsa_e, +            private_key, +        ).expect("failed to build RSA key").build(); + +        let mut signature = [0; 128]; +        keypair.private_encrypt( +            &digest, +            &mut signature, +            Padding::PKCS1, +        ).expect("failed to encrypt"); + + +        // let keypair = PKey::from_rsa(keypair).unwrap(); +        // +        // let mut signer = Signer::new(MessageDigest::sha1(), &keypair).unwrap(); +        // signer.update(data.as_bytes()); +        // let signature = signer.sign_to_vec(); + +        println!("{:?}", String::from_utf8_lossy(&signature));          String::new()      } | 
