我们从Python开源项目中,提取了以下50个代码示例,用于说明如何使用Crypto.PublicKey.RSA.construct()。
def testEncrypt1(self): # Verify encryption using all test vectors for test in self._testData: # Build the key comps = [ long(rws(test[0][x]),16) for x in ('n','e') ] key = RSA.construct(comps) # RNG that takes its random numbers from a pool given # at initialization class randGen: def __init__(self, data): self.data = data self.idx = 0 def __call__(self, N): r = self.data[self.idx:N] self.idx += N return r # The real test key._randfunc = randGen(t2b(test[3])) cipher = PKCS.new(key, test[4]) ct = cipher.encrypt(t2b(test[1])) self.assertEqual(ct, t2b(test[2]))
def testSign1(self): for i in range(len(self._testData)): row = self._testData[i] # Build the key if isStr(row[0]): key = RSA.importKey(row[0]) else: comps = [ long(rws(row[0][x]),16) for x in ('n','e','d') ] key = RSA.construct(comps) h = row[3].new() # Data to sign can either be in hex form or not try: h.update(t2b(row[1])) except: h.update(b(row[1])) # The real test signer = PKCS.new(key) self.failUnless(signer.can_sign()) s = signer.sign(h) self.assertEqual(s, t2b(row[2]))
def testVerify1(self): for i in range(len(self._testData)): row = self._testData[i] # Build the key if isStr(row[0]): key = RSA.importKey(row[0]).publickey() else: comps = [ long(rws(row[0][x]),16) for x in ('n','e') ] key = RSA.construct(comps) h = row[3].new() # Data to sign can either be in hex form or not try: h.update(t2b(row[1])) except: h.update(b(row[1])) # The real test verifier = PKCS.new(key) self.failIf(verifier.can_sign()) result = verifier.verify(h, t2b(row[2])) self.failUnless(result)
def testSign1(self): for i in range(len(self._testData)): # Build the key comps = [ long(rws(self._testData[i][0][x]),16) for x in ('n','e','d') ] key = MyKey(RSA.construct(comps)) # Hash function h = self._testData[i][4].new() # Data to sign h.update(t2b(self._testData[i][1])) # Salt test_salt = t2b(self._testData[i][3]) key._randfunc = lambda N: test_salt # The real test signer = PKCS.new(key) self.failUnless(signer.can_sign()) s = signer.sign(h) self.assertEqual(s, t2b(self._testData[i][2]))
def getPublicKeyObject(data): """ Return a C{Crypto.PublicKey.pubkey.pubkey} corresponding to the SSHv2 public key data. data is in the over-the-wire public key format. @type data: C{str} @rtype: C{Crypto.PublicKey.pubkey.pubkey} """ keyKind, rest = common.getNS(data) if keyKind == 'ssh-rsa': e, rest = common.getMP(rest) n, rest = common.getMP(rest) return RSA.construct((n, e)) elif keyKind == 'ssh-dss': p, rest = common.getMP(rest) q, rest = common.getMP(rest) g, rest = common.getMP(rest) y, rest = common.getMP(rest) return DSA.construct((y, g, p, q)) else: raise BadKeyError('unknown key type %s' % keyKind)
def getPrivateKeyObject_lsh(data, passphrase): #assert passphrase == '' data = ''.join(data) sexp = sexpy.parse(data) assert sexp[0] == 'private-key' kd = {} for name, data in sexp[1][1:]: kd[name] = common.getMP(common.NS(data))[0] if sexp[1][0] == 'dsa': assert len(kd) == 5, len(kd) return DSA.construct((kd['y'], kd['g'], kd['p'], kd['q'], kd['x'])) elif sexp[1][0] == 'rsa-pkcs1': assert len(kd) == 8, len(kd) return RSA.construct((kd['n'], kd['e'], kd['d'], kd['p'], kd['q'])) else: raise BadKeyError('unknown lsh key type %s' % sexp[1][0])
def getPrivateKeyObject_agentv3(data, passphrase): if passphrase: raise BadKeyError("agent v3 key should not be encrypted") keyType, data = common.getNS(data) if keyType == 'ssh-dss': p, data = common.getMP(data) q, data = common.getMP(data) g, data = common.getMP(data) y, data = common.getMP(data) x, data = common.getMP(data) return DSA.construct((y,g,p,q,x)) elif keyType == 'ssh-rsa': e, data = common.getMP(data) d, data = common.getMP(data) n, data = common.getMP(data) u, data = common.getMP(data) p, data = common.getMP(data) q, data = common.getMP(data) return RSA.construct((n,e,d,p,q,u)) else: raise BadKeyError("unknown key type %s" % keyType)
def testEncrypt1(self): # Verify encryption using all test vectors for test in self._testData: # Build the key comps = [ int(rws(test[0][x]),16) for x in ('n','e') ] key = RSA.construct(comps) # RNG that takes its random numbers from a pool given # at initialization class randGen: def __init__(self, data): self.data = data self.idx = 0 def __call__(self, N): r = self.data[self.idx:N] self.idx += N return r # The real test key._randfunc = randGen(t2b(test[3])) cipher = PKCS.new(key, test[4]) ct = cipher.encrypt(t2b(test[1])) self.assertEqual(ct, t2b(test[2]))
def testSign1(self): for i in range(len(self._testData)): row = self._testData[i] # Build the key if isStr(row[0]): key = RSA.importKey(row[0]) else: comps = [ int(rws(row[0][x]),16) for x in ('n','e','d') ] key = RSA.construct(comps) h = row[3].new() # Data to sign can either be in hex form or not try: h.update(t2b(row[1])) except: h.update(b(row[1])) # The real test signer = PKCS.new(key) self.failUnless(signer.can_sign()) s = signer.sign(h) self.assertEqual(s, t2b(row[2]))
def testVerify1(self): for i in range(len(self._testData)): row = self._testData[i] # Build the key if isStr(row[0]): key = RSA.importKey(row[0]).publickey() else: comps = [ int(rws(row[0][x]),16) for x in ('n','e') ] key = RSA.construct(comps) h = row[3].new() # Data to sign can either be in hex form or not try: h.update(t2b(row[1])) except: h.update(b(row[1])) # The real test verifier = PKCS.new(key) self.failIf(verifier.can_sign()) result = verifier.verify(h, t2b(row[2])) self.failUnless(result)
def testSign1(self): for i in range(len(self._testData)): # Build the key comps = [ int(rws(self._testData[i][0][x]),16) for x in ('n','e','d') ] key = MyKey(RSA.construct(comps)) # Hash function h = self._testData[i][4].new() # Data to sign h.update(t2b(self._testData[i][1])) # Salt test_salt = t2b(self._testData[i][3]) key._randfunc = lambda N: test_salt # The real test signer = PKCS.new(key) self.failUnless(signer.can_sign()) s = signer.sign(h) self.assertEqual(s, t2b(self._testData[i][2]))
def decrypt(decrypt_attack_params): c = decrypt_attack_params['c'] d = decrypt_attack_params['d'] d = int(d) n = decrypt_attack_params['n'] e = decrypt_attack_params['e'] key = RSA.construct((n, e, d)) out = key.decrypt(c) if type(out) == int: try: out = bytes.fromhex(hex(out)[2:]).decode('utf-8') except ValueError: pass else: if 0 in out: padding_end = out.index(0) out = out[padding_end + 1:].decode('utf-8') return out
def common_primes(keys): """Find common prime in keys modules Args: keys(list): RSAKeys Returns: list: RSAKeys for which factorization of n was found """ priv_keys = [] for pair in itertools.combinations(keys, 2): prime = gmpy2.gcd(pair[0].n, pair[1].n) if prime != 1: log.success("Found common prime in: {}, {}".format(pair[0].identifier, pair[1].identifier)) for key_no in range(2): if pair[key_no] not in priv_keys: d = int(invmod(pair[key_no].e, (prime - 1) * (pair[key_no].n / prime - 1))) new_key = RSAKey.construct(int(pair[key_no].n), int(pair[key_no].e), int(d), identifier=pair[key_no].identifier + '-private') new_key.texts = pair[key_no].texts[:] priv_keys.append(new_key) else: log.debug("Key {} already in priv_keys".format(pair[key_no].identifier)) return priv_keys
def wiener(key): """Wiener small private exponent attack If d < (1/3)*(N**(1/4)), d can be effectively recovered using continuous fractions Args: key(RSAKey): public rsa key to break Returns: NoneType/RSAKey: None if didn't break key, private key otherwise """ en_fractions = continued_fractions(key.e, key.n) for k, d in convergents(en_fractions): if k != 0 and (key.e * d - 1) % k == 0: phi = (key.e * d - 1) // k """ p**2 - p*(n - phi + 1) + n == 0 """ b = key.n - phi + 1 delta = b * b - 4 * key.n if delta > 0: sqrt_delta = gmpy2.isqrt(delta) if sqrt_delta * sqrt_delta == delta and sqrt_delta % 2 == 0: log.debug("Found private key (d={}) for {}".format(d, key.identifier)) new_key = RSAKey.construct(key.n, key.e, d, identifier=key.identifier + '-private') new_key.texts = key.texts[:] return new_key return None
def generatePrivKey(self, modulus="modulus",pubexp="e",p="p",q="q",outFileName="None"): if(modulus=="modulus"): modulus = self.modulus if(p=="p"): p = self.p if(pubexp=="e"): pubexp = self.e if(q=="q"): q = self.q if(outFileName==""): outFileName = self.outFileName if(outFileName==""): outFileName = "RSA_PrivKey_%s" % str(datetime.datetime.now()) totn = (p-1)*(q-1) privexp = self.modinv(pubexp,totn) assert p*q == modulus #Wieners attack returns "Integers" that throw type errors for not being "ints" #casting fixes this. This is likely due to use of sympy privKey = RSA.construct((modulus,pubexp,int(privexp),int(p),int(q))) #Write to File if(outFileName != "None"): open(outFileName,'bw+').write(privKey.exportKey()) print("Wrote private key to file %s " % outFileName) return privKey