Конференция "Основная" » Шифрование с помощью эллиптических кривых (BTC) [D7, WinXP]
 
  • Jalkiy © (11.11.17 21:35) [0]
    Есть-ли примеры работы в 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, буду в отладчике смотреть. Спасибо в любом случае, так победим :-)
 
Конференция "Основная" » Шифрование с помощью эллиптических кривых (BTC) [D7, WinXP]
Есть новые Нет новых   [118675   +66][b:0][p:0.001]