Пример #1
0
    def authenticate_as_client(self, session_socket):
        # authenticates an external server connected via session_socket

        iv = self.receive_iv(session_socket)
        master_encrypter = Encrypter(self.master_key, iv)
        m = Messenger(session_socket, master_encrypter, self.continueHandler)

        client_challenge = genStr(CHALLENGE_LENGTH)
        client_challenge_hash = str(create_key(client_challenge))
        hash_len = len(client_challenge_hash)
        secretA = generateAorB()
        publicA = pow(g, secretA, p)
        m.send(client_challenge + str(publicA))

        response = m.recv()
        while not response:
            response = m.recv()

        if response[:hash_len] != client_challenge_hash:
            m.close()
            raise Exception('client could not authenticate')

        server_challenge_hash = str(create_key(response[hash_len:hash_len + CHALLENGE_LENGTH]))
        m.send(server_challenge_hash)
        public_b = int(response[hash_len + CHALLENGE_LENGTH:])
        self.log.info('g^b mod p is {}'.format(public_b))
        session_key = create_key(str(pow(public_b, secretA, p)))
        self.log.info('Session key generated by the client is {}'.format(session_key))

        session_encrypter = Encrypter(session_key, iv)
        session_m = Messenger(session_socket, session_encrypter, self.continueHandler)

        self._messenger = session_m
Пример #2
0
    def test_can_generate_two_key_encrypt_and_decrypt(self):
        e = Encrypter()

        e.save_key('myprivatekey.pem')
        e.save_public_key('mypublickey.pem')

        public_key = e.read_key('mypublickey.pem')
        private_key = e.read_key('myprivatekey.pem')

        message = 'un texte'
        ciphertext = e.encrypt(message, public_key)
        decripted = e.decrypt(ciphertext, private_key)

        self.assertEqual(decripted, message)
Пример #3
0
    def _more_init(self):
        """
        Called as first function in run()
        """
        # Closing the lockfile descriptor.
        #
        # The multiprocessing library behaves differently on Windows and Unix:
        #   - on Windows it spawns a Python interpreter in a brand new process,
        #     which doesn't share any resource with the father process;
        #   - on Unix it forks. The child process inherits by default all
        #     file descriptors from the father, that is, open files, sockets,
        #     etc.
        # We want subprocesses not to inherit the lockfile descriptor in
        # order to avoid stale locks (see module: filerockclient.application).
        # It isn't possible to avoid Unix subprocesses to inherit descriptors,
        # so the only safe option is to explicitly close the lockfile in the
        # child. However, it must not be done on Windows, since multiprocessing
        # very likely uses the very same file descriptor for different
        # resources.
        # The developers of multiprocessing seem to be working on the fd
        # inheritance problem right in these days, see:
        #     http://bugs.python.org/issue8713
        if not sys.platform.startswith('win'):
            os.close(self.lockfile_fd)

#         self.warebox = Warebox(self.cfg)
        self.encrypter = Encrypter(self.warebox_path)
        self.decrypter = Decrypter(self.warebox_path)
Пример #4
0
 def __init__(self):
     ''' if not db file, create new db file
     '''
     # set master password
     self.encrypter = Encrypter()
     if os.path.exists(self.PASS_FILE):
         try:
             with open(self.PASS_FILE, 'r') as f:
                 file_content = pickle.load(f)
                 # for compatibility
                 if type(file_content) in (dict, defaultdict):
                     # old version
                     self.passwds = file_content
                 elif type(file_content) == str:
                     # new version
                     decrypted_file_content = \
                             self.encrypter.decrypt(file_content)
                     self.passwds = json.loads(decrypted_file_content)
                 else:
                     raise Exception('Unknown error...')
         except Exception as e:
             print 'failed loading db file... ', e
             os.remove(self.PASS_FILE)
             raise Exception('try it again.')
         master = self.passwds['master']
     else:
         self.passwds = {}
         master = getpass.getpass(\
             'This is your first time. Please input your master password => ')
         master = hashlib.sha256(master).hexdigest()
         self.passwds['master'] = master
         self._save_db()
     self.sha = hashlib.sha256(master)
