'Return a signature for the provided hash, using the provided
random nonce.  It is absolutely vital that random_k be an unpredictable
number in the range [1, self.public_key.point.order()-1].  If
an attacker can guess random_k, he can compute our private key from a
single signature.  Also, if an attacker knows a few high-order
bits (or a few low-order bits) of random_k, he can compute our private
key from many signatures.  The generation of nonces with adequate
cryptographic strength is very difficult and far beyond the scope
of this comment.
May raise RuntimeError, in which case retrying with a new
random value k is in order.'

def sign(self, hash, random_k):

    G = self.public_key.generator
    n = G.order()
    k = (random_k % n)
    p1 = (k * G)
    r = p1.x()
    if (r == 0):
        raise RuntimeError('amazingly    unlucky    random    number    r')
    s = ((numbertheory.inverse_mod(k, n) * (hash + ((self.secret_multiplier * r) % n))) % n)
    if (s == 0):
        raise RuntimeError('amazingly    unlucky    random    number    s')
    return Signature(r, s)
