
    :)di6                         d dl mZ d dlmZ d dlmZ d dlZd dlZd dl	Z	ddl
mZ ddlmZ dd	l
mZ dd
lmZmZmZmZmZmZ  G d de          ZdS )    )IOBase)BinaryIO)logN   )fields)EfuseDefineBlocks   )util)BaseCommandsNonCompositeTupleTupleParameteradd_force_write_alwaysadd_show_sensitive_info_optionprotect_optionsc                        e Zd ZdZej        Zdej        f fdZ	d Z
	 	 	 	 ddee         dee         d	ee         d
edededee         dz  fdZ	 	 	 ddee         dee         d	ee         d
ededefdZ xZS )ESP32H2CommandszESP32-H2clic                 
    t                                          |           t                                                      }|                    ddd                    |           dd                    t          j        j                   d          t          j
        ddt          d	d
t          |          t          t          j        |          t          j        d          t          j        t          j        j                  g                    t           t"          t$          t          j         fd                                                                        }|                    dddd                    |           dd                    t          j        j                   d          t          j
        ddt          d	d
t          |          t          t          j        |          t          j        d          t          j        t          j        j                  g                    t           t"          t$          t          j         fd                                                                        }d S )Nzburn-keyzBurn the key block with the specified name. Arguments are groups of block name, key file (containing 256 bits of binary key data) and key purpose.

Block is one of: [z, z]

Key purpose is one of: [])helpblock_keyfile_keypurposez<BLOCK> <KEYFILE> <KEYPURPOSE>Trb)metavarclsrequirednargs	max_aritytypec                     |                     d           t          |                     d           \  }}}| j        |d<    j        |||fi | d S Nforce_write_alwaysr   show_sensitive_info)popzipr#   burn_keyctxkwargsblockkeyfile
keypurposeselfs        h/var/www/menimich/repos/protonApp/venv/lib/python3.11/site-packages/espefuse/efuse/esp32h2/operations.pyburn_key_cliz6ESP32H2Commands.add_cli_commands.<locals>.burn_key_cli&   sh    6 JJ+,,,),fjj9S.T.T)U&E7J,/,CF()DM%*???????    zburn-key-digestz+Parse a RSA public key and burn the digest.zRParse a RSA public key and burn the digest to key eFuse block.

Block is one of: [)
short_helpr   c                     |                     d           t          |                     d           \  }}}| j        |d<    j        |||fi | d S r!   )r$   r%   r#   burn_key_digestr'   s        r.   burn_key_digest_cliz=ESP32H2Commands.add_cli_commands.<locals>.burn_key_digest_cliF   si    6 JJ+,,,),fjj9S.T.T)U&E7J,/,CF() D FFvFFFFFr0   )superadd_cli_commandsr   get_blocks_for_keyscommandjoinr   EfuseKeyPurposeFieldKEY_PURPOSES_NAMEclickargumentr   lenr   ChoiceFiler   r   r   pass_contextDIGEST_KEY_PURPOSES)r-   r   blocks_for_keysr/   r4   	__class__s   `    r.   r6   z ESP32H2Commands.add_cli_commands"   s     %%%+--AACC	c!%?!;!;c c (,yy1L1^'_'_c c c 
 

 

 
&4/**"L11Jt$$L!<!NOO 

 

 

 
		'			@ 	@ 	@ 	@ 
	 
(	' 
 	 


 



 

4	@ 
De!%?!;!;e e'+yy1L1`'a'ae e e 
 

 

 
&4/**"L11Jt$$L!<!PQQ 

 

 

 
		'			G 	G 	G 	G 
	 
(	' 
 	 


 



 

4	G 	G 	Gr0   c                 l   t          j        d| j                                                   | j                                        dk    rt          j        d| j        d                                          d           t          j        d           t          j        d           t          j        d| j        d	                                                    t          j        d
| j        d                                                    t          j        d| j        d                                                    t          j        d| j        d                                                    t          j        d| j        d                                                    t          j        d| j        d                                                    t          j        d| j        d                                                    t          j        d| j        d                                                    t          j        d| j        d                                                    t          j        d| j        d                                                    t          j        d| j        d                                                    t          j        d| j        d                                                    t          j        d | j        d!                                                    d S d S )"NzBlock version:r	   z!Temperature Sensor Calibration = 
TEMP_CALIBC zADC1:zAVE_INITCODE_ATTEN0      = ADC1_AVE_INITCODE_ATTEN0zAVE_INITCODE_ATTEN1      = ADC1_AVE_INITCODE_ATTEN1zAVE_INITCODE_ATTEN2      = ADC1_AVE_INITCODE_ATTEN2zAVE_INITCODE_ATTEN3      = ADC1_AVE_INITCODE_ATTEN3zHI_DOUT_ATTEN0           = ADC1_HI_DOUT_ATTEN0zHI_DOUT_ATTEN1           = ADC1_HI_DOUT_ATTEN1zHI_DOUT_ATTEN2           = ADC1_HI_DOUT_ATTEN2zHI_DOUT_ATTEN3           = ADC1_HI_DOUT_ATTEN3zCH0_ATTEN0_INITCODE_DIFF = ADC1_CH0_ATTEN0_INITCODE_DIFFzCH1_ATTEN0_INITCODE_DIFF = ADC1_CH1_ATTEN0_INITCODE_DIFFzCH2_ATTEN0_INITCODE_DIFF = ADC1_CH2_ATTEN0_INITCODE_DIFFzCH3_ATTEN0_INITCODE_DIFF = ADC1_CH3_ATTEN0_INITCODE_DIFFzCH4_ATTEN0_INITCODE_DIFF = ADC1_CH4_ATTEN0_INITCODE_DIFF)r   printefusesget_block_versionget)r-   s    r.   adc_infozESP32H2Commands.adc_infoh   s   	"DK$A$A$C$CDDD;((**a//I\$+l:S:W:W:Y:Y\\\]]]IbMMMIgI3T[A[5\5`5`5b5bcccI3T[A[5\5`5`5b5bcccI3T[A[5\5`5`5b5bcccI3T[A[5\5`5`5b5bcccI3T[AV5W5[5[5]5]^^^I3T[AV5W5[5[5]5]^^^I3T[AV5W5[5[5]5]^^^I3T[AV5W5[5[5]5]^^^I3T[A`5a5e5e5g5ghhhI3T[A`5a5e5e5g5ghhhI3T[A`5a5e5e5g5ghhhI3T[A`5a5e5e5g5ghhhI3T[A`5a5e5e5g5ghhhhh# 0/r0   FNblockskeyfileskeypurposesno_write_protectno_read_protectr#   digestc                 d   |"|dt          d |D                                }n!|dt          d |D                                }|dt          d |D                                }	|dt          d |D                                }
|                     |	||
          \  }	}}
t          j        d           t	          |	||
          D ]\  }}}d}| j        j        D ](}||j        k    s	||j        v r| j        |j                 })|t          j
        d| d	          |j        d
z  }| j                            |          }| j        j        |         }t          |t                    r)|                                }|                                 n|}t          j        d|j         d           d}| j        |j                                     |          rd| d}|ddd         }t          j        d                    |rt)          j        |d          n%d                    dgt          |          z                                 |rt          j        |           t          |          |k    r9t          j
        d                    t          |          ||d
z                      | j        |j                                     |          r|rdnd}nd}| }|                    |           d}| j        |j                                                 |k    r| j        |j                                                 rmt          j        d|j         d| j        |j                                                  d| d           | j        |j                                     |           d}nft          j
        d|j         d| d          t          j        d|j         d| d           | j        |j                                                 rd}| j                                        dk    rr|dk    rl| j        d                                          dk    r5t          j        d!           | j        d                              d"           nt          j        d#           |rAt          j        d$|j         d%           | j        |j                                                  |r(t          j        d&           |                                 |r(t          j        d'           |                                 t          j        d(           |st          j        d)           |rt          j        d*           | j                            d+          sdS t          j        d,           dS )-a  Burn the key block with the specified name. Arguments are groups of block name,
        key file (containing 256 bits of binary key data) and key purpose.

        Args:
            blocks: List of eFuse block names to burn keys to.
            keyfiles: List of open files to read key data from.
            keypurposes: List of key purposes to burn.
            no_write_protect: If True, the write protection will NOT be enabled.
            no_read_protect: If True, the read protection will NOT be enabled.
            show_sensitive_info: If True, the sensitive information will be shown.
            digest: List of digests to burn.
        Nr   c                     g | ]}||S N .0names     r.   
<listcomp>z,ESP32H2Commands.burn_key.<locals>.<listcomp>   s    GGG$d6F6F6F6Fr0   c                     g | ]}||S rc   rd   re   s     r.   rh   z,ESP32H2Commands.burn_key.<locals>.<listcomp>   s    EEE$D4D4D4D4Dr0   c                     g | ]}||S rc   rd   re   s     r.   rh   z,ESP32H2Commands.burn_key.<locals>.<listcomp>   s    AAAd0@T0@0@0@r0   c                     g | ]}||S rc   rd   re   s     r.   rh   z,ESP32H2Commands.burn_key.<locals>.<listcomp>   s    FFFdT5ET5E5E5Er0   zBurn keys to blocks:Unknown block name - .   z -  )endz	Reversing byte order for z hardware peripheral...r   z-> [{}]z??zWIncorrect key file size {}. Key file must be {} bytes ({} bits) of raw binary key data.FTz	'z': 'z' -> 'z'.zIt is not possible to change 'z' to 'z&' because write protection bit is set.z' is already 'e   	ECDSA_KEYECDSA_FORCE_USE_HARDWARE_Kz#	ECDSA_FORCE_USE_HARDWARE_K: 0 -> 1r   z*	ECDSA_FORCE_USE_HARDWARE_K is already '1'z	Disabling write to 'z'...z	Disabling read to key block...z 	Disabling write to key block...rH   z7Keys will remain writeable (due to --no-write-protect).z5Keys will remain readable (due to --no-read-protect).)check_batch_modezSuccessful.)r>   _adjust_key_data_for_blocksr   rV   r%   rW   r[   rg   aliasesptool
FatalErrorbit_lenget_index_block_by_name
isinstancer   readclosekey_purpose_nameneed_reverseformatr
   hexifyr9   need_rd_protectsaverY   is_writeableget_chip_versiondisable_writedisable_readburn_all)r-   r[   r\   r]   r^   r_   r#   r`   datafile_listblock_name_listkeypurpose_list
block_namedatafiler,   efuser*   	num_bytes	block_numdata
revers_msgread_protectwrite_protectdisable_wr_protect_key_purposes                          r.   r&   zESP32H2Commands.burn_key~   s_   . >$CGG(GGGHHJMM #CEE&EEEFFHM !AAfAAABBD
 &FFkFFFGGI

 ,,  	8 		()))03]O1
 1
 ^	 ^	,J* E+ 4 4++zU[/H/H K
3E}()N)N)N)NOOO*I;;JGGIK&y1E(F++  }}    I(EJ((c2222J{512??
KK "U*UUU  DDbDzI  *6DKc***4&3t99"455     &	*%%%4yyI%%(..4fD		9i!m/ /   {512BB:NN %(7AuuT$ 00M JJt-2*{5126688JFF;u56CCEE I\e4 \ \ K(>?CCEE\ \MW\ \ \   K 67<<ZHHH5922!,R9O R R)R R R  
 	T 6TTjTTTUUU;u56CCEE :592 {++--44,,{#?@DDFF!KK 	"HIII$@AFFqIIII	"OPPP- D	O53IOOOPPPE23AACCC %	<===""$$$ &	=>>>##%%%IbMMMM 	QIOPPP 	OIMNNN{##T#:: 	F	-     r0   c           
      |   g }|dt          d |D                                }|dt          d |D                                }	t          |	|          D ]\  }
}d}| j        j        D ](}|
|j        k    s	|
|j        v r| j        |j                 })|t          j        d|
 d          |j        dz  }t          j
        |          }t          |          |k    r.t          j        dt          |           d	| d
|dz   d          |                    |           |                     |	||||||           dS )a  Parse a RSA public key and burn the digest to key eFuse block.

        Args:
            blocks: List of eFuse block names to burn keys to.
            keyfiles: List of open files to read key data from.
            keypurposes: List of key purposes to burn.
            no_write_protect: If True, the write protection will NOT be enabled.
            no_read_protect: If True, the read protection will NOT be enabled.
            show_sensitive_info: If True, the sensitive information will be shown.
        r   c                     g | ]}||S rc   rd   re   s     r.   rh   z3ESP32H2Commands.burn_key_digest.<locals>.<listcomp>+  s    CCCd$2BT2B2B2Br0   c                     g | ]}||S rc   rd   )rf   r*   s     r.   rh   z3ESP32H2Commands.burn_key_digest.<locals>.<listcomp>-  s    $T$T$Tu%BSUBSBSBSr0   Nrl   rm   rn   zIncorrect digest size z. Digest must be z bytes (z bits) of raw binary key data.)r`   )r>   r%   rW   r[   rg   rv   rw   rx   ry   	espsecure_digest_sbv2_public_keyappendr&   )r-   r[   r\   r]   r^   r_   r#   digest_listr   
block_listr   r   r   r*   r   r`   s                   r.   r3   zESP32H2Commands.burn_key_digest  s   &  CChCCCDDF
 A$T$T$T$T$T U UWX
$'
M$B$B 	' 	' JE+ 4 4++zU[/H/H K
3E}()N)N)N)NOOO*I6x@@F6{{i''(LS[[ L L9 L L'!mL L L   v&&&& 	 	
 	
 	
 	
 	
r0   )FFFN)FFF)__name__
__module____qualname__	CHIP_NAMEr   	EspEfuses	efuse_libr<   Groupr6   rZ   liststrr   boolbytesr&   r3   __classcell__)rD   s   @r.   r   r      sk       I IBGEK BG BG BG BG BG BGLi i i6 "' %$)%)V! V!S	V! x.V! #Y	V!
 V! V! "V! Ud"V! V! V! V!z "' %$)1
 1
S	1
 x.1
 #Y	1

 1
 1
 "1
 1
 1
 1
 1
 1
 1
 1
r0   r   )ior   typingr   esptool.loggerr   
rich_clickr<   r   rw   rH   r   mem_definitionr   r
   base_operationsr   r   r   r   r   r   r   rd   r0   r.   <module>r      s"                                    - - - - - -                     k
 k
 k
 k
 k
l k
 k
 k
 k
 k
r0   