feat: add comptible with 1.0
This commit is contained in:
@@ -29,7 +29,7 @@ pub struct CmdDecrypt {
|
|||||||
/// PIN
|
/// PIN
|
||||||
#[arg(long, short = 'p')]
|
#[arg(long, short = 'p')]
|
||||||
pub pin: Option<String>,
|
pub pin: Option<String>,
|
||||||
/// SLOT
|
/// Slot
|
||||||
#[arg(long, short = 's')]
|
#[arg(long, short = 's')]
|
||||||
pub slot: Option<String>,
|
pub slot: Option<String>,
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,17 +22,21 @@ use crate::wrap_key::{WrapKey, WrapKeyHeader};
|
|||||||
pub struct CmdEncrypt {
|
pub struct CmdEncrypt {
|
||||||
/// Files need to be decrypted
|
/// Files need to be decrypted
|
||||||
pub paths: Vec<PathBuf>,
|
pub paths: Vec<PathBuf>,
|
||||||
// Comment
|
/// Comment
|
||||||
#[arg(long, short = 'c')]
|
#[arg(long, short = 'c')]
|
||||||
pub comment: Option<String>,
|
pub comment: Option<String>,
|
||||||
// Comment
|
/// Encrypted comment
|
||||||
#[arg(long, short = 'C')]
|
#[arg(long, short = 'C')]
|
||||||
pub encrypted_comment: Option<String>,
|
pub encrypted_comment: Option<String>,
|
||||||
// Encryption profile
|
/// Encryption profile
|
||||||
#[arg(long, short = 'p')]
|
#[arg(long, short = 'p')]
|
||||||
pub profile: Option<String>,
|
pub profile: Option<String>,
|
||||||
|
/// Compress before encrypt
|
||||||
#[arg(long, short = 'x')]
|
#[arg(long, short = 'x')]
|
||||||
pub compress: bool,
|
pub compress: bool,
|
||||||
|
/// Compatible with 1.0
|
||||||
|
#[arg(long, short = '1')]
|
||||||
|
pub compatible_with_1_0: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn encrypt(cmd_encrypt: CmdEncrypt) -> XResult<()> {
|
pub fn encrypt(cmd_encrypt: CmdEncrypt) -> XResult<()> {
|
||||||
@@ -78,9 +82,23 @@ fn encrypt_single(path: &PathBuf, envelops: &[&TinyEncryptConfigEnvelop], cmd_en
|
|||||||
compress: cmd_encrypt.compress,
|
compress: cmd_encrypt.compress,
|
||||||
};
|
};
|
||||||
|
|
||||||
let encrypt_meta = TinyEncryptMeta::new(&file_metadata, &enc_metadata, &nonce, envelops);
|
let mut encrypt_meta = TinyEncryptMeta::new(&file_metadata, &enc_metadata, &nonce, envelops);
|
||||||
debugging!("Encrypted meta: {:?}", encrypt_meta);
|
debugging!("Encrypted meta: {:?}", encrypt_meta);
|
||||||
|
|
||||||
|
if cmd_encrypt.compatible_with_1_0 {
|
||||||
|
if let Some(envelops) = &encrypt_meta.envelops {
|
||||||
|
for envelop in envelops {
|
||||||
|
if envelop.r#type == TinyEncryptEnvelopType::Pgp {
|
||||||
|
encrypt_meta.pgp_fingerprint = Some(format!("KID:{}", envelop.kid));
|
||||||
|
encrypt_meta.pgp_envelop = Some(envelop.encrypted_key.clone());
|
||||||
|
}
|
||||||
|
if envelop.r#type == TinyEncryptEnvelopType::Ecdh {
|
||||||
|
encrypt_meta.ecdh_point = Some(format!("KID:{}", envelop.kid));
|
||||||
|
encrypt_meta.ecdh_envelop = Some(envelop.encrypted_key.clone());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
let mut file_out = File::create(&path_out)?;
|
let mut file_out = File::create(&path_out)?;
|
||||||
opt_result!(file_out.write_all(&util::TINY_ENC_MAGIC_TAG.to_be_bytes()), "Write tag failed: {}");
|
opt_result!(file_out.write_all(&util::TINY_ENC_MAGIC_TAG.to_be_bytes()), "Write tag failed: {}");
|
||||||
|
|||||||
Reference in New Issue
Block a user