Tracks
/
Cairo
Cairo
/
Ejercicios
/
Criptógrafo
Criptógrafo

Criptógrafo

Ejercicio de aprendizaje

Introducción

En Cairo, uno de los conceptos fundamentales que encontrarás es el tipo felt252, también conocido como elemento de campo. Este tipo representa números enteros dentro de un rango específico definido por un número primo grande $P$. En este ejercicio, trabajarás exclusivamente con el tipo felt252, que es una parte esencial de la programación en Cairo.

El tipo felt252 en Cairo es un tipo escalar que se usa para representar números enteros desde 0 hasta $P - 1$, donde $P$ es un número primo grande que actualmente está definido como $( 2^{251} + 17 \cdot 2^{192} + 1 )$. Este tipo garantiza que todas las operaciones aritméticas se realicen módulo $P$, lo que lo hace distinto de los tipos de enteros estándar que puedes encontrar en otros lenguajes de programación.

Cairo ofrece soporte para operaciones aritméticas básicas con valores felt252:

  • Suma (+): suma dos valores felt252. Si el resultado supera $P$, se reduce módulo $P$.
  • Resta (-): resta un valor felt252 de otro. Si el resultado es negativo, se ajusta para mantenerse dentro del rango sumando un múltiplo de $P$.
  • Multiplicación (*): multiplica dos valores felt252, y el resultado se calcula módulo $P$.
  • División (/): divide un valor felt252 entre otro, asegurando que el resultado cumple la ecuación $( \frac{x}{y} \cdot y = x \mod P)$.

Instrucciones

En este ejercicio, ayudarás a un criptógrafo a gestionar y verificar un sistema de comunicación seguro. El sistema depende en gran medida de los elementos de campo, específicamente del tipo felt252 de Cairo, para asegurar que todas las operaciones aritméticas permanezcan dentro de un rango definido.

1. Calcula la suma de dos mensajes

Dos mensajes cifrados, cada uno representado como un felt252, deben sumarse para crear un mensaje combinado. Sin embargo, debido al cifrado, cualquier resultado que supere el valor máximo $P - 1$ debe ajustarse usando el módulo $P$.

Implementa una función que reciba dos valores felt252 y devuelva su suma, asegurándote de que el resultado permanezca dentro del rango válido:

add_messages(3618502788666131213697322783095070105623107215331596699973092056135007822949, 987654321)
// => 123456789

Nota: El valor de retorno debe ser un felt252.

2. Calcula la diferencia entre dos mensajes

A veces, es necesario restar mensajes para recuperar los datos originales. Si el resultado de la resta es negativo, el sistema ajusta automáticamente el resultado sumando $P$ para volver a situarlo dentro del rango de un valor felt252 válido.

Implementa una función que reciba dos valores felt252 y devuelva su diferencia, asegurándote de que el resultado permanezca dentro del rango válido:

subtract_messages(123456789, 987654321)
// => 3618502788666131213697322783095070105623107215331596699973092056135007822949

Nota: El valor de retorno debe ser un felt252.

3. Calcula un producto válido de dos mensajes

Para garantizar la integridad de los datos cifrados, el sistema criptográfico a menudo multiplica dos mensajes (felt252) para que su producto permanezca dentro de un rango válido. El resultado debe calcularse con el módulo $P$ para asegurar que permanezca dentro del rango válido.

Implementa una función que reciba dos valores felt252 y devuelva su producto, asegurándote de que el resultado permanezca dentro del rango válido:

multiply_messages(382927772233671078546147897004315551461400594453673204174697055647611, 9449570)
// => 123456789

Nota: El valor de retorno debe ser un felt252.

Editar en GitHub El enlace se abre en una ventana o una pestaña nuevas
Cairo Exercism

¿Todo listo para empezar Criptógrafo?

Regístrate en Exercism para aprender y dominar Cairo con 25 conceptos68 ejercicios y mentoría humana real, todo gratis.