a
    kÄ#dEp  ã                   @   s8  d dl Z d dlZd dl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mZmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d d	lmZmZ zejd
 d r°W n* eyÜ   e  d¡ ddiejd
< Y n0 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,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ƒZ0ee!e0d<d� G d=d>„ d>eƒZ1ee!e1d?d� G d@dA„ dAeƒZ2ee!e2dBd� G dCdD„ dDeƒZ3ee!e3dEd� G dFdG„ dGeƒZ4ee!e4dHd� G dIdJ„ dJeƒZ5ee!e5dKd� G dLdM„ dMeƒZ6ee!e6dNd� G dOdP„ dPeƒZ7ee!e7dQd� G dRdS„ dSeƒZ8ee!e8dTd� G dUdV„ dVeƒZ9ee!e9dWd� G dXdY„ dYeƒZ:ee!e:dZd� G d[d\„ d\eƒZ;ee!e;d]d� G d^d_„ d_eƒZ<ee!e<d`d� G dadb„ dbeƒZ=ee!e=dcd� G ddde„ deeƒZ>ee!e>dfd� G dgdh„ dheƒZ?ee!e?did� G djdk„ dkeƒZ@ee!e@dld� G dmdn„ dneƒZAee!eAdod� G dpdq„ dqeƒZBee!eBdrd� G dsdt„ dteƒZCee!eCdud� G dvdw„ dweƒZDee!eDdxd� G dydz„ dzeƒZEee!eEd{d� G d|d}„ d}eƒZFee!eFd~d� G dd€„ d€eƒZGee!eGd�d� G d‚dƒ„ dƒeƒZHee!eHd„d� G d…d†„ d†eƒZIee!eId‡d� G dˆd‰„ d‰eƒZJee!eJdŠd� G d‹dŒ„ dŒeƒZKee!eKd�d� G dŽd�„ d�eƒZLee!eLd�d� G d‘d’„ d’eƒZMee!eMd“d� G d”d•„ d•eƒZNee!eNd–d� G d—d˜„ d˜eƒZOee!eOd™d� G dšd›„ d›eƒZPee!ePdœd� G d�dž„ džeƒZQee!eQdŸd� G d d¡„ d¡eƒZRee!eRd¢d� G d£d¤„ d¤eƒZSee!eSd¥d� G d¦d§„ d§eƒZTee!eTd¨d� G d©dª„ dªeƒZUee!eUd«d� G d¬d­„ d­eƒZVee!eVd®d� G d¯d°„ d°eƒZWdS )±é    N)
ÚByteEnumFieldÚStrFieldÚConditionalFieldÚBitFieldÚ
XByteFieldÚX3BytesFieldÚ	ByteFieldÚObservableDictÚXShortEnumFieldÚXByteEnumField)ÚPacketÚbind_layersÚ	NoPayload)Úconf)Úlog_loading)ÚPeriodicSenderThread)Ú_PacketIterable)ÚISOTP)ÚDictÚAnyÚKWPú treat-response-pending-as-answerzÈSpecify "conf.contribs['KWP'] = {'treat-response-pending-as-answer': True}" to treat a negative response 'requestCorrectlyReceived-ResponsePending' as answer of a request. 
The default value is False.Fc                9   @   s¦   e Zd Ze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ddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8œ7ƒZd Zed9d:eƒgZd;d<„ Zd=d>„ Z	d?S )@r   ÚStartDiagnosticSessionÚECUResetÚClearDiagnosticInformationÚ"ReadStatusOfDiagnosticTroubleCodesZ"ReadDiagnosticTroubleCodesByStatusÚReadECUIdentificationÚReadDataByLocalIdentifierÚReadDataByIdentifierÚReadMemoryByAddressÚSecurityAccessÚ DisableNormalMessageTransmissionÚEnableNormalMessageTransmissionÚ DynamicallyDefineLocalIdentifierÚWriteDataByIdentifierÚ#InputOutputControlByLocalIdentifierÚStartRoutineByLocalIdentifierÚStopRoutineByLocalIdentifierÚ&RequestRoutineResultsByLocalIdentifierÚRequestDownloadÚRequestUploadÚTransferDataÚRequestTransferExitÚWriteDataByLocalIdentifierÚWriteMemoryByAddressÚTesterPresentÚControlDTCSettingÚResponseOnEventÚ&StartDiagnosticSessionPositiveResponseÚECUResetPositiveResponseÚ*ClearDiagnosticInformationPositiveResponseÚ2ReadStatusOfDiagnosticTroubleCodesPositiveResponseZ2ReadDiagnosticTroubleCodesByStatusPositiveResponseÚ%ReadECUIdentificationPositiveResponseÚ)ReadDataByLocalIdentifierPositiveResponseÚ$ReadDataByIdentifierPositiveResponseÚ#ReadMemoryByAddressPositiveResponseÚSecurityAccessPositiveResponseÚ0DisableNormalMessageTransmissionPositiveResponseÚ/EnableNormalMessageTransmissionPositiveResponseÚ0DynamicallyDefineLocalIdentifierPositiveResponseÚ%WriteDataByIdentifierPositiveResponseÚ3InputOutputControlByLocalIdentifierPositiveResponseÚ-StartRoutineByLocalIdentifierPositiveResponseÚ,StopRoutineByLocalIdentifierPositiveResponseÚ6RequestRoutineResultsByLocalIdentifierPositiveResponseÚRequestDownloadPositiveResponseÚRequestUploadPositiveResponseÚTransferDataPositiveResponseÚ#RequestTransferExitPositiveResponseÚ*WriteDataByLocalIdentifierPositiveResponseÚ$WriteMemoryByAddressPositiveResponseÚTesterPresentPositiveResponseÚ!ControlDTCSettingPositiveResponseÚResponseOnEventPositiveResponseÚNegativeResponse)7é   é   é   é   é   é   é!   é"   é#   é'   é(   é)   é,   é.   é0   é1   é2   é3   é4   é5   é6   é7   é;   é=   é>   é…   é†   éP   éQ   éT   éW   éX   éZ   éa   éb   éc   ég   éh   éi   él   én   ép   éq   ér   és   ét   éu   év   éw   é{   é}   é~   éÅ   éÆ   é   Úservicer   c                 C   sr   t |t| ƒƒsdS | jdkr(| j |¡S | j|jd krnt | jtƒsPt |jtƒr`t| ƒt|ƒkS | j |j¡S dS )NFrƒ   é@   )Ú
isinstanceÚtyper„   ÚpayloadÚanswersr   Úlen©ÚselfÚother© rŽ   úS/var/www/html/gsl.tools/lib/python3.9/site-packages/scapy/contrib/automotive/kwp.pyr‰   b   s    

