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 25 #include <stdio.h> 26 #include "drv_rsa.h" 27 #include "soc.h" 28 29 #define RSA_KEY_LEN 1024 30 #define RSA_KEY_BYTE (RSA_KEY_LEN >> 3) 31 #define RSA_KEY_WORD (RSA_KEY_LEN >> 5) 32 33 #define BN_MAX_BITS ((RSA_KEY_LEN << 1) + 32) 34 #define BN_MAX_BYTES ((BN_MAX_BITS + 7) >> 3) 35 #define BN_MAX_WORDS ((BN_MAX_BYTES + 3) >> 2) 36 37 #define MAX_RSA_LP_CNT 10000 38 39 #define UINT32_TO_UINT64(data) ((uint64_t)(((uint64_t)(data)) & 0x00000000ffffffffU)) 40 #define UINT64L_TO_UINT32(data) ((uint32_t)(((uint64_t)(data)) & 0x00000000ffffffffU)) 41 #define UINT64H_TO_UINT32(data) ((uint32_t)((((uint64_t)(data)) >> 32) & 0x00000000ffffffffU)) 42 43 #define PKCS1_PADDING 0x01 44 #define NO_PADDING 0x02 45 46 #define MD5_PADDING 0x00 47 #define SHA1_PADDING 0x01 48 49 #define MD5_HASH_SZ 16 50 #define SHA1_HASH_SZ 20 51 52 #define RAS_CALCULATE_Q 0x6 53 #define RSA_ENABLE_MODULE 0x3 54 #define RSA_ENDIAN_MODE 0x8 55 #define RSA_RESET 0x1 56 #define RSA_CAL_Q_DONE_OFFSET 0x5 57 58 typedef struct bignum { 59 uint32_t pdata[BN_MAX_WORDS]; 60 uint32_t words; 61 } bignum_t; 62 63 typedef struct { 64 __IOM uint32_t rsa_mwid; /* Offset: 0x000 (R/W) Width of M register */ 65 __IOM uint32_t rsa_ckid; /* Offset: 0x004 (R/W) Width of D register */ 66 __IOM uint32_t rsa_bwid; /* Offset: 0x008 (R/W) Width of B register */ 67 __IOM uint32_t rsa_ctrl; /* Offset: 0x00c (R/W) RSA control register */ 68 __OM uint32_t rsa_rst; /* Offset: 0x010 (W) RSA reset register */ 69 __IM uint32_t rsa_lp_cnt; /* Offset: 0x014 (R) Loop counter for inquiry register*/ 70 __IM uint32_t rsa_q0; /* Offset: 0x018 (R) High-radix MM algorithm assistant register,part 1*/ 71 __IM uint32_t rsa_q1; /* Offset: 0x01c (R) High-radix MM algorithm assistant register,part 2*/ 72 __IOM uint32_t rsa_isr; /* Offset: 0x020 (W/R) Interrupt raw status register */ 73 __IOM uint32_t rsa_imr; /* Offset: 0x024 (W/R) Interrupt mask register */ 74 __IOM uint32_t rev1[54]; /* Reserve regiser */ 75 __IOM uint32_t rsa_rfm; /* Offset: 0x100 (W/R) Register file for modulus M */ 76 __IOM uint32_t rev2[63]; /* Reserve regiser */ 77 __IOM uint32_t rsa_rfd; /* Offset: 0x200 (W/R) Register file for exponent D */ 78 __IOM uint32_t rev3[63]; /* Reserve regiser */ 79 __IOM uint32_t rsa_rfc; /* Offset: 0x300 (W/R) Register file for hard C */ 80 __IOM uint32_t rev4[63]; /* Reserve regiser */ 81 __IOM uint32_t rsa_rfb; /* Offset: 0x400 (W/R) Register file for data B */ 82 __IOM uint32_t rev5[63]; /* Reserve regiser */ 83 __IM uint32_t rsa_rfr; /* Offset: 0x500 (R) Register file for storing the result */ 84 } ck_rsa_reg_t; 85 86 #endif 87