def __eq__(self, other): if isinstance(other, PrivateKey): return (
self.curve == other.curve and self.__private_key == other.__private_key
) return NotImplemented
def __ne__(self, other): returnnot self == other
def _key_prune(self, key): # make sure the key is not in a small subgroup
h = self.curve.cofactor() if h == 4:
h_log = 2 elif h == 8:
h_log = 3 else: raise ValueError("Only cofactor 4 and 8 curves supported")
key[0] &= ~((1 << h_log) - 1)
# ensure the highest bit is set but no higher
l = bit_length(self.curve.p()) if l % 8 == 0:
key[-1] = 0
key[-2] |= 0x80 else:
key[-1] = key[-1] & (1 << (l % 8)) - 1 | 1 << (l % 8) - 1 return key
def public_key(self): """Generate the public key based on the included private key""" if self.__public_key: return self.__public_key
def sign(self, data): """Perform a Pure EdDSA signature over data."""
data = compat26_str(data)
A = self.public_key().public_key()
prefix = self.__h[self.baselen :]
dom = bytearray() if self.curve == curve_ed448:
dom = bytearray(b"SigEd448" + b"\x00\x00")
r = bytes_to_int(self.curve.hash_func(dom + prefix + data), "little")
R = (self.generator * r).to_bytes()
k = bytes_to_int(self.curve.hash_func(dom + R + A + data), "little")
k %= self.generator.order()
S = (r + k * self.__s) % self.generator.order()
return R + int_to_bytes(S, self.baselen, "little")
Messung V0.5 in Prozent
¤ Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.0.7Bemerkung:
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.