ÿzKWP.answersc                 C   s.   | j dkrt d| j¡S t d| j d@ ¡S d S )Nrƒ   ÚBi¿ÿÿÿ)r„   ÚstructÚpackÚrequestServiceId)rŒ   rŽ   rŽ   r�   Úhashretp   s    
zKWP.hashretN)
Ú__name__Ú
__module__Ú__qualname__r	   ÚservicesÚnamer   Úfields_descr‰   r”   rŽ   rŽ   rŽ   r�   r   $   s~   Êÿ8
ÿc                   @   s2   e Zd ZeddddddœƒZdZedd	eƒgZd
S )ÚKWP_SDSZdefaultSessionZprogrammingSessionZstandBySessionZEcuPassiveSessionZextendedDiagnosticSession)é�   rf   é‰   é�   é’   r   ÚdiagnosticSessionr   N)r•   r–   r—   r	   ÚdiagnosticSessionTypesr™   r   rš   rŽ   rŽ   rŽ   r�   r›   y   s   û
ÿr›   rM   )r„   c                   @   s(   e Zd ZdZeddejƒgZdd„ ZdS )Ú	KWP_SDSPRr2   r    r   c                 C   s   t |tƒo|j| jkS ©N)r†   r›   r    r‹   rŽ   rŽ   r�   r‰   �   s    

