• 大小: 6KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-29
  • 语言: 其他
  • 标签: SM3  verilogHDL  

资源简介

SM3的一种verilogHDL实现,包括testbench测试文件。SM3是国家密码管理局编制的商用算法,用于密码应用中的数字签名和验证、消息认证码的生成与验证以及随机数的生成,可满足多种密码应用的安全需求。

资源截图

代码片段和文件信息

/***************************************************************************
* File name    : SM3c.c
* Function     : SM3 function
* Author       :   
* Date         : 2011/03/ 
* Version      :    v1.0
* Description  :     
* ModifyRecord :
****************************************************************************/
#include “HDR\AS5xx_Device.h“
#include “SM3.h“



static void SM3Transform(UINT32 stateIV[8] UINT32 T[64] UINT8 block[64]);
static void Extend(UINT32 *outputUINT32 *output1UINT32 *inputUINT32 len);
static void Encode(UINT8 *outputUINT32 *inputUINT32 len);
static void Decode(UINT32 *outputUINT8 *inputUINT32 len);


static UINT8 PADDING[64] = {
  0x80 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
};


/* ROTATE_LEFT rotates x left n bits. 
*/
#define ROTATE_LEFT(x n) (((x) << (n)) | ((x) >> (32-(n))))


/*Substi_P0Substi_P1Bool_FF and Bool_GG are basic SM3 functions.
*/
#define Substi_P0(x) ((x) ^ ROTATE_LEFT((x) 9) ^ ROTATE_LEFT((x) 17))
#define Substi_P1(x) ((x) ^ ROTATE_LEFT((x) 15) ^ ROTATE_LEFT((x) 23))
#define Bool_FF(x y z j) ((j) < 16) ? ((x) ^ (y) ^ (z)) : (((x) & (y)) | ((x) & (z)) | ((y) & (z)))
#define Bool_GG(x y z j) ((j) < 16) ? ((x) ^ (y) ^ (z)) : ((x) & (y) | ((0xffffffff^x) & (z)))


/* SS1SS2TT1 and TT2 are the transform functions for the SM3 algorithm
be using to generate intervening variables ss1ss2tt1tt2.
 
#define SS1(a b t j) {\
        UINT32 s1 = ROTATE_LEFT(a 12) + b + ROTATE_LEFT(t j);\
        s1 = ROTATE_LEFT(s1 7);\
        return s1;\
    }
#define SS2(a b) {\
        (UINT32) s2 = a ^ ROTATE_LEFT(b 12);\
        return s2;\
    }
#define TT1(a b c d x w1 j) {\
        (UINT32) t1 = Bool_FF(a b c j) + d + x + w1[j];\
        return t1;\
    }
#define TT2(a b c d x w j) {\
        (UINT32) t2 = Bool_GG(a b c j) + d + x + w[j];\
        return t2;\
    }
*/



/***************************************************************************
* Subroutine: SM3_Init
* Function: SM3 initialization. Begins an SM3 operation writing a new context.
* Input: context-SM3 Context struct
* Output: None;
* Description:  
* Date: 2011.03. 
* ModifyRecord:
* *************************************************************************/ 
void SM3_Init (SM3_CONTEXT *context)
{
  context->count[0] = context->count[1] = 0;

  /* Load magic initialization constants.
   */
  context->stateIV[0] = 0x7380166f;
  context->stateIV[1] = 0x4914b2b9;
  context->stateIV[2] = 0x172442d7;
  context->stateIV[3] = 0xda8a0600;
  context->stateIV[4] = 0xa96f30bc;
  context->stateIV[5] = 0x163138aa;
  context->stateIV[6] = 0xe38dee4d;
  context->stateIV[7] = 0xb0fb0e4e;
  /* Load initial constant list T. 
   */
  for (UINT16 j=0;j<=15;j++)
  {
   context->T[

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件        913  2011-03-10 15:38  SM3.h

     文件       9487  2011-03-15 10:08  SM3.c

     文件       3769  2013-06-07 16:38  test_SM3.v

     文件      16233  2013-05-07 16:31  SM3.v

----------- ---------  ---------- -----  ----

                30402                    4


评论

共有 条评论