Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
TASTE
uPython-mirror
Commits
a944183b
Commit
a944183b
authored
Nov 22, 2014
by
Paul Sokolovsky
Browse files
moduhashlib: Integrate sha256 implementation.
parent
63e02e8c
Changes
1
Hide whitespace changes
Inline
Side-by-side
extmod/moduhashlib.c
View file @
a944183b
...
...
@@ -36,6 +36,8 @@
#if MICROPY_PY_UHASHLIB
#include "crypto-algorithms/sha256.h"
typedef
struct
_mp_obj_hash_t
{
mp_obj_base_t
base
;
char
state
[
0
];
...
...
@@ -45,8 +47,9 @@ STATIC mp_obj_t hash_update(mp_obj_t self_in, mp_obj_t arg);
STATIC
mp_obj_t
hash_make_new
(
mp_obj_t
type_in
,
mp_uint_t
n_args
,
mp_uint_t
n_kw
,
const
mp_obj_t
*
args
)
{
mp_arg_check_num
(
n_args
,
n_kw
,
0
,
1
,
false
);
mp_obj_hash_t
*
o
=
m_new_obj_var
(
mp_obj_hash_t
,
char
,
0
);
mp_obj_hash_t
*
o
=
m_new_obj_var
(
mp_obj_hash_t
,
char
,
sizeof
(
SHA256_CTX
)
);
o
->
base
.
type
=
type_in
;
sha256_init
((
SHA256_CTX
*
)
o
->
state
);
if
(
n_args
==
1
)
{
hash_update
(
o
,
args
[
0
]);
}
...
...
@@ -54,17 +57,31 @@ STATIC mp_obj_t hash_make_new(mp_obj_t type_in, mp_uint_t n_args, mp_uint_t n_kw
}
STATIC
mp_obj_t
hash_update
(
mp_obj_t
self_in
,
mp_obj_t
arg
)
{
mp_obj_hash_t
*
self
=
self_in
;
mp_buffer_info_t
bufinfo
;
mp_get_buffer_raise
(
arg
,
&
bufinfo
,
MP_BUFFER_READ
);
sha256_update
((
SHA256_CTX
*
)
self
->
state
,
bufinfo
.
buf
,
bufinfo
.
len
);
return
mp_const_none
;
}
MP_DEFINE_CONST_FUN_OBJ_2
(
hash_update_obj
,
hash_update
);
STATIC
mp_obj_t
hash_digest
(
mp_obj_t
self_in
)
{
return
mp_obj_new_bytes
((
const
byte
*
)
"
\0\0\0\0
"
,
4
);
mp_obj_hash_t
*
self
=
self_in
;
byte
*
hash
;
mp_obj_t
o
=
mp_obj_str_builder_start
(
&
mp_type_bytes
,
SHA256_BLOCK_SIZE
,
&
hash
);
sha256_final
((
SHA256_CTX
*
)
self
->
state
,
hash
);
return
mp_obj_str_builder_end
(
o
);
}
MP_DEFINE_CONST_FUN_OBJ_1
(
hash_digest_obj
,
hash_digest
);
STATIC
mp_obj_t
hash_hexdigest
(
mp_obj_t
self_in
)
{
return
mp_obj_new_str
(
"00000000"
,
8
,
false
);
mp_not_implemented
(
""
);
#if 0
mp_obj_hash_t *self = self_in;
byte hash[SHA256_BLOCK_SIZE];
sha256_final((SHA256_CTX*)self->state, hash);
return mp_obj_new_str((char*)hash, SHA256_BLOCK_SIZE, false);
#endif
}
MP_DEFINE_CONST_FUN_OBJ_1
(
hash_hexdigest_obj
,
hash_hexdigest
);
...
...
@@ -105,4 +122,6 @@ const mp_obj_module_t mp_module_uhashlib = {
.
globals
=
(
mp_obj_dict_t
*
)
&
mp_module_hashlib_globals
,
};
#include "crypto-algorithms/sha256.c"
#endif //MICROPY_PY_UHASHLIB
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment