# Chiffrement de script

Dans ce chapitre, vous apprendrez comment chiffrer les modules ou les scripts FIRERPA que vous avez développés. Ce chapitre ne traite pas du chiffrement des scripts côté PC, mais des scripts ou modules s'exécutant dans l'environnement Python intégré de FIRERPA. Par exemple, les modules dans `/data/usr/module/task`, `/data/usr/module/extension`, ou les scripts exécutés à l'aide de la commande Python intégrée. Nous fournissons des outils pour vous aider à le faire rapidement. À travers ce chapitre, vous apprendrez comment protéger les scripts que vous avez développés.

Le chiffrement de script est réalisé en convertissant le code en C avec Cython, puis en le compilant en un fichier `.so`. Cela n'aura pas d'impact significatif sur vos performances. Cependant, nous vous recommandons de ne chiffrer que la logique principale et non tous les fichiers de script. De plus, n'utilisez pas cette méthode pour chiffrer les fichiers de bibliothèques tierces, car cela serait inutile. Vous devriez toujours suivre le principe de "ne chiffrer que votre propre logique".

## Création de l'image de l'outil

Nous dépendons fortement de Docker, veuillez donc vous assurer que Docker est prêt avant de continuer. Maintenant, veuillez cloner `https://github.com/firerpa/compiler` et créer l'image en suivant la documentation ou la commande ci-dessous.

```bash
docker build -t compiler .
```

## Chiffrement du code du script

Utilisez la commande suivante pour mapper le code source dans l'image et le compiler. Les architectures (`arch`) prises en charge incluent `arm`, `arm64`, `x86`, `x86_64`, correspondant aux différentes architectures du serveur FIRERPA. Les différentes architectures ne sont pas compatibles entre elles.

```bash
docker run -it --rm -v /source/dir:/data compiler:latest compile.sh --arch arm64 /data/my_important_script.py
```

Normalement, après avoir exécuté la commande, vous obtiendrez un fichier `my_important_script.cpython-39.so` dans le même répertoire que votre script. Ne renommez pas ce fichier. Si vous avez besoin d'utiliser un autre nom, vous devez modifier directement le nom du script. Maintenant, dans votre script publié, vous pouvez supprimer le fichier de code source `.py` correspondant et le remplacer par le fichier `.so`.

```{attention}
Si votre code n'est pas un module FIRERPA (extension, task) et ne se compose que d'un seul fichier, Python ne peut pas exécuter directement le fichier `.so`. Vous devrez écrire un script d'entrée `.py` pour importer et lancer le fichier `.so` chiffré. S'il s'agit d'un module, il suffit de le placer dans le répertoire approprié et de redémarrer.
```