class EncrypterTest(unittest.TestCase):

    def setUp(self):
        # Arrange
        self._uut = Encrypter()

    def test_RepeatingKeyXOrHex_ValidInput_CorrectCipherText(self):
        # Arrange
        test_string = b'''Burning 'em, if you ain't quick and nimble
I go crazy when I hear a cymbal'''
        test_key = b'ICE'
        result = ''
        expected_result = '0b3637272a2b2e63622c2e69692a23693a2a3c6324202d623d63343c2a26226324272765272a282b2f20430a652e2c652a3124333a653e2b2027630c692b20283165286326302e27282f'
        # Act
        result = self._uut.encrypt_repeating_key_xor_hex(test_string, test_key)

        # Assert
        self.assertEqual(result, expected_result)

    def test_RepeatingKeyXOrPlain_ValidInput_CorrectCipherText(self):
        # Arrange
        test_string = b'''Burning 'em, if you ain't quick and nimble
I go crazy when I hear a cymbal'''
        test_key = b'ICE'
        result = ''
        expected_result = b'\x0b67\'*+.cb,.ii*#i:*<c$ -b=c4<*&"c$\'\'e\'*(+/ C\ne.,e*1$3:e>+ \'c\x0ci+ (1e(c&0.\'(/'
        # Act
        result = self._uut.encrypt_repeating_key_xor_plain(
            test_string, test_key)
        print(result)
        # Assert
        self.assertEqual(result, expected_result)

# region AES_ECB_MODE

    def test_RepeatingKeyXOrPlain_ValidInput_CorrectCipherText(self):
        # Arrange
        test_data1 = b'testTESTtestTEST'
        test_key = b'YELLOW SUBMARINE'
        result = b''
        expected_result = bytes.fromhex('D5119B1375DDCFF464479495F34830D660FA36707E45F499DBA0F25B922301A5')
        
        # Act
        result = self._uut.encrypt_aes_128b_ecb_mode(test_data1, test_key)

        # Assert
        self.assertEqual(result, expected_result)
Пример #6
0
def main():
    parser = argparse.ArgumentParser(prog='des-sim.py')
    parser.add_argument("-v", "--verbosity", action="count",
                        help="verbosity of output (v, vv)")
    args = parser.parse_args()

    if args.verbosity is not None:
        if args.verbosity == 1:
            log.setLevel(logging.INFO)
        elif args.verbosity >= 2:
            log.setLevel(logging.DEBUG)

    key = input('key > ')
    ks = KeyScheduler(key)

    plaintext = input('pt  > ')

    encrypter = Encrypter(ks)
    ciphertext = encrypter.encrypt(plaintext)

    print(ciphertext)
Пример #7
0
    def authenticate_as_server(self, session_socket):
        # authenticates an external client connected via session_socket

        iv = self.generate_and_send_iv(session_socket) # the server should generate a random iv

        master_encrypter = Encrypter(self.master_key, iv)
        m_messenger = Messenger(session_socket, master_encrypter, self.continueHandler)

        secret_b = generateAorB()
        public_b = str(pow(g, secret_b, p))
        server_challenge = genStr(CHALLENGE_LENGTH)
        server_challenge_hash = str(create_key(server_challenge))

        response = m_messenger.recv()
        while not response:
            response = m_messenger.recv()

        client_challenge = response[:CHALLENGE_LENGTH]
        client_challenge_hash = str(create_key(client_challenge))
        public_a = response[CHALLENGE_LENGTH:]
        self.log.info('publicA is {}'.format(public_a))
        m_messenger.send(client_challenge_hash + server_challenge + public_b)
        session_key = create_key(str(pow(int(public_a), secret_b, p)))
        self.log.info('session key is {}'.format(session_key))

        response = m_messenger.recv()
        while not response:
            response = m_messenger.recv()

        if response != server_challenge_hash:
            self.log.warn('Client could not be authenticated. Session will be terminated!')
            m_messenger.close()
        else:
            print('Server Authentication Successful!!!')

        session_encrypter = Encrypter(session_key, iv)
        self._messenger = Messenger(session_socket, session_encrypter, self.continueHandler)
