o
    B_j?                     @  s   d Z ddlmZ ddlZddlZddlZddlZddlmZ ee	
 jd Zejdee ejdZedurCeedsCejd= ddlmZ dd	lmZ dd
lmZmZmZ G dd dejZedkrnejdd dS dS )z1Standalone deterministic App Pack signing checks.    )annotationsN)Path   platform__path__)serialization)Ed25519PrivateKey)PackageBuildErrorbuild_signed_packverify_signed_packc                   @  s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
PackageChecksc                 C  s   t  | _t| jj}|d | _|d | _| j  | jd jddd | jd jt	
dd	d
ddddddgd	dd t }|d | _|d | _| j|tjjtjjt  | j| tjjtjj d S )Nz
example-wpoutzexample.phpz"<?php defined('ABSPATH') || exit;
zutf-8)encodingzwordpress-app-pack.json
example_wpexample_appz1.0.0example-wp/example.phpz0.2.0z6.0z8.0zexample.lookup)	
package_idapp_idversion
entrypointplugin_fileminimum_bridge_versionminimum_wordpress_versionminimum_php_versioncapabilitieszprivate.pemz
public.pem)tempfileTemporaryDirectorytempr   namesourceoutputmkdir
write_textjsondumpsr   generateprivatepublicwrite_bytesprivate_bytesr   EncodingPEMPrivateFormatPKCS8NoEncryption
public_keypublic_bytesPublicFormatSubjectPublicKeyInfo)selfrootkey r6   ;/var/www/html/flask_server/tests/platform/package_checks.pysetUp   s2   







zPackageChecks.setUpc                 C  s   | j   d S )N)r   cleanup)r3   r6   r6   r7   tearDown5   s   zPackageChecks.tearDownc                 C  s   t | j| j| jd}| d|d  t|d  }t | j| j| jd}| |t|d   tt|d t|d | jd}| d|d  d S )	Nr   
output_dirprivate_key_pathr   r   artifact_pathrelease_pathartifactr?   public_key_pathverifiedstatus)	r
   r   r    r&   assertEqualr   
read_bytesr   r'   )r3   firstfirst_bytessecondrC   r6   r6   r7   1test_build_is_reproducible_and_signature_verifies8   s   

z?PackageChecks.test_build_is_reproducible_and_signature_verifiesc                 C  sz   t | j| j| jd}t|d }|| d  | t t	|t|d | j
d W d    d S 1 s6w   Y  d S )Nr;   r>   s   tamperedr?   r@   )r
   r   r    r&   r   r(   rF   assertRaisesr	   r   r'   )r3   releaserA   r6   r6   r7   "test_tampered_artifact_is_rejectedI   s   "z0PackageChecks.test_tampered_artifact_is_rejectedN)__name__
__module____qualname__r8   r:   rJ   rM   r6   r6   r6   r7   r      s
    r   __main__)	verbosity) __doc__
__future__r   r#   sysr   unittestpathlibr   __file__resolveparentsPROJECT_ROOTpathinsertstrmodulesgetloaded_platformhasattrcryptography.hazmat.primitivesr   1cryptography.hazmat.primitives.asymmetric.ed25519r    platform.packages.wordpress_packr	   r
   r   TestCaser   rN   mainr6   r6   r6   r7   <module>   s&    ;