3333#include "py/binary.h"
3434#include "extmod/modubinascii.h"
3535
36+ #include "uzlib/tinf.h"
3637
3738mp_obj_t mod_binascii_hexlify (size_t n_args , const mp_obj_t * args ) {
3839 // Second argument is for an extension to allow a separator to be used
@@ -203,6 +204,15 @@ mp_obj_t mod_binascii_b2a_base64(mp_obj_t data) {
203204}
204205MP_DEFINE_CONST_FUN_OBJ_1 (mod_binascii_b2a_base64_obj , mod_binascii_b2a_base64 );
205206
207+ mp_obj_t mod_binascii_crc32 (size_t n_args , const mp_obj_t * args ) {
208+ mp_buffer_info_t bufinfo ;
209+ mp_get_buffer_raise (args [0 ], & bufinfo , MP_BUFFER_READ );
210+ uint32_t crc = (n_args > 1 ) ? mp_obj_get_int (args [1 ]) : 0 ;
211+ crc = uzlib_crc32 (bufinfo .buf , bufinfo .len , crc ^ 0xffffffff );
212+ return MP_OBJ_NEW_SMALL_INT (crc ^ 0xffffffff );
213+ }
214+ MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN (mod_binascii_crc32_obj , 1 , 2 , mod_binascii_crc32 );
215+
206216#if MICROPY_PY_UBINASCII
207217
208218STATIC const mp_rom_map_elem_t mp_module_binascii_globals_table [] = {
@@ -211,6 +221,7 @@ STATIC const mp_rom_map_elem_t mp_module_binascii_globals_table[] = {
211221 { MP_ROM_QSTR (MP_QSTR_unhexlify ), MP_ROM_PTR (& mod_binascii_unhexlify_obj ) },
212222 { MP_ROM_QSTR (MP_QSTR_a2b_base64 ), MP_ROM_PTR (& mod_binascii_a2b_base64_obj ) },
213223 { MP_ROM_QSTR (MP_QSTR_b2a_base64 ), MP_ROM_PTR (& mod_binascii_b2a_base64_obj ) },
224+ { MP_ROM_QSTR (MP_QSTR_crc32 ), MP_ROM_PTR (& mod_binascii_crc32_obj ) },
214225};
215226
216227STATIC MP_DEFINE_CONST_DICT (mp_module_binascii_globals , mp_module_binascii_globals_table );
0 commit comments