111 lines
3.1 KiB
Python
111 lines
3.1 KiB
Python
"""Abstract class for DSA."""
|
|
|
|
class DSAKey(object):
|
|
"""This is an abstract base class for DSA keys.
|
|
|
|
Particular implementations of DSA keys, such as
|
|
:py:class:`~.python_dsakey.Python_DSAKey`
|
|
... more coming
|
|
inherit from this.
|
|
|
|
To create or parse an DSA key, don't use one of these classes
|
|
directly. Instead, use the factory functions in
|
|
:py:class:`~tlslite.utils.keyfactory`.
|
|
"""
|
|
|
|
def __init__(self, p, q, g, x, y):
|
|
"""Create a new DSA key.
|
|
:type p: int
|
|
:param p: domain parameter, prime num defining Gaolis Field
|
|
:type q: int
|
|
:param q: domain parameter, prime factor of p-1
|
|
:type g: int
|
|
:param g: domain parameter, generator of q-order cyclic group GP(p)
|
|
:type x: int
|
|
:param x: private key
|
|
:type y: int
|
|
:param y: public key
|
|
"""
|
|
raise NotImplementedError()
|
|
|
|
def __len__(self):
|
|
"""Return the size of the order of the curve of this key, in bits.
|
|
|
|
:rtype: int
|
|
"""
|
|
raise NotImplementedError()
|
|
|
|
def hasPrivateKey(self):
|
|
"""Return whether or not this key has a private component.
|
|
|
|
:rtype: bool
|
|
"""
|
|
raise NotImplementedError()
|
|
|
|
def hashAndSign(self, data, hAlg):
|
|
"""Hash and sign the passed-in bytes.
|
|
|
|
This requires the key to have a private component and
|
|
global parameters. It performs a signature on the passed-in data
|
|
with selected hash algorithm.
|
|
|
|
:type data: str
|
|
:param data: The data which will be hashed and signed.
|
|
|
|
:type hAlg: str
|
|
:param hAlg: The hash algorithm that will be used to hash data
|
|
|
|
:rtype: bytearray
|
|
:returns: An DSA signature on the passed-in data.
|
|
"""
|
|
raise NotImplementedError()
|
|
|
|
def sign(self, data):
|
|
raise NotImplementedError()
|
|
|
|
def hashAndVerify(self, signature, data, hAlg="sha1"):
|
|
"""Hash and verify the passed-in bytes with signature.
|
|
|
|
:type signature: ASN1 bytearray
|
|
:param signature: the r, s dsa signature
|
|
|
|
:type data: str
|
|
:param data: The data which will be hashed and verified.
|
|
|
|
:type hAlg: str
|
|
:param hAlg: The hash algorithm that will be used to hash data
|
|
|
|
:rtype: bool
|
|
:returns: return True if verification is OK.
|
|
"""
|
|
raise NotImplementedError()
|
|
|
|
@staticmethod
|
|
def generate(L, N):
|
|
"""Generate new key given by bit lengths L, N.
|
|
|
|
:type L: int
|
|
:param L: length of parameter p in bits
|
|
|
|
:type N: int
|
|
:param N: length of parameter q in bits
|
|
|
|
:rtype: DSAkey
|
|
:returns: DSAkey(domain parameters, private key, public key)
|
|
"""
|
|
raise NotImplementedError()
|
|
|
|
@staticmethod
|
|
def generate_qp(L, N):
|
|
"""Generate new (p, q) given by bit lengths L, N.
|
|
|
|
:type L: int
|
|
:param L: length of parameter p in bits
|
|
|
|
:type N: int
|
|
:param N: length of parameter q in bits
|
|
|
|
:rtype: (int, int)
|
|
:returns: new p and q key parameters
|
|
"""
|
|
raise NotImplementedError()
|