예제 #1
0
def set_context_key(p: int, q: int):
    """
    Gera chaves privadas e públicas a partir dos parâmetros 'p' e 'q'.
    Todos os estados são salvos em um dicionário como contexto para análise.
    As seguintes função são utilizadas para gerar esse contexto do dicionário:

    :func:`calculate_n <rsa_core.rsa.key.calculate_n>`
    :func:`calculate_tocient <rsa_core.rsa.key.calculate_tocient>`
    :func:`select_e <rsa_core.rsa.key.select_e>`
    :func:`calculate_d <rsa_core.rsa.key.calculate_d>`

    :param p: número primo qualquer
    :param q: número primo qualquer
    :return: dicionário contento as seguintes chaves: 'p', 'q', 'n', 'tocient', 'e', 'd', 'public_key', 'private_key'
    """
    context = {}
    context['p'] = p
    context['q'] = q
    context['n'] = calculate_n(p, q)
    context['tocient'] = calculate_tocient(p, q)
    context['e'] = select_e(context['tocient'])
    context['d'] = calculate_d(context['e'], context['tocient'])
    context['public_key'] = (context['n'], context['e'])
    context['private_key'] = (context['n'], context['d'])
    return context
예제 #2
0
def set_context_key_encrypt_decrypt_number(number: int, p: int, q: int):
    """
    Gera chaves privadas e públicas a partir dos parâmetros 'p' e 'q', criptografa
    o número informado a partir do pâmetro number e posteriormente descriptografa o resultado.
    Todos os estados são salvos em um dicionário como contexto da criptografia para análise.
    As seguintes função são utilizadas para gerar esse contexto do dicionário:

    :func:`calculate_n <rsa_core.rsa.key.calculate_n>`
    :func:`calculate_tocient <rsa_core.rsa.key.calculate_tocient>`
    :func:`select_e <rsa_core.rsa.key.select_e>`
    :func:`calculate_d <rsa_core.rsa.key.calculate_d>`
    :func:`encrypt_number <rsa_core.rsa.encrypt.encrypt_number>`
    :func:`decrypt_number <rsa_core.rsa.decrypt.decrypt_number>`

    :param number: número inteiro que representa o número a ser criptografado
    :param p: número primo qualquer
    :param q: número primo qualquer
    :return: dicionário contento as seguintes chaves: 'plain_text', 'p', 'q', 'n', 'tocient', 'e', 'd', 'public_key',
    'private_key', 'encrypted_text' e 'decrypted_text'
    """
    context = {}
    context['plain_text'] = number
    context['p'] = p
    context['q'] = q
    context['n'] = calculate_n(p, q)
    context['tocient'] = calculate_tocient(p, q)
    context['e'] = select_e(context['tocient'])
    context['d'] = calculate_d(context['e'], context['tocient'])
    context['public_key'] = (context['n'], context['e'])
    context['private_key'] = (context['n'], context['d'])
    context['encrypted_text'] = encrypt_number(context['plain_text'], context['n'], context['e'])
    context['decrypted_text'] = decrypt_number(context['encrypted_text'], context['n'], context['d'])
    return context
예제 #3
0
def set_context_key_encrypt_string(text: str, p: int, q: int):
    """
    Gera chaves privadas e públicas a partir dos parâmetros 'p' e 'q', e posteriormente criptografa
    o texto informado a partir do pâmetro text. Todos os estados são salvos em um dicionário
    como contexto da criptografia para análise.
    As seguintes função são utilizadas para gerar esse contexto do dicionário:

    :func:`transform_string_to_number <rsa_core.rsa.util.transform_string_to_number>`
    :func:`calculate_n <rsa_core.rsa.key.calculate_n>`
    :func:`calculate_tocient <rsa_core.rsa.key.calculate_tocient>`
    :func:`select_e <rsa_core.rsa.key.select_e>`
    :func:`calculate_d <rsa_core.rsa.key.calculate_d>`
    :func:`encrypt_string <rsa_core.rsa.encrypt.encrypt_string>`

    :param text: string que representa o texto a ser criptografado
    :param p: número primo qualquer
    :param q: número primo qualquer
    :return: dicionário contento as seguintes chaves: 'plain_text', 'converted_text', 'p', 'q', 'n', 'tocient', 'e',
    'd', 'public_key' e 'encrypted_text'
    """
    context = {}
    context['plain_text'] = text
    context['converted_text'] = transform_string_to_number(text)
    context['p'] = p
    context['q'] = q
    context['n'] = calculate_n(p, q)
    context['tocient'] = calculate_tocient(p, q)
    context['e'] = select_e(context['tocient'])
    context['d'] = calculate_d(context['e'], context['tocient'])
    context['public_key'] = (context['n'], context['e'])
    context['encrypted_text'] = encrypt_string(context['plain_text'], context['n'], context['e'])
    return context
예제 #4
0
 def setUp(self):
     self.p = 17
     self.q = 11
     self.n = calculate_n(self.p, self.q)
     self.phi = calculate_tocient(self.p, self.q)
     self.e = select_e(self.phi)
     self.d = calculate_d(self.e, self.phi)
     self.number = 88
     self.text = "i"
     self.encrypted_number = encrypt_number(self.number, self.n, self.e)
     self.encrypted_text = encrypt_string(self.text, self.n, self.e)
예제 #5
0
 def setUp(self):
     self.p = 17
     self.q = 11
     self.n = calculate_n(self.p, self.q)
     self.phi = calculate_tocient(self.p, self.q)
     self.e = select_e(self.phi)
     self.d = calculate_d(self.e, self.phi)
     self.number = 88
     self.encrypted_number = encrypt_number(88, self.n, self.e)
     self.decrypted_number = decrypt_number(44, self.n, self.d)
     self.text = "i"
     self.converted_text = 105
     self.encrypted_text = encrypt_string("i", self.n, self.e)
     self.decrypted_text = decrypt_string(95, self.n, self.d)
     self.public_key = (self.n, self.e)
     self.private_key = (self.n, self.d)
예제 #6
0
 def test_relatively_prime(self):
     phi = calculate_tocient(self.p, self.q)
     e = select_e(phi)
     self.assertTrue(is_relatively_prime(e, phi), PRIME_MESSAGE)