Skip to content
GitLab
Explore
Sign in
Stefan Schindler
encrypted_filesystem_storage
Compare revisions
88613225cc6df3e386af7f3c01602061cf276fbd to eb3777954ba192f4116d7ef5cb4421d5fea8e51d
Commits on Source (2)
Make the FileTag use the same 64bit wide values on all plattforms
· 899c3f22
Stefan Schindler
authored
May 29, 2023
899c3f22
Make errors when dereferencing the metadata non-panic and try to sync on SecureFileHandler::drop
· eb377795
Stefan Schindler
authored
May 29, 2023
eb377795
Hide whitespace changes
Inline
Side-by-side
aead_vfs/src/errors.rs
View file @
eb377795
...
...
@@ -22,6 +22,9 @@ pub enum CvfsErrors {
RmpEncode
(
String
),
/// A deserialisation error occured
RmpDecode
(
String
),
/// CryptoVfsInner was dropped before SecureFileHandler
CVFSAlreadyDropped
(
&
'static
str
),
}
pub
fn
specify_io_error
<
O
>
(
r
:
Result
<
O
,
std
::
io
::
Error
>
,
reason
:
&
'static
str
)
->
CvfsResult
<
O
>
{
...
...
aead_vfs/src/lib.rs
View file @
eb377795
...
...
@@ -118,7 +118,7 @@ pub struct CryptoVfsInner {
//this: Weak<Mutex<CryptoVfsInner>>,
keys
:
LiveKeys
,
metadata
:
Metadata
,
file_tag_counter
:
u
size
,
//AtomicUsize,
file_tag_counter
:
u
64
,
//AtomicUsize,
real_base_path
:
PathBuf
,
}
impl
CryptoVfsInner
{
...
...
aead_vfs/src/metadata.rs
View file @
eb377795
...
...
@@ -131,9 +131,9 @@ impl core::fmt::Debug for FileInfo {
}
#[derive(Clone,
PartialEq,
Eq,
Debug)]
pub
struct
FileTag
(
pub
(
crate
)
u
size
);
pub
struct
FileTag
(
pub
(
crate
)
u
64
);
impl
FileTag
{
pub
fn
next
(
file_tag_counter
:
&
mut
u
size
)
->
Self
{
pub
fn
next
(
file_tag_counter
:
&
mut
u
64
)
->
Self
{
//FileTag(file_tag_counter.fetch_add(1, Ordering::SeqCst))
let
id
=
file_tag_counter
.clone
();
*
file_tag_counter
+=
1
;
...
...
aead_vfs/src/secure_file.rs
View file @
eb377795
...
...
@@ -184,30 +184,27 @@ pub struct SecureFileHandler {
}
impl
SecureFileHandler
{
pub
fn
try_write
(
&
mut
self
,
buffer
:
&
[
u8
])
->
CvfsResult
<
usize
>
{
let
arc
=
self
.cvfs
.upgrade
()
.expect
(
"CryptoVfsInner was dropped before SecureFileHandler"
);
let
arc
=
self
.cvfs
.upgrade
()
.ok_or
(
CvfsErrors
::
CVFSAlreadyDropped
(
"try_write(): CryptoVfsInner was dropped before SecureFileHandler"
,
))
?
;
let
mut
cvfs
=
arc
.lock
()
.expect
(
"Metadata Mutex poisened"
);
let
file
=
cvfs
.metadata
.find_active_file
(
&
self
.id
)
?
;
Ok
(
file
.write
(
buffer
)
?
)
}
pub
fn
try_read
(
&
mut
self
,
out_buffer
:
&
mut
[
u8
])
->
CvfsResult
<
usize
>
{
let
arc
=
self
.cvfs
.upgrade
()
.expect
(
"Metadata was dropped before SecureFileHandler"
);
let
arc
=
self
.cvfs
.upgrade
()
.ok_or
(
CvfsErrors
::
CVFSAlreadyDropped
(
"try_read(): Metadata was dropped before SecureFileHandler"
,
))
?
;
let
mut
cvfs
=
arc
.lock
()
.expect
(
"CryptoVfsInner Mutex poisened"
);
let
file
=
cvfs
.metadata
.find_active_file
(
&
self
.id
)
?
;
Ok
(
file
.read
(
out_buffer
)
?
)
}
pub
fn
try_flush
(
&
mut
self
)
->
CvfsResult
<
()
>
{
let
arc
=
self
.cvfs
.upgrade
()
.expect
(
"Metadata was dropped before SecureFileHandler"
);
let
arc
=
self
.cvfs
.upgrade
()
.ok_or
(
CvfsErrors
::
CVFSAlreadyDropped
(
"try_flush(): Metadata was dropped before SecureFileHandler"
,
))
?
;
let
mut
cvfs
=
arc
.lock
()
.expect
(
"CryptoVfsInner Mutex poisened"
);
// splitting the CryptoVfsInner struct instead of the MutexGuard
let
cvfs
:
&
mut
CryptoVfsInner
=
&
mut
cvfs
;
...
...
@@ -222,10 +219,9 @@ impl SecureFileHandler {
///
/// The cursor is not changed and may be hanging over the end, use the `Seek` methods like `Seek.rewind()` for that.
pub
fn
set_len
(
&
mut
self
,
size
:
usize
)
->
CvfsResult
<
()
>
{
let
arc
=
self
.cvfs
.upgrade
()
.expect
(
"Metadata was dropped before SecureFileHandler"
);
let
arc
=
self
.cvfs
.upgrade
()
.ok_or
(
CvfsErrors
::
CVFSAlreadyDropped
(
"set_len(): Metadata was dropped before SecureFileHandler"
,
))
?
;
let
mut
cvfs
=
arc
.lock
()
.expect
(
"CryptoVfsInner Mutex poisened"
);
let
file
=
cvfs
.metadata
.find_active_file
(
&
self
.id
)
?
;
...
...
@@ -250,13 +246,8 @@ impl Read for SecureFileHandler {
}
impl
Drop
for
SecureFileHandler
{
fn
drop
(
&
mut
self
)
{
if
let
Err
(
error
)
=
self
.try_flush
()
{
if
panicking
()
{
eprintln!
(
"SecureFileHandler::drop() -> {error:?}"
);
}
else
{
panic!
(
"SecureFileHandler::drop() -> {error:?}"
);
}
}
// ignore errors since we can not do much at this point
let
_
=
self
.try_flush
();
}
}
...
...
multi_key_manager/src/lib.rs
View file @
eb377795
...
...
@@ -492,7 +492,7 @@ fn argon2_key_stream(
params
.output_len
((
256
+
128
+
128
)
/
8
)
?
;
let
argon2
=
Argon2
::
from
(
params
.params
()
?
);
let
key_stream
=
argon2
.hash_password
(
password
,
&
salt
)
?
;
let
key_stream
=
argon2
.hash_password
(
password
,
salt
)
?
;
let
output
=
key_stream
.hash
.expect
(
"unable to produce key stream"
);
assert!
(
64
<=
output
.len
(),
...
...