Parcours
/
Cairo
Cairo
/
Exercices
/
Cryptographe
Cryptographe

Cryptographe

Exercice d'apprentissage

Introduction

L'un des concepts clés que tu rencontreras en Cairo est le type felt252, aussi appelé élément de corps. Ce type représente des entiers compris dans un intervalle précis, défini par un grand nombre premier $P$. Dans cet exercice, tu travailleras exclusivement avec le type felt252, qui est un élément essentiel de la programmation en Cairo.

Le type felt252 de Cairo est un type scalaire qui sert à représenter les entiers allant de 0 à $P - 1$, où $P$ est un grand nombre premier actuellement fixé à $( 2^{251} + 17 \cdot 2^{192} + 1 )$. Ce type garantit que toutes les opérations arithmétiques sont effectuées modulo $P$, ce qui le distingue des types entiers standards que l'on rencontre dans d'autres langages de programmation.

Cairo prend en charge les opérations arithmétiques de base sur les valeurs felt252 :

  • Addition (+) : ajoute deux valeurs felt252. Si le résultat dépasse $P$, il est réduit modulo $P$.
  • Soustraction (-) : soustrait une valeur felt252 d'une autre. Si le résultat est négatif, il est ajusté pour rester dans l'intervalle, en ajoutant un multiple de $P$.
  • Multiplication (*) : multiplie deux valeurs felt252, le résultat étant calculé modulo $P$.
  • Division (/) : divise une valeur felt252 par une autre, en garantissant que le résultat vérifie l'équation $( \frac{x}{y} \cdot y = x \mod P)$.

Instructions

Dans cet exercice, tu vas aider un cryptographe à gérer et vérifier un système de communication sécurisé. Le système s'appuie fortement sur des éléments de corps, en particulier le type felt252 de Cairo, pour garantir que toutes les opérations arithmétiques restent dans un intervalle défini.

1. Calculer la somme de deux messages

Deux messages chiffrés, représentés chacun par un felt252, doivent être additionnés pour créer un message combiné. Cependant, à cause du chiffrement, tout résultat qui dépasse la valeur maximale $P - 1$ doit être ramené modulo $P$.

Implémente une fonction qui prend deux valeurs felt252 et renvoie leur somme, en veillant à ce que le résultat reste dans l'intervalle valide :

add_messages(3618502788666131213697322783095070105623107215331596699973092056135007822949, 987654321)
// => 123456789

Remarque : la valeur de retour doit être un felt252.

2. Calculer la différence entre deux messages

Il arrive que l'on doive soustraire des messages pour retrouver les données d'origine. Si le résultat de la soustraction est négatif, le système ajuste automatiquement le résultat en ajoutant $P$ pour le ramener dans l'intervalle d'une valeur felt252 valide.

Implémente une fonction qui prend deux valeurs felt252 et renvoie leur différence, en veillant à ce que le résultat reste dans l'intervalle valide :

subtract_messages(123456789, 987654321)
// => 3618502788666131213697322783095070105623107215331596699973092056135007822949

Remarque : la valeur de retour doit être un felt252.

3. Calculer un produit valide de deux messages

Pour garantir l'intégrité des données chiffrées, le système cryptographique multiplie souvent deux messages (felt252) afin de s'assurer que leur produit reste dans un intervalle valide. Le résultat doit être calculé modulo $P$ pour garantir qu'il reste dans l'intervalle valide.

Implémente une fonction qui prend deux valeurs felt252 et renvoie leur produit, en veillant à ce que le résultat reste dans l'intervalle valide :

multiply_messages(382927772233671078546147897004315551461400594453673204174697055647611, 9449570)
// => 123456789

Remarque : la valeur de retour doit être un felt252.

Modifie via GitHub Le lien s'ouvre dans une nouvelle fenêtre ou un nouvel onglet
Cairo Exercism

Prêt à commencer Cryptographe ?

Inscris-toi sur Exercism pour apprendre et maîtriser Cairo avec 25 concepts68 exercices, et un vrai mentorat humain, le tout gratuitement.