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
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)
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
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
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)
#!/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')