当前位置: 首页 > 知识库问答 >
问题:

将原始格式ecdsa sha384 csr签名转换为ASN1格式

邓兴为
2023-03-14

我有一个96字节长的ecdsa签名,由原始格式的智能卡使用sha384算法创建。它由两个 48 字节长的整数 r 和 s 组成。蜕皮蜕皮质特征位于sign_ptr所指向的缓冲区中。我正在使用以下函数(C)将原始格式签名转换为ASN1格式的buf_out:

int convert_ecdsa_sha384_sign(char **buf_out, char *sign_ptr)
{
   buf_out[0]=0x30;                            /* Type = Sequence of */
   buf_out[2]=0x02;                            /* Type = Integer */
   /* Verify if negative bit is set */
   if (!(sign_ptr[0] & 0x80))
   {
       buf_out[3]=0x30;                        /* Length */
       memcpy(&(buf_out[4]), sign_ptr, 48);    /* Copy first integer */
   }
   else
   {
       /* Negative bit is set. Add one padding byte */
       buf_out[3]=0x31;                        /* Length */
       buf_out[4]=0x00;                        /* Padding */
       memcpy(&(buf_out[5]), sign_ptr, 48);    /* Copy first integer */
       sign_offset += 1;
   }

   buf_out[52+sign_offset]=0x02;                                      /* Type = Integer */
   /* Verify if negative bit is set */
   if (!(sign_ptr[48] & 0x80))
   {
       buf_out[53+sign_offset]=0x30;                                  /* Length */
       memcpy(((&(buf_out[54]))+ sign_offset), sign_ptr + 48, 48);    /* Copy second integer */
   }
   else
   {
       /* Negative bit is set. Add one padding byte */
       buf_out[53+sign_offset]=0x31;                                 /* Length */
       buf_out[54+sign_offset]=0x00;                                 /* Padding */
       memcpy(((&(buf_out[55]))+ sign_offset), sign_ptr + 48, 48);   /* Copy second integer */
       sign_offset += 1;
   }
   buf_out[1]= 100 + sign_offset;                                    /* Total signature length */
   return 1;

}

我想知道是否有一个等效的openssl函数可以帮助我以更优雅的方式做到这一点?我确实看了许多d2i函数(d2i_ASN1_xxxx、ASN1_item_d2i、ASN_d2i_func等),但不清楚哪一个适合。

共有1个答案

诸福
2023-03-14

这是我从Stephen N. Henson博士那里得到的答案。OpenSSL 项目核心开发人员在 openssl 用户论坛:

“ECDSA_SIG结构是您需要的结构。

概述:使用ECDSA_ SIG_。

 类似资料:
  • 问题内容: 到目前为止,我一直尝试使用JavaMail api 创建类型的对象,然后获取其原始表示,但没有成功。我唯一可以获得的是电子邮件 内容 的原始表示形式,但是不包括标题,主题或收件人。我对可以帮助我创建电子邮件对象并获得其原始表示形式的任何建议,任何Java库感兴趣。原始表示应如下所示: 问题答案: 您正在寻找的是MimeMessag#writeTo,它将消息作为RFC 822格式流输出。

  • 问题内容: 我正在尝试将Shift_JIS格式的文件转换为UTF-8格式。为此,下面是我的方法: 读取Shift_JIS文件 每行的getBytes并将其转换为UTF-8 创建新文件并将UTF-8转换后的值写入该文件 问题是在第2步中没有发生转换。我正在使用下面的代码将Shift_JIS转换为UTF-8: 请让我知道是否需要其他信息。 我有以下两个 问题 : 1.还有其他更好的方法(步骤)来执行此

  • 我将字节数组转换为字符串,格式为,如下所示: 我想不出现在如何从我的字符串返回字节数组,实质上恢复我最初所做的工作。任何帮助都将得到很大的支持:)

  • 问题内容: 在PHP中,是否存在更有效,简化的方法来将“格式化的” Java UUID(不带破折号)转换为Java兼容格式(带破折号),并且最终:我将如何做? 我有已经执行此操作的代码,但是它似乎不专业,我认为可以更有效地完成它。 该数据来自从以下称为Mojang提供文件API使用的函数组合,这可以通过或者卷曲来完成- 但因为它最终会立刻要求任何东西,以2048点的配置文件,我想它会变得缓慢。 通

  • 我需要将长数据格式(long)转换为宽格式(wide),条件如下(如果可能): 1) 所有数据文件都将是具有相同结构(id、名称、值)的长格式(long),但每个数据文件将具有不同的变量、值和变量数: 2) 每个数据文件将是不同的变量混合物(因子、整数、数字)。有些因素可能每个案例都有多个级别(从长远来看是水果和肉),我想为这些因素中的每个级别创建一个单独的虚拟变量(逻辑)。因子和数值变量的数量将

  • 问题内容: 我尝试使用json格式的文件作为输入。这是示例数据的片段。 可以在r中使用这种复杂的json格式制作一个csv,以便更平滑地处理数据吗? 例如,有以下基本类别:基本信息照片创建者位置类别网址 可以制作带有basic_information.id,creator.id等子类别类别的csv文件吗? 问题答案: 在研究您的答案时,我在评论中张贴了一些链接,但现在我非常确信这是解决问题的方法。