mirror of
https://github.com/trezor/trezor-firmware.git
synced 2024-12-27 00:28:10 +00:00
allow to call hash.digest() more than once
add block_size/digest_size fields to hash objects
This commit is contained in:
parent
21db5a6ff7
commit
4c3eb5f015
@ -48,7 +48,9 @@ STATIC mp_obj_t mod_TrezorCrypto_Ripemd160_digest(mp_obj_t self) {
|
|||||||
mp_obj_Ripemd160_t *o = MP_OBJ_TO_PTR(self);
|
mp_obj_Ripemd160_t *o = MP_OBJ_TO_PTR(self);
|
||||||
vstr_t vstr;
|
vstr_t vstr;
|
||||||
vstr_init_len(&vstr, 20); // 160 bit = 20 bytes
|
vstr_init_len(&vstr, 20); // 160 bit = 20 bytes
|
||||||
ripemd160_finish(&(o->ctx), (uint8_t *)vstr.buf);
|
RIPEMD160_CTX ctx;
|
||||||
|
memcpy(&ctx, &(o->ctx), sizeof(RIPEMD160_CTX));
|
||||||
|
ripemd160_finish(&ctx, (uint8_t *)vstr.buf);
|
||||||
return mp_obj_new_str_from_vstr(&mp_type_bytes, &vstr);
|
return mp_obj_new_str_from_vstr(&mp_type_bytes, &vstr);
|
||||||
}
|
}
|
||||||
STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_TrezorCrypto_Ripemd160_digest_obj, mod_TrezorCrypto_Ripemd160_digest);
|
STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_TrezorCrypto_Ripemd160_digest_obj, mod_TrezorCrypto_Ripemd160_digest);
|
||||||
@ -58,6 +60,8 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_TrezorCrypto_Ripemd160_digest_obj, mod_Trez
|
|||||||
STATIC const mp_rom_map_elem_t mod_TrezorCrypto_Ripemd160_locals_dict_table[] = {
|
STATIC const mp_rom_map_elem_t mod_TrezorCrypto_Ripemd160_locals_dict_table[] = {
|
||||||
{ MP_ROM_QSTR(MP_QSTR_update), MP_ROM_PTR(&mod_TrezorCrypto_Ripemd160_update_obj) },
|
{ MP_ROM_QSTR(MP_QSTR_update), MP_ROM_PTR(&mod_TrezorCrypto_Ripemd160_update_obj) },
|
||||||
{ MP_ROM_QSTR(MP_QSTR_digest), MP_ROM_PTR(&mod_TrezorCrypto_Ripemd160_digest_obj) },
|
{ MP_ROM_QSTR(MP_QSTR_digest), MP_ROM_PTR(&mod_TrezorCrypto_Ripemd160_digest_obj) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_block_size), MP_OBJ_NEW_SMALL_INT(64) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_digest_size), MP_OBJ_NEW_SMALL_INT(20) },
|
||||||
};
|
};
|
||||||
STATIC MP_DEFINE_CONST_DICT(mod_TrezorCrypto_Ripemd160_locals_dict, mod_TrezorCrypto_Ripemd160_locals_dict_table);
|
STATIC MP_DEFINE_CONST_DICT(mod_TrezorCrypto_Ripemd160_locals_dict, mod_TrezorCrypto_Ripemd160_locals_dict_table);
|
||||||
|
|
||||||
|
@ -48,7 +48,9 @@ STATIC mp_obj_t mod_TrezorCrypto_Sha256_digest(mp_obj_t self) {
|
|||||||
mp_obj_Sha256_t *o = MP_OBJ_TO_PTR(self);
|
mp_obj_Sha256_t *o = MP_OBJ_TO_PTR(self);
|
||||||
vstr_t vstr;
|
vstr_t vstr;
|
||||||
vstr_init_len(&vstr, 32); // 256 bit = 32 bytes
|
vstr_init_len(&vstr, 32); // 256 bit = 32 bytes
|
||||||
sha256_Final((uint8_t *)vstr.buf, &(o->ctx));
|
SHA256_CTX ctx;
|
||||||
|
memcpy(&ctx, &(o->ctx), sizeof(SHA256_CTX));
|
||||||
|
sha256_Final((uint8_t *)vstr.buf, &ctx);
|
||||||
return mp_obj_new_str_from_vstr(&mp_type_bytes, &vstr);
|
return mp_obj_new_str_from_vstr(&mp_type_bytes, &vstr);
|
||||||
}
|
}
|
||||||
STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_TrezorCrypto_Sha256_digest_obj, mod_TrezorCrypto_Sha256_digest);
|
STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_TrezorCrypto_Sha256_digest_obj, mod_TrezorCrypto_Sha256_digest);
|
||||||
@ -58,6 +60,8 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_TrezorCrypto_Sha256_digest_obj, mod_TrezorC
|
|||||||
STATIC const mp_rom_map_elem_t mod_TrezorCrypto_Sha256_locals_dict_table[] = {
|
STATIC const mp_rom_map_elem_t mod_TrezorCrypto_Sha256_locals_dict_table[] = {
|
||||||
{ MP_ROM_QSTR(MP_QSTR_update), MP_ROM_PTR(&mod_TrezorCrypto_Sha256_update_obj) },
|
{ MP_ROM_QSTR(MP_QSTR_update), MP_ROM_PTR(&mod_TrezorCrypto_Sha256_update_obj) },
|
||||||
{ MP_ROM_QSTR(MP_QSTR_digest), MP_ROM_PTR(&mod_TrezorCrypto_Sha256_digest_obj) },
|
{ MP_ROM_QSTR(MP_QSTR_digest), MP_ROM_PTR(&mod_TrezorCrypto_Sha256_digest_obj) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_block_size), MP_OBJ_NEW_SMALL_INT(64) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_digest_size), MP_OBJ_NEW_SMALL_INT(32) },
|
||||||
};
|
};
|
||||||
STATIC MP_DEFINE_CONST_DICT(mod_TrezorCrypto_Sha256_locals_dict, mod_TrezorCrypto_Sha256_locals_dict_table);
|
STATIC MP_DEFINE_CONST_DICT(mod_TrezorCrypto_Sha256_locals_dict, mod_TrezorCrypto_Sha256_locals_dict_table);
|
||||||
|
|
||||||
|
@ -48,7 +48,9 @@ STATIC mp_obj_t mod_TrezorCrypto_Sha512_digest(mp_obj_t self) {
|
|||||||
mp_obj_Sha512_t *o = MP_OBJ_TO_PTR(self);
|
mp_obj_Sha512_t *o = MP_OBJ_TO_PTR(self);
|
||||||
vstr_t vstr;
|
vstr_t vstr;
|
||||||
vstr_init_len(&vstr, 64); // 512 bit = 64 bytes
|
vstr_init_len(&vstr, 64); // 512 bit = 64 bytes
|
||||||
sha512_Final((uint8_t *)vstr.buf, &(o->ctx));
|
SHA512_CTX ctx;
|
||||||
|
memcpy(&ctx, &(o->ctx), sizeof(SHA512_CTX));
|
||||||
|
sha512_Final((uint8_t *)vstr.buf, &ctx);
|
||||||
return mp_obj_new_str_from_vstr(&mp_type_bytes, &vstr);
|
return mp_obj_new_str_from_vstr(&mp_type_bytes, &vstr);
|
||||||
}
|
}
|
||||||
STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_TrezorCrypto_Sha512_digest_obj, mod_TrezorCrypto_Sha512_digest);
|
STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_TrezorCrypto_Sha512_digest_obj, mod_TrezorCrypto_Sha512_digest);
|
||||||
@ -58,6 +60,8 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_TrezorCrypto_Sha512_digest_obj, mod_TrezorC
|
|||||||
STATIC const mp_rom_map_elem_t mod_TrezorCrypto_Sha512_locals_dict_table[] = {
|
STATIC const mp_rom_map_elem_t mod_TrezorCrypto_Sha512_locals_dict_table[] = {
|
||||||
{ MP_ROM_QSTR(MP_QSTR_update), MP_ROM_PTR(&mod_TrezorCrypto_Sha512_update_obj) },
|
{ MP_ROM_QSTR(MP_QSTR_update), MP_ROM_PTR(&mod_TrezorCrypto_Sha512_update_obj) },
|
||||||
{ MP_ROM_QSTR(MP_QSTR_digest), MP_ROM_PTR(&mod_TrezorCrypto_Sha512_digest_obj) },
|
{ MP_ROM_QSTR(MP_QSTR_digest), MP_ROM_PTR(&mod_TrezorCrypto_Sha512_digest_obj) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_block_size), MP_OBJ_NEW_SMALL_INT(128) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_digest_size), MP_OBJ_NEW_SMALL_INT(64) },
|
||||||
};
|
};
|
||||||
STATIC MP_DEFINE_CONST_DICT(mod_TrezorCrypto_Sha512_locals_dict, mod_TrezorCrypto_Sha512_locals_dict_table);
|
STATIC MP_DEFINE_CONST_DICT(mod_TrezorCrypto_Sha512_locals_dict, mod_TrezorCrypto_Sha512_locals_dict_table);
|
||||||
|
|
||||||
|
@ -53,5 +53,13 @@ class TestCryptoRipemd160(unittest.TestCase):
|
|||||||
x.update(b'1234567890')
|
x.update(b'1234567890')
|
||||||
self.assertEqual(x.digest(), trezor.utils.unhexlify('9b752e45573d4b39f4dbd3323cab82bf63326bfb'))
|
self.assertEqual(x.digest(), trezor.utils.unhexlify('9b752e45573d4b39f4dbd3323cab82bf63326bfb'))
|
||||||
|
|
||||||
|
def test_digest_multi(self):
|
||||||
|
x = trezor.crypto.hash.ripemd160()
|
||||||
|
d0 = x.digest()
|
||||||
|
d1 = x.digest()
|
||||||
|
d2 = x.digest()
|
||||||
|
self.assertEqual(d0, d1)
|
||||||
|
self.assertEqual(d0, d2)
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
unittest.main()
|
unittest.main()
|
||||||
|
@ -44,5 +44,13 @@ class TestCryptoSha256(unittest.TestCase):
|
|||||||
self.assertEqual(x.digest(), trezor.utils.unhexlify('50e72a0e26442fe2552dc3938ac58658228c0cbfb1d2ca872ae435266fcd055e'))
|
self.assertEqual(x.digest(), trezor.utils.unhexlify('50e72a0e26442fe2552dc3938ac58658228c0cbfb1d2ca872ae435266fcd055e'))
|
||||||
'''
|
'''
|
||||||
|
|
||||||
|
def test_digest_multi(self):
|
||||||
|
x = trezor.crypto.hash.sha256()
|
||||||
|
d0 = x.digest()
|
||||||
|
d1 = x.digest()
|
||||||
|
d2 = x.digest()
|
||||||
|
self.assertEqual(d0, d1)
|
||||||
|
self.assertEqual(d0, d2)
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
unittest.main()
|
unittest.main()
|
||||||
|
@ -44,5 +44,13 @@ class TestCryptoSha512(unittest.TestCase):
|
|||||||
self.assertEqual(x.digest(), trezor.utils.unhexlify('b47c933421ea2db149ad6e10fce6c7f93d0752380180ffd7f4629a712134831d77be6091b819ed352c2967a2e2d4fa5050723c9630691f1a05a7281dbe6c1086'))
|
self.assertEqual(x.digest(), trezor.utils.unhexlify('b47c933421ea2db149ad6e10fce6c7f93d0752380180ffd7f4629a712134831d77be6091b819ed352c2967a2e2d4fa5050723c9630691f1a05a7281dbe6c1086'))
|
||||||
'''
|
'''
|
||||||
|
|
||||||
|
def test_digest_multi(self):
|
||||||
|
x = trezor.crypto.hash.sha512()
|
||||||
|
d0 = x.digest()
|
||||||
|
d1 = x.digest()
|
||||||
|
d2 = x.digest()
|
||||||
|
self.assertEqual(d0, d1)
|
||||||
|
self.assertEqual(d0, d2)
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
unittest.main()
|
unittest.main()
|
||||||
|
Loading…
Reference in New Issue
Block a user