diff options
author | Brian Warner <warner@lothar.com> | 2010-12-01 11:00:57 -0800 |
---|---|---|
committer | Brian Warner <warner@lothar.com> | 2010-12-01 11:00:57 -0800 |
commit | 51b219eb9bf46a6ad05b81e422a1508df5e88a6b (patch) | |
tree | 1d1d0760eb083e30164b959569241d4c9dba67db | |
parent | 9e441534ffc74a459e1ff2924d3ca84a824d7138 (diff) | |
download | ecdsa-51b219eb9bf46a6ad05b81e422a1508df5e88a6b.tar.gz |
throw error on incorrect bare SigningKey() constructor
-rw-r--r-- | ecdsa/keys.py | 12 | ||||
-rw-r--r-- | ecdsa/test_pyecdsa.py | 5 |
2 files changed, 15 insertions, 2 deletions
diff --git a/ecdsa/keys.py b/ecdsa/keys.py index 6017f2c..2ef5936 100644 --- a/ecdsa/keys.py +++ b/ecdsa/keys.py @@ -14,9 +14,13 @@ class BadDigestError(Exception): pass class VerifyingKey: + def __init__(self, _error__please_use_generate=None): + if not _error__please_use_generate: + raise TypeError("Please use SigningKey.generate() to construct me") + @classmethod def from_public_point(klass, point, curve=NIST192p): - self = klass() + self = klass(_error__please_use_generate=True) self.curve = curve self.pubkey = ecdsa.Public_key(curve.generator, point) self.pubkey.order = curve.order @@ -103,6 +107,10 @@ class VerifyingKey: raise BadSignatureError class SigningKey: + def __init__(self, _error__please_use_generate=None): + if not _error__please_use_generate: + raise TypeError("Please use SigningKey.generate() to construct me") + @classmethod def generate(klass, curve=NIST192p, entropy=None): secexp = randrange(curve.order, entropy) @@ -115,7 +123,7 @@ class SigningKey: @classmethod def from_secret_exponent(klass, secexp, curve=NIST192p): - self = klass() + self = klass(_error__please_use_generate=True) self.curve = curve self.baselen = curve.baselen n = curve.order diff --git a/ecdsa/test_pyecdsa.py b/ecdsa/test_pyecdsa.py index 34176b9..383a62a 100644 --- a/ecdsa/test_pyecdsa.py +++ b/ecdsa/test_pyecdsa.py @@ -45,6 +45,11 @@ class ECDSA(unittest.TestCase): pub2 = VerifyingKey.from_string(pub.to_string()) self.failUnless(pub2.verify(sig, data)) + def test_bad_usage(self): + # sk=SigningKey() is wrong + self.failUnlessRaises(TypeError, SigningKey) + self.failUnlessRaises(TypeError, VerifyingKey) + def test_lengths(self): default = NIST192p priv = SigningKey.generate() |