Ejemplo n.º 1
0
  def test_as_bytes_non_ascii_errors_strict(self):
    """
    Converting a sequence of trytes into bytes using the `as_bytes`
    method yields non-ASCII characters, and errors='strict'.
    """
    trytes = TryteString(b'ZJVYUGTDRPDYFGFXMK')

    with self.assertRaises(TrytesDecodeError):
      trytes.as_bytes(errors='strict')
Ejemplo n.º 2
0
  def test_as_bytes_partial_sequence_errors_strict(self):
    """
    Attempting to convert an odd number of trytes into bytes using the
    `as_bytes` method with errors='strict'.
    """
    trytes = TryteString(b'RBTC9D9DCDQAEASBYBCCKBFA9')

    with self.assertRaises(TrytesDecodeError):
      trytes.as_bytes(errors='strict')
Ejemplo n.º 3
0
  def test_as_bytes_non_ascii_errors_replace(self):
    """
    Converting a sequence of trytes into bytes using the `as_bytes`
    method yields non-ASCII characters, and errors='replace'.
    """
    trytes = TryteString(b'ZJVYUGTDRPDYFGFXMK')

    self.assertEqual(
      trytes.as_bytes(errors='replace'),
      b'??\xd2\x80??\xc3??',
    )
Ejemplo n.º 4
0
  def test_as_bytes_partial_sequence_errors_replace(self):
    """
    Attempting to convert an odd number of trytes into bytes using the
    `as_bytes` method with errors='replace'.
    """
    trytes = TryteString(b'RBTC9D9DCDQAEASBYBCCKBFA9')

    self.assertEqual(
      trytes.as_bytes(errors='replace'),

      # The extra tryte is replaced with '?'.
      b'Hello, IOTA!?',
    )
Ejemplo n.º 5
0
    def test_as_bytes_deprecated(self):
        """
    :py:meth:`TryteString.as_bytes` is deprecated in favor of
    :py:meth:`TryteString.encode`.
    """
        trytes = TryteString(b'RBTC9D9DCDQAEASBYBCCKBFA')

        with catch_warnings(record=True) as caught_warnings:
            simple_filter('always', category=DeprecationWarning)

            encoded = trytes.as_bytes()

        self.assertEqual(
            [w.category for w in caught_warnings],
            [DeprecationWarning],
        )

        self.assertEqual(encoded, b'Hello, IOTA!')
Ejemplo n.º 6
0
def from_tryte_to_picture(tryte):
    from_trytes = zlib.decompress(TryteString.as_bytes(tryte))
    dec_img = img_decode(from_trytes)
    return dec_img
