defs.h 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. #ifndef _DEF_SM_H
  2. #define _DEF_SM_H
  3. #include <cstddef>
  4. //#ifdef __GNUC__
  5. //#ifdef __i386
  6. //typedef unsigned int size_t;
  7. //#else
  8. //typedef long unsigned int size_t;
  9. //#endif // __i386
  10. //#endif
  11. typedef unsigned char uint8_t;
  12. typedef unsigned int uint32_t;
  13. /*
  14. * 32-bit integer manipulation macros (big endian)
  15. */
  16. #ifndef GET_ULONG_BE
  17. #define GET_ULONG_BE(n,b,i) \
  18. { \
  19. (n) = ( (unsigned long) (b)[(i) ] << 24 ) \
  20. | ( (unsigned long) (b)[(i) + 1] << 16 ) \
  21. | ( (unsigned long) (b)[(i) + 2] << 8 ) \
  22. | ( (unsigned long) (b)[(i) + 3] ); \
  23. }
  24. #endif
  25. #ifndef PUT_ULONG_BE
  26. #define PUT_ULONG_BE(n,b,i) \
  27. { \
  28. (b)[(i) ] = (unsigned char) ( (n) >> 24 ); \
  29. (b)[(i) + 1] = (unsigned char) ( (n) >> 16 ); \
  30. (b)[(i) + 2] = (unsigned char) ( (n) >> 8 ); \
  31. (b)[(i) + 3] = (unsigned char) ( (n) ); \
  32. }
  33. #endif
  34. #define FF0(x,y,z) ( (x) ^ (y) ^ (z))
  35. #define FF1(x,y,z) (((x) & (y)) | ( (x) & (z)) | ( (y) & (z)))
  36. #define GG0(x,y,z) ( (x) ^ (y) ^ (z))
  37. #define GG1(x,y,z) (((x) & (y)) | ( (~(x)) & (z)) )
  38. /*
  39. * rotate shift left marco definition
  40. */
  41. #define SHL(x,n) (((x) & 0xFFFFFFFF) << n)
  42. #define ROTL(x,n) (SHL((x),n) | ((x) >> (32 - n)))
  43. #define SWAP(a,b) { unsigned long t = a; a = b; b = t; t = 0; }
  44. #define P0(x) ((x) ^ ROTL((x),9) ^ ROTL((x),17))
  45. #define P1(x) ((x) ^ ROTL((x),15) ^ ROTL((x),23))
  46. struct st_point
  47. {
  48. uint8_t x[32];
  49. uint8_t y[32];
  50. };
  51. /**
  52. * \brief SM2 context structure
  53. */
  54. struct sm2_context
  55. {
  56. st_point pubkey;
  57. uint8_t prikey[32];
  58. };
  59. /**
  60. * \brief SM3 context structure
  61. */
  62. struct sm3_context
  63. {
  64. unsigned long total[2]; /*!< number of bytes processed */
  65. unsigned long state[8]; /*!< intermediate digest state */
  66. unsigned char buffer[64]; /*!< data block being processed */
  67. unsigned char ipad[64]; /*!< HMAC: inner padding */
  68. unsigned char opad[64]; /*!< HMAC: outer padding */
  69. };
  70. /**
  71. * \brief SM4 context structure
  72. */
  73. struct sm4_context
  74. {
  75. uint32_t sk[32]; /*!< SM4 subkeys */
  76. };
  77. #endif // _DEF_SM_H