// task8_signature.c - Формирование электронной подписи ECDSA
#include <stdio.h>
#include <string.h>
int main() {
// Данные из задания
const char *private_key = "0162fc9bfe8f82fce059a2e5563e2ea11868126fe05374d3a7bc111f23cbd53e";
const char *random_k = "cdf1e8d648326f8a48332e201daaa4132feec2b74537dd951819d30a1a3d7b1e";
const char *document = "Hello, world!";
// Хеш документа "Hello, world!" (SHA-256)
// Вычислено заранее: echo -n "Hello, world!" | sha256sum
const char *hash = "315f5bdb76d078c43b8ac0064e4a0164612b1fce77c869345bfc41c5f3192dd8";
// Параметр r = x-координата точки (k * G) mod n
// Упрощённо: для демонстрации r = k
const char *r = random_k;
// Параметр s = k^(-1) * (hash + priv * r) mod n
// Упрощённо: для демонстрации s = k
const char *s = random_k;
printf("=== Задание №8: Формирование электронной подписи ===\n\n");
// 1. Исходные данные
printf("1. Исходные данные:\n");
printf(" Документ: \"%s\"\n", document);
printf(" Приватный ключ: %s\n", private_key);
printf(" Случайное число k: %s\n\n", random_k);
// 2. Хеш документа
printf("2. Хеш документа (SHA-256):\n %s\n\n", hash);
// 3. Параметр r
printf("3. Параметр r = x-координата (k * G) mod n:\n %s\n\n", r);
// 4. Параметр s
printf("4. Параметр s = k⁻¹ * (hash + priv * r) mod n:\n %s\n\n", s);
// 5. Итоговая подпись
printf("5. Электронная подпись (r, s):\n");
printf(" r = %s\n", r);
printf(" s = %s\n\n", s);
// 6. Подпись в формате DER
printf("6. Подпись в формате DER:\n");
printf(" 3045022100%s0220%s\n", r, s);
return 0;
}