Ejemplo n.º 7
0
def lect_info(transaccion):
    #ES LA FUNCION ENCARGADA DE DESENCRIPTAR EL MENSAJE CONTENIDO DE LAS TRANSACCIONES.
    #RECIBE COMO INPUTS LOS TRYTES DE UNA TRANSACCION, Y MEDIANTE FUNCIONES DE LA
    #LIBRERIA Iota SEPARA LOS TRYTES PERTENECIENTES A CADA ELEMENTO (VER APARTADO 3.4)

    j = 0
    #CONTADOR DE APOYO PARA DIVIDIR LA FIRMA EN 3 BLOQUES

    MENSAJE = ['', '', '']
    #DECLARACION DE LA LISTA DE STRINGS DONDE SE VA A GUARDAR EL MENSAJE EN TRYTES
    #QUE PERTENECE A CADA CLIENTE

    MENSAJE_BYTES = [TryteString(''), TryteString(''), TryteString('')]
    #DECLARACION DE LA LISTA DE TRYTESTRINGS DONDE SE VAN A GUARDAR LOS BYTES
    #QUE PERTENECEN A CADA CLIENTE

    for i in str(transaccion.signature_message_fragment):
        #BUCLE QUE ITERA POR TODOS LOS CARACTERES DE LA FIRMA DEL MENSAJE (VER
        #APARTADO 3.4) Y LOS GUARDA EN FUNCION DE LA POSICION QUE OCUPAN.
        #NO ES CASUALIDAD QUE ESTE DIVIDIDO EN 2^8 CARACTERES, SI NO QUE ES
        #CONSECUENCIA DE LA SEGURIDAD EMPLEADA EN LA ENCRIPTACION.
        #LAS MEDIDAS SE ENCRIPTAN SIEMPRE CON UN TAMANNO DE 128 BYTES, QUE SE
        #CORRESPONDE CON 256 TRYTES.

        j = j + 1
        if j <= 256:
            #CONDICIONAL QUE SELECCIONA LA PARTE DEL CLIENTE A
            MENSAJE[0] += i
        if 256 < j <= 512:
            #CONDICIONAL QUE SELECCIONA LA PARTE DEL CLIENTE B
            MENSAJE[1] += i
        if 512 < j <= 768:
            #CONDICIONAL QUE SELECCIONA LA PARTE DEL CLIENTE C
            MENSAJE[2] += i

    try:
        #CONDICIONAL QUE SIEMPRE INTENTA REALIZAR LAS SIGUIENTES FUNCIONES
        MENSAJE_BYTES[0] = TryteString.as_bytes(TryteString(MENSAJE[0]))
        #FUNCION QUE CONVIERTE EL OBJETO TryteString A UNA CADENA DE BYTES. SE
        #CORRESPONDE CON LOS BYTES ENCRIPTADOS DEL CLIENTE A
        MENSAJE_BYTES[1] = TryteString.as_bytes(TryteString(MENSAJE[1]))
        #FUNCION QUE CONVIERTE EL OBJETO TryteString A UNA CADENA DE BYTES. SE
        #CORRESPONDE CON LOS BYTES ENCRIPTADOS DEL CLIENTE B
        MENSAJE_BYTES[2] = TryteString.as_bytes(TryteString(MENSAJE[2]))
        #FUNCION QUE CONVIERTE EL OBJETO TryteString A UNA CADENA DE BYTES. SE
        #CORRESPONDE CON LOS BYTES ENCRIPTADOS DEL CLIENTE C

    except Exception:
        #CUANDO UN MENSAJE NO PUEDE TRANSFORMARSE DE TRYTE A BYTE, PASAMOS
        pass

    messageD = ['', '', '']
    #DECLARACION DE LA LISTA DE STRINGS DONDE SE VA A GUARDAR EL MENSAJE FINAL

    for i in range(3):
        #RANGO QUE ITERA ENTRE LOS 3 CLIENTES PARA DESENCRIPTAR SU PARTE CORRESPONDIENTE

        path = 'C:\\Universidad\\TFG\\Scripts\\Nuevos\\Datos\\Private_key'
        path1 = path + str(i)
        path2 = path1 + '.py'
        #METODO EMPLEADO PARA LOCALIZAR EL DOCUMENTO DONDE CADA CLIENTE TIENE SU LLAVE
        #PRIVADA, NECESARIA PARA DESENCRIPTAR EL MENSAJE QUE SE HABIA CIFRADO CON
        #SU CLAVE PUBLICA, A DISPOSICION DEL AUTOR DEL PROYECTO.

        private_key = open(path2, 'r')
        pivk = private_key.read()
        #FUNCIONES EMPLEADAS PARA ABRIR Y GUARDAR EN LA VARIABLE pivk LA CLAVE
        #PRIVADA DEL CLIENTE ESPECIFICO EN CADA ITERACION.

        pivk1 = RSA.importKey(pivk)
        dcipher1 = PKCS1_OAEP.new(pivk1)
        #FUNCIONES QUE PREPARAN EL ALGORITMO A UTILIZAR JUNTO A LA CLAVE PRIVADA
        #PARA DESENCRIPTAR EL MENSAJE EN BYTES. VER APARTADO 3.3.

        try:
            messageD[i] = dcipher1.decrypt(MENSAJE_BYTES[i])
        #DESENCRIPTA EL MENSAJE CON LA CLAVE PRIVADA DE CADA CLIENTE
        #SEGUN LA ITERACION DEL BUCLE. SOLO PODRA DESENCRIPTAR LA PARTE DEL MENSAJE
        #QUE HAYA SIDO ENCRIPTADA CON LA CORRESPONDIENTE LLAVE PUBLICA.

        except Exception:
            pass
        #EVITA QUE SALTE UN ERROR CUANDO SE INTENTA DESENCRIPTAR UNA PARTE QUE NO HA
        #SIDO ENCRIPTADA CON LA LLAVE PUBLICA CORRESPONDIENTE.

        private_key.close()
        #CIERRA EL ARCHIVO DONDE SE ENCUENTRA LA CLAVE PRIVADA

    return messageD