@@ -1318,6 +1318,7 @@ def sign_deterministic(
13181318 hashfunc = None ,
13191319 sigencode = sigencode_string ,
13201320 extra_entropy = b"" ,
1321+ accelerate = False ,
13211322 ):
13221323 """
13231324 Create signature over data.
@@ -1354,6 +1355,10 @@ def sign_deterministic(
13541355 number generator used in the RFC6979 process. Entirely optional.
13551356 Ignored with EdDSA.
13561357 :type extra_entropy: :term:`bytes-like object`
1358+ :param accelerate: an indicator for ECDSA sign operation to return
1359+ an ECPoint instead of a number of "r" parameter.
1360+ Applicable only for ECDSA key.
1361+ :type accelerate: boolean
13571362
13581363 :return: encoded signature over `data`
13591364 :rtype: bytes or sigencode function dependent type
@@ -1373,6 +1378,7 @@ def sign_deterministic(
13731378 sigencode = sigencode ,
13741379 extra_entropy = extra_entropy ,
13751380 allow_truncate = True ,
1381+ accelerate = accelerate ,
13761382 )
13771383
13781384 def sign_digest_deterministic (
@@ -1382,6 +1388,7 @@ def sign_digest_deterministic(
13821388 sigencode = sigencode_string ,
13831389 extra_entropy = b"" ,
13841390 allow_truncate = False ,
1391+ accelerate = False ,
13851392 ):
13861393 """
13871394 Create signature for digest using the deterministic RFC6979 algorithm.
@@ -1417,6 +1424,10 @@ def sign_digest_deterministic(
14171424 bigger bit-size than the order of the curve, the extra bits (at
14181425 the end of the digest) will be truncated. Use it when signing
14191426 SHA-384 output using NIST256p or in similar situations.
1427+ :param accelerate: an indicator for ECDSA sign operation to return
1428+ an ECPoint instead of a number of "r" parameter.
1429+ Applicable only for ECDSA key.
1430+ :type accelerate: boolean
14201431
14211432 :return: encoded signature for the `digest` hash
14221433 :rtype: bytes or sigencode function dependent type
@@ -1447,6 +1458,7 @@ def simple_r_s(r, s, order):
14471458 sigencode = simple_r_s ,
14481459 k = k ,
14491460 allow_truncate = allow_truncate ,
1461+ accelerate = accelerate ,
14501462 )
14511463 break
14521464 except RSZeroError :
@@ -1462,6 +1474,7 @@ def sign(
14621474 sigencode = sigencode_string ,
14631475 k = None ,
14641476 allow_truncate = True ,
1477+ accelerate = False ,
14651478 ):
14661479 """
14671480 Create signature over data.
@@ -1525,6 +1538,10 @@ def sign(
15251538 leak the key. Caller should try a better entropy source, retry with
15261539 different ``k``, or use the
15271540 :func:`~SigningKey.sign_deterministic` in such case.
1541+ :param accelerate: an indicator for ECDSA sign operation to return
1542+ an ECPoint instead of a number of "r" parameter.
1543+ Applicable only for ECDSA key.
1544+ :type accelerate: boolean
15281545
15291546 :return: encoded signature of the hash of `data`
15301547 :rtype: bytes or sigencode function dependent type
@@ -1534,7 +1551,9 @@ def sign(
15341551 if isinstance (self .curve .curve , CurveEdTw ):
15351552 return self .sign_deterministic (data )
15361553 h = hashfunc (data ).digest ()
1537- return self .sign_digest (h , entropy , sigencode , k , allow_truncate )
1554+ return self .sign_digest (
1555+ h , entropy , sigencode , k , allow_truncate , accelerate
1556+ )
15381557
15391558 def sign_digest (
15401559 self ,
@@ -1543,6 +1562,7 @@ def sign_digest(
15431562 sigencode = sigencode_string ,
15441563 k = None ,
15451564 allow_truncate = False ,
1565+ accelerate = False ,
15461566 ):
15471567 """
15481568 Create signature over digest using the probabilistic ECDSA algorithm.
@@ -1579,6 +1599,10 @@ def sign_digest(
15791599 leak the key. Caller should try a better entropy source, retry with
15801600 different 'k', or use the
15811601 :func:`~SigningKey.sign_digest_deterministic` in such case.
1602+ :param accelerate: an indicator for ECDSA sign operation to return
1603+ an ECPoint instead of a number of "r" parameter.
1604+ Applicable only for ECDSA key.
1605+ :type accelerate: boolean
15821606
15831607 :return: encoded signature for the `digest` hash
15841608 :rtype: bytes or sigencode function dependent type
@@ -1591,10 +1615,10 @@ def sign_digest(
15911615 self .curve ,
15921616 allow_truncate ,
15931617 )
1594- r , s = self .sign_number (number , entropy , k )
1618+ r , s = self .sign_number (number , entropy , k , accelerate )
15951619 return sigencode (r , s , self .privkey .order )
15961620
1597- def sign_number (self , number , entropy = None , k = None ):
1621+ def sign_number (self , number , entropy = None , k = None , accelerate = False ):
15981622 """
15991623 Sign an integer directly.
16001624
@@ -1613,6 +1637,10 @@ def sign_number(self, number, entropy=None, k=None):
16131637 leak the key. Caller should try a better entropy source, retry with
16141638 different 'k', or use the
16151639 :func:`~SigningKey.sign_digest_deterministic` in such case.
1640+ :param accelerate: an indicator for ECDSA sign operation to return
1641+ an ECPoint instead of a number of "r" parameter.
1642+ Applicable only for ECDSA key.
1643+ :type accelerate: boolean
16161644
16171645 :return: the "r" and "s" parameters of the signature
16181646 :rtype: tuple of ints
@@ -1627,5 +1655,5 @@ def sign_number(self, number, entropy=None, k=None):
16271655 _k = randrange (order , entropy )
16281656
16291657 assert 1 <= _k < order
1630- sig = self .privkey .sign (number , _k )
1658+ sig = self .privkey .sign (number , _k , accelerate )
16311659 return sig .r , sig .s
0 commit comments