Загрузка данных


// 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;
}