Мастера DELPHI, Delphi programming community Рейтинг@Mail.ru Титульная страница Поиск, карта сайта Написать письмо 
| Новости |
Новости сайта
Поиск |
Поиск по лучшим сайтам о Delphi
FAQ |
Огромная база часто задаваемых вопросов и, конечно же, ответы к ним ;)
Статьи |
Подборка статей на самые разные темы. Все о DELPHI
Книги |
Новинки книжного рынка
Новости VCL
Обзор свежих компонент со всего мира, по-русски!
|
| Форумы
Здесь вы можете задать свой вопрос и наверняка получите ответ
| ЧАТ |
Место для общения :)
Орешник |
Коллекция курьезных вопросов из форумов
KOL и MCK |
KOL и MCK - Компактные программы на Delphi
Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / rsdn.org

 
Чтобы не потерять эту дискуссию, сделайте закладку « предыдущая ветвь | форум | следующая ветвь »

Шифрование с помощью эллиптических кривых (BTC) [D7, WinXP]


Jalkiy ©   (11.11.17 21:35

Есть-ли примеры работы в Delphi с сетью bitcoin? Сейчас пробую из известного приватного ключа сгенерировать публичный, как это реализовать средствами Delphi? Используется алгоритм ECDSA (secp256k1). Нашел компоненту FGInt на просторах, но так и не понял как с ней работать для получения открытых ключей. OpenSSL генерирует вроде, но примеров совсем нету, есть только на С в котором я полный дуб  https://stackoverflow.com/questions/18496436/openssl-print-x-and-y-of-ec-point. Средствами не Delphi это делается легко, нужно именно в Делфе.


KilkennyCat ©   (11.11.17 23:50[1]


> примеры работы в Delphi с сетью bitcoin?

и

> из известного приватного ключа сгенерировать публичный,
> как это реализовать средствами Delphi?

это совершенно разные вопросы. тема также указана неверно, шифрование с эллиптическими кривыми не является BTC.

по работе с OpenSSl есть официальная справка
http://docwiki.embarcadero.com/RADStudio/Tokyo/en/OpenSSL


kilkennycat ©   (11.11.17 23:53[2]

а не, это не справка.
но пофиг, вторая ссылка в гугле: https://habrahabr.ru/post/280302/


Jalkiy ©   (12.11.17 02:52[3]

Все эти ссылки уже прочтены и изучены. Шифрование с эллиптическими кривыми не является BTC это очевидно, используется всего лишь тот же алгоритм шифрования. Очевидно в Делфи работа с такими алгоритмами, а тем более с криптовалютами не реализовано, интересно почему?


Eraser ©   (12.11.17 03:23[4]


>  есть только на С в котором я полный дуб  https://stackoverflow.
> com/questions/18496436/openssl-print-x-and-y-of-ec-point

это легко переписывается на Делфи, в чем проблема-то?


rrrrrr ©   (12.11.17 08:41[5]

Очевидно в Делфи работа с такими алгоритмами, а тем более с криптовалютами не реализовано, интересно почему?

в делфи вообще фик чего реализовано.
user.dll windows.dll, advapi.dll ......
что не мешает всем этим пользоваться в том числе и в этом вашем уютненьком дельфи.


Jalkiy ©   (12.11.17 12:14[6]

> это легко переписывается на Делфи, в чем проблема-то?

Для меня это не легко, конкретно в этом примере я так и не понял как, например, получить результат работы функции EC_POINT_get_affine_coordinates_GFp(ec_group, pub, x, y, NULL) и вывести его, в читаемом виде в мемо, например. Всю жизнь пишу только в Делфи небольшие проэктики для себя, которые облегчают дальнейшую работу, других языков (кроме ассемблера) не знаю к сожалению :-(


Jalkiy ©   (12.11.17 12:34[7]

Вот https://stackoverflow.com/questions/17672696/generating-bitcoin-address-from-ecdsa-public-key кстати полное решение (я так понимаю) получения открытого ключа и даже генерация адреса, но все на С++, как правильно переписать код с С на Делфи?


Jalkiy ©   (12.11.17 14:18[8]

Попробовал адаптировать, вылезли ошибки: [dcc32 Error] Main.pas(116): E2010 Incompatible types: 'PPBIGNUM' and 'PBIGNUM' в строке BN_hex2bn(&res,'30caae2fcb7c34ecadfddc45e0a27e9103bd7cfc87730d7818cc096b1266a683 ');

[dcc32 Error] Main.pas(125): E2010 Incompatible types: 'PEC_POINT' and 'Variant' в строке if EC_POINT_mul(group, pub_key, res, NULL, NULL, ctx)=1 then  Writeln('Error at EC_POINT_mul.\n');

[dcc32 Error] Main.pas(130): E2029 Expression expected but '*' found  в строке Writeln('%c', c++);

Сам код:
var
InsStr,OutStr:string;
pub_key:PEC_POINT;
eckey:PEC_KEY;
group:PEC_GROUP;
start:PBIGNUM;
res:PBIGNUM;
ctx:PBN_CTX;
cc:Char;
c:Char;
i:Integer;

begin
BN_init(&start);
ctx:= BN_CTX_new(); // ctx is an optional buffer to save time from allocating and deallocating memory whenever required

res:= &start;
BN_hex2bn(&res,'30caae2fcb7c34ecadfddc45e0a27e9103bd7cfc87730d7818cc096b1266a683 ');
eckey:= EC_KEY_new_by_curve_name(NID_secp256k1);

group:= EC_KEY_get0_group(eckey);
pub_key:= EC_POINT_new(group);

EC_KEY_set_private_key(eckey, res);

// pub_key is a new uninitialized `EC_POINT*`.  priv_key res is a `BIGNUM*`.
if EC_POINT_mul(group, pub_key, res, NULL, NULL, ctx)=1 then  Writeln('Error at EC_POINT_mul.\n');
EC_KEY_set_public_key(eckey, pub_key);
i:=0;
while i<130 do begin  // 1 byte 0x42, 32 bytes for X coordinate, 32 bytes for Y coordinate

      Writeln('%c', c++);
      i:=i+1;
    end;

    Writeln('\n');

    BN_CTX_free(ctx);
..........
...........
end;

Библиотеки все подключил, как с этой несовместимостью типов разобраться? Я С совсем не знаю, похоже для С и Делфи модули разные совсем


rrrrrr ©   (12.11.17 14:45[9]

E2010 Incompatible types: 'PPBIGNUM' and 'PBIGNUM' в строке BN_hex2bn(&res,'30caae2fcb7c34ecadfddc45e0a27e9103bd7cfc87730d7818cc096b1266a683  ');

одно структура или указатель на нее.
второе указатель на первое.


Jalkiy ©   (12.11.17 16:29[10]

Подскажите как в коде реализовать эту совместимость типов, пожалуйста. Сами типы описаны так:
 BIGNUM = record
   d : PBN_ULONG;
   top : TC_INT;
   dmax : TC_INT;
   neg : TC_INT;
   flags : TC_INT;
 end;
 PBIGNUM = ^BIGNUM;
 PPBIGNUM = ^PBIGNUM;
 BIGNUM_ARR = array[0..1] of BIGNUM;
 PBIGNUM_ARR = ^BIGNUM_ARR;


Eraser ©   (12.11.17 23:49[11]


> Jalkiy ©  

существует множество вариантов заголовочных файлов для OpenSSL, нужно разбираться с конкретным вариантов. Например, в современных заголовочных файлах Indy EC_POINT_mul вообще не объявлена (как и многое другое), это нужно делать самостоятельно.
зато, есть неплохой шанс разобраться во многих базовых аспектах программирования.


Jalkiy ©   (13.11.17 09:32[12]


> Eraser ©


Скорее вспомнить, перерыв больше 10 лет в программировании на Делфи дает о себе знать :-) С OpenSSL действительно разбираться и разбираться, сейчас на вызове любой внешней функции/процедуры OpenSSL дает access violation at address, буду в отладчике смотреть. Спасибо в любом случае, так победим :-)


версия для печати

Написать ответ

Ваше имя (регистрация  E-mail 







Разрешается использование тегов форматирования текста:
<b>жирный</b> <i>наклонный</i> <u>подчеркнутый</u>,
а для выделения текста программ, используйте <code> ... </code>
и не забывайте закрывать теги! </b></i></u></code> :)


Наверх

  Рейтинг@Mail.ru     Титульная страница Поиск, карта сайта Написать письмо