ck_rsa.h 3.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. /*
  2. * Copyright (C) 2017 C-SKY Microsystems Co., Ltd. All rights reserved.
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License");
  5. * you may not use this file except in compliance with the License.
  6. * You may obtain a copy of the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS,
  12. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. * See the License for the specific language governing permissions and
  14. * limitations under the License.
  15. */
  16. /******************************************************************************
  17. * @file ck_rsa.h
  18. * @brief header file for rsa driver
  19. * @version V1.0
  20. * @date 02. June 2017
  21. ******************************************************************************/
  22. #ifndef _CK_RSA_H_
  23. #define _CK_RSA_H_
  24. #include <stdio.h>
  25. #include "drv_rsa.h"
  26. #include "soc.h"
  27. #define RSA_KEY_LEN 1024
  28. #define RSA_KEY_BYTE (RSA_KEY_LEN >> 3)
  29. #define RSA_KEY_WORD (RSA_KEY_LEN >> 5)
  30. #define BN_MAX_BITS ((RSA_KEY_LEN << 1) + 32)
  31. #define BN_MAX_BYTES ((BN_MAX_BITS + 7) >> 3)
  32. #define BN_MAX_WORDS ((BN_MAX_BYTES + 3) >> 2)
  33. #define MAX_RSA_LP_CNT 10000
  34. #define UINT32_TO_UINT64(data) ((uint64_t)(((uint64_t)(data)) & 0x00000000ffffffffU))
  35. #define UINT64L_TO_UINT32(data) ((uint32_t)(((uint64_t)(data)) & 0x00000000ffffffffU))
  36. #define UINT64H_TO_UINT32(data) ((uint32_t)((((uint64_t)(data)) >> 32) & 0x00000000ffffffffU))
  37. #define PKCS1_PADDING 0x01
  38. #define NO_PADDING 0x02
  39. #define MD5_PADDING 0x00
  40. #define SHA1_PADDING 0x01
  41. #define MD5_HASH_SZ 16
  42. #define SHA1_HASH_SZ 20
  43. #define RAS_CALCULATE_Q 0x6
  44. #define RSA_ENABLE_MODULE 0x3
  45. #define RSA_ENDIAN_MODE 0x8
  46. #define RSA_RESET 0x1
  47. #define RSA_CAL_Q_DONE_OFFSET 0x5
  48. typedef struct bignum {
  49. uint32_t pdata[BN_MAX_WORDS];
  50. uint32_t words;
  51. } bignum_t;
  52. typedef struct {
  53. __IOM uint32_t rsa_mwid; /* Offset: 0x000 (R/W) Width of M register */
  54. __IOM uint32_t rsa_ckid; /* Offset: 0x004 (R/W) Width of D register */
  55. __IOM uint32_t rsa_bwid; /* Offset: 0x008 (R/W) Width of B register */
  56. __IOM uint32_t rsa_ctrl; /* Offset: 0x00c (R/W) RSA control register */
  57. __OM uint32_t rsa_rst; /* Offset: 0x010 (W) RSA reset register */
  58. __IM uint32_t rsa_lp_cnt; /* Offset: 0x014 (R) Loop counter for inquiry register*/
  59. __IM uint32_t rsa_q0; /* Offset: 0x018 (R) High-radix MM algorithm assistant register,part 1*/
  60. __IM uint32_t rsa_q1; /* Offset: 0x01c (R) High-radix MM algorithm assistant register,part 2*/
  61. __IOM uint32_t rsa_isr; /* Offset: 0x020 (W/R) Interrupt raw status register */
  62. __IOM uint32_t rsa_imr; /* Offset: 0x024 (W/R) Interrupt mask register */
  63. __IOM uint32_t rev1[54]; /* Reserve regiser */
  64. __IOM uint32_t rsa_rfm; /* Offset: 0x100 (W/R) Register file for modulus M */
  65. __IOM uint32_t rev2[63]; /* Reserve regiser */
  66. __IOM uint32_t rsa_rfd; /* Offset: 0x200 (W/R) Register file for exponent D */
  67. __IOM uint32_t rev3[63]; /* Reserve regiser */
  68. __IOM uint32_t rsa_rfc; /* Offset: 0x300 (W/R) Register file for hard C */
  69. __IOM uint32_t rev4[63]; /* Reserve regiser */
  70. __IOM uint32_t rsa_rfb; /* Offset: 0x400 (W/R) Register file for data B */
  71. __IOM uint32_t rev5[63]; /* Reserve regiser */
  72. __IM uint32_t rsa_rfr; /* Offset: 0x500 (R) Register file for storing the result */
  73. } ck_rsa_reg_t;
  74. #endif