Browse Source

Move all AES GCM crypto to OpenSSL crate

timvisee 7 years ago
parent
commit
c3f54c58b4
1 changed files with 17 additions and 14 deletions
  1. 17 14
      src/main.rs

+ 17 - 14
src/main.rs

@@ -17,9 +17,6 @@ use std::io::{self, BufReader, Cursor, Read};
 use std::path::Path;
 
 use clap::{App, Arg};
-use crypto::aead::AeadEncryptor;
-use crypto::aes::KeySize;
-use crypto::aes_gcm::AesGcm;
 use crypto::digest::Digest;
 use crypto::hkdf::{hkdf_extract, hkdf_expand};
 use crypto::sha2::Sha256;
@@ -28,6 +25,7 @@ use mime_guess::Mime;
 use openssl::symm::{
     Cipher,
     Crypter,
+    encrypt_aead,
     Mode as CrypterMode,
 };
 use rand::{Rng, thread_rng};
@@ -83,24 +81,29 @@ fn main() {
     let auth_key = derive_auth_key(&secret, None, None);
     let meta_key = derive_meta_key(&secret);
 
-    // Choose a file and meta cipher type
-    let cipher = Cipher::aes_128_gcm();
-
-    // Generate a meta cipher
-    let mut meta_cipher = AesGcm::new(KeySize::KeySize128, &meta_key, &[0u8; 12], b"");
-
     // Guess the mimetype of the file
     let file_mime = mime_guess::get_mime_type(file_ext);
 
     // Construct the metadata
     let metadata = Metadata::from(&iv, file_name.clone(), file_mime);
 
-    // Encrypt the metadata, append the tag
+    // Convert the metadata to JSON bytes
     let metadata = metadata.to_json().into_bytes();
+
+    // Choose a file and meta cipher type
+    let cipher = Cipher::aes_128_gcm();
+
+    // Encrypt the metadata, and append the tag to it
     let mut metadata_tag = vec![0u8; 16];
-    let mut metadata_encrypted = vec![0u8; metadata.len()];
-    meta_cipher.encrypt(&metadata, &mut metadata_encrypted, &mut metadata_tag);
-    metadata_encrypted.append(&mut metadata_tag);
+    let mut metadata = encrypt_aead(
+        cipher,
+        &meta_key,
+        Some(&[0u8; 12]),
+        &[],
+        &metadata,
+        &mut metadata_tag,
+    ).unwrap();
+    metadata.append(&mut metadata_tag);
 
     // Open the file and create an encrypted file reader
     let file = File::open(path).unwrap();
@@ -124,7 +127,7 @@ fn main() {
     // Make the request
     let mut res = client.post("http://localhost:8080/api/upload")
         .header(Authorization(format!("send-v1 {}", base64_encode(&auth_key))))
-        .header(XFileMetadata::from(&metadata_encrypted))
+        .header(XFileMetadata::from(&metadata))
         .multipart(form)
         .send()
         .unwrap();