// Copyright (C) Microsoft Corporation. All rights reserved.

use crate::error::Error;
use openssl::symm::decrypt_aead;
use openssl::symm::encrypt_aead;
use openssl::symm::Cipher;

pub fn vmgs_encrypt(key: &[u8], iv: &[u8], data: &[u8], tag: &mut [u8]) -> Result<Vec<u8>, Error> {
    encrypt_aead(Cipher::aes_256_gcm(), key, Some(iv), &[], data, tag)
        .map_err(|e| Error::OpenSSL(e, String::from("write_encrypted_data")))
}

pub fn vmgs_decrypt(key: &[u8], iv: &[u8], data: &[u8], tag: &[u8]) -> Result<Vec<u8>, Error> {
    decrypt_aead(Cipher::aes_256_gcm(), key, Some(iv), &[], data, tag)
        .map_err(|e| Error::OpenSSL(e, String::from("read_decrypted_data")))
}
