1 /*
2 * Copyright (c) 2020 - 2024 Renesas Electronics Corporation and/or its affiliates
3 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6
7 #include "hw_sce_ra_private.h"
8
HW_SCE_Aes128OutputKeyForDotfSub(uint32_t InData_KeyIndex[],uint32_t InData_DOTFSEED[])9 fsp_err_t HW_SCE_Aes128OutputKeyForDotfSub (uint32_t InData_KeyIndex[], uint32_t InData_DOTFSEED[])
10 {
11 if (RD1_MASK(REG_14BCH, 0x0000001fU) != 0)
12 {
13 return FSP_ERR_CRYPTO_SCE_RESOURCE_CONFLICT;
14 }
15 else
16 {
17 ;
18 }
19 WR1_PROG(REG_1B00H, 0x002c0001U);
20 WR1_PROG(REG_144CH, 0x00000000U);
21
22 WR1_PROG(REG_1444H, 0x000000c7U);
23 WR1_PROG(REG_1608H, 0x80010000U);
24 WAIT_STS(REG_1444H, 31, 1);
25 WR1_PROG(REG_1420H, 0);
26 WR1_PROG(REG_1458H, 0x00000000U);
27
28 WR1_PROG(REG_1600H, 0x38000c00U);
29 WR1_PROG(REG_1608H, 0x00000080U);
30 WR1_PROG(REG_143CH, 0x00260000U);
31
32 HW_SCE_p_func100(0xe42bd53eU,0x1421a36cU,0x4c4e49bdU,0xd9a52febU);
33 WR1_PROG(REG_143CH, 0x00400000U);
34
35 if (CHCK_STS(REG_143CH, 22, 1))
36 {
37 WR1_PROG(REG_1444H, 0x000000c7U);
38 WR1_PROG(REG_1608H, 0x800100e0U);
39 WAIT_STS(REG_1444H, 31, 1);
40 WR1_PROG(REG_1420H, InData_KeyIndex[0]);
41 WR1_PROG(REG_1458H, 0x00000000U);
42
43 WR1_PROG(REG_1444H, 0x000000a7U);
44 WR1_PROG(REG_1608H, 0x800103a0U);
45 WAIT_STS(REG_1444H, 31, 1);
46 WR1_PROG(REG_1420H, change_endian_long(0x0000002cU));
47 WR1_PROG(REG_1458H, 0x00000000U);
48
49 HW_SCE_p_func101(0x13c0cc14U,0xe754066aU,0xd88a17acU,0x1becdcc0U);
50 HW_SCE_p_func043_r1();
51
52 WR1_PROG(REG_1600H, 0x0000b4e0U);
53 WR1_PROG(REG_1600H, 0x00000005U);
54
55 WR1_PROG(REG_1444H, 0x000000a7U);
56 WR1_PROG(REG_1608H, 0x800103a0U);
57 WAIT_STS(REG_1444H, 31, 1);
58 WR1_PROG(REG_1420H, change_endian_long(0x0000002cU));
59 WR1_PROG(REG_1458H, 0x00000000U);
60
61 HW_SCE_p_func101(0xaf22781bU,0xc21f64d4U,0xc5b0d898U,0x8d8e6470U);
62 HW_SCE_p_func044_r1();
63
64 WR1_PROG(REG_1444H, 0x000003c2U);
65 WR1_PROG(REG_1A2CH, 0x40000000U);
66 WR1_PROG(REG_1A24H, 0xf7009d05U);
67 WAIT_STS(REG_1444H, 31, 1);
68 WR1_PROG(REG_1420H, InData_KeyIndex[1]);
69 WR1_PROG(REG_1420H, InData_KeyIndex[2]);
70 WR1_PROG(REG_1420H, InData_KeyIndex[3]);
71 WR1_PROG(REG_1420H, InData_KeyIndex[4]);
72
73 WR1_PROG(REG_1600H, 0x00000821U);
74 WR1_PROG(REG_1608H, 0x80840001U);
75 WR1_PROG(REG_1400H, 0x03420011U);
76 WAIT_STS(REG_1404H, 30, 0);
77 WR1_PROG(REG_143CH, 0x00001800U);
78
79 WR1_PROG(REG_1444H, 0x000003c2U);
80 WR1_PROG(REG_1A2CH, 0x40000000U);
81 WR1_PROG(REG_1A24H, 0x07008d05U);
82 WAIT_STS(REG_1444H, 31, 1);
83 WR1_PROG(REG_1420H, InData_KeyIndex[5]);
84 WR1_PROG(REG_1420H, InData_KeyIndex[6]);
85 WR1_PROG(REG_1420H, InData_KeyIndex[7]);
86 WR1_PROG(REG_1420H, InData_KeyIndex[8]);
87
88 WR1_PROG(REG_1A24H, 0x9c100005U);
89 WR1_PROG(REG_1400H, 0x00820011U);
90 WAIT_STS(REG_1404H, 30, 0);
91 WR1_PROG(REG_143CH, 0x00001800U);
92
93 HW_SCE_p_func101(0x4cbb9da3U,0xfae37b17U,0x76c82b01U,0x5fe05613U);
94
95 }
96
97 HW_SCE_p_func100(0x3eec56f6U,0x73af9b55U,0xb707e77aU,0x57a1f5adU);
98 WR1_PROG(REG_143CH, 0x00400000U);
99
100
101 if (CHCK_STS(REG_143CH, 22, 1))
102 {
103 HW_SCE_p_func102(0xeaa8ba85U, 0x9f93941cU, 0x7f98a0a6U, 0xd2c7e95dU);
104 WR1_PROG(REG_14BCH, 0x00000040U);
105 WAIT_STS(REG_142CH, 12, 0);
106
107 return FSP_ERR_CRYPTO_SCE_KEY_SET_FAIL;
108 }
109 else
110 {
111 HW_SCE_p_func100(0x0c3cb29cU, 0x3e89adceU, 0x31c085c1U, 0x357d9174U);
112 WR1_PROG(REG_1438H, 0x40000100U);
113
114 WR1_PROG(REG_1600H, 0x0000b400U);
115 WR1_PROG(REG_1600H, 0x00000000U);
116
117 WR1_PROG(REG_1608H, 0x81010000U);
118 WR1_PROG(REG_1400H, 0x02090005U);
119 WAIT_STS(REG_1404H, 30, 0);
120 WR1_PROG(REG_143CH, 0x00001800U);
121
122 HW_SCE_p_func100(0x8a7e38feU, 0x0594cbcdU, 0xd70c024bU, 0x690f5926U);
123 WR1_PROG(REG_1438H, 0x40000110U);
124
125 WR1_PROG(REG_1400H, 0x02000011U);
126 WAIT_STS(REG_1404H, 30, 0);
127 WR1_PROG(REG_143CH, 0x00001800U);
128
129 HW_SCE_p_func100(0x95f66b95U, 0x2283efd3U, 0xa3b3e11fU, 0x8e42210eU);
130 WR1_PROG(REG_1600H, 0x00000821U);
131 WR1_PROG(REG_1608H, 0x81840001U);
132 WR1_PROG(REG_1400H, 0x02090011U);
133 WAIT_STS(REG_1404H, 30, 0);
134 WR1_PROG(REG_143CH, 0x00001800U);
135
136
137 WR1_PROG(REG_1444H, 0x000001c7U);
138 WR1_PROG(REG_1608H, 0x80020000U);
139 WAIT_STS(REG_1444H, 31, 1);
140 WR1_PROG(REG_1420H, InData_DOTFSEED[0]);
141 WAIT_STS(REG_1444H, 31, 1);
142 WR1_PROG(REG_1420H, InData_DOTFSEED[1]);
143 WR1_PROG(REG_1458H, 0x00000000U);
144
145 HW_SCE_p_func100(0x214cee8fU, 0x3a443c76U, 0x708c8475U, 0x8d211a2cU);
146 WR1_PROG(REG_1438H, 0x40000140U);
147
148 WR1_PROG(REG_1608H, 0x81020000U);
149 WR1_PROG(REG_1400H, 0x02090009U);
150 WAIT_STS(REG_1404H, 30, 0);
151 WR1_PROG(REG_143CH, 0x00001800U);
152
153 HW_SCE_p_func102(0x6eb18b59U, 0x649d1056U, 0x0dfbb75bU, 0x32dfd757U);
154 WR1_PROG(REG_14BCH, 0x00000040U);
155 WAIT_STS(REG_142CH, 12, 0);
156
157 return FSP_SUCCESS;
158 }
159 }
160