2013-06-28 3 views
0

Я пробовал как ProfessionalCard 7.5 rev. B и D в настройках. (в соответствии с ZeitControl по электронной почте должно быть D, но в качестве примера EC-р проекта они имеют это B)Вызов ECpMakePublicKey в EC-p lib из ZeitControl BasicCard возвращает пустую строку

Вот код:

#Include EC-P.DEF 

#Stack 120 

Const curveFile = "secp256k1.bin" 

Call ECpSetCurveFromFile(curveFile) 

Command &H20 &H07 TestCommand(returnvalue$) 
    Public test$ 
    test$ = "Init Value" 
    Rem test$ = "101318078082651670995624611882601919371611236582435493534525386006923988435104" 
    Call ECpMakePublicKey("101318078082651670995624611882601919371611236582435493534525386006923988435104",test$) 
    returnvalue$ = test$ + "Test?" 

Команда возвращается, но тест $ переменная пуста. (я сделал свой собственный шестнадцатеричный конвертер, чтобы убедиться, что закрытый ключ действителен, но все тот же выпуск)

-Все идеи для решения этой проблемы? -До мне нужны ведущие нули в ключе, если число меньше 256 или 512 бит? -А я не понимаю, как это должно работать?

(как я прочитал инструкцию я даю секретный ключ и должен получить открытый ключ -. Как в виде положительных целых чисел, выраженных со строками)

ответ

0

ИТАК было несколько проблем с первой попытки, но после того, как стучал моя голова против ручных ответов выпала:

  1. Файл кривой - это путь к файлу.
  2. Путь к файлу кривой относится к файлам на карте.
  3. Вы должны загрузить файл на карточку и прочитать ее там.
  4. Для этого вы должны использовать .bin, а не файл .def.
  5. Закрытый ключ использует 32-байтовый формат, а открытым ключом будет полный 64-байтовый ключ. (Положение X и Y).
  6. Формат - это основание 256, то есть каждое значение символа в строковых ключах может быть расширенным кодом ASCII между 0-255. (Таким образом, мои первоначальные попытки с десятичными и шестнадцатеричных чисел слишком долго!)

Это определение картотеки:

Dir "\" 
    File "CurveFile" Len=0 
     input "C:\Users\mcb\Dropbox\Hobby stuff\75Branch\secp256k1.16.bin" 
End Dir 

Вот как обратиться к нему:

Call ECpSetCurveFromFile("\CurveFile") 
If LibError <> 0 Then SW1SW2 = LibError : LibError = 0 : exit command 

Вот ключевое определение, Chr $ является нативным и преобразует массив байтов в строку:

Eeprom prk$ = Chr$(&H79,&H33,&HBC,&H95,&HD3,&H03,&H9F,&H94,_ 
        &H9F,&H25,&H14,&H0C,&HAA,&H62,&H45,&HC7,_ 
        &H16,&H08,&HBF,&H93,&H43,&H96,&HC6,&HDC,_ 
        &HE4,&HCD,&HB0,&H87,&H5C,&H6A,&H72,&HE8) 

(тип конструкции также допускается) Вот как использовать ключ для генерации открытого ключа:

Call ECpMakePublicKey(Key1, puk$) 
If LibError <> 0 Then SW1SW2 = LibError : LibError = 0 : exit command