Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
R
Rust Openssl
Manage
Activity
Members
Code
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Deploy
Model registry
Help
Help
Support
GitLab documentation
Compare GitLab plans
GitLab community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Public Repositories
Rust Openssl
Commits
fb168945
Commit
fb168945
authored
2 years ago
by
Michael Boquard
Browse files
Options
Downloads
Patches
Plain Diff
Added support for `EVP_MD_CTX_reset`
Signed-off-by:
Michael Boquard
<
michael.j.boquard@gmail.com
>
parent
0f3179b7
No related branches found
No related tags found
No related merge requests found
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
openssl-sys/src/handwritten/evp.rs
+1
-0
1 addition, 0 deletions
openssl-sys/src/handwritten/evp.rs
openssl/src/md_ctx.rs
+41
-0
41 additions, 0 deletions
openssl/src/md_ctx.rs
with
42 additions
and
0 deletions
openssl-sys/src/handwritten/evp.rs
+
1
−
0
View file @
fb168945
...
@@ -261,6 +261,7 @@ extern "C" {
...
@@ -261,6 +261,7 @@ extern "C" {
pub
fn
EVP_CIPHER_CTX_new
()
->
*
mut
EVP_CIPHER_CTX
;
pub
fn
EVP_CIPHER_CTX_new
()
->
*
mut
EVP_CIPHER_CTX
;
pub
fn
EVP_CIPHER_CTX_free
(
ctx
:
*
mut
EVP_CIPHER_CTX
);
pub
fn
EVP_CIPHER_CTX_free
(
ctx
:
*
mut
EVP_CIPHER_CTX
);
pub
fn
EVP_MD_CTX_copy_ex
(
dst
:
*
mut
EVP_MD_CTX
,
src
:
*
const
EVP_MD_CTX
)
->
c_int
;
pub
fn
EVP_MD_CTX_copy_ex
(
dst
:
*
mut
EVP_MD_CTX
,
src
:
*
const
EVP_MD_CTX
)
->
c_int
;
pub
fn
EVP_MD_CTX_reset
(
ctx
:
*
mut
EVP_MD_CTX
)
->
c_int
;
pub
fn
EVP_CIPHER_CTX_set_key_length
(
ctx
:
*
mut
EVP_CIPHER_CTX
,
keylen
:
c_int
)
->
c_int
;
pub
fn
EVP_CIPHER_CTX_set_key_length
(
ctx
:
*
mut
EVP_CIPHER_CTX
,
keylen
:
c_int
)
->
c_int
;
pub
fn
EVP_CIPHER_CTX_set_padding
(
ctx
:
*
mut
EVP_CIPHER_CTX
,
padding
:
c_int
)
->
c_int
;
pub
fn
EVP_CIPHER_CTX_set_padding
(
ctx
:
*
mut
EVP_CIPHER_CTX
,
padding
:
c_int
)
->
c_int
;
pub
fn
EVP_CIPHER_CTX_ctrl
(
pub
fn
EVP_CIPHER_CTX_ctrl
(
...
...
This diff is collapsed.
Click to expand it.
openssl/src/md_ctx.rs
+
41
−
0
View file @
fb168945
...
@@ -380,6 +380,16 @@ impl MdCtxRef {
...
@@ -380,6 +380,16 @@ impl MdCtxRef {
pub
fn
size
(
&
self
)
->
usize
{
pub
fn
size
(
&
self
)
->
usize
{
unsafe
{
ffi
::
EVP_MD_CTX_size
(
self
.as_ptr
())
as
usize
}
unsafe
{
ffi
::
EVP_MD_CTX_size
(
self
.as_ptr
())
as
usize
}
}
}
/// Resets the underlying EVP_MD_CTX instance
#[corresponds(EVP_MD_CTX_init)]
#[inline]
pub
fn
reset
(
&
self
)
->
Result
<
(),
ErrorStack
>
{
unsafe
{
let
_
=
cvt
(
ffi
::
EVP_MD_CTX_reset
(
self
.as_ptr
()))
?
;
Ok
(())
}
}
}
}
#[cfg(test)]
#[cfg(test)]
...
@@ -484,4 +494,35 @@ mod test {
...
@@ -484,4 +494,35 @@ mod test {
assert_eq!
(
Md
::
sha512
()
.size
(),
ctx
.size
());
assert_eq!
(
Md
::
sha512
()
.size
(),
ctx
.size
());
assert_eq!
(
Md
::
sha512
()
.size
(),
64
);
assert_eq!
(
Md
::
sha512
()
.size
(),
64
);
}
}
#[test]
fn
verify_md_ctx_reset
()
{
let
hello_expected
=
hex
::
decode
(
"185f8db32271fe25f561a6fc938b2e264306ec304eda518007d1764826381969"
)
.unwrap
();
let
world_expected
=
hex
::
decode
(
"78ae647dc5544d227130a0682a51e30bc7777fbb6d8a8f17007463a3ecd1d524"
)
.unwrap
();
// Calculate SHA-256 digest of "Hello"
let
mut
ctx
=
MdCtx
::
new
()
.unwrap
();
ctx
.digest_init
(
Md
::
sha256
())
.unwrap
();
ctx
.digest_update
(
b"Hello"
)
.unwrap
();
let
mut
result
=
vec!
[
0
;
32
];
let
result_len
=
ctx
.digest_final
(
result
.as_mut_slice
())
.unwrap
();
assert_eq!
(
result_len
,
result
.len
());
// Validate result of "Hello"
assert_eq!
(
result
,
hello_expected
);
// Create new context
let
mut
ctx
=
MdCtx
::
new
()
.unwrap
();
// Initialize and update to "Hello"
ctx
.digest_init
(
Md
::
sha256
())
.unwrap
();
ctx
.digest_update
(
b"Hello"
)
.unwrap
();
// Now reset, init to SHA-256 and use "World"
ctx
.reset
()
.unwrap
();
ctx
.digest_init
(
Md
::
sha256
())
.unwrap
();
ctx
.digest_update
(
b"World"
)
.unwrap
();
let
mut
reset_result
=
vec!
[
0
;
32
];
let
result_len
=
ctx
.digest_final
(
reset_result
.as_mut_slice
())
.unwrap
();
assert_eq!
(
result_len
,
reset_result
.len
());
// Validate result of digest of "World"
assert_eq!
(
reset_result
,
world_expected
);
}
}
}
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment