+
    ~j!                     ~   R t ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIHtH	t	 ^ RI
Ht ^ RIHtHtHtHtHt Rt]! ]P&                  ! RR4      4      t]R,          R	,          t]R
,          t]R,          t]R,          R,          t]R,          tR^
R^
R^R^R^
R^
R^
R^
R^
R^
/
t]! ]P9                  4       4      t0 R0mtR tR t R t!R t"R t#R t$R t%R  t&R! t'R]R] R]!R]"R]#R]$R]$R]%R]&R]'/
t(R" R# lt)R$ R% lt*R& R' lt+R( R) lt,R* R+ lt- ! R, R-4      t.R. t/]0R/8X  d   ]Pb                  ! ]/! 4       4       R# R# )1z4MICO-JDEQ Identity Awareness Engine M2M-001 HARDENEDN)datetimetimezone)Path)AnyDictListOptionalTuplez0.1.0-hardenedMICO_JDEQ_ROOTz/mico02_CAPABILITYidentityconfigzidentity.json01_GOVERNANCEzcontract.md05_EVIDENCEsystem_namearchitecture_versionnode_id	node_roleownerssot_revisionpolicy_revisionruntime_versionboot_timestampcontract_hashc                 j    \        V \        4      ;'       d    \        V P                  4       4      ^ 8  #     
isinstancestrlenstripvs   &</home/iswanjp/mico/02_CAPABILITY/identity/identity_engine.pyvalidate_system_namer%      s%    Jq#$6$M$M3qwwy>A;MM    c                 r    \        V \        4      ;'       d!    \        \        P                  ! R V 4      4      # )z^M\d+M-\d+\.\d+$r   r   boolrematchr"   s   &r$   validate_architecture_versionr,      s(    Z3-?-j-jDReghIiDj&jr&   c                     \        V \        4      ;'       d7    \        V 4      ^8  ;'       d!    \        \        P
                  ! RV 4      4      # )   z^[A-Za-z0-9\-_]+$)r   r   r    r)   r*   r+   r"   s   &r$   validate_node_idr/      s8    
1c 2 n ns1v{ n ntBHHUiklLmGnnr&   c                 D    \        V \        4      ;'       d
    V \        9   # N)r   r   VALID_NODE_ROLESr"   s   &r$   validate_node_roler3       s    *Q"4"N"N>N9NNr&   c                 j    \        V \        4      ;'       d    \        V P                  4       4      ^ 8  # r   r   r"   s   &r$   validate_ownerr5   !   s%    jC0GGS^a5GGr&   c                 r    \        V \        4      ;'       d!    \        \        P                  ! R V 4      4      # )z^[A-Z0-9]+-\d+$r(   r"   s   &r$   validate_revisionr7   "   s(    As!3!]!]RXXFXZ[=\8]]r&   c                 r    \        V \        4      ;'       d!    \        \        P                  ! R V 4      4      # )z^\d+\.\d+\.\d+r(   r"   s   &r$   validate_runtime_versionr9   #   s(    
1c(:(c(ctBHHM^`aDb?c!cr&   c                     \        V \        4      '       g   R #  \        P                  ! V P	                  RR4      4       R#   \
         d     R # i ; i)FZz+00:00T)r   r   r   fromisoformatreplace
ValueErrorr"   s   &r$   validate_iso8601_timestampr?   $   s?    ae$qyyh78#e#s   &A AAc                 r    \        V \        4      ;'       d!    \        \        P                  ! R V 4      4      # )z^[a-f0-9]{64}$r(   r"   s   &r$   validate_sha256_hashrA   *   s(    Jq#$6$_$_4IZ\]@^;__r&   c                0    V ^8  d   QhR\         R\         /# )   datareturn)r   )formats   "r$   __annotate__rG   4   s     < <# <# <r&   c                 h    \         P                  ! V P                  R 4      4      P                  4       # )utf-8)hashlibsha256encode	hexdigest)rD   s   &r$   _sha256rN   4   s#    >>$++g./99;;r&   c                    V ^8  d   QhR\         R\        \        \        \        3,          \
        \        ,          \
        \        ,          3,          /# rC   pathrE   )r   r	   r   r   r   r   )rF   s   "r$   rG   rG   7   s:     
L 
Lt 
Ld38nhsmXc]&R S 
Lr&   c                    R p V P                  RRR7      ;_uu_ 4       pVP                  4       pR R R 4       \        P                  ! X4      p\	        V4      pVR V3#   + '       g   i     L6; i  \
         d    / RT  2R 3u # \         d    / RT  2R 3u # \        P                   d   p/ RT 2R 3u R p?# R p?ii ; i)NrrI   encodingzConfig file not found: zPermission denied: zInvalid JSON: )openreadjsonloadsrN   FileNotFoundErrorPermissionErrorJSONDecodeError)rQ   config_hashfcontentr   es   &     r$   _load_configra   7   s    KLYYsWY--ffhG .G$g&t[((	 .-
 OR+B4&)I4%OOI2)<TF'CT#IIKR>!1Et-K&KKsK   A1 A-A1 A.	)A1 1C C 	C C -C .B;5C ;C c                F    V ^8  d   QhR\         R\        \        ,          /# rP   )r   r   r   )rF   s   "r$   rG   rG   C   s      d x} r&   c                     V P                  4       '       d   \        V P                  R R7      4      # R#   \         d     R# i ; i)rI   rT   N)existsrN   	read_text	Exception)rQ   s   &r$   _load_contract_hashrg   C   s5    {{}}DNNGN<== %%s   4 AAc                :    V ^8  d   QhR\         \        ,          /# rC   rE   )r   r   )rF   s   "r$   rG   rG   I   s     " "Xc] "r&   c                      \        R R4      ;_uu_ 4       p \        V P                  4       P                  4       ^ ,          4      pRRR4       \        P
                  ! \        P                  4      P                  4       X,
          p\        P                  ! V\        P                  R7      P                  4       #   + '       g   i     L}; i  \         d     R# i ; i)z/proc/uptimerS   N)tz)rV   floatreadlinesplitr   nowr   utc	timestampfromtimestamp	isoformatrf   )r^   uptimeboots      r$   _get_boot_timestamprv   I   s    ".#&&!1::<--/23F '||HLL)335>%%dx||<FFHH '& !T!s)   C /B:A4C :C
	C CCc                F    V ^8  d   QhR\         \        \        3,          /# ri   )r   r   r   )rF   s   "r$   rG   rG   Q   s      4S> r&   c            	          R \         P                  ! 4       RRR\         P                  ! 4       ;'       g    RR\        4       /# )r   r   z	MICO-JDEQr   unknownr   )platformpython_versionnoderv    r&   r$   _get_runtime_datar~   Q   s;    8224{8==?//i-/	 r&   c                   H   a  ] tR t^Yt o R	R ltR tR tR tR tR t	Rt
V tR# )
IdentityEngineNc                   T;'       g    \         V n        T;'       g    \        V n        T;'       g    \        V n        / V n        . V n        / V n        ^ V n	        / V n
        RV n        RV n        RV n        RV n        R# )r    N)DEFAULT_CONFIG_PATHconfig_pathDEFAULT_CONTRACT_PATHcontract_pathDEFAULT_EVIDENCE_DIRevidence_dirr   missing_fieldsscore_breakdownvalidity_score	hard_gatestatuserror_messager]   r   )selfr   r   r   s   &&&&r$   __init__IdentityEngine.__init__Z   sz    &==*=*CC.C(@@,@ !!!r&   c                    \        V P                  4      w  rpW n        W0n        \	        4       p/ VCVCV n        \        V P                  4      V n        V P                  V P
                  R &   R# )r   N)	ra   r   r   r]   r~   r   rg   r   r   )r   r   errr]   runtimes   &    r$   collectIdentityEngine.collecth   sc    #/0@0@#A [ &#%-7-f-01C1CD)-););o&r&   c                F   . V n         / V n        ^ p\        P                  4        F  w  r#V P                  P                  V4      pV! V4      '       d/   \        P                  V^ 4      pWPP                  V&   W,          pK\  ^ V P                  V&   V P                   P                  V4       K  	  \        '       d   \        V\        ,          ^d,          4      M^ V n
        \        V P                  P                  R4      4      p\        V P                  P                  R4      4      p\        V P                  P                  R4      4      pT;'       d    T;'       d    Tp	RVRVRVRV	RR	R
\        P                  ! RR4      R\         P"                  ! \$        P&                  4      P)                  4       /V n        V	'       g
   RV n        R# V P                  ^Z8  d
   RV n        R# V P                  ^F8  d
   RV n        R# V P                  ^(8  d
   RV n        R# RV n        R# )r   r   r   r   node_id_validnode_role_validsystem_name_presentgate_passedgate_versionz1.0policy_versionMICO_POLICY_VERSIONzPOL-001gate_evaluation_timestampNOT_VERIFIEDVERIFIEDPARTIALWEAKINVALIDN)r   r   
VALIDATORSitemsr   getFIELD_SCORESappendTOTAL_POINTSroundr   r%   r/   r3   osgetenvr   ro   r   rp   rs   r   r   )
r   total_pointsfield	validatorvaluepointsr   r   r   r   s
   &         r$   validateIdentityEngine.validateq   s    ! * 0 0 2EMM%%e,E%))%3.4$$U+&./$$U+##**51 !3 MYLe\L%@C$GH^_24==3D3D]3ST():):9)EF,T]]->->{-KL)OOmOO ]!#6;Ebii(=yI'hll)C)M)M)O
 .DK  B&j  B&i  B&f%dkr&   c                X   \         P                  ! \        \        V P                  P                  4       4      4      R \        R7      p\        V4      p\        P                  ! 4       P                  pRRRRRV P                  RV P                  RVR	R
RV/pRRR\        R\        P                  ! \         P"                  4      P%                  4       RV P                  RV P&                  RV P(                  RV P*                  RV P,                  RV P.                  RV/
pV P0                  '       d   V P0                  VR&   \         P2                  ! \         P                  ! VR \        R7      4      pR
VR,          R	&   \        \         P                  ! VR \        R7      4      VR,          R	&   V# )T)	sort_keysdefaultdata_sourcez*local_system + config_file + contract_filecollection_methodruntime_prober]   r   identity_hashevidence_hashr   trace_idmoduleidentity_awareness_engineversionrq   r   r   r   r   r   r   evidenceerror)rX   dumpsdictsortedr   r   r   rN   uuiduuid4hexr]   r   __version__r   ro   r   rp   rs   r   r   r   r   r   r   rY   )r   identity_canonicalr   r   r   outputoutput_copys   &      r$   generate_outputIdentityEngine.generate_output   sa   !ZZVDMM4G4G4I-J(KW[ehi 23::<## G4++T//]R
 1{hll3==?t33d11dkkd11
 1C1CvgjjFdC!PQ35J0.5djjX\fi6j.kz?+r&   c           
     x    V P                   P                  R R R7       V P                   R,          p\        VRRR7      ;_uu_ 4       p\        P                  ! W^\
        R R7       RRR4       R#   + '       g   i     R# ; i  \         d*   p\        RT 2\        P                  R	7        Rp?R# Rp?ii ; i)
T)parentsexist_okzidentity_state.jsonwrI   rT   indentr   r   Nz"[ERROR] Gagal menyimpan evidence: )file)
r   mkdirrV   rX   dumpr   rf   printsysstderr)r   r   out_pathr^   r`   s   &&   r$   save_outputIdentityEngine.save_output   s    	M##D4#@((+@@Hhg66!		&AsdK 7666 	M6qc:LL	Ms6   AB A1'B 1B	<B B B9B44B9c                    V P                  4        V P                  4        V P                  4       pV P                  V4       V# r1   )r   r   r   r   )r   r   s   & r$   runIdentityEngine.run   s5    %%' r&   )r]   r   r   r   r   r   r   r   r   r   r   r   )NNN)__name__
__module____qualname____firstlineno__r   r   r   r   r   r   __static_attributes____classdictcell__)__classdict__s   @r$   r   r   Y   s+     "<#&J DM r&   r   c            	          \        4       p V P                  4       p\        \        P                  ! V^\
        RR7      4       VR,          R8X  d   ^ # VR,          R9   d   ^# ^# )rC   Tr   r   r   )r   r   )r   r   r   rX   r   r   )enginer   s     r$   mainr      sN    FZZ\F	$**VAsd
CDh:%a		0	0r&   __main__>   EDGE_BACKUPELASTIC_POOLHEAVY_WORKERCONTROL_CENTEREDGE_INTERFACE)2__doc__rX   r   r*   r   r   rz   rJ   r   r   pathlibr   typingr   r   r   r   r	   r   r   	MICO_ROOTIDENTITY_DIR
CONFIG_DIRr   r   r   r   sumvaluesr   r2   r%   r,   r/   r3   r5   r7   r9   r?   rA   r   rN   ra   rg   rv   r~   r   r   r   exitr}   r&   r$   <module>r      s}   : 1 1 1 1 '  3 3+W56	?*Z7H$
 ?2 !O3mC  =0  2-r9bWb/2r,b2BBR	 <&&()  N j n N G ] c$ ` ')?A^.@'>&(9;L/1AC])
<
L"m m^ zHHTV r&   