zoukankan      html  css  js  c++  java
  • ECC数据结构

    在SM2 ECC算法中,有针对签名加密的数据结构,下面对这些结构进行分析

    #define ECCref_MAX_BITS 512
    #define ECCref_MAX_LEN ((ECCref_MAX_BITS+7) / 8)

     #define ECC_OFFSET 32

    公钥数据结构定义
    typedef struct ECCrefPublicKey_st
    {
    unsigned int bits;                            //密钥位长,数据长度为4字节  
    unsigned char x[ECCref_MAX_LEN];  //公钥X坐标, 32字节
    unsigned char y[ECCref_MAX_LEN];  //公钥Y坐标, 32字节
    } ECCrefPublicKey;

    私钥数据结构定义

    typedef struct ECCrefPrivateKey_st
    {
    unsigned int bits;                           //密钥位长,数据长度为4字节  
    unsigned char K[ECCref_MAX_LEN]; // 私钥,32字节
    } ECCrefPrivateKey;

     

    memcpy(pucPublicKey->x+ECC_OFFSET, sm2key.x,32);
    memcpy(pucPublicKey->y+ECC_OFFSET, sm2key.y,32);
    memcpy(pucPrivateKey->K+ECC_OFFSET ,sm2key.d ,32);

    用私钥k可以产生对应的公钥x y,私钥k由随机数产生

    ECC加密数据结构定义

    #define ECCCipher_MAX_C_LEN 4096
    typedef struct ECCCipher_st
    {
    unsigned char x[ECCref_MAX_LEN];
    unsigned char y[ECCref_MAX_LEN];
    unsigned char M[32];
    unsigned int L;
    unsigned char C[ECCCipher_MAX_C_LEN];
    } ECCCipher;

    起始地址:X+32

    起始地址Y+32

    加密的数据C

    SM3 hash值M

     

          长度为32                     长度为32                  长度为L                     长度为32 

    所以加密的结果为96+L

  • 相关阅读:
    集合
    字典
    二进制数,错位相乘
    技术不牛如何才拿到国内IT巨头的Offer(转)
    羊群过河问题
    ubuntu搜不到wifi信号
    win7下Arduino Mega 2560驱动安装失败解决办法
    关于windows下QT以及QT creator的安装
    mybatis相关知识
    oracle中计算百分比,并同时解决小数点前0不显示的问题
  • 原文地址:https://www.cnblogs.com/chenxuelian/p/6114324.html
Copyright © 2011-2022 走看看