Пример #8
0
class PasswordManager(object):
    ''' Simple CLI Password Manager Tool developed by python'''
    PASS_FILE = '{home}/.pass-manager.db'.format(home=os.environ['HOME'])

    def __init__(self):
        ''' if not db file, create new db file
        '''
        # set master password
        self.encrypter = Encrypter()
        if os.path.exists(self.PASS_FILE):
            try:
                with open(self.PASS_FILE, 'r') as f:
                    file_content = pickle.load(f)
                    # for compatibility
                    if type(file_content) in (dict, defaultdict):
                        # old version
                        self.passwds = file_content
                    elif type(file_content) == str:
                        # new version
                        decrypted_file_content = \
                                self.encrypter.decrypt(file_content)
                        self.passwds = json.loads(decrypted_file_content)
                    else:
                        raise Exception('Unknown error...')
            except Exception as e:
                print 'failed loading db file... ', e
                os.remove(self.PASS_FILE)
                raise Exception('try it again.')
            master = self.passwds['master']
        else:
            self.passwds = {}
            master = getpass.getpass(\
                'This is your first time. Please input your master password => ')
            master = hashlib.sha256(master).hexdigest()
            self.passwds['master'] = master
            self._save_db()
        self.sha = hashlib.sha256(master)
        # self.sha = master_sha


    def _save_db(self):
        ''' save or update db file
        '''
        try:
            with open(self.PASS_FILE, 'w') as f:
                json_passwds = json.dumps(self.passwds)
                encrypted_file_content = self.encrypter.encrypt(json_passwds)
                pickle.dump(encrypted_file_content, f)
        except Exception as e:
            raise Exception('failed saving db file :{e}'.format(e=e))

    def setpb_data(self, data):
        ''' save password into clipboard
        '''
        p = subprocess.Popen(['pbcopy'], stdin=subprocess.PIPE)
        p.communicate(data)


    def passwd_generator(self, salt):
        ''' generate new password using master password and salt
        '''
        self.sha.update(salt)
        digest = self.sha.hexdigest()[-12:]
        return self.passwd_strengthen(digest)

    def passwd_strengthen(self, digest):
        ''' strengthen generated password
        '''
        strengthened_digest = []
        signs = ['#', '$', '-', '=', '?', '@', '[', ']', '_']
        for c in digest:
            odd = randint(1, 10) % 2 == 1
            if c.isalpha() and odd:
                c = c.upper()
            elif c.isdigit() and not odd:
                sign = choice(signs)
                c = sign

            strengthened_digest.append(c)
        return ''.join(strengthened_digest)

    def save_passwd(self, salt, passwd):
        ''' save generated and strengthened password with salt as key
        '''
        if self.passwds.has_key(salt):
            to_overwrite = ""
            while to_overwrite not in ['y', 'n']:
                to_overwrite = raw_input('Overwrite? (y or n)')
            if to_overwrite == 'n':
                return False
        self.passwds[salt] = passwd
        self._save_db()
        return True

    def confirm_master(self):
        ''' do auth by master password
        '''
        valid_master = getpass.getpass(\
                'Please input master password => ')
        if valid_master == self.passwds['master']:
            # for secure, not save raw master password
            master = hashlib.sha256(self.passwds['master']).hexdigest()
            self.passwds['master'] = master
            self._save_db()
        valid_master = hashlib.sha256(valid_master).hexdigest()
        if valid_master == self.passwds['master']:
            return True
        else:
            return False

    def show_passwds(self):
        ''' show all passwords
        '''
        valid_master = self.confirm_master()
        if valid_master:
            if len(self.passwds) == 1:
                print 'There is no password...'
                return
            for k, v in self.passwds.iteritems():
                if k == 'master':
                    continue
                print '{k}: {v}'.format(k=k, v=v)
        else:
            print 'Wrong password...'


    def create_passwd(self):
        ''' create new password
        '''
        salt = raw_input(\
                'Input a keyword for password (like domain, url) => ')
        while salt is 'master':
            print 'Sorry, you cannot use "master"'
            salt = raw_input('Try it again => ')
        passwd = self.passwd_generator(salt)
        is_updated = self.save_passwd(salt, passwd)
        passwd = passwd if is_updated else self.passwds[salt]
        # print 'パスワードはこちらです\n\n{0}'.format(passwd)
        print 'Password saved int your clipboard.'
        self.setpb_data(passwd)

    def load_passwd(self):
        ''' load saved password
        '''
        valid_master = self.confirm_master()
        if valid_master:
            salt = raw_input(\
                    'Input keyword you want to load => ')
            if self.passwds.has_key(salt):
                print 'Password saved int your clipboard.'
                # print self.passwds[salt]
                self.setpb_data(self.passwds[salt])
            else:
                print 'Such keyword({0}) is not setted...'\
                        .format(salt)
        else:
            print 'Wrong password...'

    def update_master(self):
        ''' update master password
        '''
        valid_master = self.confirm_master()
        if valid_master:
            master = getpass.getpass('Input new master password => ')
            self.passwds['master'] = master
            self._save_db()
            print 'Success!'
        else:
            print 'Wrong password...'

    def delete_passwd(self):
        '''作成済みのパスワードを削除する
        '''
        salt = raw_input('Input keyword you want to delete => ')
        if self.passwds.has_key(salt):
            print 'Deleted {0}.'.format(self.passwds[salt])
        else:
            print 'Such keyword({0}) is not setted...'.format(salt)
            return
        self.passwds.pop(salt)
        self._save_db()