ÿzKWP_SDSPR.answersN)	r•   r–   r—   r™   r   r›   r¡   rš   r‰   rŽ   rŽ   rŽ   r�   r¢   ‰   s   ÿÿr¢   rh   c                   @   s*   e Zd ZddddœZdZeddeƒgZdS )	ÚKWP_ERÚreservedZpowerOnResetZnonvolatileMemoryReset)r   é   é‚   r   Z	resetModer   N)r•   r–   r—   Z
resetModesr™   r   rš   rŽ   rŽ   rŽ   r�   r¤   š   s   ý
ÿr¤   rN   c                   @   s   e Zd ZdZdd„ ZdS )ÚKWP_ERPRr3   c                 C   s
   t |tƒS r£   )r†   r¤   r‹   rŽ   rŽ   r�   r‰   «   s    zKWP_ERPR.answersN©r•   r–   r—   r™   r‰   rŽ   rŽ   rŽ   r�   r¨   ¨   s   r¨   ri   c                   @   s.   e Zd ZdZeddƒeeddƒdd„ ƒgZdS )	ÚKWP_SAr    Ú
accessModer   Úkeyó    c                 C   s   | j d dkS )Né   r   ©r«   ©ÚpktrŽ   rŽ   r�   Ú<lambda>¹   r­   zKWP_SA.<lambda>N)r•   r–   r—   r™   r   r   r   rš   rŽ   rŽ   rŽ   r�   rª   ´   s   
ÿþrª   rV   c                   @   s6   e Zd ZdZeddƒeeddƒdd„ ƒgZdd	„ Zd
S )ÚKWP_SAPRr:   r«   r   Úseedr­   c                 C   s   | j d dkS )Nr®   r¦   r¯   r°   rŽ   rŽ   r�   r²   Å   r­   zKWP_SAPR.<lambda>c                 C   s   t |tƒo|j| jkS r£   )r†   rª   r«   r‹   rŽ   rŽ   r�   r‰   È   s    

ÿzKWP_SAPR.answersN)	r•   r–   r—   r™   r   r   r   rš   r‰   rŽ   rŽ   rŽ   r�   r³   À   s   
ÿþr³   rq   c                   @   sD   e Zd ZdZdddddddœZed	d
ƒedd
eƒedddd�gZdS )Ú
KWP_IOCBLIr%   zReturn Control to ECUzReport Current StatezReset to DefaultzFreeze Current StatezShort Term AdjustmentzLong Term Adjustment)r   r¦   é   é   é   é   ÚlocalIdentifierr   ÚinputOutputControlParameterÚcontrolStater­   r�   ©ÚfmtN)	r•   r–   r—   r™   ÚinputOutputControlParametersr   r   r   rš   rŽ   rŽ   rŽ   r�   rµ   Ò   s   ú	ÿürµ   r[   c                   @   s<   e Zd ZdZeddƒeddejƒedddd�gZ	d	d
„ Z
dS )ÚKWP_IOCBLIPRr?   rº   r   r»   r¼   r­   r�   r½   c                 C   s   t |tƒo|j| jkS r£   )r†   rµ   rº   r‹   rŽ   rŽ   r�   r‰   ð   s    

ÿzKWP_IOCBLIPR.answersN)r•   r–   r—   r™   r   r   rµ   r¿   r   rš   r‰   rŽ   rŽ   rŽ   r�   rÀ   ç   s   ÿürÀ   rv   c                   @   s(   e Zd ZdddœZdZeddeƒgZdS )ÚKWP_DNMTÚresponseRequiredÚ
noResponse©r¦   r®   r!   r   N©r•   r–   r—   ÚresponseTypesr™   r   rš   rŽ   rŽ   rŽ   r�   rÁ   ú   s   þ
ÿrÁ   rW   c                   @   s   e Zd ZdZdd„ ZdS )Ú
KWP_DNMTPRr;   c                 C   s
   t |tƒS r£   ©r†   rÁ   r‹   rŽ   rŽ   r�   r‰     s    zKWP_DNMTPR.answersNr©   rŽ   rŽ   rŽ   r�   rÇ     s   rÇ   rr   c                   @   s(   e Zd ZdddœZdZeddeƒgZdS )ÚKWP_ENMTrÂ   rÃ   rÄ   r"   r¦   NrÅ   rŽ   rŽ   rŽ   r�   rÉ     s   þ
