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