summaryrefslogtreecommitdiff
path: root/bsp/ck802/libraries/common/rsa/ck_rsa.h
blob: 31afd4d76e42f2c27b9bff0268bcd5697bd905df (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
/*
 * Copyright (C) 2017 C-SKY Microsystems Co., Ltd. All rights reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
/******************************************************************************
 * @file     ck_rsa.h
 * @brief    header file for rsa driver
 * @version  V1.0
 * @date     02. June 2017
 ******************************************************************************/
#ifndef _CK_RSA_H_
#define _CK_RSA_H_

#include <stdio.h>
#include "drv_rsa.h"
#include "soc.h"

#define RSA_KEY_LEN     1024
#define RSA_KEY_BYTE    (RSA_KEY_LEN >> 3)
#define RSA_KEY_WORD    (RSA_KEY_LEN >> 5)

#define BN_MAX_BITS     ((RSA_KEY_LEN << 1) + 32)
#define BN_MAX_BYTES    ((BN_MAX_BITS + 7) >> 3)
#define BN_MAX_WORDS    ((BN_MAX_BYTES + 3) >> 2)

#define MAX_RSA_LP_CNT  10000

#define UINT32_TO_UINT64(data)     ((uint64_t)(((uint64_t)(data)) & 0x00000000ffffffffU))
#define UINT64L_TO_UINT32(data)    ((uint32_t)(((uint64_t)(data)) & 0x00000000ffffffffU))
#define UINT64H_TO_UINT32(data)    ((uint32_t)((((uint64_t)(data)) >> 32) & 0x00000000ffffffffU))

#define PKCS1_PADDING   0x01
#define NO_PADDING      0x02

#define MD5_PADDING     0x00
#define SHA1_PADDING    0x01

#define MD5_HASH_SZ   16
#define SHA1_HASH_SZ  20

#define RAS_CALCULATE_Q     0x6
#define RSA_ENABLE_MODULE   0x3
#define RSA_ENDIAN_MODE     0x8
#define RSA_RESET           0x1
#define RSA_CAL_Q_DONE_OFFSET   0x5

typedef struct bignum {
    uint32_t pdata[BN_MAX_WORDS];
    uint32_t words;
} bignum_t;

typedef struct {
    __IOM uint32_t rsa_mwid;          /* Offset: 0x000 (R/W)  Width of M register */
    __IOM uint32_t rsa_ckid;          /* Offset: 0x004 (R/W)  Width of D register */
    __IOM uint32_t rsa_bwid;          /* Offset: 0x008 (R/W)  Width of B register */
    __IOM uint32_t rsa_ctrl;          /* Offset: 0x00c (R/W)  RSA control register */
    __OM  uint32_t rsa_rst;           /* Offset: 0x010 (W)    RSA reset register */
    __IM  uint32_t rsa_lp_cnt;        /* Offset: 0x014 (R)    Loop counter for inquiry register*/
    __IM  uint32_t rsa_q0;            /* Offset: 0x018 (R)    High-radix MM algorithm assistant register,part 1*/
    __IM  uint32_t rsa_q1;            /* Offset: 0x01c (R)    High-radix MM algorithm assistant register,part 2*/
    __IOM uint32_t rsa_isr;           /* Offset: 0x020 (W/R)  Interrupt raw status register */
    __IOM uint32_t rsa_imr;           /* Offset: 0x024 (W/R)  Interrupt mask register */
    __IOM uint32_t rev1[54];          /* Reserve regiser */
    __IOM uint32_t rsa_rfm;           /* Offset: 0x100 (W/R)  Register file for modulus M */
    __IOM uint32_t rev2[63];          /* Reserve regiser */
    __IOM uint32_t rsa_rfd;           /* Offset: 0x200 (W/R)  Register file for exponent D */
    __IOM uint32_t rev3[63];          /* Reserve regiser */
    __IOM uint32_t rsa_rfc;           /* Offset: 0x300 (W/R)  Register file for hard C */
    __IOM uint32_t rev4[63];          /* Reserve regiser */
    __IOM uint32_t rsa_rfb;           /* Offset: 0x400 (W/R)  Register file for data B */
    __IOM uint32_t rev5[63];          /* Reserve regiser */
    __IM  uint32_t rsa_rfr;           /* Offset: 0x500 (R)    Register file for storing the result */
} ck_rsa_reg_t;

#endif