ÿrÉ   rX   c                   @   s   e Zd ZdZdd„ ZdS )Ú
KWP_ENMTPRr<   c                 C   s
   t |tƒS r£   rÈ   r‹   rŽ   rŽ   r�   r‰   %  s    zKWP_ENMTPR.answersNr©   rŽ   rŽ   rŽ   r�   rÊ   "  s   rÊ   rs   c                   @   s(   e Zd ZdddœZdZeddeƒgZdS )ÚKWP_TPrÂ   rÃ   rÄ   r/   r¦   NrÅ   rŽ   rŽ   rŽ   r�   rË   .  s   þ
ÿrË   re   c                   @   s   e Zd ZdZdd„ ZdS )ÚKWP_TPPRrI   c                 C   s
   t |tƒS r£   )r†   rË   r‹   rŽ   rŽ   r�   r‰   ?  s    zKWP_TPPR.answersNr©   rŽ   rŽ   rŽ   r�   rÌ   <  s   rÌ   r€   c                   @   sX   e Zd ZdddœZdddddd	œZd
dddœZdZeddeƒeddeƒeddeƒgZ	dS )Ú	KWP_CDTCSrÂ   rÃ   rÄ   ÚallPowertrainDTCsÚallChassisDTCsÚallBodyDTCsÚallNetworkDTCsÚallDTCs©r   i @  i €  i À  i ÿ  ÚReservedÚonÚoff)r   r¦   r®   r0   r¦   Ú
groupOfDTCr   ZDTCSettingModeN)
r•   r–   r—   rÆ   Ú	DTCGroupsZDTCSettingModesr™   r   r
   rš   rŽ   rŽ   rŽ   r�   rÍ   H  s$   þûý


ýrÍ   rf   c                   @   s   e Zd ZdZdd„ ZdS )ÚKWP_CDTCSPRrJ   c                 C   s
   t |tƒS r£   )r†   rÍ   r‹   rŽ   rŽ   r�   r‰   g  s    zKWP_CDTCSPR.answersNr©   rŽ   rŽ   rŽ   r�   rÙ   d  s   rÙ   r�   c                   @   sx   e Zd ZdddœZdddddœZd	d
dddddœZdZeddeƒeddeƒeddeƒeddƒedde	j
ƒeddƒgZdS )ÚKWP_ROErÂ   rÃ   rÄ   r¥   ZtesterPresentRequiredZinfiniteTimeToResponseZnoEventWindow)r   r¦   r®   é€   ZreportActivatedEventsZstopResponseOnEventZonNewDTCZonTimerInterruptZonChangeOfRecordValueZonComparisonOfValues)rÛ   rœ   r§   éƒ   é„   é    r1   r¦   ÚeventWindowTimer   Ú	eventTypeZeventParameterZserviceToRespondZserviceParameterN)r•   r–   r—   rÆ   ÚeventWindowTimesÚ
eventTypesr™   r   r   r   r˜   rš   rŽ   rŽ   rŽ   r�   rÚ   p  s.   þüú


úrÚ   rg   c                   @   s<   e Zd ZdZeddƒeddejƒeddejƒgZ	dd„ Z
dS )	Ú	KWP_ROEPRrK   ZnumberOfActivatedEventsr   rß   rà   c                 C   s   t |tƒo|j| jkS r£   )r†   rÚ   rà   r‹   rŽ   rŽ   r�   r‰   ™  s    

ÿzKWP_ROEPR.answersN)r•   r–   r—   r™   r   r   rÚ   rá   râ   rš   r‰   rŽ   rŽ   rŽ   r�   rã   ‘  s   ýrã   r‚   c                   @   s@   e Zd Zeddddddddd	d
dddœƒZdZeddeƒgZdS )Ú	KWP_RDBLIzDevelopment DatazECU Serial Numberz
DBCom DatazOperating System Versionz Ecu Reprogramming IdentificationzVehicle InformationzFlash Info 1zFlash Info 2z(System Diagnostic general parameter dataz'System Diagnostic global parameter datazEcu ConfigurationzDiagnostic Protocol Information)éà   éá   éâ   éã   éä   éå   éæ   éç   éè   éé   éê   éë   r   ÚrecordLocalIdentifierr   N)r•   r–   r—   r	   ÚlocalIdentifiersr™   r   rš   rŽ   rŽ   rŽ   r�   rä   £  s"   ô
ÿrä   rS   c                   @   s(   e Zd ZdZeddejƒgZdd„ ZdS )ÚKWP_RDBLIPRr7   rñ   r   c                 C   s   t |tƒo| j|jkS r£   )r†   rä   rñ   r‹   rŽ   rŽ   r�   r‰   Á  s    

