@@ -17,6 +17,7 @@ load("@crt//rules:transition.bzl", "platform_target")
1717load ("@bazel_skylib//rules:common_settings.bzl" , "BuildSettingInfo" )
1818load ("@bazel_skylib//lib:structs.bzl" , "structs" )
1919load ("//rules/opentitan:toolchain.bzl" , "LOCALTOOLS_TOOLCHAIN" )
20+ load ("//rules/opentitan:keyutils.bzl" , "ECDSA_ONLY_KEY_STRUCTS" )
2021
2122"""Rules to build OpenTitan for the RISC-V target"""
2223
@@ -42,126 +43,9 @@ PER_DEVICE_DEPS = {
4243 "fpga_cw340" : ["@//sw/device/lib/arch:fpga_cw340" ],
4344}
4445
45- def create_key_ (name , label , hw_lc_states ):
46- return struct (
47- name = name ,
48- label = label ,
49- hw_lc_states = hw_lc_states ,
50- )
51-
52- def create_test_key (name , label ):
53- return create_key_ (name , label , [
54- CONST .LCV .TEST_UNLOCKED0 ,
55- CONST .LCV .TEST_UNLOCKED1 ,
56- CONST .LCV .TEST_UNLOCKED2 ,
57- CONST .LCV .TEST_UNLOCKED3 ,
58- CONST .LCV .TEST_UNLOCKED4 ,
59- CONST .LCV .TEST_UNLOCKED5 ,
60- CONST .LCV .TEST_UNLOCKED6 ,
61- CONST .LCV .TEST_UNLOCKED7 ,
62- CONST .LCV .RMA ,
63- ])
64-
65- def create_dev_key (name , label ):
66- return create_key_ (name , label , [
67- CONST .LCV .TEST_UNLOCKED0 ,
68- CONST .LCV .TEST_UNLOCKED1 ,
69- CONST .LCV .TEST_UNLOCKED2 ,
70- CONST .LCV .TEST_UNLOCKED3 ,
71- CONST .LCV .TEST_UNLOCKED4 ,
72- CONST .LCV .TEST_UNLOCKED5 ,
73- CONST .LCV .TEST_UNLOCKED6 ,
74- CONST .LCV .TEST_UNLOCKED7 ,
75- CONST .LCV .RMA ,
76- CONST .LCV .DEV ,
77- ])
78-
79- def create_prod_key (name , label ):
80- return create_key_ (name , label , [
81- CONST .LCV .TEST_UNLOCKED0 ,
82- CONST .LCV .TEST_UNLOCKED1 ,
83- CONST .LCV .TEST_UNLOCKED2 ,
84- CONST .LCV .TEST_UNLOCKED3 ,
85- CONST .LCV .TEST_UNLOCKED4 ,
86- CONST .LCV .TEST_UNLOCKED5 ,
87- CONST .LCV .TEST_UNLOCKED6 ,
88- CONST .LCV .TEST_UNLOCKED7 ,
89- CONST .LCV .DEV ,
90- CONST .LCV .PROD ,
91- CONST .LCV .PROD_END ,
92- CONST .LCV .RMA ,
93- ])
94-
95- def create_key_struct (ecdsa_key , rsa_key , spx_key ):
96- return struct (
97- ecdsa = ecdsa_key ,
98- rsa = rsa_key ,
99- spx = spx_key ,
100- )
101-
102- # Keys available in the repo
103- SILICON_CREATOR_KEYS = struct (
104- FAKE = struct (
105- ECDSA = struct (
106- TEST = [
107- create_test_key ("fake_ecdsa_test_key_0" , "@//sw/device/silicon_creator/rom/keys/fake/ecdsa:test_key_0_ecdsa_p256" ),
108- ],
109- DEV = [
110- create_dev_key ("fake_ecdsa_dev_key_0" , "@//sw/device/silicon_creator/rom/keys/fake/ecdsa:dev_key_0_ecdsa_p256" ),
111- ],
112- PROD = [
113- create_prod_key ("fake_ecdsa_prod_key_0" , "@//sw/device/silicon_creator/rom/keys/fake/ecdsa:prod_key_0_ecdsa_p256" ),
114- ],
115- ),
116- SPX = struct (
117- TEST = [
118- create_test_key ("fake_spx_test_key_0" , "@//sw/device/silicon_creator/rom/keys/fake/spx:test_key_0_spx" ),
119- ],
120- DEV = [
121- create_dev_key ("fake_spx_dev_key_0" , "@//sw/device/silicon_creator/rom/keys/fake/spx:dev_key_0_spx" ),
122- ],
123- PROD = [
124- create_prod_key ("fake_spx_prod_key_0" , "@//sw/device/silicon_creator/rom/keys/fake/spx:prod_key_0_spx" ),
125- ],
126- ),
127- ),
128- # We can't expose real private keys publicly.
129- REAL = None ,
130- UNAUTHORIZED = struct (
131- SPX = [
132- create_key_ ("spx_unauthorized_0" , "@//sw/device/silicon_creator/rom/keys/unauthorized/spx:unauthorized_0_spx" , []),
133- ],
134- ),
135- )
136-
13746def flatten (l ):
13847 return [item for ll in l for item in ll ]
13948
140- def key_allowed_in_lc_state (key , hw_lc_state_val ):
141- all_hw_lc_state_vals = structs .to_dict (CONST .LCV ).values ()
142- if not hw_lc_state_val in all_hw_lc_state_vals :
143- fail ("Wrong life cycle state value: '{}', must be one of {}. Did you pass a string instead of the integer value?" .format (hw_lc_state_val , all_hw_lc_state_vals ))
144- return hw_lc_state_val in key .hw_lc_states
145-
146- def filter_key_structs_for_lc_state (key_structs , hw_lc_state ):
147- return [k for k in key_structs if (
148- (not k .rsa or key_allowed_in_lc_state (k .rsa , hw_lc_state )) and
149- (not k .ecdsa or key_allowed_in_lc_state (k .ecdsa , hw_lc_state )) and
150- (not k .spx or key_allowed_in_lc_state (k .spx , hw_lc_state ))
151- )]
152-
153- ECDSA_ONLY_KEY_STRUCTS = [
154- create_key_struct (SILICON_CREATOR_KEYS .FAKE .ECDSA .TEST [0 ], None , None ),
155- create_key_struct (SILICON_CREATOR_KEYS .FAKE .ECDSA .DEV [0 ], None , None ),
156- create_key_struct (SILICON_CREATOR_KEYS .FAKE .ECDSA .PROD [0 ], None , None ),
157- ]
158-
159- ECDSA_SPX_KEY_STRUCTS = [
160- create_key_struct (SILICON_CREATOR_KEYS .FAKE .ECDSA .TEST [0 ], None , SILICON_CREATOR_KEYS .FAKE .SPX .TEST [0 ]),
161- create_key_struct (SILICON_CREATOR_KEYS .FAKE .ECDSA .DEV [0 ], None , SILICON_CREATOR_KEYS .FAKE .SPX .DEV [0 ]),
162- create_key_struct (SILICON_CREATOR_KEYS .FAKE .ECDSA .PROD [0 ], None , SILICON_CREATOR_KEYS .FAKE .SPX .PROD [0 ]),
163- ]
164-
16549def _obj_transform_impl (ctx ):
16650 cc_toolchain = find_cc_toolchain (ctx )
16751 outputs = []
0 commit comments