a
    kÄ#d
8  ã                   @   sö  d dl Z d dlmZmZmZ d dlmZmZmZm	Z	m
Z
mZmZmZmZmZmZmZ d dlmZ G dd„ deƒZG dd„ deƒZG d	d
„ d
eƒZeeedd� G dd„ deƒZeeedd� G dd„ deƒZeeedd� G dd„ deƒZeeedd� G dd„ deƒZeeedd� G dd„ deƒZeeedd� G dd„ deƒZeeedd� G dd „ d eƒZeeed!d� G d"d#„ d#eƒZeeed$d� G d%d&„ d&eƒZeeed'd� G d(d)„ d)eƒZ eee d*d� G d+d,„ d,eƒZ!eee!d-d� G d.d/„ d/eƒZ"eee"d0d� G d1d2„ d2eƒZ#eee#d3d� G d4d5„ d5eƒZ$eee$d6d� G d7d8„ d8eƒZ%eee%d9d� G d:d;„ d;eƒZ&eee&d<d� G d=d>„ d>eƒZ'eee'd?d� G d@dA„ dAeƒZ(eee(dBd� G dCdD„ dDeƒZ)eee)dEd� G dFdG„ dGeƒZ*eee*dHd� G dIdJ„ dJeƒZ+eee+dKd� G dLdM„ dMeƒZ,eee,dNd� G dOdP„ dPeƒZ-eee-dQd� G dRdS„ dSeƒZ.eee.dTd� G dUdV„ dVeƒZ/eee/dWd� G dXdY„ dYeƒZ0eee0dZd� G d[d\„ d\eƒZ1eee1d]d� G d^d_„ d_eƒZ2G d`da„ daeƒZ3G dbdc„ dceƒZ4G ddde„ deeƒZ5G dfdg„ dgeƒZ6G dhdi„ dieƒZ7G djdk„ dkeƒZ8G dldm„ dmeƒZ9G dndo„ doeƒZ:G dpdq„ dqeƒZ;G drds„ dseƒZ<G dtdu„ dueƒZ=G dvdw„ dweƒZ>G dxdy„ dyeƒZ?G dzd{„ d{eƒZ@G d|d}„ d}eƒZAG d~d„ deƒZBG d€d�„ d�eƒZCeeeCƒ dS )‚é    N)ÚPacketÚbind_layersÚbind_bottom_up)Ú	XIntFieldÚ
FlagsFieldÚByteEnumFieldÚThreeBytesFieldÚ	XBitFieldÚ
ShortFieldÚIntFieldÚXShortFieldÚ	ByteFieldÚ
XByteFieldÚStrFixedLenFieldÚLEShortField)ÚCANc                   @   sF   e Zd ZdZedddg d¢ƒedddƒedd	ƒed
dƒgZdd„ Z	dS )ÚCCPzCAN Calibration ProtocolÚflagsr   é   )ÚerrorZremote_transmission_requestÚextendedÚ
identifieré   Úlengthé   Úreservedc                 C   s   |d fS ©N© )ÚselfÚpr   r   úS/var/www/html/gsl.tools/lib/python3.9/site-packages/scapy/contrib/automotive/ccp.pyÚextract_padding   s    zCCP.extract_paddingN)
Ú__name__Ú
__module__Ú__qualname__Únamer   r	   r   r   Úfields_descr!   r   r   r   r    r      s   
ú	r   c                   @   sl   e Zd Zddddddddd	d
dddddddddddddddddddœZdZedd eƒed!d"ƒgZd#d$„ Zd%S )&ÚCROÚCONNECTÚGET_CCP_VERSIONÚEXCHANGE_IDÚGET_SEEDÚUNLOCKÚSET_MTAÚDNLOADÚDNLOAD_6ÚUPLOADÚSHORT_UPÚSELECT_CAL_PAGEÚGET_DAQ_SIZEÚSET_DAQ_PTRÚ	WRITE_DAQÚ
START_STOPÚ
DISCONNECTÚSET_S_STATUSÚGET_S_STATUSÚBUILD_CHKSUMÚCLEAR_MEMORYÚPROGRAMÚ	PROGRAM_6ÚMOVEÚTESTÚGET_ACTIVE_CAL_PAGEÚSTART_STOP_ALLÚDIAG_SERVICEÚACTION_SERVICE)é   é   é   é   é   é   r   é#   é   é   é   é   é   é   é   é   é   é   é   é   é   é"   é   é   é	   r   é    é!   zCommand Receive ObjectÚcmdrD   Úctrr   c                 C   s   t  d| j¡S ©NÚB©ÚstructÚpackr_   ©r   r   r   r    ÚhashretF   s    zCRO.hashretN)	r"   r#   r$   Úcommandsr%   r   r   r&   rf   r   r   r   r    r'   !   sD   ä
þr'   c                   @   s$   e Zd Zeddƒedddd�gZdS )r(   Ústation_addressr   Úccp_reservedó   ÿÿÿÿrK   ©r   N©r"   r#   r$   r   r   r&   r   r   r   r    r(   L   s   þr(   rD   ©r^   c                   @   s,   e Zd Zeddƒeddƒedddd�gZdS )	r)   Úmain_protocol_versionr   Úrelease_versionri   rj   rK   rk   N©r"   r#   r$   r   r   r&   r   r   r   r    r)   V   s   ýr)   rE   c                   @   s   e Zd Zedddd�gZdS )r*   Zccp_master_device_idó         rQ   rk   N©r"   r#   r$   r   r&   r   r   r   r    r*   a   s   ÿr*   rF   c                   @   s$   e Zd Zeddƒedddd�gZdS )r+   Úresourcer   ri   ó   ÿÿÿÿÿrZ   rk   Nrp   r   r   r   r    r+   j   s   þr+   rG   c                   @   s   e Zd Zedddd�gZdS )r,   Úkeyrq   rQ   rk   Nrr   r   r   r   r    r,   t   s   ÿr,   rH   c                   @   s(   e Zd ZeddƒeddƒeddƒgZdS )r-   Zmta_numr   Úaddress_extensionÚaddressN©r"   r#   r$   r   r   r&   r   r   r   r    r-   }   s   ýr-   rI   c                   @   s$   e Zd Zeddƒedddd�gZdS )r.   Úsizer   Údataó        rZ   rk   Nrp   r   r   r   r    r.   ˆ   s   þr.   r   c                   @   s   e Zd Zedddd�gZdS )r/   rz   rq   rQ   rk   Nrr   r   r   r   r    r/   ’   s   ÿr/   rJ   c                   @   s$   e Zd Zeddƒedddd�gZdS )r0   ry   r   ri   rt   rZ   rk   Nrp   r   r   r   r    r0   ›   s   þr0   rK   c                   @   s(   e Zd ZeddƒeddƒeddƒgZdS )r1   ry   r   rv   rw   Nrx   r   r   r   r    r1   ¥   s   ýr1   rL   c                   @   s   e Zd Zedddd�gZdS )r2   ri   ó   ÿÿÿÿÿÿrQ   rk   Nrr   r   r   r   r    r2   °   s   ÿr2   rM   c                   @   s(   e Zd ZeddƒeddƒeddƒgZdS )r3   ÚDAQ_numr   ri   ZDTO_identifierNrx   r   r   r   r    r3   ¹   s   ýr3   rN   c                   @   s4   e Zd Zeddƒeddƒeddƒedddd�gZd	S )
r4   r}   r   ÚODT_numZODT_elementri   ó   ÿÿÿr   rk   Nrp   r   r   r   r    r4   Ä   s
   ür4   rO   c                   @   s(   e Zd ZeddƒeddƒeddƒgZdS )r5   ZDAQ_sizer   rv   rw   Nrx   r   r   r   r    r5   Ð   s   ýr5   rP   c                   @   s8   e Zd ZeddƒeddƒeddƒeddƒeddƒgZdS )r6   Úmoder   r}   r~   Zevent_channelZtransmission_rateN)r"   r#   r$   r   r   r&   r   r   r   r    r6   Û   s   ûr6   rQ   c                   @   s@   e Zd Zedddddœƒedddd	�ed
dƒedddd	�gZdS )r7   Útyper   Ú	temporaryZend_of_session©r   rD   Zccp_reserved0ó   ÿrD   rk   rh   ri   ó   ÿÿrI   N)r"   r#   r$   r   r   r   r&   r   r   r   r    r7   è   s
   ür7   rR   c                   @   s0   e Zd ZdZedddg d¢ƒedddd	�gZd
S )r8   zSet Session StatusÚsession_statusr   r   ©ZCALZDAQÚRESUMEZRES0ZRES1ZRES2ZSTOREZRUNri   rt   rZ   rk   N)r"   r#   r$   r%   r   r   r&   r   r   r   r    r8   ô   s   ýr8   rS   c                   @   s   e Zd Zedddd�gZdS )r9   ri   r|   rQ   rk   Nrr   r   r   r   r    r9      s   ÿr9   rT   c                   @   s$   e Zd Zeddƒedddd�gZdS )r:   ry   r   ri   r…   rI   rk   N©r"   r#   r$   r   r   r&   r   r   r   r    r:   	  s   þr:   rU   c                   @   s$   e Zd Zeddƒedddd�gZdS )r;   ry   r   ri   r…   rI   rk   Nr‰   r   r   r   r    r;     s   þr;   rV   c                   @   s8   e Zd Zeddƒedddd„ d�edd	d
d„ d�gZdS )r<   ry   r   rz   ó    c                 C   s   | j S r   ©ry   ©Zpktr   r   r    Ú<lambda>!  ó    zPROGRAM.<lambda>©Zlength_fromri   rt   c                 C   s
   d| j  S )NrZ   r‹   rŒ   r   r   r    r�   #  rŽ   Nrp   r   r   r   r    r<     s   ÿÿür<   rW   c                   @   s   e Zd Zedddd�gZdS )r=   rz   rq   rQ   rk   Nrr   r   r   r   r    r=   *  s   ÿr=   rX   c                   @   s$   e Zd Zeddƒedddd�gZdS )r>   ry   r   ri   r…   rI   rk   Nr‰   r   r   r   r    r>   3  s   þr>   rY   c                   @   s$   e Zd Zeddƒedddd�gZdS )r?   rh   r   ri   rj   rK   rk   Nrl   r   r   r   r    r?   =  s   þr?   rZ   c                   @   s   e Zd Zedddd�gZdS )r@   ri   r|   rQ   rk   Nrr   r   r   r   r    r@   G  s   ÿr@   r[   c                   @   s,   e Zd Zedddddœƒedddd	�gZd
