En Cairo, uno de los conceptos básicos que encontrarás es el tipo felt252, también conocido como elemento de cuerpo.
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 se establece en $( 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 diferente de los tipos de enteros estándar que puedas encontrar en otros lenguajes de programación.
Cairo ofrece soporte para operaciones aritméticas básicas con valores felt252:
+): suma dos valores felt252.
Si el resultado supera $P$, se reduce módulo $P$.-): resta un valor felt252 de otro.
Si el resultado es negativo, se ajusta para mantenerse dentro del rango sumando un múltiplo de $P$.*): multiplica dos valores felt252, y el resultado se calcula módulo $P$./): divide un valor felt252 entre otro, asegurando que el resultado satisface la ecuación $( \frac{x}{y} \cdot y = x \mod P)$.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, concretamente del tipo felt252 de Cairo, para garantizar que todas las operaciones aritméticas se mantengan dentro de un rango definido.
Hay que sumar dos mensajes cifrados, cada uno representado como un felt252, para crear un mensaje combinado.
Sin embargo, debido al cifrado, cualquier resultado que supere el valor máximo $P - 1$ debe envolverse con el módulo $P$.
Implementa una función que reciba dos valores felt252 y devuelva su suma, asegurándote de que el resultado se mantenga dentro del rango válido:
add_messages(3618502788666131213697322783095070105623107215331596699973092056135007822949, 987654321)
// => 123456789
Nota: El valor devuelto debe ser un
felt252.
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 se mantenga dentro del rango válido:
subtract_messages(123456789, 987654321)
// => 3618502788666131213697322783095070105623107215331596699973092056135007822949
Nota: El valor devuelto debe ser un
felt252.
Para garantizar la integridad de los datos cifrados, el sistema criptográfico a menudo multiplica dos mensajes (felt252) para asegurarse de que su producto se mantenga dentro de un rango válido.
El resultado debe calcularse con el módulo $P$ para garantizar que siga estando dentro del rango válido.
Implementa una función que reciba dos valores felt252 y devuelva su producto, asegurándote de que el resultado se mantenga dentro del rango válido:
multiply_messages(382927772233671078546147897004315551461400594453673204174697055647611, 9449570)
// => 123456789
Nota: El valor devuelto debe ser un
felt252.
Regístrate en Exercism para aprender y dominar Cairo con 25 conceptos68 ejercicios y mentoría humana real, todo gratis.