Skip to content

KyroFrCode/Demo-Blockchain

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Demo-Blockchain

Implémentation en langage C d'un processus électoral par scrutin numérique reposant sur la technologie de la blockchain. Le projet couvre la génération de clés (chiffrement asymétrique type RSA), la signature électronique, le hachage SHA-256, la preuve de travail (proof of work) et la construction/validation d'une chaîne de blocs.

Language OpenSSL GPLv3 License


📌 Description

Ce projet académique simule l'organisation d'un vote électronique sécurisé à l'aide d'une blockchain. Chaque électeur possède une paire de clés (publique/privée) ; les votes sont signés, hachés, puis regroupés dans des blocs minés par preuve de travail et chaînés entre eux. Le projet inclut également des mesures de performance (test de primalité, exponentiation modulaire, coût du minage) exploitables avec Gnuplot.

Concepts couverts

  • Arithmétique modulaire et test de primalité (primalite)
  • Génération de clés asymétriques (generate, manipulation_cle)
  • Signature et vérification électronique (signature)
  • Hachage SHA-256 (hash, via OpenSSL)
  • Création et manipulation de blocs et de l'arbre de blocs (block, block_tree)
  • Preuve de travail (proof of work) et mesure de sa difficulté
  • Processus de vote complet de bout en bout (processus_vote, simulation)

🗂️ Structure du projet

Demo-Blockchain/
├── Code/
│   ├── main.c                         # Démo : génération de clés, primalité
│   ├── main2.c                        # Démo : clés + signature
│   ├── main_test.c                    # Test complet (blocs, hash, vote…)
│   ├── simulation.c                   # Simulation complète du processus de vote
│   ├── performance.c                  # Mesures de perf. (exponentiation modulaire)
│   ├── proof_of_work_performance.c    # Mesures de perf. de la preuve de travail
│   ├── SHA-256_test.c                 # Test isolé du hachage SHA-256
│   ├── primalite.{c,h}                # Test de primalité, arithmétique modulaire
│   ├── generate.{c,h}                 # Génération de nombres premiers / clés
│   ├── manipulation_cle.{c,h}         # Manipulation des clés
│   ├── signature.{c,h}                # Signature électronique
│   ├── hash.{c,h}                     # Fonctions de hachage
│   ├── block.{c,h}                    # Structure d'un bloc
│   ├── block_tree.{c,h}               # Arbre / chaîne de blocs
│   ├── generate_data.{c,h}           # Génération de données de test
│   ├── import_data.{c,h}              # Import de données
│   └── processus_vote.{c,h}           # Orchestration du vote
├── Gnuplot (Graphes)/                 # Scripts, données et images de performance
│   ├── image/                         # performance.png, pow_performance.png
│   └── texte/                         # Données brutes (.txt) pour tracé
├── Rapport Projet.pdf                 # Documentation détaillée du projet
├── LICENSE
└── README.md

✅ Prérequis

  • Un compilateur C (gcc recommandé)
  • OpenSSL (bibliothèque de développement) — requis pour le SHA-256 (#include <openssl/sha.h>)
  • La bibliothèque mathématique standard (-lm)
  • (Optionnel) Gnuplot pour reproduire les graphes de performance

Installation des dépendances (Linux Debian/Ubuntu)

sudo apt-get update
sudo apt-get install gcc libssl-dev gnuplot

macOS (Homebrew)

brew install openssl gnuplot
# Selon votre installation, vous devrez préciser les chemins d'OpenSSL au moment de la compilation
# (ex. -I$(brew --prefix openssl)/include -L$(brew --prefix openssl)/lib)

⚠️ Correction par rapport à l'ancienne documentation : le dépôt ne contient pas de Makefile. La compilation se fait manuellement avec gcc (voir ci-dessous). De plus, OpenSSL est indispensable pour tous les programmes manipulant des blocs — cette dépendance n'était pas mentionnée auparavant.


🚀 Installation

# 1. Cloner le dépôt
git clone https://github.com/KyroFrCode/Demo-Blockchain.git

# 2. Se placer dans le dossier du code
cd Demo-Blockchain/Code/

🔨 Compilation & exécution

Chaque programme se compile en incluant les modules dont il dépend, puis en liant -lm (maths) et -lcrypto (OpenSSL).

main — génération de clés & primalité (ne nécessite pas OpenSSL)

gcc main.c generate.c primalite.c manipulation_cle.c signature.c -lm -o main
./main

main2 — clés & signature

gcc main2.c primalite.c generate.c manipulation_cle.c signature.c -lm -lcrypto -o main2
./main2

main_test — test complet (blocs, hachage, vote)

gcc main_test.c block.c block_tree.c generate.c generate_data.c hash.c \
    import_data.c manipulation_cle.c primalite.c processus_vote.c signature.c \
    -lm -lcrypto -o main_test
./main_test

simulation — simulation du processus de vote

gcc simulation.c processus_vote.c block.c block_tree.c generate.c generate_data.c \
    hash.c import_data.c manipulation_cle.c primalite.c signature.c \
    -lm -lcrypto -o simulation
./simulation

💡 Astuce : pour tout compiler d'un coup, vous pouvez adapter :

gcc <main_choisi>.c $(ls *.c | grep -vE 'main|simulation|performance|SHA-256_test|proof_of_work') -lm -lcrypto -o programme

Créer un vrai Makefile serait une amélioration bienvenue pour ce projet.


📊 Analyse de performance (Gnuplot)

Les programmes performance.c et proof_of_work_performance.c produisent des données de mesure exploitées avec Gnuplot. Les résultats déjà générés sont disponibles dans Gnuplot (Graphes)/ :

  • image/performance.png — comparaison des méthodes d'exponentiation modulaire (naïve vs rapide)
  • image/pow_performance.png — coût de la preuve de travail selon la difficulté

📖 Documentation

Le fichier Rapport Projet.pdf décrit en détail les algorithmes, les structures de données et les choix d'implémentation.


👤 Auteur

📄 Licence

Distribué sous licence GNU GPL v3 (voir le fichier LICENSE).

About

Ce projet porte sur le sujet de l’organisation d’un processus électoral par scrutin numérique implémentant la technologie de la blockchain en langage C.

Resources

License

Stars

0 stars

Watchers

1 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages