Skip to content

Commit 77e865f

Browse files
committed
check
1 parent b1f8f04 commit 77e865f

File tree

2 files changed

+51
-18
lines changed

2 files changed

+51
-18
lines changed

credentials/fetch_paa_certs_from_dcl.py

+37-9
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,10 @@
3737
PRODUCTION_NODE_URL_REST = "https://on.dcl.csa-iot.org"
3838
TEST_NODE_URL_REST = "https://on.test-net.dcl.csa-iot.org"
3939

40+
# TODO: really? We can't just get this by name from the DCL?
41+
MATTER_CERT_CA_SUBJECT = "MFIxDDAKBgNVBAoMA0NTQTEsMCoGA1UEAwwjTWF0dGVyIENlcnRpZmljYXRpb24gYW5kIFRlc3RpbmcgQ0ExFDASBgorBgEEAYKifAIBDARDNUEw"
42+
MATTER_CERT_CA_SUBJECT_KEY_ID = "97:E4:69:D0:C5:04:14:C2:6F:C7:01:F7:7E:94:77:39:09:8D:F6:A5"
43+
4044

4145
def parse_paa_root_certs(cmdpipe, paa_list):
4246
"""
@@ -80,7 +84,7 @@ def parse_paa_root_certs(cmdpipe, paa_list):
8084
paa_list.append(copy.deepcopy(result))
8185

8286

83-
def write_paa_root_cert(certificate, subject):
87+
def write_cert(certificate, subject):
8488
filename = 'dcld_mirror_' + \
8589
re.sub('[^a-zA-Z0-9_-]', '', re.sub('[=, ]', '_', subject))
8690
with open(filename + '.pem', 'w+') as outfile:
@@ -135,10 +139,37 @@ def use_dcld(dcld, production, cmdlist):
135139
@optgroup.option('--paa-trust-store-path', default='paa-root-certs', type=str, metavar='PATH', help="PAA trust store path (default: paa-root-certs)")
136140
def main(use_main_net_dcld, use_test_net_dcld, use_main_net_http, use_test_net_http, paa_trust_store_path):
137141
"""DCL PAA mirroring tools"""
138-
fetch_certs(use_main_net_dcld, use_test_net_dcld, use_main_net_http, use_test_net_http, paa_trust_store_path)
142+
fetch_paa_certs(use_main_net_dcld, use_test_net_dcld, use_main_net_http, use_test_net_http, paa_trust_store_path)
143+
144+
145+
def get_cert_from_rest(rest_node_url, subject, subject_key_id):
146+
response = requests.get(
147+
f"{rest_node_url}/dcl/pki/certificates/{subject}/{subject_key_id}").json()["approvedCertificates"]["certs"][0]
148+
certificate = response["pemCert"].rstrip("\n")
149+
subject = response["subjectAsText"]
150+
return certificate, subject
151+
152+
153+
def fetch_cd_signing_certs(store_path):
154+
''' Only supports using main net http currently.'''
155+
rest_node_url = PRODUCTION_NODE_URL_REST
156+
os.makedirs(store_path, exist_ok=True)
157+
original_dir = os.getcwd()
158+
os.chdir(store_path)
159+
160+
cd_signer_ids = requests.get(f"{rest_node_url}/dcl/pki/child-certificates/{MATTER_CERT_CA_SUBJECT}/{MATTER_CERT_CA_SUBJECT_KEY_ID}").json()['childCertificates']['certIds']
161+
for signer in cd_signer_ids:
162+
subject = signer['subject']
163+
subject_key_id = signer['subjectKeyId']
164+
certificate, subject = get_cert_from_rest(rest_node_url, subject, subject_key_id)
165+
166+
print(f"Downloaded CD signing cert with subject: {subject}")
167+
write_cert(certificate, subject)
168+
169+
os.chdir(original_dir)
139170

140171

141-
def fetch_certs(use_main_net_dcld, use_test_net_dcld, use_main_net_http, use_test_net_http, paa_trust_store_path):
172+
def fetch_paa_certs(use_main_net_dcld, use_test_net_dcld, use_main_net_http, use_test_net_http, paa_trust_store_path):
142173
production = False
143174
dcld = use_test_net_dcld
144175

@@ -171,10 +202,7 @@ def fetch_certs(use_main_net_dcld, use_test_net_dcld, use_main_net_http, use_tes
171202

172203
for paa in paa_list:
173204
if use_rest:
174-
response = requests.get(
175-
f"{rest_node_url}/dcl/pki/certificates/{paa['subject']}/{paa['subjectKeyId']}").json()["approvedCertificates"]["certs"][0]
176-
certificate = response["pemCert"]
177-
subject = response["subjectAsText"]
205+
certificate, subject = get_cert_from_rest(rest_node_url, paa['subject'], paa['subjectKeyId'])
178206
else:
179207
cmdlist = ['query', 'pki', 'x509-cert', '-u',
180208
paa['subject'], '-k', paa['subjectKeyId']]
@@ -186,8 +214,8 @@ def fetch_certs(use_main_net_dcld, use_test_net_dcld, use_main_net_http, use_tes
186214

187215
certificate = certificate.rstrip('\n')
188216

189-
print(f"Downloaded certificate with subject: {subject}")
190-
write_paa_root_cert(certificate, subject)
217+
print(f"Downloaded PAA certificate with subject: {subject}")
218+
write_cert(certificate, subject)
191219

192220
os.chdir(original_dir)
193221

src/python_testing/IDT_test_wrapper/post-cert-checks.py

+14-9
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import cv2
1919
import importlib
2020
import os
21+
import requests
2122
import shutil
2223
import sys
2324
import time
@@ -153,21 +154,24 @@ def get_setup_code() -> (str, bool):
153154
class TestConfig(object):
154155
def __init__(self, code: str, code_type: SetupCodeType):
155156
tmp_uuid = str(uuid.uuid4())
156-
tmpdir_name = f'paas_{tmp_uuid}'
157-
path = os.path.join('.', tmpdir_name)
158-
os.mkdir(path)
159-
fetch_paa_certs_from_dcl.fetch_certs(use_main_net_dcld='', use_test_net_dcld='', use_main_net_http=True, use_test_net_http=False, paa_trust_store_path=tmpdir_name)
160-
self.dirname = tmpdir_name
161-
self.path = path
157+
tmpdir_paa = f'paas_{tmp_uuid}'
158+
tmpdir_cd = f'cd_{tmp_uuid}'
159+
self.paa_path = os.path.join('.', tmpdir_paa)
160+
self.cd_path = os.path.join('.', tmpdir_cd)
161+
os.mkdir(self.paa_path)
162+
os.mkdir(self.cd_path)
163+
fetch_paa_certs_from_dcl.fetch_paa_certs(use_main_net_dcld='', use_test_net_dcld='', use_main_net_http=True, use_test_net_http=False, paa_trust_store_path=tmpdir_paa)
164+
fetch_paa_certs_from_dcl.fetch_cd_signing_certs(tmpdir_cd)
162165
self.admin_storage = f'admin_storage_{tmp_uuid}.json'
163166
global_test_params = {'use_pase_only': True, 'post_cert_test': True}
164-
# TODO: Set the cd_cert_dir to a directory with ONLY the production key signer certs - get from DCL.
165167
self.config = MatterTestConfig(endpoint=0, dut_node_ids=[1], global_test_params=global_test_params, storage_path=self.admin_storage)
166168
if code_type == SetupCodeType.QR:
167169
self.config.qr_code_content = code
168170
else:
169171
self.config.manual_code = code
170-
self.config.paa_trust_store_path = Path(self.path)
172+
self.config.paa_trust_store_path = Path(self.paa_path)
173+
# Set for DA-1.2, which uses the CD signing certs for verification. This test is now set to use the production CD signing certs from the DCL.
174+
self.config.global_test_params['cd_cert_dir'] = tmpdir_cd
171175
self.stack = MatterStackState(self.config)
172176
self.default_controller = self.stack.certificate_authorities[0].adminList[0].NewController(
173177
nodeId=112233,
@@ -191,7 +195,8 @@ def __exit__(self, *args):
191195
self.default_controller.Shutdown()
192196
self.stack.Shutdown()
193197
os.remove(self.admin_storage)
194-
shutil.rmtree(self.path)
198+
shutil.rmtree(self.paa_path)
199+
shutil.rmtree(self.cd_path)
195200

196201

197202
def run_test(test_class: MatterBaseTest, test_name: str, test_config: TestConfig) -> list[str]:

0 commit comments

Comments
 (0)