aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Kehrer <paul.l.kehrer@gmail.com>2014-10-22 09:50:33 -0700
committerPaul Kehrer <paul.l.kehrer@gmail.com>2014-10-22 09:50:33 -0700
commit60d8640bc3aa8eb48273e1df6de94607a38f8ec3 (patch)
tree2560e14673af1460fae88f4ecf34a81592e3393e
parentc6f85a721c3f38da6a3f179850a317ce238735b3 (diff)
parentf28f8eecfdbe21cd466bedb851c12fd19cf0e584 (diff)
downloadcryptography-60d8640bc3aa8eb48273e1df6de94607a38f8ec3.tar.gz
cryptography-60d8640bc3aa8eb48273e1df6de94607a38f8ec3.tar.bz2
cryptography-60d8640bc3aa8eb48273e1df6de94607a38f8ec3.zip
Merge pull request #1426 from alex/read-only-property
Added a utility for implementing a read only property of another field
-rw-r--r--cryptography/hazmat/backends/commoncrypto/ciphers.py4
-rw-r--r--cryptography/hazmat/backends/openssl/ciphers.py4
-rw-r--r--cryptography/hazmat/backends/openssl/dsa.py8
-rw-r--r--cryptography/hazmat/backends/openssl/ec.py8
-rw-r--r--cryptography/hazmat/backends/openssl/rsa.py8
-rw-r--r--cryptography/hazmat/primitives/asymmetric/dsa.py32
-rw-r--r--cryptography/hazmat/primitives/asymmetric/ec.py27
-rw-r--r--cryptography/hazmat/primitives/asymmetric/rsa.py44
-rw-r--r--cryptography/utils.py4
9 files changed, 35 insertions, 104 deletions
diff --git a/cryptography/hazmat/backends/commoncrypto/ciphers.py b/cryptography/hazmat/backends/commoncrypto/ciphers.py
index 6d3ba863..d94746c6 100644
--- a/cryptography/hazmat/backends/commoncrypto/ciphers.py
+++ b/cryptography/hazmat/backends/commoncrypto/ciphers.py
@@ -198,6 +198,4 @@ class _GCMCipherContext(object):
)
self._backend._check_cipher_response(res)
- @property
- def tag(self):
- return self._tag
+ tag = utils.read_only_property("_tag")
diff --git a/cryptography/hazmat/backends/openssl/ciphers.py b/cryptography/hazmat/backends/openssl/ciphers.py
index d37bb014..4ec2ac89 100644
--- a/cryptography/hazmat/backends/openssl/ciphers.py
+++ b/cryptography/hazmat/backends/openssl/ciphers.py
@@ -187,9 +187,7 @@ class _CipherContext(object):
)
assert res != 0
- @property
- def tag(self):
- return self._tag
+ tag = utils.read_only_property("_tag")
@utils.register_interface(interfaces.CipherContext)
diff --git a/cryptography/hazmat/backends/openssl/dsa.py b/cryptography/hazmat/backends/openssl/dsa.py
index 3fb67a5d..2298e7d9 100644
--- a/cryptography/hazmat/backends/openssl/dsa.py
+++ b/cryptography/hazmat/backends/openssl/dsa.py
@@ -129,9 +129,7 @@ class _DSAPrivateKey(object):
self._dsa_cdata = dsa_cdata
self._key_size = self._backend._lib.BN_num_bits(self._dsa_cdata.p)
- @property
- def key_size(self):
- return self._key_size
+ key_size = utils.read_only_property("_key_size")
def signer(self, algorithm):
return _DSASignatureContext(self._backend, self, algorithm)
@@ -180,9 +178,7 @@ class _DSAPublicKey(object):
self._dsa_cdata = dsa_cdata
self._key_size = self._backend._lib.BN_num_bits(self._dsa_cdata.p)
- @property
- def key_size(self):
- return self._key_size
+ key_size = utils.read_only_property("_key_size")
def verifier(self, signature, algorithm):
return _DSAVerificationContext(
diff --git a/cryptography/hazmat/backends/openssl/ec.py b/cryptography/hazmat/backends/openssl/ec.py
index 7798c3dc..13b0ddbb 100644
--- a/cryptography/hazmat/backends/openssl/ec.py
+++ b/cryptography/hazmat/backends/openssl/ec.py
@@ -146,9 +146,7 @@ class _EllipticCurvePrivateKey(object):
sn = _ec_key_curve_sn(backend, ec_key_cdata)
self._curve = _sn_to_elliptic_curve(backend, sn)
- @property
- def curve(self):
- return self._curve
+ curve = utils.read_only_property("_curve")
def signer(self, signature_algorithm):
if isinstance(signature_algorithm, ec.ECDSA):
@@ -200,9 +198,7 @@ class _EllipticCurvePublicKey(object):
sn = _ec_key_curve_sn(backend, ec_key_cdata)
self._curve = _sn_to_elliptic_curve(backend, sn)
- @property
- def curve(self):
- return self._curve
+ curve = utils.read_only_property("_curve")
def verifier(self, signature, signature_algorithm):
if isinstance(signature_algorithm, ec.ECDSA):
diff --git a/cryptography/hazmat/backends/openssl/rsa.py b/cryptography/hazmat/backends/openssl/rsa.py
index 7312fcb2..0a2a7f96 100644
--- a/cryptography/hazmat/backends/openssl/rsa.py
+++ b/cryptography/hazmat/backends/openssl/rsa.py
@@ -532,9 +532,7 @@ class _RSAPrivateKey(object):
self._key_size = self._backend._lib.BN_num_bits(self._rsa_cdata.n)
- @property
- def key_size(self):
- return self._key_size
+ key_size = utils.read_only_property("_key_size")
def signer(self, padding, algorithm):
return _RSASignatureContext(self._backend, self, padding, algorithm)
@@ -588,9 +586,7 @@ class _RSAPublicKey(object):
self._key_size = self._backend._lib.BN_num_bits(self._rsa_cdata.n)
- @property
- def key_size(self):
- return self._key_size
+ key_size = utils.read_only_property("_key_size")
def verifier(self, signature, padding, algorithm):
return _RSAVerificationContext(
diff --git a/cryptography/hazmat/primitives/asymmetric/dsa.py b/cryptography/hazmat/primitives/asymmetric/dsa.py
index 97265868..83e01377 100644
--- a/cryptography/hazmat/primitives/asymmetric/dsa.py
+++ b/cryptography/hazmat/primitives/asymmetric/dsa.py
@@ -61,17 +61,9 @@ class DSAParameterNumbers(object):
self._q = q
self._g = g
- @property
- def p(self):
- return self._p
-
- @property
- def q(self):
- return self._q
-
- @property
- def g(self):
- return self._g
+ p = utils.read_only_property("_p")
+ q = utils.read_only_property("_q")
+ g = utils.read_only_property("_g")
def parameters(self, backend):
return backend.load_dsa_parameter_numbers(self)
@@ -90,13 +82,8 @@ class DSAPublicNumbers(object):
self._y = y
self._parameter_numbers = parameter_numbers
- @property
- def y(self):
- return self._y
-
- @property
- def parameter_numbers(self):
- return self._parameter_numbers
+ y = utils.read_only_property("_y")
+ parameter_numbers = utils.read_only_property("_parameter_numbers")
def public_key(self, backend):
return backend.load_dsa_public_numbers(self)
@@ -114,13 +101,8 @@ class DSAPrivateNumbers(object):
self._public_numbers = public_numbers
self._x = x
- @property
- def x(self):
- return self._x
-
- @property
- def public_numbers(self):
- return self._public_numbers
+ x = utils.read_only_property("_x")
+ public_numbers = utils.read_only_property("_public_numbers")
def private_key(self, backend):
return backend.load_dsa_private_numbers(self)
diff --git a/cryptography/hazmat/primitives/asymmetric/ec.py b/cryptography/hazmat/primitives/asymmetric/ec.py
index 6dcf39cf..b27d0458 100644
--- a/cryptography/hazmat/primitives/asymmetric/ec.py
+++ b/cryptography/hazmat/primitives/asymmetric/ec.py
@@ -213,9 +213,7 @@ class ECDSA(object):
def __init__(self, algorithm):
self._algorithm = algorithm
- @property
- def algorithm(self):
- return self._algorithm
+ algorithm = utils.read_only_property("_algorithm")
def generate_private_key(curve, backend):
@@ -243,17 +241,9 @@ class EllipticCurvePublicNumbers(object):
except AttributeError:
return backend.elliptic_curve_public_key_from_numbers(self)
- @property
- def curve(self):
- return self._curve
-
- @property
- def x(self):
- return self._x
-
- @property
- def y(self):
- return self._y
+ curve = utils.read_only_property("_curve")
+ x = utils.read_only_property("_x")
+ y = utils.read_only_property("_y")
class EllipticCurvePrivateNumbers(object):
@@ -276,10 +266,5 @@ class EllipticCurvePrivateNumbers(object):
except AttributeError:
return backend.elliptic_curve_private_key_from_numbers(self)
- @property
- def private_value(self):
- return self._private_value
-
- @property
- def public_numbers(self):
- return self._public_numbers
+ private_value = utils.read_only_property("_private_value")
+ public_numbers = utils.read_only_property("_public_numbers")
diff --git a/cryptography/hazmat/primitives/asymmetric/rsa.py b/cryptography/hazmat/primitives/asymmetric/rsa.py
index c192811d..db38ed55 100644
--- a/cryptography/hazmat/primitives/asymmetric/rsa.py
+++ b/cryptography/hazmat/primitives/asymmetric/rsa.py
@@ -15,6 +15,7 @@ from __future__ import absolute_import, division, print_function
import six
+from cryptography import utils
from cryptography.exceptions import UnsupportedAlgorithm, _Reasons
from cryptography.hazmat.backends.interfaces import RSABackend
@@ -157,33 +158,13 @@ class RSAPrivateNumbers(object):
self._iqmp = iqmp
self._public_numbers = public_numbers
- @property
- def p(self):
- return self._p
-
- @property
- def q(self):
- return self._q
-
- @property
- def d(self):
- return self._d
-
- @property
- def dmp1(self):
- return self._dmp1
-
- @property
- def dmq1(self):
- return self._dmq1
-
- @property
- def iqmp(self):
- return self._iqmp
-
- @property
- def public_numbers(self):
- return self._public_numbers
+ p = utils.read_only_property("_p")
+ q = utils.read_only_property("_q")
+ d = utils.read_only_property("_d")
+ dmp1 = utils.read_only_property("_dmp1")
+ dmq1 = utils.read_only_property("_dmq1")
+ iqmp = utils.read_only_property("_iqmp")
+ public_numbers = utils.read_only_property("_public_numbers")
def private_key(self, backend):
return backend.load_rsa_private_numbers(self)
@@ -200,13 +181,8 @@ class RSAPublicNumbers(object):
self._e = e
self._n = n
- @property
- def e(self):
- return self._e
-
- @property
- def n(self):
- return self._n
+ e = utils.read_only_property("_e")
+ n = utils.read_only_property("_n")
def public_key(self, backend):
return backend.load_rsa_public_numbers(self)
diff --git a/cryptography/utils.py b/cryptography/utils.py
index 55187c3b..1deb3d1d 100644
--- a/cryptography/utils.py
+++ b/cryptography/utils.py
@@ -26,6 +26,10 @@ def register_interface(iface):
return register_decorator
+def read_only_property(name):
+ return property(lambda self: getattr(self, name))
+
+
def bit_length(x):
if sys.version_info >= (2, 7):
return x.bit_length()