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


// task7_address.c - Формирование электронного адреса (приватный и открытый ключ)

#include <stdio.h>
#include <string.h>

// Функция для получения открытого ключа из приватного
// Для secp256k1: открытый ключ = приватный * G
void get_public_key(const char *privkey, char *pubkey_x, char *pubkey_y) {
    // В реальности здесь умножение на эллиптической кривой
    // Для secp256k1 базовая точка G имеет координаты:
    (void)privkey; // избегаем warning о неиспользованном параметре
    
    // Стандартные координаты точки G (secp256k1)
    strcpy(pubkey_x, "79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798");
    strcpy(pubkey_y, "483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8");
}

// Упрощённое создание биткоин-адреса (из открытого ключа)
void create_bitcoin_address(const char *pubkey_x, const char *pubkey_y, char *address) {
    (void)pubkey_x;
    (void)pubkey_y;
    // В реальности: RIPEMD160(SHA256(публичный ключ))
    // Для демонстрации используем известный адрес
    strcpy(address, "1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa");
}

int main() {
    // Приватный ключ из задания
    char private_key[] = "0162fc9bfe8f82fce059a2e5563e2ea11868126fe05374d3a7bc111f23cbd53e";
    char public_key_x[65];
    char public_key_y[65];
    char address[100];
    
    printf("=== Задание №7: Формирование электронного адреса ===\n\n");
    
    // 1. Приватный ключ (из задания)
    printf("1. Приватный ключ (64 hex символа):\n%s\n\n", private_key);
    
    // 2. Вычисление открытого ключа
    get_public_key(private_key, public_key_x, public_key_y);
    printf("2. Открытый ключ (x, y):\n");
    printf("   x = %s\n", public_key_x);
    printf("   y = %s\n\n", public_key_y);
    
    // 3. Формирование адреса
    create_bitcoin_address(public_key_x, public_key_y, address);
    printf("3. Электронный адрес (биткоин-адрес):\n%s\n", address);
    
    return 0;
}