Example #1
0
File: Keys.py Project: stungkit/nut
def pssVerify(buffer, signature, modulus):
    p = PKCS1_PSS.new(RSA.RsaKey(n=modulus, e=65537))

    try:
        return p.verify(SHA256.new(buffer), signature)
    except BaseException:
        return False
Example #2
0
def generate(bits, randfunc=None, e=65537):
    """allow to generate small keys for test purposes
    """

    if e % 2 == 0 or e < 3:
        raise ValueError(
            "RSA public exponent must be a positive, odd integer larger than 2."
        )

    if randfunc is None:
        randfunc = Random.get_random_bytes

    d = n = Integer(1)
    e = Integer(e)

    while n.size_in_bits() != bits and d < (1 << (bits // 2)):
        # Generate the prime factors of n: p and q.
        # By construciton, their product is always
        # 2^{bits-1} < p*q < 2^bits.
        size_q = bits // 2
        size_p = bits - size_q

        min_p = min_q = (Integer(1) << (2 * size_q - 1)).sqrt()
        if size_q != size_p:
            min_p = (Integer(1) << (2 * size_p - 1)).sqrt()

        def filter_p(candidate):
            return candidate > min_p and (candidate - 1).gcd(e) == 1

        p = generate_probable_prime(exact_bits=size_p,
                                    randfunc=randfunc,
                                    prime_filter=filter_p)

        min_distance = Integer(1) << (max(bits // 2 - 100, 10))

        def filter_q(candidate):
            return (candidate > min_q and (candidate - 1).gcd(e) == 1
                    and abs(candidate - p) > min_distance)

        q = generate_probable_prime(exact_bits=size_q,
                                    randfunc=randfunc,
                                    prime_filter=filter_q)

        n = p * q
        lcm = (p - 1).lcm(q - 1)
        d = e.inverse(lcm)

    if p > q:
        p, q = q, p

    u = p.inverse(q)

    return RSA.RsaKey(n=n, e=e, d=d, p=p, q=q, u=u)
Example #3
0
    def deepcopy(self):
        '''Deepcopy this wallet (copy.deepcopy raises Error).

        Returns:

        * Replica of this object wrt to values, not memory location etc.'''

        inst = Wallet(0, this_node=False)
        inst.balance = self.balance
        inst.utxos = object_dict_deepcopy(self.utxos)
        try:
            inst.private_key = RSA.RsaKey(n=self.private_key.n,
                                          e=self.private_key.e,
                                          d=self.private_key.d,
                                          p=self.private_key.p,
                                          q=self.private_key.q,
                                          u=self.private_key.u)
        except AttributeError:
            pass
        inst.public_key = RSA.RsaKey(n=self.public_key.n, e=self.public_key.e)
        inst.address = self.address

        return inst
Example #4
0
 def convert(self):
     parameters = (self.pub.modulus, self.pub.exponent, self.exponent,
                   self.prime1, self.prime2, self.coefficient)
     try:
         return RSA.construct(parameters, consistency_check=True)
     except ValueError as V:
         try:
             return RSA.RsaKey(
                 n=Integer(self.pub.modulus),
                 e=Integer(self.pub.exponent),
                 d=Integer(self.exponent),
                 p=Integer(self.prime1),
                 q=Integer(self.prime2),
                 u=Integer(self.coefficient),
             )
         except Exception as E:
             raise E from V
Example #5
0
def sign(msg):
    if type(msg) is not bytes:
        msg = bytes(msg, 'utf8')
    keyPair = RSA.RsaKey(
        n=
        122929120347181180506630461162876206124588624246894159983930957362668455150316050033925361228333120570604695808166534050128069551994951866012400864449036793525176147906281580860150210721340627722872013368881325479371258844614688187593034753782177752358596565495566940343979199266441125486268112082163527793027,
        e=65537,
        d=
        51635782679667624816161506479122291839735385241628788060448957989505448336137988973540355929843726591511533462854760404030556214994476897684092607183504108409464544455089663435500260307179424851133578373222765508826806957647307627850137062790848710572525309996924372417099296184433521789646380579144711982601,
        p=
        9501029443969091845314200516854049131202897408079558348265027433645537138436529678958686186818098288199208700604454521018557526124774944873478107311624843,
        q=
        12938505355881421667086993319210059247524615565536125368076469169929690129440969655350679337213760041688434152508579599794889156578802099893924345843674089,
        u=3286573208962127166795043977112753146960511781843430267174815026644571470787675370042644248296438692308614275464993081581475202509588447127488505764805156
    )
    signer = pkcs1_15.new(keyPair)
    hsh = SHA384.new()
    hsh.update(msg)
    signature = signer.sign(hsh)

    return signature
def validate_rsa2048_pss_sig(n, e, msg, sig):
    cipher = PKCS1_PSS.new(RSA.RsaKey(n=n, e=e))
    digest = SHA256.new(msg)
    return cipher.verify(digest, sig)
def validate_rsa2048_pkcs1_sig(n, e, msg, sig):
    cipher = PKCS1_v1_5.new(RSA.RsaKey(n=n, e=e))
    digest = SHA256.new(msg)  # DRM'd to use their impl
    return cipher.verify(digest, sig)
Example #8
0
#!/usr/bin/python3

from socket import *
from base64 import b64decode, b64encode
from Crypto.Util.number import bytes_to_long, long_to_bytes
from Crypto.Cipher import PKCS1_OAEP
from Crypto.PublicKey import RSA

s = socket(AF_INET, SOCK_STREAM)
s.connect(('crypto.byteband.it', 7002))
while True:
    x = s.recv(1024)
    print(x)
    x = x.split(b'\n')
    p = x[-6].split(b' ')[-1]
    n = eval(b'0x' + x[-4]) - 1
    assert n % 4 == 0
    n = n // 4

    key = RSA.RsaKey(e=65537, n=n)
    rsa = PKCS1_OAEP.new(key)
    p = rsa.encrypt(b64decode(p))
    s.send(b64encode(p) + b'\n')