Пример #9
0
modeMsg = 'Select your preferred mode of encryption. Offered modes:\n' \
    '1) ECB, 2) OFB, 3) CTR, 4) CBC --> Either type the name or the number of the mode.'
modeSetMsg = 'Ciphering mode set to '
cipherReadyMsg = 'Your encrypted ciphertext is:\n'
decryptMsg = 'Would you like to decrypt the ciphertext? y/n'
decryptionDoneMsg = 'Your decrypted cipher and starting message is:\n'
loopMsg = 'Want to encrypt another message? y/n'
errorMsg = 'Please read the instructions carefully.'
byeMsg = 'Goodbye then!'

def signal_handler(sig, frame):
    print('\n' + byeMsg)
    sys.exit(0)

signal.signal(signal.SIGINT, signal_handler)
encrypter = Encrypter()
stop = False

while True:
    print(messageMsg)
    while True:
        message = input()
        if message != '':
            break
        print(errorMsg)

    print(modeMsg)
    while True:
        mode = input()
        if mode == '1' or mode == 'ECB':
            mode = 'ECB'
Пример #10
0
    charCounter = CharCounter()
    while char:
        charCounter.add_char(char)
        char = file.read(1)
    # print("char count")
    # print(charCounter.get_char_counter())
    #init huffman tree
    huffmanTree = build_tree(charCounter.get_char_counter())
    # huffmanTree.preorder_print(huffmanTree.get_root())
    #get presentation from tree
    presentation = {}
    huffmanTree.get_tree_nodes(huffmanTree.get_root(), presentation)
    print("presentation")
    print(presentation)
    # #init encryp
    encrypter = Encrypter(presentation)
    print(encrypter.get_decrypt_char())
    doEncryption = raw_input("encrypt file y/n\n")
    if doEncryption == "y":
        encrypter.encrypt_file(file)
    # #init decrypter
    decrypter = Decrypter(encrypter.get_decrypt_char())
    doDecryption = raw_input("decrypt file y/n\n")
    if doDecryption == "y":
        decrypter.decrypt_file(file)
    #check if user want to quit or no
    quit = raw_input("exit y/n\n")
    if quit == "y":
        file.close()
        break
print("Thank you for using huffman tree")
 def setUp(self):
     # Arrange
     self._uut = Encrypter()
Пример #12
0
from encrypter import Encrypter
import pyfiglet

# Objeto encargado de la enciptación
encripter = Encrypter()

# Titulo del programa
title = pyfiglet.figlet_format("Espiral Encripter", font="slant")
print(title)

# ----- Menu del programa ----- #
option = 0
while option < 3:
    # Opciones del menu
    option = int(
        input(
            "\nElija una opción => 1:Encriptar -  2:Desencriptar - 3:Finalizar :\t"
        ))

    # Opción para enciptar una frase
    if option == 1:
        print('\nECRIPTADO')
        speed = int(input("Indique la frecuencia de encriptado: "))
        # cambiamos la frecuencia del encriptador
        encripter.spinner(speed)
        chars = input("Escriba su frase: ")
        # encriptamos la frase y devolvemos el hash
        encripter.encrypt(chars)
        option = 1

    # Opción para desenciptar un hash