X-Git-Url: http://www.git.cypherpunks.ru/?a=blobdiff_plain;f=pygost%2Fgost3410.py;h=58a20e0fe7c6a06020dc90c34e80c76ca78b0150;hb=9ab3b1d03f734f4aae28364f7a6c7c7c223b30a9;hp=a2cc7cef015507d4db84955cd4a9b9ea392adf29;hpb=f3a3246bc9da027e0527b89204e1b95ed52af5c6;p=pygost.git diff --git a/pygost/gost3410.py b/pygost/gost3410.py index a2cc7ce..58a20e0 100644 --- a/pygost/gost3410.py +++ b/pygost/gost3410.py @@ -1,6 +1,6 @@ # coding: utf-8 # PyGOST -- Pure Python GOST cryptographic functions library -# Copyright (C) 2015-2020 Sergey Matveev +# Copyright (C) 2015-2021 Sergey Matveev # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -120,7 +120,7 @@ class GOST3410Curve(object): """Compute s/t parameters for twisted Edwards curve points conversion """ if self.e is None or self.d is None: - raise ValueError("non twisted Edwards curve") + raise ValueError("Non twisted Edwards curve") if self._st is not None: return self._st self._st = ( @@ -324,10 +324,26 @@ def prv_unmarshal(prv): :param bytes prv: serialized private key :rtype: long + + It is advisable to use :py:func:`pygost.gost3410.prv_marshal` to + assure that key i in curve's Q field for better compatibility with + some implementations. """ return bytes2long(prv[::-1]) +def prv_marshal(curve, prv): + """Marshal little-endian private key + + :param GOST3410Curve curve: curve to use + :param long prv: serialized private key + :rtype: bytes + + Key is in curve's Q field. + """ + return long2bytes(prv % curve.q, point_size(prv))[::-1] + + def pub_marshal(pub): """Marshal public key