ÿzKWP_RDBLIPR.answersN©	r•   r–   r—   r™   r   rä   rò   rš   r‰   rŽ   rŽ   rŽ   r�   ró   »  s   ÿró   rn   c                   @   s    e Zd ZdZeddejƒgZdS )Ú	KWP_WDBLIr-   rñ   r   N)r•   r–   r—   r™   r   rä   rò   rš   rŽ   rŽ   rŽ   r�   rõ   Ë  s   ÿrõ   rc   c                   @   s(   e Zd ZdZeddejƒgZdd„ ZdS )ÚKWP_WDBLIPRrG   rñ   r   c                 C   s   t |tƒo| j|jkS r£   )r†   rõ   rñ   r‹   rŽ   rŽ   r�   r‰   Û  s    

ÿzKWP_WDBLIPR.answersNrô   rŽ   rŽ   rŽ   r�   rö   Õ  s   ÿrö   r~   c                   @   s$   e Zd Zeƒ ZdZeddeƒgZdS )ÚKWP_RDBIr   Ú
identifierr   N)r•   r–   r—   r	   ÚdataIdentifiersr™   r
   rš   rŽ   rŽ   rŽ   r�   r÷   å  s   
ÿr÷   rT   c                   @   s(   e Zd ZdZeddejƒgZdd„ ZdS )Ú
KWP_RDBIPRr8   rø   r   c                 C   s   t |tƒo| j|jkS r£   )r†   r÷   rø   r‹   rŽ   rŽ   r�   r‰   ö  s    

ÿzKWP_RDBIPR.answersN©	r•   r–   r—   r™   r
   r÷   rù   rš   r‰   rŽ   rŽ   rŽ   r�   rú   ð  s   ÿrú   ro   c                   @   s$   e Zd ZdZeddƒeddƒgZdS )ÚKWP_RMBAr   ÚmemoryAddressr   Ú
memorySizeN)r•   r–   r—   r™   r   r   rš   rŽ   rŽ   rŽ   r�   rü      s   þrü   rU   c                   @   s(   e Zd ZdZedddd�gZdd„ ZdS )	Ú
KWP_RMBAPRr9   Ú
dataRecordr­   r�   r½   c                 C   s
   t |tƒS r£   )r†   rü   r‹   rŽ   rŽ   r�   r‰     s    zKWP_RMBAPR.answersN©r•   r–   r—   r™   r   rš   r‰   rŽ   rŽ   rŽ   r�   rÿ     s   ÿrÿ   rp   c                   @   s@   e Zd ZdZdddddœZeddƒed	deƒed
ddd�gZdS )ÚKWP_DDLIr#   ZdefineByLocalIdentifierZdefineByMemoryAddressZdefineByIdentifierZ&clearDynamicallyDefinedLocalIdentifier)r¦   r®   é   r¶   Ú dynamicallyDefineLocalIdentifierr   ZdefinitionModer   r­   r�   r½   N)	r•   r–   r—   r™   ZdefinitionModesr   r   r   rš   rŽ   rŽ   rŽ   r�   r    s   ý
ýr  rY   c                   @   s$   e Zd ZdZeddƒgZdd„ ZdS )Ú
KWP_DDLIPRr=   r  r   c                 C   s   t |tƒo|j| jkS r£   )r†   r  r  r‹   rŽ   rŽ   r�   r‰   2  s    

ÿzKWP_DDLIPR.answersN)r•   r–   r—   r™   r   rš   r‰   rŽ   rŽ   rŽ   r�   r  ,  s   ÿr  rt   c                   @   s    e Zd ZdZeddejƒgZdS )ÚKWP_WDBIr$   rø   r   N)r•   r–   r—   r™   r
   r÷   rù   rš   rŽ   rŽ   rŽ   r�   r  <  s   ÿr  rZ   c                   @   s(   e Zd ZdZeddejƒgZdd„ ZdS )Ú
KWP_WDBIPRr>   rø   r   c                 C   s   t |tƒo|j| jkS r£   )r†   r  rø   r‹   rŽ   rŽ   r�   r‰   L  s    

ÿzKWP_WDBIPR.answersNrû   rŽ   rŽ   rŽ   r�   r  F  s   ÿr  ru   c                   @   s0   e Zd ZdZeddƒeddƒedddd�gZd	S )
ÚKWP_WMBAr.   rý   r   rþ   r   r­   r�   r½   N)r•   r–   r—   r™   r   r   r   rš   rŽ   rŽ   rŽ   r�   r  V  s
   ýr  rd   c                   @   s$   e Zd ZdZeddƒgZdd„ ZdS )Ú
KWP_WMBAPRrH   rý   r   c                 C   s   t |tƒo|j| jkS r£   )r†   r  rý   r‹   rŽ   rŽ   r�   r‰   h  s    

ÿzKWP_WMBAPR.answersN)r•   r–   r—   r™   r   rš   r‰   rŽ   rŽ   rŽ   r�   r	  b  s   ÿr	  r   c                   @   s.   e Zd ZddddddœZdZedd	eƒgZd
S )ÚKWP_CDIrÎ   rÏ   rÐ   rÑ   rÒ   rÓ   r   r×   r   N)r•   r–   r—   rØ   r™   r
   rš   rŽ   rŽ   rŽ   r�   r
  r  s   û
ÿr
  rO   c                   @   s(   e Zd ZdZeddejƒgZdd„ ZdS )Ú	KWP_CDIPRr4   r×   r   c                 C   s   t |tƒo| j|jkS r£   )r†   r
  r×   r‹   rŽ   rŽ   r�   r‰   Š  s    

ÿzKWP_CDIPR.answersN)	r•   r–   r—   r™   r
   r
  rØ   rš   r‰   rŽ   rŽ   rŽ   r�   r  ƒ  s   ÿr  rj   c                   @   s    e Zd ZdZeddejƒgZdS )Ú
KWP_RSODTCr   r×   r   N)r•   r–   r—   r™   r
   r
  rØ   rš   rŽ   rŽ   rŽ   r�   r  ”  s   ÿr  rP   c                   @   s$   e Zd ZdZeddƒgZdd„ ZdS )ÚKWP_RSODTCPRr5   ZnumberOfDTCr   c                 C   s
   t |tƒS r£   )r†   r  r‹   rŽ   rŽ   r�   r‰   ¥  s    zKWP_RSODTCPR.answersN)r•   r–   r—   r™   r   rš   r‰   rŽ   rŽ   rŽ   r�   r  ž  s   ÿr  rk   c                   @   sB   e Zd ZdZedddddddd	d
dddddœƒZeddeƒgZdS )Ú	KWP_RECUIr   zDCS ECU IdentificationzDCX / MMC ECU IdentificationzVIN (Original)zDiagnostic Variant CodezVIN (Current)zCalibration IdentificationzCalibration Verification NumberzECU Code FingerprintzECU Data Fingerprintz ECU Code Software Identificationz ECU Data Software Identificationz ECU Boot Software IdentificationzECU Boot Fingerprint)rg   é‡   éˆ   r�   rž   é–   é—   éš   é˜   éœ   é�   éž   éŸ   rº   r   N)r•   r–   r—   r™   r	   rò   r   rš   rŽ   rŽ   rŽ   r�   r  ®  s$   ó
ÿr  rR   c                   @   s(   e Zd ZdZeddejƒgZdd„ ZdS )ÚKWP_RECUIPRr6   rº   r   c                 C   s   t |tƒo| j|jkS r£   )r†   r  rº   r‹   rŽ   rŽ   r�   r‰   Î  s    

ÿzKWP_RECUIPR.answersN)	r•   r–   r—   r™   r   r  rò   rš   r‰   rŽ   rŽ   rŽ   r�   r  Ç  s   ÿr  rm   c                   @   s<   e Zd Zeddddddddd	d
dœ
ƒZdZeddeƒgZdS )Ú	KWP_SRBLIZFlashEraseRoutineZFlashCheckRoutinezTell-TaleRetentionStackZ RequestDTCsFromShadowErrorMemoryZ+RequestEnvironmentDataFromShadowErrorMemoryZRequestEventInformationZRequestEventEnvironmentDataZ RequestSoftwareModuleInformationzClearTell-TaleRetentionStackZClearEventInformation)
rå   ræ   rç   rè   ré   rê   rë   rì   rí   rî   r&   ÚroutineLocalIdentifierr   N)r•   r–   r—   r	   ÚroutineLocalIdentifiersr™   r   rš   rŽ   rŽ   rŽ   r�   r  Ø  s   ö
ÿr  r\   c                   @   s(   e Zd ZdZeddejƒgZdd„ ZdS )ÚKWP_SRBLIPRr@   r  r   c                 C   s   t |tƒo|j| jkS r£   )r†   r  r  r‹   rŽ   rŽ   r�   r‰   õ  s    

