crypto: Move the file encryption modules under a submodule.
parent
1a140ecc2f
commit
51f3d90224
|
@ -21,7 +21,6 @@ use serde::{Deserialize, Serialize};
|
|||
|
||||
use matrix_sdk_common::events::room::JsonWebKey;
|
||||
|
||||
use base64::{decode_config, encode_config, DecodeError, STANDARD_NO_PAD, URL_SAFE_NO_PAD};
|
||||
use getrandom::getrandom;
|
||||
|
||||
use aes_ctr::{
|
||||
|
@ -30,26 +29,12 @@ use aes_ctr::{
|
|||
};
|
||||
use sha2::{Digest, Sha256};
|
||||
|
||||
use super::{decode, decode_url_safe, encode, encode_url_safe};
|
||||
|
||||
const IV_SIZE: usize = 16;
|
||||
const KEY_SIZE: usize = 32;
|
||||
const VERSION: u8 = 1;
|
||||
|
||||
fn decode(input: impl AsRef<[u8]>) -> Result<Vec<u8>, DecodeError> {
|
||||
decode_config(input, STANDARD_NO_PAD)
|
||||
}
|
||||
|
||||
fn decode_url_safe(input: impl AsRef<[u8]>) -> Result<Vec<u8>, DecodeError> {
|
||||
decode_config(input, URL_SAFE_NO_PAD)
|
||||
}
|
||||
|
||||
fn encode(input: impl AsRef<[u8]>) -> String {
|
||||
encode_config(input, STANDARD_NO_PAD)
|
||||
}
|
||||
|
||||
fn encode_url_safe(input: impl AsRef<[u8]>) -> String {
|
||||
encode_config(input, URL_SAFE_NO_PAD)
|
||||
}
|
||||
|
||||
pub struct AttachmentDecryptor<'a, R: 'a + Read> {
|
||||
inner_reader: &'a mut R,
|
||||
expected_hash: Vec<u8>,
|
||||
|
@ -78,6 +63,7 @@ impl<'a, R: Read> Read for AttachmentDecryptor<'a, R> {
|
|||
|
||||
impl<'a, R: Read + 'a> AttachmentDecryptor<'a, R> {
|
||||
fn new(input: &'a mut R, info: EncryptionInfo) -> AttachmentDecryptor<'a, R> {
|
||||
// TODO check the version
|
||||
let hash = decode(info.hashes.get("sha256").unwrap()).unwrap();
|
||||
// TODO Use zeroizing here.
|
||||
let key = decode_url_safe(info.web_key.k).unwrap();
|
|
@ -16,7 +16,6 @@ use serde_json::Error as SerdeError;
|
|||
use std::io::{Cursor, Read, Seek, SeekFrom};
|
||||
use thiserror::Error;
|
||||
|
||||
use base64::{decode_config, encode_config, DecodeError, STANDARD_NO_PAD};
|
||||
use byteorder::{BigEndian, ReadBytesExt};
|
||||
use getrandom::getrandom;
|
||||
|
||||
|
@ -28,6 +27,7 @@ use hmac::{Hmac, Mac, NewMac};
|
|||
use pbkdf2::pbkdf2;
|
||||
use sha2::{Sha256, Sha512};
|
||||
|
||||
use super::{decode, encode, DecodeError};
|
||||
use crate::olm::ExportedRoomKey;
|
||||
|
||||
const SALT_SIZE: usize = 16;
|
||||
|
@ -39,14 +39,6 @@ const VERSION: u8 = 1;
|
|||
const HEADER: &str = "-----BEGIN MEGOLM SESSION DATA-----";
|
||||
const FOOTER: &str = "-----END MEGOLM SESSION DATA-----";
|
||||
|
||||
fn decode(input: impl AsRef<[u8]>) -> Result<Vec<u8>, DecodeError> {
|
||||
decode_config(input, STANDARD_NO_PAD)
|
||||
}
|
||||
|
||||
fn encode(input: impl AsRef<[u8]>) -> String {
|
||||
encode_config(input, STANDARD_NO_PAD)
|
||||
}
|
||||
|
||||
/// Error representing a failure during key export or import.
|
||||
#[derive(Error, Debug)]
|
||||
pub enum KeyExportError {
|
|
@ -0,0 +1,23 @@
|
|||
#[allow(dead_code)]
|
||||
mod attachments;
|
||||
mod key_export;
|
||||
|
||||
pub use key_export::{decrypt_key_export, encrypt_key_export};
|
||||
|
||||
use base64::{decode_config, encode_config, DecodeError, STANDARD_NO_PAD, URL_SAFE_NO_PAD};
|
||||
|
||||
fn decode(input: impl AsRef<[u8]>) -> Result<Vec<u8>, DecodeError> {
|
||||
decode_config(input, STANDARD_NO_PAD)
|
||||
}
|
||||
|
||||
fn decode_url_safe(input: impl AsRef<[u8]>) -> Result<Vec<u8>, DecodeError> {
|
||||
decode_config(input, URL_SAFE_NO_PAD)
|
||||
}
|
||||
|
||||
fn encode(input: impl AsRef<[u8]>) -> String {
|
||||
encode_config(input, STANDARD_NO_PAD)
|
||||
}
|
||||
|
||||
fn encode_url_safe(input: impl AsRef<[u8]>) -> String {
|
||||
encode_config(input, URL_SAFE_NO_PAD)
|
||||
}
|
|
@ -27,11 +27,9 @@
|
|||
)]
|
||||
#![cfg_attr(feature = "docs", feature(doc_cfg))]
|
||||
|
||||
#[allow(dead_code)]
|
||||
mod attachments;
|
||||
mod error;
|
||||
mod file_encryption;
|
||||
mod identities;
|
||||
mod key_export;
|
||||
mod machine;
|
||||
pub mod olm;
|
||||
mod requests;
|
||||
|
@ -39,10 +37,10 @@ pub mod store;
|
|||
mod verification;
|
||||
|
||||
pub use error::{MegolmError, OlmError};
|
||||
pub use file_encryption::{decrypt_key_export, encrypt_key_export};
|
||||
pub use identities::{
|
||||
Device, LocalTrust, OwnUserIdentity, ReadOnlyDevice, UserDevices, UserIdentities, UserIdentity,
|
||||
};
|
||||
pub use key_export::{decrypt_key_export, encrypt_key_export};
|
||||
pub use machine::OlmMachine;
|
||||
pub(crate) use olm::Account;
|
||||
pub use olm::EncryptionSettings;
|
||||
|
|
Loading…
Reference in New Issue