-
Есть-ли примеры работы в Delphi с сетью bitcoin? Сейчас пробую из известного приватного ключа сгенерировать публичный, как это реализовать средствами Delphi? Используется алгоритм ECDSA (secp256k1). Нашел компоненту FGInt на просторах, но так и не понял как с ней работать для получения открытых ключей. OpenSSL генерирует вроде, но примеров совсем нету, есть только на С в котором я полный дуб https://stackoverflow.com/questions/18496436/openssl-print-x-and-y-of-ec-point. Средствами не Delphi это делается легко, нужно именно в Делфе.
-
> примеры работы в Delphi с сетью bitcoin?
и > из известного приватного ключа сгенерировать публичный, > как это реализовать средствами Delphi?
это совершенно разные вопросы. тема также указана неверно, шифрование с эллиптическими кривыми не является BTC. по работе с OpenSSl есть официальная справка http://docwiki.embarcadero.com/RADStudio/Tokyo/en/OpenSSL
-
-
Все эти ссылки уже прочтены и изучены. Шифрование с эллиптическими кривыми не является BTC это очевидно, используется всего лишь тот же алгоритм шифрования. Очевидно в Делфи работа с такими алгоритмами, а тем более с криптовалютами не реализовано, интересно почему?
-
> есть только на С в котором я полный дуб https://stackoverflow. > com/questions/18496436/openssl-print-x-and-y-of-ec-point
это легко переписывается на Делфи, в чем проблема-то?
-
Очевидно в Делфи работа с такими алгоритмами, а тем более с криптовалютами не реализовано, интересно почему?
в делфи вообще фик чего реализовано. user.dll windows.dll, advapi.dll ...... что не мешает всем этим пользоваться в том числе и в этом вашем уютненьком дельфи.
-
> это легко переписывается на Делфи, в чем проблема-то?
Для меня это не легко, конкретно в этом примере я так и не понял как, например, получить результат работы функции EC_POINT_get_affine_coordinates_GFp(ec_group, pub, x, y, NULL) и вывести его, в читаемом виде в мемо, например. Всю жизнь пишу только в Делфи небольшие проэктики для себя, которые облегчают дальнейшую работу, других языков (кроме ассемблера) не знаю к сожалению :-(
-
-
Попробовал адаптировать, вылезли ошибки: [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;
Библиотеки все подключил, как с этой несовместимостью типов разобраться? Я С совсем не знаю, похоже для С и Делфи модули разные совсем
-
E2010 Incompatible types: 'PPBIGNUM' and 'PBIGNUM' в строке BN_hex2bn(&res,'30caae2fcb7c34ecadfddc45e0a27e9103bd7cfc87730d7818cc096b1266a683 ');
одно структура или указатель на нее. второе указатель на первое.
-
Подскажите как в коде реализовать эту совместимость типов, пожалуйста. Сами типы описаны так: 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;
-
> Jalkiy ©
существует множество вариантов заголовочных файлов для OpenSSL, нужно разбираться с конкретным вариантов. Например, в современных заголовочных файлах Indy EC_POINT_mul вообще не объявлена (как и многое другое), это нужно делать самостоятельно. зато, есть неплохой шанс разобраться во многих базовых аспектах программирования.
-
> Eraser ©
Скорее вспомнить, перерыв больше 10 лет в программировании на Делфи дает о себе знать :-) С OpenSSL действительно разбираться и разбираться, сейчас на вызове любой внешней функции/процедуры OpenSSL дает access violation at address, буду в отладчике смотреть. Спасибо в любом случае, так победим :-)
|