ÿzKWP_SRBLIPR.answersN©	r•   r–   r—   r™   r   r  r  rš   r‰   rŽ   rŽ   rŽ   r�   r  î  s   ÿÿr  rw   c                   @   s    e Zd ZdZeddejƒgZdS )Ú
KWP_STRBLIr'   r  r   N©r•   r–   r—   r™   r   r  r  rš   rŽ   rŽ   rŽ   r�   r  ÿ  s
   ÿÿr  r]   c                   @   s(   e Zd ZdZeddejƒgZdd„ ZdS )ÚKWP_STRBLIPRrA   r  r   c                 C   s   t |tƒo|j| jkS r£   )r†   r  r  r‹   rŽ   rŽ   r�   r‰     s    

ÿzKWP_STRBLIPR.answersNr  rŽ   rŽ   rŽ   r�   r!  
  s   ÿÿr!  rx   c                   @   s    e Zd ZdZeddejƒgZdS )Ú
KWP_RRRBLIr(   r  r   Nr   rŽ   rŽ   rŽ   r�   r"    s
   ÿÿr"  r^   c                   @   s(   e Zd ZdZeddejƒgZdd„ ZdS )ÚKWP_RRRBLIPRrB   r  r   c                 C   s   t |tƒo|j| jkS r£   )r†   r"  r  r‹   rŽ   rŽ   r�   r‰   -  s    

ÿzKWP_RRRBLIPR.answersNr  rŽ   rŽ   rŽ   r�   r#  &  s   ÿÿr#  ry   c                   @   s8   e Zd ZdZeddƒedddƒedddƒeddƒgZdS )	ÚKWP_RDr)   rý   r   Úcompressionr¶   Ú
encryptionÚuncompressedMemorySizeN©r•   r–   r—   r™   r   r   rš   rŽ   rŽ   rŽ   r�   r$  7  s   

ür$  r_   c                   @   s(   e Zd ZdZedddd�gZdd„ ZdS )	ÚKWP_RDPRrC   ÚmaxNumberOfBlockLengthr­   r�   r½   c                 C   s
   t |tƒS r£   )r†   r$  r‹   rŽ   rŽ   r�   r‰   J  s    zKWP_RDPR.answersNr  rŽ   rŽ   rŽ   r�   r)  D  s   ÿr)  rz   c                   @   s8   e Zd ZdZeddƒedddƒedddƒeddƒgZdS )	ÚKWP_RUr*   rý   r   r%  r¶   r&  r'  Nr(  rŽ   rŽ   rŽ   r�   r+  S  s   

ür+  r`   c                   @   s(   e Zd ZdZedddd�gZdd„ ZdS )	ÚKWP_RUPRrD   r*  r­   r�   r½   c                 C   s
   t |tƒS r£   )r†   r+  r‹   rŽ   rŽ   r�   r‰   f  s    zKWP_RUPR.answersNr  rŽ   rŽ   rŽ   r�   r,  `  s   ÿr,  r{   c                   @   s(   e Zd ZdZeddƒedddd�gZdS )	ÚKWP_TDr+   ÚblockSequenceCounterr   ÚtransferDataRequestParameterr­   r�   r½   N)r•   r–   r—   r™   r   r   rš   rŽ   rŽ   rŽ   r�   r-  o  s   þr-  ra   c                   @   s0   e Zd ZdZeddƒedddd�gZdd	„ Zd
S )ÚKWP_TDPRrE   r.  r   r/  r­   r�   r½   c                 C   s   t |tƒo|j| jkS r£   )r†   r-  r.  r‹   rŽ   rŽ   r�   r‰   �  s    

