def test_load_private_key_failure_filename_passed_is_not_a_file(self): ''' load_private_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_private_key(filename) self.assertEqual(cm.exception.errno, 21)
def test_load_private_key_failure_invalid_key_file(self): ''' load_private_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_private_key(filename) os.remove(filename)
def test_load_private_key_failure_no_read_permission(self): ''' load_private_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_private_key(filename) os.remove(filename) self.assertEqual(cm.exception.errno, 13)
def test_load_private_key_failure_public_key_filename_passed(self): ''' load_private_key should fail if we pass the public 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(ValueError) as cm: loadedkey = crypto.load_private_key(pubkey_file) os.remove(privkey_file) os.remove(pubkey_file)
def get_private_key(): privkey_file = config.config.key if not os.path.isfile(privkey_file): logging.logger.debug('Generating RSA keys...') key_dir=os.path.dirname(privkey_file) pubkey_file=os.path.join(key_dir,defaults.RSA_PUB_KEY) privkey=crypto.generate_rsa_key() crypto.store_keys(privkey=privkey, privkey_file=privkey_file, pubkey_file=pubkey_file) logging.logger.debug('Keys stored successfully on disk') pubkey=privkey.public_key() key_str=crypto.get_printable_pubkey(pubkey) logging.logger.info('This is the public key, add it to your Komlog account:\n'+key_str) return privkey else: privkey=crypto.load_private_key(privkey_file) return privkey
def test_load_private_key_success(self): ''' load_private_key should succeed and return the private 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) loadedkey = crypto.load_private_key(privkey_file) pubkey_loaded = privkey.public_key() os.remove(privkey_file) os.remove(pubkey_file) self.assertIsNotNone(loadedkey) self.assertEqual(crypto.serialize_public_key(pubkey_generated), crypto.serialize_public_key(pubkey_loaded))
def test_load_private_key_failure_non_existent_file(self): ''' load_private_key should fail if filename does not exists ''' filename = '/a/path/to/nonexistentfile' with self.assertRaises(OSError) as cm: crypto.load_private_key(filename) self.assertEqual(cm.exception.errno, 2)