S )rA   r�   r   ÚstopÚstartrƒ   ri   rt   rZ   rk   N)r"   r#   r$   r   r   r&   r   r   r   r    rA   P  s   þrA   r   c                   @   s$   e Zd Zeddƒedddd�gZdS )rB   Zdiag_servicer   ri   rj   rK   rk   N©r"   r#   r$   r
   r   r&   r   r   r   r    rB   [  s   þrB   r\   c                   @   s$   e Zd Zeddƒedddd�gZdS )rC   Zaction_servicer   ri   rj   rK   rk   Nr’   r   r   r   r    rC   e  s   þrC   r]   c                   @   s   e Zd Zedddd�gZdS )ÚDEFAULT_DTOÚloadrt   rZ   rk   Nrr   r   r   r   r    r“   q  s   ÿr“   c                   @   s,   e Zd Zeddƒeddƒedddd�gZdS )	ÚGET_CCP_VERSION_DTOrn   r   ro   ri   ó      r   rk   Nrp   r   r   r   r    r•   w  s   ýr•   c                	   @   s<   e Zd Zeddƒeddƒeddƒeddƒedddd	�gZd
S )ÚEXCHANGE_ID_DTOZslave_device_ID_lengthr   Zdata_type_qualifierZresource_availability_maskZresource_protection_maskri   r„   rD   rk   N©r"   r#   r$   r   r   r&   r   r   r   r    r—     s   ûr—   c                   @   s$   e Zd Zeddƒedddd�gZdS )ÚGET_SEED_DTOZprotection_statusr   Úseedó       rK   rk   Nrp   r   r   r   r    r™   ‰  s   þr™   c                   @   s$   e Zd Zeddƒedddd�gZdS )Ú
UNLOCK_DTOZprivilege_statusr   ri   rj   rK   rk   Nr˜   r   r   r   r    rœ   �  s   þrœ   c                   @   s    e Zd ZeddƒeddƒgZdS )Ú
DNLOAD_DTOÚMTA0_extensionr   ÚMTA0_addressNrx   r   r   r   r    r�   —  s   þr�   c                   @   s    e Zd ZeddƒeddƒgZdS )ÚDNLOAD_6_DTOrž   r   rŸ   Nrx   r   r   r   r    r    ž  s   þr    c                   @   s   e Zd Zedddd�gZdS )Ú
UPLOAD_DTOrz   r{   rZ   rk   Nrr   r   r   r   r    r¡   ¥  s   ÿr¡   c                   @   s   e Zd Zedddd�gZdS )ÚSHORT_UP_DTOrz   r{   rZ   rk   Nrr   r   r   r   r    r¢   «  s   ÿr¢   c                   @   s,   e Zd Zeddƒeddƒedddd�gZdS )	ÚGET_DAQ_SIZE_DTOZDAQ_list_sizer   Z	first_pidri   r   r   rk   Nrp   r   r   r   r    r£   ±  s   ýr£   c                   @   s4   e Zd Zedddg d¢ƒeddƒedddd	�gZd
S )ÚGET_S_STATUS_DTOr†   r   r   r‡   Zinformation_qualifierÚinformationr–   r   rk   N)r"   r#   r$   r   r   r   r&   r   r   r   r    r¤   ¹  s   ür¤   c                   @   s8   e Zd Zeddƒedddd„ d�edd	d
d„ d�gZdS )ÚBUILD_CHKSUM_DTOÚchecksum_sizer   Zchecksum_datar›   c                 C   s   | j S r   ©r§   rŒ   r   r   r    r�   Æ  rŽ   zBUILD_CHKSUM_DTO.<lambda>r�   ri   rŠ   c                 C   s
   d| j  S )NrK   r¨   rŒ   r   r   r    r�   È  rŽ   Nr˜   r   r   r   r    r¦   Â  s   ÿÿür¦   c                   @   s    e Zd ZeddƒeddƒgZdS )ÚPROGRAM_DTOrž   r   rŸ   N©r"   r#   r$   r   r   r&   r   r   r   r    r©   Ì  s   þr©   c                   @   s    e Zd ZeddƒeddƒgZdS )ÚPROGRAM_6_DTOrž   r   rŸ   Nrª   r   r   r   r    r«   Ó  s   þr«   c                   @   s    e Zd ZeddƒeddƒgZdS )ÚGET_ACTIVE_CAL_PAGE_DTOrv   r   rw   Nrx   r   r   r   r    r¬   Ú  s   þr¬   c                   @   s,   e Zd Zeddƒeddƒedddd�gZdS )	ÚDIAG_SERVICE_DTOÚdata_lengthr   Ú	data_typeri   r   r   rk   Nr˜   r   r   r   r    r­   á  s   ýr­   c                   @   s,   e Zd Zeddƒeddƒedddd�gZdS )	ÚACTION_SERVICE_DTOr®   r   r¯   ri   r   r   rk   Nr˜   r   r   r   r    r°   é  s   ýr°   c                       sœ   e Zd Zejdg Zdddddddd	d
ddddddddddœZeddƒeddeƒeddƒgZ	dd„ Z
‡ fdd„Zdd„ Zed d!„ ƒZd"d#„ Zd$d%„ Z‡  ZS )&ÚDTOÚpayload_clszacknowledge / no errorzDAQ processor overloadzcommand processor busyzDAQ processor busyzinternal timeoutzkey requestzsession status requestzcold start requestzcal. data init. requestzDAQ list init. requestzcode update requestzunknown commandzcommand syntaxzparameter(s) out of rangezaccess deniedÚoverloadzaccess lockedzresource/function not available)r   rD   rV   rM   rG   rW   rY   r\   r]   rX   rJ   é0   é1   é2   é3   é4   é5   é6   Z	packet_idéÿ   Zreturn_coder   r_   c                 O   s:   t | _d|v r|d | _|d= tj| g|¢R i |¤Ž d S )Nr²   )r“   r²   r   Ú__init__)r   ÚargsÚkwargsr   r   r    r¼     s
    
zDTO.__init__c                    s   t t| ƒ |¡o| j|jkS r   )Úsuperr±   Ú__eq__r²   )r   Úother©Ú	__class__r   r    rÀ     s    
ÿz
DTO.__eq__c                 C   s   | j S r   )r²   )r   Úpayloadr   r   r    Úguess_payload_class  s    zDTO.guess_payload_classc                 C   sH   z,t ttttttttt	t
tttttdœ|  W S  tyB   t Y S 0 d S )N)r   rK   r[   rT   rU   rL   rG   rH   rN   rF   rW   rE   r\   r]   rX   rJ   )r�   r¡   r¬   r¤   r¦   r¢   r™   rœ   r£   r—   r©   r•   r­   r°   r«   r    ÚKeyErrorr“   rm   r   r   r    Úget_dto_cls  s,    ðïzDTO.get_dto_clsc                 C   sv   t |dƒsdS | j|jkrdS t |dƒs,dS |  |j¡}| j|krr| jtkrrt| jƒ}|  ¡  |  	||ƒ¡ || _dS )aú  In CCP, the payload of a DTO packet is dependent on the cmd field
        of a corresponding CRO packet. Two packets correspond, if there
        ctr field is equal. If answers detect the corresponding CRO, it will
        interpret the payload of a DTO with the correct class. In CCP, there is
        no other way, to determine the class of a DTO payload. Since answers is
        called on sr and sr1, this modification of the original answers
        implementation will give a better user experience. r_   r   r^   rD   )
Úhasattrr_   rÇ   r^   r²   r“   Úbytesr”   Zremove_payloadZadd_payload)r   rÁ   Z
new_pl_clsrz   r   r   r    Úanswers4  s    


ÿ
zDTO.answersc                 C   s   t  d| j¡S r`   rb   re   r   r   r    rf   L  s    zDTO.hashret)r"   r#   r$   r   Ú	__slots__Zreturn_codesr   r   r   r&   r¼   rÀ   rÅ   ÚstaticmethodrÇ   rÊ   rf   Ú__classcell__r   r   rÂ   r    r±   ñ  s>   î
ý
r±   )Drc   Zscapy.packetr   r   r   Zscapy.fieldsr   r   r   r   r	   r
   r   r   r   r   r   r   Zscapy.layers.canr   r   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   r“   r•   r—   r™   rœ   r�   r    r¡   r¢   r£   r¤   r¦   r©   r«   r¬   r­   r°   r±   r   r   r   r    Ú<module>	   s    8+	
		

	
_