ÿzKWP_TDPR.answersN)r•   r–   r—   r™   r   r   rš   r‰   rŽ   rŽ   rŽ   r�   r0  z  s
   þr0  r|   c                   @   s    e Zd ZdZedddd�gZdS )ÚKWP_RTEr,   r/  r­   r�   r½   N)r•   r–   r—   r™   r   rš   rŽ   rŽ   rŽ   r�   r1  ‹  s   ÿr1  rb   c                   @   s(   e Zd ZdZedddd�gZdd„ ZdS )	Ú	KWP_RTEPRrF   r/  r­   r�   r½   c                 C   s
   t |tƒS r£   )r†   r1  r‹   rŽ   rŽ   r�   r‰   ›  s    zKWP_RTEPR.answersNr  rŽ   rŽ   rŽ   r�   r2  •  s   ÿr2  r}   c                   @   sb   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œZdZeddejƒeddeƒgZ	dd„ Z
dS )ÚKWP_NRZpositiveResponseZgeneralRejectZserviceNotSupportedz%subFunctionNotSupported-InvalidFormatZbusyRepeatRequestz)conditionsNotCorrect-RequestSequenceErrorZroutineNotCompleteZrequestOutOfRangez,securityAccessDenied-SecurityAccessRequestedZ
invalidKeyZexceedNumberOfAttemptsZrequiredTimeDelayNotExpiredZdownloadNotAcceptedZuploadNotAcceptedZtransferSuspendedz(requestCorrectlyReceived-ResponsePendingZ0subFunctionNotSupportedInActiveDiagnosticSessionZdataDecompressionFailedZdataDecryptionFailedZEcuNotRespondingZEcuAddressUnknown)r   rM   rN   é   rS   rT   rU   r\   r^   r`   ra   rb   r…   rh   rw   éx   rÛ   r  é›   rÞ   é¡   rL   r“   r   ÚnegativeResponseCodec                 C   s$   | j |jko"| jdkp"tjd d S )Nr5  r   r   )r“   r„   r8  r   Úcontribsr‹   rŽ   rŽ   r�   r‰   Â  s    
þzKWP_NR.answersN)r•   r–   r—   ZnegativeResponseCodesr™   r   r   r˜   r   rš   r‰   rŽ   rŽ   rŽ   r�   r3  ¤  s6   ë
þr3  rƒ   c                   @   s*   e Zd Zeƒ eƒ  dfdd„Zdd„ ZdS )ÚKWP_TesterPresentSenderr®   c                 C   s   t  | |||¡ dS )zÖ Thread that sends TesterPresent packets periodically

        :param sock: socket where packet is sent periodically
        :param pkt: packet to send
        :param interval: interval between two packets
        N)r   Ú__init__)rŒ   Úsockr±   ÚintervalrŽ   rŽ   r�   r;  Ñ  s    z KWP_TesterPresentSender.__init__c                 C   s:   | j  ¡ s6| jD ]"}| jj|ddd� t | j¡ qq d S )Ng333333Ó?F)ÚtimeoutÚverbose)Z_stoppedÚis_setZ_pktsÚ_socketZsr1ÚtimeÚsleepZ	_interval)rŒ   ÚprŽ   rŽ   r�   ÚrunÛ  s    

zKWP_TesterPresentSender.runN)r•   r–   r—   r   rË   r;  rE  rŽ   rŽ   rŽ   r�   r:  Ð  s   
r:  )Xr‘   rB  Zscapy.fieldsr   r   r   r   r   r   r   r	   r
   r   Zscapy.packetr   r   r   Zscapy.configr   Zscapy.errorr   Zscapy.utilsr   Zscapy.plistr   Zscapy.contrib.isotpr   Zscapy.compatr   r   r9  ÚKeyErrorÚinfor   r›   r¢   r¤   r¨   rª   r³   rµ   rÀ   rÁ   rÇ   rÉ   rÊ   rË   rÌ   rÍ   rÙ   rÚ   rã   rä   ró   rõ   rö   r÷   rú   rü   rÿ   r  r  r  r  r  r	  r
  r  r  r  r  r  r  r  r  r!  r"  r#  r$  r)  r+  r,  r-  r0  r1  r2  r3  r:  rŽ   rŽ   rŽ   r�   Ú<module>	   sö   0
U		

%