0

我已经尝试过 ProfessionalCard 7.5 rev。设置中的 B 和 D。(根据 ZeitControl 的电子邮件,它应该是 D,但在一个示例 EC-p 项目中,他们拥有的是 B)

这是代码:

#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?"

命令返回,但 test$ 变量为空。(我制作了自己的十六进制转换器以确保私钥有效,但仍然是同样的问题)

- 有什么想法可以解决这个问题吗?- 如果数字低于 256 或 512 位,我是否需要在密钥中添加前导零?-我是否误解了这应该如何工作?

(当我阅读手册时,我给出了一个私钥并且应该得到一个公钥 - 两者都是用字符串表示的正整数。)

4

1 回答 1

0

好的,所以我最初的尝试遇到了一些问题,但是在将我的头撞到手动答案之后:

  1. 曲线文件是文件路径。
  2. 曲线文件路径是指卡片上的文件。
  3. 您必须将文件加载到卡中并在那里读取。
  4. 为此,您必须使用 .bin,而不是 .def 文件。
  5. 私钥使用 32 字节格式,公钥将是完整的 64 字节密钥。(X 和 Y 位置)。
  6. 格式以 256 为基数,这意味着字符串键中的每个 char 值都可以是 0-255 之间的扩展 ASCII 码。(因此我最初使用十进制和十六进制整数的尝试太长了!)

这是卡文件定义:

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)

(也允许使用 const 类型)以下是如何使用密钥生成公钥:

Call ECpMakePublicKey(Key1, puk$)
If LibError <> 0 Then SW1SW2 = LibError : LibError = 0 : exit command
于 2013-07-14T18:49:26.387 回答