33
33
#if MICROPY_PY_UHASHLIB
34
34
35
35
#include "crypto-algorithms/sha256.h"
36
+ #if MICROPY_PY_USSL
37
+ #include "lib/axtls/crypto/crypto.h"
38
+ #endif
36
39
37
40
typedef struct _mp_obj_hash_t {
38
41
mp_obj_base_t base ;
@@ -52,6 +55,21 @@ STATIC mp_obj_t hash_make_new(const mp_obj_type_t *type, size_t n_args, size_t n
52
55
return MP_OBJ_FROM_PTR (o );
53
56
}
54
57
58
+ #if MICROPY_PY_USSL
59
+ STATIC mp_obj_t sha1_update (mp_obj_t self_in , mp_obj_t arg );
60
+
61
+ STATIC mp_obj_t sha1_make_new (const mp_obj_type_t * type , size_t n_args , size_t n_kw , const mp_obj_t * args ) {
62
+ mp_arg_check_num (n_args , n_kw , 0 , 1 , false);
63
+ mp_obj_hash_t * o = m_new_obj_var (mp_obj_hash_t , char , sizeof (SHA1_CTX ));
64
+ o -> base .type = type ;
65
+ SHA1_Init ((SHA1_CTX * )o -> state );
66
+ if (n_args == 1 ) {
67
+ sha1_update (MP_OBJ_FROM_PTR (o ), args [0 ]);
68
+ }
69
+ return MP_OBJ_FROM_PTR (o );
70
+ }
71
+ #endif
72
+
55
73
STATIC mp_obj_t hash_update (mp_obj_t self_in , mp_obj_t arg ) {
56
74
mp_obj_hash_t * self = MP_OBJ_TO_PTR (self_in );
57
75
mp_buffer_info_t bufinfo ;
@@ -61,6 +79,17 @@ STATIC mp_obj_t hash_update(mp_obj_t self_in, mp_obj_t arg) {
61
79
}
62
80
MP_DEFINE_CONST_FUN_OBJ_2 (hash_update_obj , hash_update );
63
81
82
+ #if MICROPY_PY_USSL
83
+ STATIC mp_obj_t sha1_update (mp_obj_t self_in , mp_obj_t arg ) {
84
+ mp_obj_hash_t * self = MP_OBJ_TO_PTR (self_in );
85
+ mp_buffer_info_t bufinfo ;
86
+ mp_get_buffer_raise (arg , & bufinfo , MP_BUFFER_READ );
87
+ SHA1_Update ((SHA1_CTX * )self -> state , bufinfo .buf , bufinfo .len );
88
+ return mp_const_none ;
89
+ }
90
+ MP_DEFINE_CONST_FUN_OBJ_2 (sha1_update_obj , sha1_update );
91
+ #endif
92
+
64
93
STATIC mp_obj_t hash_digest (mp_obj_t self_in ) {
65
94
mp_obj_hash_t * self = MP_OBJ_TO_PTR (self_in );
66
95
vstr_t vstr ;
@@ -70,6 +99,17 @@ STATIC mp_obj_t hash_digest(mp_obj_t self_in) {
70
99
}
71
100
MP_DEFINE_CONST_FUN_OBJ_1 (hash_digest_obj , hash_digest );
72
101
102
+ #if MICROPY_PY_USSL
103
+ STATIC mp_obj_t sha1_digest (mp_obj_t self_in ) {
104
+ mp_obj_hash_t * self = MP_OBJ_TO_PTR (self_in );
105
+ vstr_t vstr ;
106
+ vstr_init_len (& vstr , SHA1_SIZE );
107
+ SHA1_Final ((byte * )vstr .buf , (SHA1_CTX * )self -> state );
108
+ return mp_obj_new_str_from_vstr (& mp_type_bytes , & vstr );
109
+ }
110
+ MP_DEFINE_CONST_FUN_OBJ_1 (sha1_digest_obj , sha1_digest );
111
+ #endif
112
+
73
113
STATIC const mp_rom_map_elem_t hash_locals_dict_table [] = {
74
114
{ MP_ROM_QSTR (MP_QSTR_update ), MP_ROM_PTR (& hash_update_obj ) },
75
115
{ MP_ROM_QSTR (MP_QSTR_digest ), MP_ROM_PTR (& hash_digest_obj ) },
@@ -84,9 +124,27 @@ STATIC const mp_obj_type_t sha256_type = {
84
124
.locals_dict = (void * )& hash_locals_dict ,
85
125
};
86
126
127
+ #if MICROPY_PY_USSL
128
+ STATIC const mp_rom_map_elem_t sha1_locals_dict_table [] = {
129
+ { MP_ROM_QSTR (MP_QSTR_update ), MP_ROM_PTR (& sha1_update_obj ) },
130
+ { MP_ROM_QSTR (MP_QSTR_digest ), MP_ROM_PTR (& sha1_digest_obj ) },
131
+ };
132
+ STATIC MP_DEFINE_CONST_DICT (sha1_locals_dict , sha1_locals_dict_table );
133
+
134
+ STATIC const mp_obj_type_t sha1_type = {
135
+ { & mp_type_type },
136
+ .name = MP_QSTR_sha1 ,
137
+ .make_new = sha1_make_new ,
138
+ .locals_dict = (void * )& sha1_locals_dict ,
139
+ };
140
+ #endif
141
+
87
142
STATIC const mp_rom_map_elem_t mp_module_hashlib_globals_table [] = {
88
143
{ MP_ROM_QSTR (MP_QSTR___name__ ), MP_ROM_QSTR (MP_QSTR_uhashlib ) },
89
144
{ MP_ROM_QSTR (MP_QSTR_sha256 ), MP_ROM_PTR (& sha256_type ) },
145
+ #if MICROPY_PY_USSL
146
+ { MP_ROM_QSTR (MP_QSTR_sha1 ), MP_ROM_PTR (& sha1_type ) },
147
+ #endif
90
148
};
91
149
92
150
STATIC MP_DEFINE_CONST_DICT (mp_module_hashlib_globals , mp_module_hashlib_globals_table );
0 commit comments