RSA custom seed

This commit is contained in:
Yann Autissier 2022-05-29 21:51:44 +02:00
parent 5bab667215
commit 92ae485077
1 changed files with 9 additions and 3 deletions

12
gpgkey
View File

@ -33,6 +33,7 @@ from cryptography.hazmat.primitives import serialization
import duniterpy.key import duniterpy.key
import gpg import gpg
import nacl.bindings import nacl.bindings
import nacl.encoding
import pgpy import pgpy
import logging as log import logging as log
import os import os
@ -278,16 +279,21 @@ PrivKEY: {self.ipfs_privkey}
log.debug("def gpgkey.pgpy_key_seed(self)") log.debug("def gpgkey.pgpy_key_seed(self)")
self.pgpy_key_type() self.pgpy_key_type()
# todo : unlock password protected key # todo : unlock password protected key
# todo : choose a custom seed for RSA # assert self.pgpy.is_unlocked
assert self.pgpy.is_unlocked if self.pgpy_key_type == 'RSA':
if self.pgpy_key_type == 'RSA.disabled': log.debug("self.pgpy._key.keymaterial.p=%s" % self.pgpy._key.keymaterial.p)
log.debug("self.pgpy._key.keymaterial.q=%s" % self.pgpy._key.keymaterial.q)
# custom seed: use sha256 hash of (p + q)
self.pgpy_key_seed = nacl.bindings.crypto_hash_sha256(long_to_bytes(self.pgpy._key.keymaterial.p + self.pgpy._key.keymaterial.q))
p = long_to_bytes(self.pgpy._key.keymaterial.p) p = long_to_bytes(self.pgpy._key.keymaterial.p)
q = long_to_bytes(self.pgpy._key.keymaterial.q) q = long_to_bytes(self.pgpy._key.keymaterial.q)
self.pgpy_key_value = "".join([f"{c:02x}" for c in p]) + "".join([f"{c:02x}" for c in q]) self.pgpy_key_value = "".join([f"{c:02x}" for c in p]) + "".join([f"{c:02x}" for c in q])
self.pgpy_key_size = (len(p) + len(q)) * 8 self.pgpy_key_size = (len(p) + len(q)) * 8
log.debug("self.pgpy_key_seed=%s" % self.pgpy_key_seed)
log.debug("self.pgpy_key_value=%s" % self.pgpy_key_value) log.debug("self.pgpy_key_value=%s" % self.pgpy_key_value)
log.debug("self.pgpy_key_size=%s" % self.pgpy_key_size) log.debug("self.pgpy_key_size=%s" % self.pgpy_key_size)
elif self.pgpy_key_type in ('ECDSA', 'EdDSA', 'ECDH'): elif self.pgpy_key_type in ('ECDSA', 'EdDSA', 'ECDH'):
log.debug("self.pgpy._key.keymaterial.s=%s" % self.pgpy._key.keymaterial.s)
self.pgpy_key_seed = long_to_bytes(self.pgpy._key.keymaterial.s) self.pgpy_key_seed = long_to_bytes(self.pgpy._key.keymaterial.s)
self.pgpy_key_value = "".join([f"{c:02x}" for c in self.pgpy_key_seed]) self.pgpy_key_value = "".join([f"{c:02x}" for c in self.pgpy_key_seed])
self.pgpy_key_size = len(self.pgpy_key_seed)*8 self.pgpy_key_size = len(self.pgpy_key_seed)*8