def test_load_public_key_failure_filename_passed_is_not_a_file(self): ''' load_public_key should fail if filename passed is not a file ''' filename = '/tmp' self.assertTrue(os.path.isdir(filename)) with self.assertRaises(OSError) as cm: crypto.load_public_key(filename) self.assertEqual(cm.exception.errno, 21)
def test_load_public_key_failure_invalid_key_file(self): ''' load_public_key should fail if we pass an invalid key file ''' filename = '/tmp/random_file_' + ''.join( random.SystemRandom().choice(string.ascii_uppercase + string.digits) for _ in range(10)) with os.fdopen(os.open(filename, os.O_WRONLY | os.O_CREAT, 0o600), 'w') as handle: handle.write('invalid_key') with self.assertRaises(ValueError) as cm: crypto.load_public_key(filename) os.remove(filename)
def test_load_public_key_failure_no_read_permission(self): ''' load_public_key should fail if we have no read permission over filename ''' filename = '/tmp/random_file_' + ''.join( random.SystemRandom().choice(string.ascii_uppercase + string.digits) for _ in range(10)) with os.fdopen(os.open(filename, os.O_WRONLY | os.O_CREAT, 0o200), 'w') as handle: handle.write('') with self.assertRaises(OSError) as cm: crypto.load_public_key(filename) os.remove(filename) self.assertEqual(cm.exception.errno, 13)
def test_load_public_key_failure_private_key_filename_passed(self): ''' load_public_key should fail if we pass the private key file instead of the private one ''' random_string = ''.join( random.SystemRandom().choice(string.ascii_uppercase + string.digits) for _ in range(10)) privkey_file = os.path.join('/tmp/', random_string + '.priv') pubkey_file = os.path.join('/tmp/', random_string + '.pub') privkey = crypto.generate_rsa_key() pubkey_generated = privkey.public_key() crypto.store_keys(privkey=privkey, privkey_file=privkey_file, pubkey_file=pubkey_file) with self.assertRaises(UnsupportedAlgorithm) as cm: loadedkey = crypto.load_public_key(privkey_file) os.remove(privkey_file) os.remove(pubkey_file)
def test_load_public_key_success(self): ''' load_public_key should succeed and return the public key ''' random_string = ''.join( random.SystemRandom().choice(string.ascii_uppercase + string.digits) for _ in range(10)) privkey_file = os.path.join('/tmp/', random_string + '.priv') pubkey_file = os.path.join('/tmp/', random_string + '.pub') privkey = crypto.generate_rsa_key() pubkey_generated = privkey.public_key() crypto.store_keys(privkey=privkey, privkey_file=privkey_file, pubkey_file=pubkey_file) pubkey_loaded = crypto.load_public_key(pubkey_file) os.remove(privkey_file) os.remove(pubkey_file) self.assertIsNotNone(pubkey_loaded) self.assertEqual(crypto.serialize_public_key(pubkey_generated), crypto.serialize_public_key(pubkey_loaded))
def test_load_public_key_failure_non_existent_file(self): ''' load_public_key should fail if filename does not exists ''' filename = '/a/path/to/nonexistentfile' with self.assertRaises(OSError) as cm: crypto.load_public_key(filename) self.assertEqual(cm.exception.errno, 2)