@@ -94,15 +94,15 @@ def get_node_platform_and_mac(port):
94
94
:param port: Serial Port
95
95
:type port: str
96
96
97
- :return: Node Platform and Mac Address on Success
97
+ :return: Node Platform and MAC Address on Success
98
98
:rtype: str
99
99
"""
100
100
if not port :
101
- sys .exit ("<port> argument not provided. Cannot read platform and MAC address from node." )
101
+ sys .exit ("<port> argument not provided. Cannot read MAC address from node." )
102
102
sys .stdout = mystdout = StringIO ()
103
103
command = ['--port' , port , 'chip_id' ]
104
104
log .info ("Running esptool command to get node\
105
- platform and mac from device" )
105
+ platform and mac from device" )
106
106
esptool .main (command )
107
107
sys .stdout = sys .__stdout__
108
108
# Finding chip type from output.
@@ -120,57 +120,6 @@ def get_node_platform_and_mac(port):
120
120
log .debug ("Node platform is: " + platform )
121
121
return platform , mac_addr
122
122
123
- def get_secret_key (port ):
124
- """
125
- Generate Secret Key
126
-
127
- :param port: Serial Port
128
- :type port: str
129
-
130
- :param esptool: esptool module
131
- :type esptool: module
132
-
133
- :return: Secret Key on Success
134
- :rtype: str
135
- """
136
- if not port :
137
- sys .exit ("<port> argument not provided. Cannot read secret_key from node." )
138
- esp = esptool .ESP32S2ROM (port )
139
- esp .connect ('default_reset' )
140
- for (name , idx , read_addr , _ , _ ) in BLOCKS :
141
- addrs = range (read_addr , read_addr + 32 , 4 )
142
- secret = "" .join (["%08x" % esp .read_reg (addr ) for addr in addrs [0 :4 ]])
143
- secret = secret [6 :8 ]+ secret [4 :6 ]+ secret [2 :4 ]+ secret [0 :2 ] + \
144
- secret [14 :16 ]+ secret [12 :14 ]+ secret [10 :12 ]+ secret [8 :10 ] + \
145
- secret [22 :24 ]+ secret [20 :22 ]+ secret [18 :20 ]+ secret [16 :18 ] + \
146
- secret [30 :32 ]+ secret [28 :30 ]+ secret [26 :28 ]+ secret [24 :26 ]
147
- # Verify secret key exists
148
- secret_key_tmp = secret .strip ('0' )
149
- if not secret_key_tmp :
150
- return False
151
- return secret
152
-
153
- def gen_hmac_challenge_resp (secret_key , hmac_challenge ):
154
- """
155
- Generate HMAC Challenge Response
156
-
157
- :param secret_key: Secret Key to generate HMAC Challenge Response
158
- :type secret_key: str
159
-
160
- :param hmac_challenge: HMAC Challenge received in
161
- esp32s2 claim initate response
162
- :type hmac_challenge: str
163
-
164
- :return: HMAC Challenge Response on Success
165
- :rtype: str
166
- """
167
- h = hmac .HMAC (bytes .fromhex (secret_key ),
168
- hashes .SHA512 (),
169
- backend = default_backend ())
170
- h .update (bytes (hmac_challenge , 'utf-8' ))
171
- hmac_challenge_response = binascii .hexlify (h .finalize ()).decode ()
172
- return hmac_challenge_response
173
-
174
123
def gen_host_csr (private_key , common_name = None ):
175
124
"""
176
125
Generate Host CSR
@@ -328,51 +277,20 @@ def gen_nvs_partition_bin(dest_filedir, output_bin_filename):
328
277
dest_filedir + output_bin_filename )
329
278
nvs_partition_gen .generate (nvs_args )
330
279
331
- def set_claim_verify_data (claim_init_resp , private_key , mac_addr = None , secret_key = None ):
332
- # set claim verify data for node_platform = esp32
333
- if not mac_addr and not secret_key :
334
- # Generate CSR with common_name=node_id received in response
335
- node_id = str (json .loads (
336
- claim_init_resp .text )['node_id' ])
337
- print ("Generating CSR" )
338
- log .info ("Generating CSR" )
339
- csr = gen_host_csr (private_key , common_name = node_id )
340
- if not csr :
341
- raise Exception ("CSR Not Generated. Claiming Failed" )
342
- log .info ("CSR generated" )
343
- claim_verify_data = {"csr" : csr }
344
- # Save node id as node info to use while saving claim data
345
- # in csv file
346
- node_info = node_id
347
- else :
348
- # set claim verify data for node_platform = esp32s2
349
- auth_id = str (json .loads (
350
- claim_init_resp .text )['auth_id' ])
351
- hmac_challenge = str (json .loads (
352
- claim_init_resp .text )['challenge' ])
353
- print ("Generating CSR" )
354
- log .info ("Generating CSR" )
355
- csr = gen_host_csr (private_key , common_name = mac_addr )
356
- if not csr :
357
- raise Exception ("CSR Not Generated. Claiming Failed" )
358
- log .info ("CSR generated" )
359
- log .info ("Generating hmac challenge response" )
360
- hmac_challenge_response = gen_hmac_challenge_resp (
361
- secret_key ,
362
- hmac_challenge )
363
- hmac_challenge_response = hmac_challenge_response .strip ('\n ' )
364
- log .debug ("Secret Key: " + secret_key )
365
- log .debug ("HMAC Challenge Response: " +
366
- hmac_challenge_response )
367
- claim_verify_data = {"auth_id" :
368
- auth_id ,
369
- "challenge_response" :
370
- hmac_challenge_response ,
371
- "csr" :
372
- csr }
373
- # Save mac addr as node info to use while saving claim data
374
- # in csv file
375
- node_info = mac_addr
280
+ def set_claim_verify_data (claim_init_resp , private_key ):
281
+ # Generate CSR with common_name=node_id received in response
282
+ node_id = str (json .loads (
283
+ claim_init_resp .text )['node_id' ])
284
+ print ("Generating CSR" )
285
+ log .info ("Generating CSR" )
286
+ csr = gen_host_csr (private_key , common_name = node_id )
287
+ if not csr :
288
+ raise Exception ("CSR Not Generated. Claiming Failed" )
289
+ log .info ("CSR generated" )
290
+ claim_verify_data = {"csr" : csr }
291
+ # Save node id as node info to use while saving claim data
292
+ # in csv file
293
+ node_info = node_id
376
294
return claim_verify_data , node_info
377
295
378
296
def set_claim_initiate_data (mac_addr , node_platform ):
@@ -448,7 +366,7 @@ def claim_initiate(claim_init_data, header):
448
366
log .error ("Please check the Internet connection." )
449
367
exit (0 )
450
368
451
- def start_claim_process (node_platform , mac_addr , private_key , secret_key = None ):
369
+ def start_claim_process (mac_addr , node_platform , private_key ):
452
370
log .info ("Creating session" )
453
371
curr_session = session .Session ()
454
372
header = curr_session .request_header
@@ -460,10 +378,7 @@ def start_claim_process(node_platform, mac_addr, private_key, secret_key=None):
460
378
claim_init_resp = claim_initiate (claim_init_data , header )
461
379
462
380
# Set claim verify data
463
- if node_platform == "esp32" :
464
- claim_verify_data , node_info = set_claim_verify_data (claim_init_resp , private_key )
465
- else :
466
- claim_verify_data , node_info = set_claim_verify_data (claim_init_resp , private_key , mac_addr = mac_addr , secret_key = secret_key )
381
+ claim_verify_data , node_info = set_claim_verify_data (claim_init_resp , private_key )
467
382
468
383
# Perform claim verify request
469
384
claim_verify_resp = claim_verify (claim_verify_data , header )
@@ -497,12 +412,6 @@ def generate_private_key():
497
412
encryption_algorithm = serialization .NoEncryption ())
498
413
return private_key , private_key_bytes
499
414
500
- def verify_secret_key_exists (secret_key ):
501
- secret_key_tmp = secret_key .strip ('0' )
502
- if not secret_key_tmp :
503
- return False
504
- return True
505
-
506
415
def verify_mac_dir_exists (creds_dir , mac_addr ):
507
416
mac_dir = Path (path .expanduser (str (creds_dir ) + '/' + mac_addr ))
508
417
if mac_dir .exists ():
@@ -622,18 +531,19 @@ def set_csv_file_data(dest_filedir):
622
531
]
623
532
return node_info_csv
624
533
625
- def validate_secret_key (secret_key ):
626
- if not re .match (r'([0-9a-f]){32}' , secret_key ):
627
- return False
628
- return True
629
-
630
- def claim (port = None , node_platform = None , mac_addr = None , secret_key = None , flash_address = None ):
534
+ def claim (port = None , node_platform = None , mac_addr = None , flash_address = None ):
631
535
"""
632
536
Claim the node connected to the given serial port
633
537
(Get cloud credentials)
634
538
635
539
:param port: Serial Port
636
540
:type port: str
541
+
542
+ :param mac_addr: MAC Addr
543
+ :type mac_addr: str
544
+
545
+ :param flash_address: Flash Address
546
+ :type flash_address: str
637
547
638
548
:raises Exception: If there is an HTTP issue while claiming
639
549
SSLError: If there is an issue in SSL certificate validation
@@ -646,7 +556,6 @@ def claim(port=None, node_platform=None, mac_addr=None, secret_key=None, flash_a
646
556
node_info = None
647
557
private_key = None
648
558
hex_str = None
649
- secret_key_valid = None
650
559
claim_data_binary_exists = False
651
560
dest_filedir = None
652
561
output_bin_filename = None
@@ -660,13 +569,6 @@ def claim(port=None, node_platform=None, mac_addr=None, secret_key=None, flash_a
660
569
# Get node platform and mac addr if not provided
661
570
if not node_platform and not mac_addr :
662
571
node_platform , mac_addr = get_node_platform_and_mac (port )
663
- # Node platform detected is esp32s2
664
- if node_platform not in ["esp32" ]:
665
- # Get secret key
666
- secret_key = get_secret_key (port )
667
- # Set platform to esp32 if node does not have secret key
668
- if not secret_key :
669
- node_platform = "esp32"
670
572
671
573
# Verify mac directory exists
672
574
dest_filedir , output_bin_filename = verify_mac_dir_exists (creds_dir , mac_addr )
@@ -698,13 +600,6 @@ def claim(port=None, node_platform=None, mac_addr=None, secret_key=None, flash_a
698
600
flash_existing_data (port , nvs_bin_filename , flash_address )
699
601
return
700
602
701
- if node_platform not in ["esp32" ]:
702
- if not secret_key :
703
- sys .exit ("Invalid. --secret-key argument needed for platform {}." .format (node_platform ))
704
- secret_key_valid = validate_secret_key (secret_key )
705
- if not secret_key_valid :
706
- sys .exit ('Invalid Secret Key.' )
707
-
708
603
start = time .time ()
709
604
710
605
# Generate private key
@@ -714,7 +609,7 @@ def claim(port=None, node_platform=None, mac_addr=None, secret_key=None, flash_a
714
609
log .info ("Claiming process started. This may take time." )
715
610
716
611
# Start claim process
717
- node_info , node_cert = start_claim_process (node_platform , mac_addr , private_key , secret_key = secret_key )
612
+ node_info , node_cert = start_claim_process (mac_addr , node_platform , private_key )
718
613
719
614
# Get MQTT endpoint
720
615
endpointinfo = get_mqtt_endpoint ()
0 commit comments