decentravault
v0.1.3
Published
Encrypted decentralized file storage — one API key, zero complexity, maximum security.
Maintainers
Readme
��<�d�i�v� �a�l�i�g�n�=�"�c�e�n�t�e�r�"�>�
�
�
�
�#� �=�� �D�e�c�e�n�t�r�a�V�a�u�l�t� �S�D�K�
�
�
�
���E�n�c�r�y�p�t�e�d� �d�e�c�e�n�t�r�a�l�i�z�e�d� �f�i�l�e� �s�t�o�r�a�g�e� � �o�n�e� �A�P�I� �k�e�y�,� �z�e�r�o� �c�o�m�p�l�e�x�i�t�y�,� �m�a�x�i�m�u�m� �s�e�c�u�r�i�t�y�.���
�
�
�
�[�!�[�n�p�m� �v�e�r�s�i�o�n�]�(�h�t�t�p�s�:�/�/�i�m�g�.�s�h�i�e�l�d�s�.�i�o�/�n�p�m�/�v�/�d�e�c�e�n�t�r�a�v�a�u�l�t�?�s�t�y�l�e�=�f�l�a�t�-�s�q�u�a�r�e�&�c�o�l�o�r�=�b�l�u�e�)�]�(�h�t�t�p�s�:�/�/�w�w�w�.�n�p�m�j�s�.�c�o�m�/�p�a�c�k�a�g�e�/�d�e�c�e�n�t�r�a�v�a�u�l�t�)�
�
�[�!�[�n�p�m� �d�o�w�n�l�o�a�d�s�]�(�h�t�t�p�s�:�/�/�i�m�g�.�s�h�i�e�l�d�s�.�i�o�/�n�p�m�/�d�m�/�d�e�c�e�n�t�r�a�v�a�u�l�t�?�s�t�y�l�e�=�f�l�a�t�-�s�q�u�a�r�e�&�c�o�l�o�r�=�g�r�e�e�n�)�]�(�h�t�t�p�s�:�/�/�w�w�w�.�n�p�m�j�s�.�c�o�m�/�p�a�c�k�a�g�e�/�d�e�c�e�n�t�r�a�v�a�u�l�t�)�
�
�[�!�[�b�u�n�d�l�e� �s�i�z�e�]�(�h�t�t�p�s�:�/�/�i�m�g�.�s�h�i�e�l�d�s�.�i�o�/�b�u�n�d�l�e�p�h�o�b�i�a�/�m�i�n�z�i�p�/�d�e�c�e�n�t�r�a�v�a�u�l�t�?�s�t�y�l�e�=�f�l�a�t�-�s�q�u�a�r�e�&�c�o�l�o�r�=�o�r�a�n�g�e�)�]�(�h�t�t�p�s�:�/�/�b�u�n�d�l�e�p�h�o�b�i�a�.�c�o�m�/�p�a�c�k�a�g�e�/�d�e�c�e�n�t�r�a�v�a�u�l�t�)�
�
�[�!�[�T�y�p�e�S�c�r�i�p�t�]�(�h�t�t�p�s�:�/�/�i�m�g�.�s�h�i�e�l�d�s�.�i�o�/�b�a�d�g�e�/�T�y�p�e�S�c�r�i�p�t�-�r�e�a�d�y�-�3�1�7�8�c�6�?�s�t�y�l�e�=�f�l�a�t�-�s�q�u�a�r�e�)�]�(�h�t�t�p�s�:�/�/�w�w�w�.�t�y�p�e�s�c�r�i�p�t�l�a�n�g�.�o�r�g�)�
�
�[�!�[�l�i�c�e�n�s�e�]�(�h�t�t�p�s�:�/�/�i�m�g�.�s�h�i�e�l�d�s�.�i�o�/�n�p�m�/�l�/�d�e�c�e�n�t�r�a�v�a�u�l�t�?�s�t�y�l�e�=�f�l�a�t�-�s�q�u�a�r�e�)�]�(�L�I�C�E�N�S�E�)�
�
�
�
�<�/�d�i�v�>�
�
�
�
�-�-�-�
�
�
�
�#�#� �W�h�a�t� �i�s� �D�e�c�e�n�t�r�a�V�a�u�l�t�?�
�
�
�
�D�e�c�e�n�t�r�a�V�a�u�l�t� �g�i�v�e�s� �y�o�u�r� �a�p�p� ���b�a�n�k�-�g�r�a�d�e� �f�i�l�e� �s�e�c�u�r�i�t�y� �i�n� �t�h�r�e�e� �l�i�n�e�s� �o�f� �c�o�d�e���.� �N�o� �c�r�y�p�t�o�g�r�a�p�h�y� �e�x�p�e�r�t�i�s�e� �r�e�q�u�i�r�e�d�.� �N�o� �b�l�o�c�k�c�h�a�i�n� �k�n�o�w�l�e�d�g�e� �n�e�e�d�e�d�.� �J�u�s�t� �u�p�l�o�a�d� �a�n�d� �r�e�t�r�i�e�v�e�.�
�
�
�
����t�y�p�e�s�c�r�i�p�t�
�
�c�o�n�s�t� �v�a�u�l�t� �=� �n�e�w� �D�e�c�e�n�t�r�a�V�a�u�l�t�(�'�d�v�_�y�o�u�r�_�a�p�i�_�k�e�y�'�)�;�
�
�
�
�c�o�n�s�t� �{� �f�i�l�e�I�d� �}� �=� �a�w�a�i�t� �v�a�u�l�t�.�u�p�l�o�a�d�(�f�i�l�e�,� �'�c�o�n�t�r�a�c�t�.�p�d�f�'�,� �'�a�p�p�l�i�c�a�t�i�o�n�/�p�d�f�'�)�;�
�
�c�o�n�s�t� �{� �f�i�l�e�:� �d�e�c�r�y�p�t�e�d� �}� �=� �a�w�a�i�t� �v�a�u�l�t�.�r�e�t�r�i�e�v�e�(�f�i�l�e�I�d�)�;�
�
����
�
�
�
�E�v�e�r�y� �f�i�l�e� �y�o�u� �u�p�l�o�a�d� �i�s� �a�u�t�o�m�a�t�i�c�a�l�l�y�:�
�
�
�
�|� �W�h�a�t� �|� �H�o�w� �|�
�
�|�-�-�-�|�-�-�-�|�
�
�|� �=�� ���E�n�c�r�y�p�t�e�d��� �|� �A�E�S�-�2�5�6�-�G�C�M� �b�e�f�o�r�e� �i�t� �l�e�a�v�e�s� �y�o�u�r� �d�e�v�i�c�e� �|�
�
�|� �<�� ���D�i�s�t�r�i�b�u�t�e�d��� �|� �S�t�o�r�e�d� �o�n� �I�P�F�S� � �n�o� �s�i�n�g�l�e� �p�o�i�n�t� �o�f� �f�a�i�l�u�r�e� �|�
�
�|� ��&� ���A�n�c�h�o�r�e�d��� �|� �S�H�A�-�2�5�6� �h�a�s�h� �r�e�c�o�r�d�e�d� �o�n� �t�h�e� �P�o�l�y�g�o�n� �b�l�o�c�k�c�h�a�i�n� �|�
�
�|� �=�u�� ���Z�e�r�o�-�k�n�o�w�l�e�d�g�e��� �|� �S�e�r�v�e�r�s� �s�e�e� �o�n�l�y� �c�i�p�h�e�r�t�e�x�t� � �n�e�v�e�r� �y�o�u�r� �p�l�a�i�n�t�e�x�t� �|�
�
�
�
�-�-�-�
�
�
�
�#�#� �T�a�b�l�e� �o�f� �C�o�n�t�e�n�t�s�
�
�
�
�-� �[�I�n�s�t�a�l�l�a�t�i�o�n�]�(�#�i�n�s�t�a�l�l�a�t�i�o�n�)�
�
�-� �[�G�e�t� �a�n� �A�P�I� �K�e�y�]�(�#�g�e�t�-�a�n�-�a�p�i�-�k�e�y�)�
�
�-� �[�Q�u�i�c�k� �S�t�a�r�t�]�(�#�q�u�i�c�k�-�s�t�a�r�t�)�
�
�-� �[�H�o�w� �I�t� �W�o�r�k�s�]�(�#�h�o�w�-�i�t�-�w�o�r�k�s�)�
�
�-� �[�A�P�I� �R�e�f�e�r�e�n�c�e�]�(�#�a�p�i�-�r�e�f�e�r�e�n�c�e�)�
�
� � �-� �[�C�o�n�s�t�r�u�c�t�o�r�]�(�#�n�e�w�-�d�e�c�e�n�t�r�a�v�a�u�l�t�a�p�i�k�e�y�-�o�p�t�i�o�n�s�)�
�
� � �-� �[�u�p�l�o�a�d�]�(�#�v�a�u�l�t�u�p�l�o�a�d�f�i�l�e�-�f�i�l�e�n�a�m�e�-�m�i�m�e�t�y�p�e�)�
�
� � �-� �[�r�e�t�r�i�e�v�e�]�(�#�v�a�u�l�t�r�e�t�r�i�e�v�e�f�i�l�e�i�d�)�
�
� � �-� �[�v�e�r�i�f�y�]�(�#�v�a�u�l�t�v�e�r�i�f�y�f�i�l�e�i�d�)�
�
� � �-� �[�l�i�s�t�]�(�#�v�a�u�l�t�l�i�s�t�)�
�
� � �-� �[�d�e�l�e�t�e�]�(�#�v�a�u�l�t�d�e�l�e�t�e�f�i�l�e�i�d�)�
�
� � �-� �[�w�a�i�t�F�o�r�B�l�o�c�k�c�h�a�i�n�]�(�#�v�a�u�l�t�w�a�i�t�f�o�r�b�l�o�c�k�c�h�a�i�n�f�i�l�e�i�d�-�t�i�m�e�o�u�t�m�s�)�
�
�-� �[�T�y�p�e�S�c�r�i�p�t� �T�y�p�e�s�]�(�#�t�y�p�e�s�c�r�i�p�t�-�t�y�p�e�s�)�
�
�-� �[�F�r�a�m�e�w�o�r�k� �E�x�a�m�p�l�e�s�]�(�#�f�r�a�m�e�w�o�r�k�-�e�x�a�m�p�l�e�s�)�
�
�-� �[�E�r�r�o�r� �H�a�n�d�l�i�n�g�]�(�#�e�r�r�o�r�-�h�a�n�d�l�i�n�g�)�
�
�-� �[�E�n�v�i�r�o�n�m�e�n�t� �V�a�r�i�a�b�l�e�s�]�(�#�e�n�v�i�r�o�n�m�e�n�t�-�v�a�r�i�a�b�l�e�s�)�
�
�-� �[�S�e�c�u�r�i�t�y� �M�o�d�e�l�]�(�#�s�e�c�u�r�i�t�y�-�m�o�d�e�l�)�
�
�-� �[�R�e�q�u�i�r�e�m�e�n�t�s�]�(�#�r�e�q�u�i�r�e�m�e�n�t�s�)�
�
�
�
�-�-�-�
�
�
�
�#�#� �I�n�s�t�a�l�l�a�t�i�o�n�
�
�
�
����b�a�s�h�
�
�n�p�m� �i�n�s�t�a�l�l� �d�e�c�e�n�t�r�a�v�a�u�l�t�
�
�#� �o�r�
�
�y�a�r�n� �a�d�d� �d�e�c�e�n�t�r�a�v�a�u�l�t�
�
�#� �o�r�
�
�p�n�p�m� �a�d�d� �d�e�c�e�n�t�r�a�v�a�u�l�t�
�
����
�
�
�
�>� ���Z�e�r�o� �d�e�p�e�n�d�e�n�c�i�e�s�.��� �U�s�e�s� �t�h�e� �n�a�t�i�v�e� ��f�e�t�c�h�� �a�n�d� ��c�r�y�p�t�o�.�s�u�b�t�l�e�� �A�P�I�s� �b�u�i�l�t� �i�n�t�o� �N�o�d�e�.�j�s� �1�8�+� �a�n�d� �a�l�l� �m�o�d�e�r�n� �b�r�o�w�s�e�r�s�.�
�
�
�
�-�-�-�
�
�
�
�#�#� �G�e�t� �a�n� �A�P�I� �K�e�y�
�
�
�
�1�.� �S�i�g�n� �u�p� �a�t� �[�d�e�c�e�n�t�r�a�v�a�u�l�t�.�c�o�m�]�(�h�t�t�p�s�:�/�/�d�e�c�e�n�t�r�a�v�a�u�l�t�.�c�o�m�)�
�
�2�.� �G�o� �t�o� ���D�a�s�h�b�o�a�r�d� ��! �A�P�I� �K�e�y�s� ��! �G�e�n�e�r�a�t�e� �K�e�y���
�
�3�.� �C�o�p�y� �y�o�u�r� ��d�v�_�.�.�.�� �k�e�y� � �i�t�'�s� �s�h�o�w�n� ���o�n�l�y� �o�n�c�e���
�
�
�
�-�-�-�
�
�
�
�#�#� �Q�u�i�c�k� �S�t�a�r�t�
�
�
�
�#�#�#� �U�p�l�o�a�d� �a� �f�i�l�e�
�
�
�
����t�y�p�e�s�c�r�i�p�t�
�
�i�m�p�o�r�t� �{� �D�e�c�e�n�t�r�a�V�a�u�l�t� �}� �f�r�o�m� �'�d�e�c�e�n�t�r�a�v�a�u�l�t�'�;�
�
�
�
�c�o�n�s�t� �v�a�u�l�t� �=� �n�e�w� �D�e�c�e�n�t�r�a�V�a�u�l�t�(�p�r�o�c�e�s�s�.�e�n�v�.�D�V�_�A�P�I�_�K�E�Y�!�)�;�
�
�
�
�c�o�n�s�t� �f�i�l�e� �=� �n�e�w� �B�l�o�b�(�[�'�H�e�l�l�o�,� �W�o�r�l�d�!�'�]�,� �{� �t�y�p�e�:� �'�t�e�x�t�/�p�l�a�i�n�'� �}�)�;�
�
�c�o�n�s�t� �{� �f�i�l�e�I�d�,� �b�l�o�c�k�c�h�a�i�n�S�t�a�t�u�s� �}� �=� �a�w�a�i�t� �v�a�u�l�t�.�u�p�l�o�a�d�(�f�i�l�e�,� �'�h�e�l�l�o�.�t�x�t�'�,� �'�t�e�x�t�/�p�l�a�i�n�'�)�;�
�
�
�
�c�o�n�s�o�l�e�.�l�o�g�(�'�F�i�l�e� �I�D�:�'�,� �f�i�l�e�I�d�)�;�
�
�/�/� ��! �"�6�d�7�0�b�7�6�2�-�.�.�.�"�
�
�
�
�c�o�n�s�o�l�e�.�l�o�g�(�'�B�l�o�c�k�c�h�a�i�n�:�'�,� �b�l�o�c�k�c�h�a�i�n�S�t�a�t�u�s�)�;�
�
�/�/� ��! �"�p�e�n�d�i�n�g�"� � �(�c�o�n�f�i�r�m�e�d� �i�n� �~�1�5� �s�e�c�o�n�d�s� �i�n� �t�h�e� �b�a�c�k�g�r�o�u�n�d�)�
�
����
�
�
�
�#�#�#� �R�e�t�r�i�e�v�e� �a�n�d� �d�e�c�r�y�p�t� �a� �f�i�l�e�
�
�
�
����t�y�p�e�s�c�r�i�p�t�
�
�c�o�n�s�t� �{� �f�i�l�e�,� �n�a�m�e�,� �m�i�m�e�T�y�p�e�,� �i�n�t�e�g�r�i�t�y�,� �b�l�o�c�k�c�h�a�i�n� �}� �=� �a�w�a�i�t� �v�a�u�l�t�.�r�e�t�r�i�e�v�e�(�f�i�l�e�I�d�)�;�
�
�
�
�c�o�n�s�o�l�e�.�l�o�g�(�'�I�n�t�e�g�r�i�t�y�:�'�,� �i�n�t�e�g�r�i�t�y�)�;�
�
�/�/� ��! �"�o�k�"�
�
�
�
�c�o�n�s�o�l�e�.�l�o�g�(�'�B�l�o�c�k�c�h�a�i�n� �v�e�r�i�f�i�e�d�:�'�,� �b�l�o�c�k�c�h�a�i�n�.�v�e�r�i�f�i�e�d�)�;�
�
�/�/� ��! �t�r�u�e�
�
�
�
�/�/� �S�a�v�e� �t�o� �d�i�s�k� �(�N�o�d�e�.�j�s�)�
�
�i�m�p�o�r�t� �{� �w�r�i�t�e�F�i�l�e�S�y�n�c� �}� �f�r�o�m� �'�f�s�'�;�
�
�w�r�i�t�e�F�i�l�e�S�y�n�c�(�n�a�m�e�,� �f�i�l�e�)�;�
�
����
�
�
�
�#�#�#� �V�e�r�i�f�y� �w�i�t�h�o�u�t� �d�o�w�n�l�o�a�d�i�n�g�
�
�
�
����t�y�p�e�s�c�r�i�p�t�
�
�c�o�n�s�t� �{� �v�e�r�i�f�i�e�d�,� �r�e�a�s�o�n�,� �b�l�o�c�k�c�h�a�i�n�T�x� �}� �=� �a�w�a�i�t� �v�a�u�l�t�.�v�e�r�i�f�y�(�f�i�l�e�I�d�)�;�
�
�
�
�c�o�n�s�o�l�e�.�l�o�g�(�v�e�r�i�f�i�e�d� �?� �'�' �U�n�t�a�m�p�e�r�e�d�'� �:� �'�L' �T�a�m�p�e�r�e�d�'�)�;�
�
�c�o�n�s�o�l�e�.�l�o�g�(��h�t�t�p�s�:�/�/�a�m�o�y�.�p�o�l�y�g�o�n�s�c�a�n�.�c�o�m�/�t�x�/�$�{�b�l�o�c�k�c�h�a�i�n�T�x�}��)�;�
�
����
�
�
�
�-�-�-�
�
�
�
�#�#� �H�o�w� �I�t� �W�o�r�k�s�
�
�
�
����
�
� � �Y�o�u�r� �A�p�p� � � � � � � � � � � � � � � � �D�e�c�e�n�t�r�a�V�a�u�l�t� �S�e�r�v�e�r� � � � � � � � � � � � � � �B�l�o�c�k�c�h�a�i�n� �+� �I�P�F�S�
�
� � ��%�%�%�%�%�%�%�%�% � � � � � � � � � � � � � � ��%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�% � � � � � � � � � � � � � ��%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%
�
� � �
�
� � �[�F�i�l�e�]�
�
� � � � � �%
�
� � � � � ��%
�
� � �A�E�S�-�2�5�6�-�G�C�M� ��%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�% �[�E�n�c�r�y�p�t�e�d� �B�y�t�e�s�]�
�
� � �e�n�c�r�y�p�t� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �%
�
� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �%�%�%�% �I�P�F�S� �(�P�i�n�a�t�a�)�
�
� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �% � � � �R�e�t�u�r�n�s� �C�I�D�
�
� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �%
�
� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �%�%�%�% �S�H�A�-�2�5�6� �H�a�s�h�
�
� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �%
�
� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��%
�
� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �P�o�l�y�g�o�n� �B�l�o�c�k�c�h�a�i�n�
�
� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �(�T�X� �d�a�t�a� �f�i�e�l�d�)�
�
�
�
� � �R�E�T�R�I�E�V�E�:�
�
� � ��%�%�%�%�%�%�%�%�%
�
� � �[�f�i�l�e�I�d�]� ��%�%�% �S�e�r�v�e�r� �f�e�t�c�h�e�s� �f�r�o�m� �I�P�F�S� ��%�%�% �R�e�-�h�a�s�h� �&� �v�e�r�i�f�y� ��%�%�% �R�e�t�u�r�n� �e�n�c�r�y�p�t�e�d� �b�y�t�e�s�
�
� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �%
�
� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��%
�
� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �S�D�K� �d�e�c�r�y�p�t�s� �l�o�c�a�l�l�y�
�
� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �(�s�e�r�v�e�r� �n�e�v�e�r� �s�e�e�s� �p�l�a�i�n�t�e�x�t�)�
�
����
�
�
�
�T�h�e� �d�e�c�r�y�p�t�i�o�n� ���a�l�w�a�y�s� �h�a�p�p�e�n�s� �i�n�s�i�d�e� �t�h�e� �S�D�K��� �o�n� �t�h�e� �u�s�e�r�'�s� �m�a�c�h�i�n�e� � �n�o�t� �o�n� �t�h�e� �s�e�r�v�e�r�.� �E�v�e�n� �i�f� �t�h�e� �s�e�r�v�e�r� �i�s� �c�o�m�p�r�o�m�i�s�e�d�,� �a�l�l� �a�n� �a�t�t�a�c�k�e�r� �g�e�t�s� �a�r�e� �e�n�c�r�y�p�t�e�d� �b�y�t�e�s�.�
�
�
�
�-�-�-�
�
�
�
�#�#� �A�P�I� �R�e�f�e�r�e�n�c�e�
�
�
�
�#�#�#� ��n�e�w� �D�e�c�e�n�t�r�a�V�a�u�l�t�(�a�p�i�K�e�y�,� �o�p�t�i�o�n�s�?�)��
�
�
�
����t�y�p�e�s�c�r�i�p�t�
�
�/�/� �P�r�o�d�u�c�t�i�o�n�
�
�c�o�n�s�t� �v�a�u�l�t� �=� �n�e�w� �D�e�c�e�n�t�r�a�V�a�u�l�t�(�'�d�v�_�y�o�u�r�_�a�p�i�_�k�e�y�'�)�;�
�
�
�
�/�/� �L�o�c�a�l� �d�e�v�e�l�o�p�m�e�n�t�
�
�c�o�n�s�t� �v�a�u�l�t� �=� �n�e�w� �D�e�c�e�n�t�r�a�V�a�u�l�t�(�'�d�v�_�y�o�u�r�_�a�p�i�_�k�e�y�'�,� �{�
�
� � �b�a�s�e�U�r�l�:� �'�h�t�t�p�:�/�/�l�o�c�a�l�h�o�s�t�:�3�0�0�0�/�a�p�i�'�
�
�}�)�;�
�
����
�
�
�
�|� �P�a�r�a�m�e�t�e�r� �|� �T�y�p�e� �|� �R�e�q�u�i�r�e�d� �|� �D�e�s�c�r�i�p�t�i�o�n� �|�
�
�|�-�-�-�|�-�-�-�|�-�-�-�|�-�-�-�|�
�
�|� ��a�p�i�K�e�y�� �|� ��s�t�r�i�n�g�� �|� �' �|� �Y�o�u�r� ��d�v�_�.�.�.�� �A�P�I� �k�e�y� �|�
�
�|� ��o�p�t�i�o�n�s�.�b�a�s�e�U�r�l�� �|� ��s�t�r�i�n�g�� �|� � �|� �O�v�e�r�r�i�d�e� �d�e�f�a�u�l�t� �A�P�I� �e�n�d�p�o�i�n�t� �|�
�
�
�
�-�-�-�
�
�
�
�#�#�#� ��v�a�u�l�t�.�u�p�l�o�a�d�(�f�i�l�e�,� �f�i�l�e�n�a�m�e�?�,� �m�i�m�e�T�y�p�e�?�)��
�
�
�
�E�n�c�r�y�p�t�s� �t�h�e� �f�i�l�e� �s�e�r�v�e�r�-�s�i�d�e� �a�n�d� �u�p�l�o�a�d�s� �i�t� �t�o� �I�P�F�S�.� �R�e�t�u�r�n�s� �i�m�m�e�d�i�a�t�e�l�y� � �b�l�o�c�k�c�h�a�i�n� �a�n�c�h�o�r�i�n�g� �c�o�n�t�i�n�u�e�s� �a�s�y�n�c�h�r�o�n�o�u�s�l�y� �i�n� �t�h�e� �b�a�c�k�g�r�o�u�n�d�.�
�
�
�
����t�y�p�e�s�c�r�i�p�t�
�
�c�o�n�s�t� �r�e�s�u�l�t� �=� �a�w�a�i�t� �v�a�u�l�t�.�u�p�l�o�a�d�(�f�i�l�e�B�l�o�b�,� �'�c�o�n�t�r�a�c�t�.�p�d�f�'�,� �'�a�p�p�l�i�c�a�t�i�o�n�/�p�d�f�'�)�;�
�
�
�
�/�/� �r�e�s�u�l�t�.�f�i�l�e�I�d� � � � � � � � � ��! �s�a�v�e� �t�h�i�s� �t�o� �r�e�t�r�i�e�v�e� �t�h�e� �f�i�l�e� �l�a�t�e�r�
�
�/�/� �r�e�s�u�l�t�.�h�a�s�h� � � � � � � � � � � ��! �S�H�A�-�2�5�6� �o�f� �t�h�e� �e�n�c�r�y�p�t�e�d� �b�y�t�e�s�
�
�/�/� �r�e�s�u�l�t�.�c�i�d� � � � � � � � � � � � ��! �I�P�F�S� �C�o�n�t�e�n�t� �I�d�e�n�t�i�f�i�e�r�
�
�/�/� �r�e�s�u�l�t�.�i�p�f�s�U�r�l� � � � � � � � ��! �p�u�b�l�i�c� �I�P�F�S� �g�a�t�e�w�a�y� �U�R�L� �(�e�n�c�r�y�p�t�e�d� � �n�o�t� �y�o�u�r� �p�l�a�i�n�t�e�x�t�)�
�
�/�/� �r�e�s�u�l�t�.�b�l�o�c�k�c�h�a�i�n�S�t�a�t�u�s� ��! �'�p�e�n�d�i�n�g�'� �i�n�i�t�i�a�l�l�y�,� �b�e�c�o�m�e�s� �'�c�o�n�f�i�r�m�e�d�'� �a�f�t�e�r� �~�1�5�s�
�
����
�
�
�
�|� �P�a�r�a�m�e�t�e�r� �|� �T�y�p�e� �|� �D�e�f�a�u�l�t� �|� �D�e�s�c�r�i�p�t�i�o�n� �|�
�
�|�-�-�-�|�-�-�-�|�-�-�-�|�-�-�-�|�
�
�|� ��f�i�l�e�� �|� ��B�l�o�b� �\�|� �U�i�n�t�8�A�r�r�a�y� �\�|� �A�r�r�a�y�B�u�f�f�e�r�� �|� �r�e�q�u�i�r�e�d� �|� �F�i�l�e� �c�o�n�t�e�n�t� �|�
�
�|� ��f�i�l�e�n�a�m�e�� �|� ��s�t�r�i�n�g�� �|� ��'�f�i�l�e�'�� �|� �O�r�i�g�i�n�a�l� �n�a�m�e� �(�s�t�o�r�e�d� �s�e�c�u�r�e�l�y� � �n�e�v�e�r� �s�e�n�t� �t�o� �I�P�F�S�)� �|�
�
�|� ��m�i�m�e�T�y�p�e�� �|� ��s�t�r�i�n�g�� �|� ��'�a�p�p�l�i�c�a�t�i�o�n�/�o�c�t�e�t�-�s�t�r�e�a�m�'�� �|� �M�I�M�E� �t�y�p�e� �|�
�
�
�
���R�e�t�u�r�n�s�:��� �[��U�p�l�o�a�d�R�e�s�u�l�t��]�(�#�u�p�l�o�a�d�r�e�s�u�l�t�)�
�
�
�
�-�-�-�
�
�
�
�#�#�#� ��v�a�u�l�t�.�r�e�t�r�i�e�v�e�(�f�i�l�e�I�d�)��
�
�
�
�F�e�t�c�h�e�s� �e�n�c�r�y�p�t�e�d� �b�y�t�e�s� �f�r�o�m� �I�P�F�S�,� �r�e�-�v�e�r�i�f�i�e�s� �t�h�e� �h�a�s�h� �a�g�a�i�n�s�t� �t�h�e� �b�l�o�c�k�c�h�a�i�n�,� �t�h�e�n� ���d�e�c�r�y�p�t�s� �l�o�c�a�l�l�y� �i�n�s�i�d�e� �t�h�e� �S�D�K���.� �T�h�e� �s�e�r�v�e�r� �n�e�v�e�r� �t�o�u�c�h�e�s� �p�l�a�i�n�t�e�x�t�.�
�
�
�
����t�y�p�e�s�c�r�i�p�t�
�
�c�o�n�s�t� �r�e�s�u�l�t� �=� �a�w�a�i�t� �v�a�u�l�t�.�r�e�t�r�i�e�v�e�(�'�6�d�7�0�b�7�6�2�-�.�.�.�'�)�;�
�
�
�
�/�/� �r�e�s�u�l�t�.�f�i�l�e� � � � � � � � ��! �U�i�n�t�8�A�r�r�a�y� �o�f� �d�e�c�r�y�p�t�e�d� �b�y�t�e�s�
�
�/�/� �r�e�s�u�l�t�.�n�a�m�e� � � � � � � � ��! �o�r�i�g�i�n�a�l� �f�i�l�e�n�a�m�e�
�
�/�/� �r�e�s�u�l�t�.�m�i�m�e�T�y�p�e� � � � ��! �e�.�g�.� �'�a�p�p�l�i�c�a�t�i�o�n�/�p�d�f�'�
�
�/�/� �r�e�s�u�l�t�.�i�n�t�e�g�r�i�t�y� � � ��! �'�o�k�'� �|� �'�f�a�i�l�e�d�'�
�
�/�/� �r�e�s�u�l�t�.�b�l�o�c�k�c�h�a�i�n� � ��! �{� �v�e�r�i�f�i�e�d�,� �s�t�a�t�u�s�,� �t�x�,� �r�e�a�s�o�n� �}�
�
�
�
�/�/� �B�r�o�w�s�e�r� �d�o�w�n�l�o�a�d�
�
�c�o�n�s�t� �b�l�o�b� �=� �n�e�w� �B�l�o�b�(�[�r�e�s�u�l�t�.�f�i�l�e�]�,� �{� �t�y�p�e�:� �r�e�s�u�l�t�.�m�i�m�e�T�y�p�e� �}�)�;�
�
�c�o�n�s�t� �u�r�l� �=� �U�R�L�.�c�r�e�a�t�e�O�b�j�e�c�t�U�R�L�(�b�l�o�b�)�;�
�
�c�o�n�s�t� �a� �=� �d�o�c�u�m�e�n�t�.�c�r�e�a�t�e�E�l�e�m�e�n�t�(�'�a�'�)�;�
�
�a�.�h�r�e�f� �=� �u�r�l�;�
�
�a�.�d�o�w�n�l�o�a�d� �=� �r�e�s�u�l�t�.�n�a�m�e�;�
�
�a�.�c�l�i�c�k�(�)�;�
�
����
�
�
�
���R�e�t�u�r�n�s�:��� �[��R�e�t�r�i�e�v�e�R�e�s�u�l�t��]�(�#�r�e�t�r�i�e�v�e�r�e�s�u�l�t�)�
�
�
�
�-�-�-�
�
�
�
�#�#�#� ��v�a�u�l�t�.�v�e�r�i�f�y�(�f�i�l�e�I�d�)��
�
�
�
�C�h�e�c�k�s� �f�i�l�e� �i�n�t�e�g�r�i�t�y� �a�g�a�i�n�s�t� �t�h�e� �P�o�l�y�g�o�n� �b�l�o�c�k�c�h�a�i�n� � �f�a�s�t�,� �n�o� �d�o�w�n�l�o�a�d� �r�e�q�u�i�r�e�d�.�
�
�
�
����t�y�p�e�s�c�r�i�p�t�
�
�c�o�n�s�t� �r�e�s�u�l�t� �=� �a�w�a�i�t� �v�a�u�l�t�.�v�e�r�i�f�y�(�'�6�d�7�0�b�7�6�2�-�.�.�.�'�)�;�
�
�
�
�/�/� �r�e�s�u�l�t�.�v�e�r�i�f�i�e�d� � � � � � � � ��! �t�r�u�e� �i�f� �h�a�s�h� �m�a�t�c�h�e�s� �o�n�-�c�h�a�i�n� �r�e�c�o�r�d�
�
�/�/� �r�e�s�u�l�t�.�r�e�a�s�o�n� � � � � � � � � � ��! �h�u�m�a�n�-�r�e�a�d�a�b�l�e� �e�x�p�l�a�n�a�t�i�o�n�
�
�/�/� �r�e�s�u�l�t�.�h�a�s�h� � � � � � � � � � � � ��! �S�H�A�-�2�5�6� �s�t�o�r�e�d� �i�n� �d�a�t�a�b�a�s�e�
�
�/�/� �r�e�s�u�l�t�.�o�n�C�h�a�i�n�H�a�s�h� � � � � ��! �S�H�A�-�2�5�6� �r�e�a�d� �f�r�o�m� �b�l�o�c�k�c�h�a�i�n� �t�x�.�d�a�t�a�
�
�/�/� �r�e�s�u�l�t�.�b�l�o�c�k�c�h�a�i�n�T�x� � � � ��! �'�0�x�a�b�9�7�6�d�e�4�.�.�.�'�
�
�
�
�i�f� �(�!�r�e�s�u�l�t�.�v�e�r�i�f�i�e�d�)� �{�
�
� � �c�o�n�s�o�l�e�.�e�r�r�o�r�(�'��&� � �F�i�l�e� �i�n�t�e�g�r�i�t�y� �c�o�m�p�r�o�m�i�s�e�d�:�'�,� �r�e�s�u�l�t�.�r�e�a�s�o�n�)�;�
�
�}�
�
����
�
�
�
���R�e�t�u�r�n�s�:��� �[��V�e�r�i�f�y�R�e�s�u�l�t��]�(�#�v�e�r�i�f�y�r�e�s�u�l�t�)�
�
�
�
�-�-�-�
�
�
�
�#�#�#� ��v�a�u�l�t�.�l�i�s�t�(�)��
�
�
�
�R�e�t�u�r�n�s� �a�l�l� �f�i�l�e�s� �u�p�l�o�a�d�e�d� �u�n�d�e�r� �t�h�i�s� �A�P�I� �k�e�y�.�
�
�
�
����t�y�p�e�s�c�r�i�p�t�
�
�c�o�n�s�t� �f�i�l�e�s� �=� �a�w�a�i�t� �v�a�u�l�t�.�l�i�s�t�(�)�;�
�
�
�
�f�i�l�e�s�.�f�o�r�E�a�c�h�(�(�{� �f�i�l�e�I�d�,� �o�r�i�g�i�n�a�l�N�a�m�e�,� �s�i�z�e�B�y�t�e�s�,� �c�r�e�a�t�e�d�A�t� �}�)� �=�>� �{�
�
� � �c�o�n�s�t� �k�b� �=� �(�s�i�z�e�B�y�t�e�s� �/� �1�0�2�4�)�.�t�o�F�i�x�e�d�(�1�)�;�
�
� � �c�o�n�s�o�l�e�.�l�o�g�(��[�$�{�c�r�e�a�t�e�d�A�t�.�s�l�i�c�e�(�0�,� �1�0�)�}�]� �$�{�o�r�i�g�i�n�a�l�N�a�m�e�}� �(�$�{�k�b�}� �K�B�)� ��! �$�{�f�i�l�e�I�d�}��)�;�
�
�}�)�;�
�
����
�
�
�
���R�e�t�u�r�n�s�:��� �[��F�i�l�e�I�n�f�o�[�]��]�(�#�f�i�l�e�i�n�f�o�)�
�
�
�
�-�-�-�
�
�
�
�#�#�#� ��v�a�u�l�t�.�d�e�l�e�t�e�(�f�i�l�e�I�d�)��
�
�
�
�P�e�r�m�a�n�e�n�t�l�y� �d�e�l�e�t�e�s� �a� �f�i�l�e� �r�e�c�o�r�d� �a�n�d� �i�t�s� �e�n�c�r�y�p�t�i�o�n� �k�e�y� �f�r�o�m� �D�e�c�e�n�t�r�a�V�a�u�l�t�'�s� �d�a�t�a�b�a�s�e�.�
�
�
�
�>� ���N�o�t�e�:��� �I�P�F�S� �i�s� �c�o�n�t�e�n�t�-�a�d�d�r�e�s�s�e�d� �a�n�d� �d�e�c�e�n�t�r�a�l�i�z�e�d� � �t�h�e� �e�n�c�r�y�p�t�e�d� �b�y�t�e�s� �o�n� �I�P�F�S� �c�a�n�n�o�t� �b�e� �r�e�m�o�v�e�d�,� �b�u�t� �w�i�t�h�o�u�t� �t�h�e� �e�n�c�r�y�p�t�i�o�n� �k�e�y� �t�h�e�y� �a�r�e� �p�e�r�m�a�n�e�n�t�l�y� �u�n�r�e�a�d�a�b�l�e�.�
�
�
�
����t�y�p�e�s�c�r�i�p�t�
�
�a�w�a�i�t� �v�a�u�l�t�.�d�e�l�e�t�e�(�'�6�d�7�0�b�7�6�2�-�.�.�.�'�)�;�
�
�c�o�n�s�o�l�e�.�l�o�g�(�'�D�e�l�e�t�e�d� � �d�e�c�r�y�p�t�i�o�n� �k�e�y� �d�e�s�t�r�o�y�e�d�'�)�;�
�
����
�
�
�
�-�-�-�
�
�
�
�#�#�#� ��v�a�u�l�t�.�w�a�i�t�F�o�r�B�l�o�c�k�c�h�a�i�n�(�f�i�l�e�I�d�,� �t�i�m�e�o�u�t�M�s�?�)��
�
�
�
�P�o�l�l�s� �u�n�t�i�l� �b�l�o�c�k�c�h�a�i�n� �a�n�c�h�o�r�i�n�g� �c�o�m�p�l�e�t�e�s�.� �U�s�e� �w�h�e�n� �y�o�u� �n�e�e�d� �t�h�e� �o�n�-�c�h�a�i�n� �T�X� �h�a�s�h� �b�e�f�o�r�e� �p�r�o�c�e�e�d�i�n�g� �(�e�.�g�.�,� �s�h�o�w�i�n�g� �a� �c�o�m�p�l�i�a�n�c�e� �a�u�d�i�t� �t�r�a�i�l�)�.�
�
�
�
����t�y�p�e�s�c�r�i�p�t�
�
�c�o�n�s�t� �{� �f�i�l�e�I�d� �}� �=� �a�w�a�i�t� �v�a�u�l�t�.�u�p�l�o�a�d�(�f�i�l�e�,� �'�a�u�d�i�t�-�l�o�g�.�p�d�f�'�)�;�
�
�
�
�/�/� �U�p�l�o�a�d� �r�e�t�u�r�n�s� �i�m�m�e�d�i�a�t�e�l�y� �w�i�t�h� �b�l�o�c�k�c�h�a�i�n� �s�t�a�t�u�s� �'�p�e�n�d�i�n�g�'�
�
�/�/� �w�a�i�t�F�o�r�B�l�o�c�k�c�h�a�i�n� �b�l�o�c�k�s� �u�n�t�i�l� �c�o�n�f�i�r�m�e�d� �(�~�1�5� �s�e�c�o�n�d�s� �o�n� �P�o�l�y�g�o�n� �A�m�o�y�)�
�
�c�o�n�s�t� �s�t�a�t�u�s� �=� �a�w�a�i�t� �v�a�u�l�t�.�w�a�i�t�F�o�r�B�l�o�c�k�c�h�a�i�n�(�f�i�l�e�I�d�,� �9�0�_�0�0�0�)�;�
�
�
�
�i�f� �(�s�t�a�t�u�s� �=�=�=� �'�c�o�n�f�i�r�m�e�d�'�)� �{�
�
� � �c�o�n�s�t� �{� �b�l�o�c�k�c�h�a�i�n�T�x� �}� �=� �a�w�a�i�t� �v�a�u�l�t�.�v�e�r�i�f�y�(�f�i�l�e�I�d�)�;�
�
� � �c�o�n�s�t� �e�x�p�l�o�r�e�r�U�r�l� �=� ��h�t�t�p�s�:�/�/�a�m�o�y�.�p�o�l�y�g�o�n�s�c�a�n�.�c�o�m�/�t�x�/�$�{�b�l�o�c�k�c�h�a�i�n�T�x�}��;�
�
� � �c�o�n�s�o�l�e�.�l�o�g�(�'�O�n�-�c�h�a�i�n� �p�r�o�o�f�:�'�,� �e�x�p�l�o�r�e�r�U�r�l�)�;�
�
�}�
�
����
�
�
�
�|� �P�a�r�a�m�e�t�e�r� �|� �T�y�p�e� �|� �D�e�f�a�u�l�t� �|� �D�e�s�c�r�i�p�t�i�o�n� �|�
�
�|�-�-�-�|�-�-�-�|�-�-�-�|�-�-�-�|�
�
�|� ��f�i�l�e�I�d�� �|� ��s�t�r�i�n�g�� �|� �r�e�q�u�i�r�e�d� �|� �F�i�l�e� �I�D� �f�r�o�m� �u�p�l�o�a�d� �|�
�
�|� ��t�i�m�e�o�u�t�M�s�� �|� ��n�u�m�b�e�r�� �|� ��6�0�0�0�0�� �|� �M�a�x� �t�i�m�e� �t�o� �w�a�i�t� �(�m�s�)� �|�
�
�
�
���R�e�t�u�r�n�s�:��� ��'�c�o�n�f�i�r�m�e�d�'� �|� �'�f�a�i�l�e�d�'��
�
�
�
�-�-�-�
�
�
�
�#�#� �T�y�p�e�S�c�r�i�p�t� �T�y�p�e�s�
�
�
�
�#�#�#� ��U�p�l�o�a�d�R�e�s�u�l�t��
�
�
�
����t�y�p�e�s�c�r�i�p�t�
�
�i�n�t�e�r�f�a�c�e� �U�p�l�o�a�d�R�e�s�u�l�t� �{�
�
� � �f�i�l�e�I�d�:� �s�t�r�i�n�g�;� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �/�/� �U�U�I�D� � �s�t�o�r�e� �t�h�i�s�
�
� � �h�a�s�h�:� �s�t�r�i�n�g�;� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �/�/� �S�H�A�-�2�5�6� �h�e�x� �(�6�4� �c�h�a�r�s�)�
�
� � �c�i�d�:� �s�t�r�i�n�g�;� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �/�/� �I�P�F�S� �C�I�D� �(�Q�m�.�.�.� �o�r� �b�a�f�y�.�.�.�)�
�
� � �i�p�f�s�U�r�l�:� �s�t�r�i�n�g�;� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �/�/� �h�t�t�p�s�:�/�/�g�a�t�e�w�a�y�.�p�i�n�a�t�a�.�c�l�o�u�d�/�.�.�.�
�
� � �b�l�o�c�k�c�h�a�i�n�S�t�a�t�u�s�:� �'�p�e�n�d�i�n�g�'� �|� �'�c�o�n�f�i�r�m�e�d�'� �|� �'�f�a�i�l�e�d�'�;� �/�/� �a�n�c�h�o�r�i�n�g� �s�t�a�t�e�
�
�}�
�
����
�
�
�
�#�#�#� ��R�e�t�r�i�e�v�e�R�e�s�u�l�t��
�
�
�
����t�y�p�e�s�c�r�i�p�t�
�
�i�n�t�e�r�f�a�c�e� �R�e�t�r�i�e�v�e�R�e�s�u�l�t� �{�
�
� � �f�i�l�e�:� �U�i�n�t�8�A�r�r�a�y�;� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �/�/� �d�e�c�r�y�p�t�e�d� �b�y�t�e�s�
�
� � �n�a�m�e�:� �s�t�r�i�n�g�;� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �/�/� �o�r�i�g�i�n�a�l� �f�i�l�e�n�a�m�e�
�
� � �m�i�m�e�T�y�p�e�:� �s�t�r�i�n�g�;� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �/�/� �e�.�g�.� �'�a�p�p�l�i�c�a�t�i�o�n�/�p�d�f�'�
�
� � �i�n�t�e�g�r�i�t�y�:� �'�o�k�'� �|� �'�f�a�i�l�e�d�'�;� � � � � � � � � � � � � � � � � � � � � � � � � � � �/�/� �h�a�s�h� �r�e�-�v�e�r�i�f�i�e�d� �o�n� �r�e�t�r�i�e�v�e�
�
� � �b�l�o�c�k�c�h�a�i�n�:� �{�
�
� � � � �v�e�r�i�f�i�e�d�:� �b�o�o�l�e�a�n�;�
�
� � � � �s�t�a�t�u�s�:� �'�p�e�n�d�i�n�g�'� �|� �'�c�o�n�f�i�r�m�e�d�'� �|� �'�f�a�i�l�e�d�'�;�
�
� � � � �t�x�:� �s�t�r�i�n�g� �|� �n�u�l�l�;� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �/�/� �P�o�l�y�g�o�n� �T�X� �h�a�s�h�
�
� � � � �r�e�a�s�o�n�:� �s�t�r�i�n�g�;� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �/�/� �e�.�g�.� �"�H�a�s�h� �m�a�t�c�h�e�s� �o�n�-�c�h�a�i�n� �r�e�c�o�r�d�"�
�
� � �}�;�
�
�}�
�
����
�
�
�
�#�#�#� ��V�e�r�i�f�y�R�e�s�u�l�t��
�
�
�
����t�y�p�e�s�c�r�i�p�t�
�
�i�n�t�e�r�f�a�c�e� �V�e�r�i�f�y�R�e�s�u�l�t� �{�
�
� � �v�e�r�i�f�i�e�d�:� �b�o�o�l�e�a�n�;� � � � � � � � � �/�/� �t�r�u�e� �=� �f�i�l�e� �i�s� �u�n�t�a�m�p�e�r�e�d�
�
� � �r�e�a�s�o�n�:� �s�t�r�i�n�g�;� � � � � � � � � � � � �/�/� �h�u�m�a�n�-�r�e�a�d�a�b�l�e� �e�x�p�l�a�n�a�t�i�o�n�
�
� � �f�i�l�e�I�d�:� �s�t�r�i�n�g�;�
�
� � �h�a�s�h�:� �s�t�r�i�n�g�;� � � � � � � � � � � � � � �/�/� �S�H�A�-�2�5�6� �s�t�o�r�e�d� �i�n� �D�e�c�e�n�t�r�a�V�a�u�l�t� �D�B�
�
� � �o�n�C�h�a�i�n�H�a�s�h�:� �s�t�r�i�n�g� �|� �n�u�l�l�;� �/�/� �S�H�A�-�2�5�6� �r�e�a�d� �f�r�o�m� �b�l�o�c�k�c�h�a�i�n� �t�x� �d�a�t�a�
�
� � �b�l�o�c�k�c�h�a�i�n�T�x�:� �s�t�r�i�n�g� �|� �n�u�l�l�;� �/�/� �'�0�x�.�.�.�'�
�
�}�
�
����
�
�
�
�#�#�#� ��F�i�l�e�I�n�f�o��
�
�
�
����t�y�p�e�s�c�r�i�p�t�
�
�i�n�t�e�r�f�a�c�e� �F�i�l�e�I�n�f�o� �{�
�
� � �f�i�l�e�I�d�:� �s�t�r�i�n�g�;�
�
� � �o�r�i�g�i�n�a�l�N�a�m�e�:� �s�t�r�i�n�g�;�
�
� � �m�i�m�e�T�y�p�e�:� �s�t�r�i�n�g�;�
�
� � �s�i�z�e�B�y�t�e�s�:� �n�u�m�b�e�r�;�
�
� � �h�a�s�h�:� �s�t�r�i�n�g�;�
�
� � �c�i�d�:� �s�t�r�i�n�g�;�
�
� � �c�r�e�a�t�e�d�A�t�:� �s�t�r�i�n�g�;� � � � � � � � � �/�/� �I�S�O� �8�6�0�1� � �e�.�g�.� �"�2�0�2�6�-�0�3�-�0�9�T�1�4�:�2�2�:�0�1�.�0�0�0�Z�"�
�
�}�
�
����
�
�
�
�-�-�-�
�
�
�
�#�#� �F�r�a�m�e�w�o�r�k� �E�x�a�m�p�l�e�s�
�
�
�
�#�#�#� �R�e�a�c�t� � �F�i�l�e� �U�p�l�o�a�d� �C�o�m�p�o�n�e�n�t�
�
�
�
����t�s�x�
�
�i�m�p�o�r�t� �{� �u�s�e�S�t�a�t�e� �}� �f�r�o�m� �'�r�e�a�c�t�'�;�
�
�i�m�p�o�r�t� �{� �D�e�c�e�n�t�r�a�V�a�u�l�t� �}� �f�r�o�m� �'�d�e�c�e�n�t�r�a�v�a�u�l�t�'�;�
�
�
�
�c�o�n�s�t� �v�a�u�l�t� �=� �n�e�w� �D�e�c�e�n�t�r�a�V�a�u�l�t�(�i�m�p�o�r�t�.�m�e�t�a�.�e�n�v�.�V�I�T�E�_�D�V�_�A�P�I�_�K�E�Y�)�;�
�
�
�
�e�x�p�o�r�t� �f�u�n�c�t�i�o�n� �S�e�c�u�r�e�U�p�l�o�a�d�(�)� �{�
�
� � �c�o�n�s�t� �[�f�i�l�e�I�d�,� �s�e�t�F�i�l�e�I�d�]� �=� �u�s�e�S�t�a�t�e�<�s�t�r�i�n�g� �|� �n�u�l�l�>�(�n�u�l�l�)�;�
�
� � �c�o�n�s�t� �[�s�t�a�t�u�s�,� �s�e�t�S�t�a�t�u�s�]� �=� �u�s�e�S�t�a�t�e�(�'�'�)�;�
�
�
�
� � �a�s�y�n�c� �f�u�n�c�t�i�o�n� �h�a�n�d�l�e�U�p�l�o�a�d�(�e�:� �R�e�a�c�t�.�C�h�a�n�g�e�E�v�e�n�t�<�H�T�M�L�I�n�p�u�t�E�l�e�m�e�n�t�>�)� �{�
�
� � � � �c�o�n�s�t� �f�i�l�e� �=� �e�.�t�a�r�g�e�t�.�f�i�l�e�s�?�.�[�0�]�;�
�
� � � � �i�f� �(�!�f�i�l�e�)� �r�e�t�u�r�n�;�
�
�
�
� � � � �s�e�t�S�t�a�t�u�s�(�'�E�n�c�r�y�p�t�i�n�g� �a�n�d� �u�p�l�o�a�d�i�n�g�& '�)�;�
�
� � � � �t�r�y� �{�
�
� � � � � � �c�o�n�s�t� �{� �f�i�l�e�I�d� �}� �=� �a�w�a�i�t� �v�a�u�l�t�.�u�p�l�o�a�d�(�f�i�l�e�,� �f�i�l�e�.�n�a�m�e�,� �f�i�l�e�.�t�y�p�e�)�;�
�
� � � � � � �s�e�t�F�i�l�e�I�d�(�f�i�l�e�I�d�)�;�
�
� � � � � � �s�e�t�S�t�a�t�u�s�(�'�' �U�p�l�o�a�d�e�d�!� �W�a�i�t�i�n�g� �f�o�r� �b�l�o�c�k�c�h�a�i�n� �c�o�n�f�i�r�m�a�t�i�o�n�& '�)�;�
�
�
�
� � � � � � �a�w�a�i�t� �v�a�u�l�t�.�w�a�i�t�F�o�r�B�l�o�c�k�c�h�a�i�n�(�f�i�l�e�I�d�)�;�
�
� � � � � � �s�e�t�S�t�a�t�u�s�(�'��&� �B�l�o�c�k�c�h�a�i�n� �c�o�n�f�i�r�m�e�d�!�'�)�;�
�
� � � � �}� �c�a�t�c�h� �(�e�r�r�)� �{�
�
� � � � � � �s�e�t�S�t�a�t�u�s�(��L' �E�r�r�o�r�:� �$�{�e�r�r� �i�n�s�t�a�n�c�e�o�f� �E�r�r�o�r� �?� �e�r�r�.�m�e�s�s�a�g�e� �:� �S�t�r�i�n�g�(�e�r�r�)�}��)�;�
�
� � � � �}�
�
� � �}�
�
�
�
� � �a�s�y�n�c� �f�u�n�c�t�i�o�n� �h�a�n�d�l�e�D�o�w�n�l�o�a�d�(�)� �{�
�
� � � � �i�f� �(�!�f�i�l�e�I�d�)� �r�e�t�u�r�n�;�
�
� � � � �c�o�n�s�t� �{� �f�i�l�e�,� �n�a�m�e�,� �m�i�m�e�T�y�p�e� �}� �=� �a�w�a�i�t� �v�a�u�l�t�.�r�e�t�r�i�e�v�e�(�f�i�l�e�I�d�)�;�
�
� � � � �c�o�n�s�t� �b�l�o�b� �=� �n�e�w� �B�l�o�b�(�[�f�i�l�e�]�,� �{� �t�y�p�e�:� �m�i�m�e�T�y�p�e� �}�)�;�
�
� � � � �c�o�n�s�t� �u�r�l� �=� �U�R�L�.�c�r�e�a�t�e�O�b�j�e�c�t�U�R�L�(�b�l�o�b�)�;�
�
� � � � �O�b�j�e�c�t�.�a�s�s�i�g�n�(�d�o�c�u�m�e�n�t�.�c�r�e�a�t�e�E�l�e�m�e�n�t�(�'�a�'�)�,� �{� �h�r�e�f�:� �u�r�l�,� �d�o�w�n�l�o�a�d�:� �n�a�m�e� �}�)�.�c�l�i�c�k�(�)�;�
�
� � �}�
�
�
�
� � �r�e�t�u�r�n� �(�
�
� � � � �<�d�i�v�>�
�
� � � � � � �<�i�n�p�u�t� �t�y�p�e�=�"�f�i�l�e�"� �o�n�C�h�a�n�g�e�=�{�h�a�n�d�l�e�U�p�l�o�a�d�}� �/�>�
�
� � � � � � �<�p�>�{�s�t�a�t�u�s�}�<�/�p�>�
�
� � � � � � �{�f�i�l�e�I�d� �&�&� �<�b�u�t�t�o�n� �o�n�C�l�i�c�k�=�{�h�a�n�d�l�e�D�o�w�n�l�o�a�d�}�>�D�o�w�n�l�o�a�d� �D�e�c�r�y�p�t�e�d�<�/�b�u�t�t�o�n�>�}�
�
� � � � �<�/�d�i�v�>�
�
� � �)�;�
�
�}�
�
����
�
�
�
�#�#�#� �N�e�x�t�.�j�s� � �S�e�r�v�e�r�-�S�i�d�e� �U�p�l�o�a�d� �R�o�u�t�e�
�
�
�
����t�y�p�e�s�c�r�i�p�t�
�
�/�/� �a�p�p�/�a�p�i�/�u�p�l�o�a�d�/�r�o�u�t�e�.�t�s�
�
�i�m�p�o�r�t� �{� �D�e�c�e�n�t�r�a�V�a�u�l�t� �}� �f�r�o�m� �'�d�e�c�e�n�t�r�a�v�a�u�l�t�'�;�
�
�i�m�p�o�r�t� �{� �N�e�x�t�R�e�q�u�e�s�t�,� �N�e�x�t�R�e�s�p�o�n�s�e� �}� �f�r�o�m� �'�n�e�x�t�/�s�e�r�v�e�r�'�;�
�
�
�
�c�o�n�s�t� �v�a�u�l�t� �=� �n�e�w� �D�e�c�e�n�t�r�a�V�a�u�l�t�(�p�r�o�c�e�s�s�.�e�n�v�.�D�V�_�A�P�I�_�K�E�Y�!�,� �{�
�
� � �b�a�s�e�U�r�l�:� �p�r�o�c�e�s�s�.�e�n�v�.�D�V�_�A�P�I�_�U�R�L�
�
�}�)�;�
�
�
�
�e�x�p�o�r�t� �a�s�y�n�c� �f�u�n�c�t�i�o�n� �P�O�S�T�(�r�e�q�:� �N�e�x�t�R�e�q�u�e�s�t�)� �{�
�
� � �c�o�n�s�t� �f�o�r�m� �=� �a�w�a�i�t� �r�e�q�.�f�o�r�m�D�a�t�a�(�)�;�
�
� � �c�o�n�s�t� �f�i�l�e� �=� �f�o�r�m�.�g�e�t�(�'�f�i�l�e�'�)� �a�s� �F�i�l�e� �|� �n�u�l�l�;�
�
�
�
� � �i�f� �(�!�f�i�l�e�)� �{�
�
� � � � �r�e�t�u�r�n� �N�e�x�t�R�e�s�p�o�n�s�e�.�j�s�o�n�(�{� �e�r�r�o�r�:� �'�N�o� �f�i�l�e� �p�r�o�v�i�d�e�d�'� �}�,� �{� �s�t�a�t�u�s�:� �4�0�0� �}�)�;�
�
� � �}�
�
�
�
� � �c�o�n�s�t� �{� �f�i�l�e�I�d�,� �b�l�o�c�k�c�h�a�i�n�S�t�a�t�u�s�,� �c�i�d� �}� �=� �a�w�a�i�t� �v�a�u�l�t�.�u�p�l�o�a�d�(�
�
� � � � �f�i�l�e�,�
�
� � � � �f�i�l�e�.�n�a�m�e�,�
�
� � � � �f�i�l�e�.�t�y�p�e�
�
� � �)�;�
�
�
�
� � �r�e�t�u�r�n� �N�e�x�t�R�e�s�p�o�n�s�e�.�j�s�o�n�(�{� �f�i�l�e�I�d�,� �b�l�o�c�k�c�h�a�i�n�S�t�a�t�u�s�,� �c�i�d� �}�)�;�
�
�}�
�
����
�
�
�
�#�#�#� �N�o�d�e�.�j�s� � �A�u�t�o�m�a�t�e�d� �B�a�c�k�u�p� �S�c�r�i�p�t�
�
�
�
����j�a�v�a�s�c�r�i�p�t�
�
�i�m�p�o�r�t� �{� �D�e�c�e�n�t�r�a�V�a�u�l�t� �}� �f�r�o�m� �'�d�e�c�e�n�t�r�a�v�a�u�l�t�'�;�
�
�i�m�p�o�r�t� �{� �r�e�a�d�F�i�l�e�S�y�n�c�,� �w�r�i�t�e�F�i�l�e�S�y�n�c� �}� �f�r�o�m� �'�f�s�'�;�
�
�
�
�c�o�n�s�t� �v�a�u�l�t� �=� �n�e�w� �D�e�c�e�n�t�r�a�V�a�u�l�t�(�p�r�o�c�e�s�s�.�e�n�v�.�D�V�_�A�P�I�_�K�E�Y�,� �{�
�
� � �b�a�s�e�U�r�l�:� �p�r�o�c�e�s�s�.�e�n�v�.�D�V�_�A�P�I�_�U�R�L� �?�?� �'�h�t�t�p�:�/�/�l�o�c�a�l�h�o�s�t�:�3�0�0�0�/�a�p�i�'�
�
�}�)�;�
�
�
�
�/�/� ��%�% �B�a�c�k�u�p� ��%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%
�
�c�o�n�s�t� �b�u�f�f�e�r� �=� �r�e�a�d�F�i�l�e�S�y�n�c�(�'�.�/�d�a�t�a�b�a�s�e�-�b�a�c�k�u�p�.�s�q�l�'�)�;�
�
�c�o�n�s�t� �{� �f�i�l�e�I�d� �}� �=� �a�w�a�i�t� �v�a�u�l�t�.�u�p�l�o�a�d�(�b�u�f�f�e�r�,� �'�b�a�c�k�u�p�.�s�q�l�'�,� �'�a�p�p�l�i�c�a�t�i�o�n�/�s�q�l�'�)�;�
�
�c�o�n�s�o�l�e�.�l�o�g�(�'�B�a�c�k�e�d� �u�p�.� �F�i�l�e� �I�D�:�'�,� �f�i�l�e�I�d�)�;�
�
�
�
�/�/� �W�a�i�t� �f�o�r� �o�n�-�c�h�a�i�n� �c�o�n�f�i�r�m�a�t�i�o�n�
�
�a�w�a�i�t� �v�a�u�l�t�.�w�a�i�t�F�o�r�B�l�o�c�k�c�h�a�i�n�(�f�i�l�e�I�d�)�;�
�
�c�o�n�s�t� �{� �b�l�o�c�k�c�h�a�i�n�T�x� �}� �=� �a�w�a�i�t� �v�a�u�l�t�.�v�e�r�i�f�y�(�f�i�l�e�I�d�)�;�
�
�c�o�n�s�o�l�e�.�l�o�g�(�'�B�l�o�c�k�c�h�a�i�n� �T�X�:�'�,� ��h�t�t�p�s�:�/�/�a�m�o�y�.�p�o�l�y�g�o�n�s�c�a�n�.�c�o�m�/�t�x�/�$�{�b�l�o�c�k�c�h�a�i�n�T�x�}��)�;�
�
�
�
�/�/� ��%�% �R�e�s�t�o�r�e� ��%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%
�
�c�o�n�s�t� �{� �f�i�l�e�,� �i�n�t�e�g�r�i�t�y� �}� �=� �a�w�a�i�t� �v�a�u�l�t�.�r�e�t�r�i�e�v�e�(�f�i�l�e�I�d�)�;�
�
�i�f� �(�i�n�t�e�g�r�i�t�y� �!�=�=� �'�o�k�'�)� �t�h�r�o�w� �n�e�w� �E�r�r�o�r�(�'�I�n�t�e�g�r�i�t�y� �c�h�e�c�k� �f�a�i�l�e�d� � �a�b�o�r�t�i�n�g� �r�e�s�t�o�r�e�'�)�;�
�
�w�r�i�t�e�F�i�l�e�S�y�n�c�(�'�.�/�r�e�s�t�o�r�e�d�-�b�a�c�k�u�p�.�s�q�l�'�,� �f�i�l�e�)�;�
�
�c�o�n�s�o�l�e�.�l�o�g�(�'�R�e�s�t�o�r�e�d� �s�u�c�c�e�s�s�f�u�l�l�y�'�)�;�
�
����
�
�
�
�-�-�-�
�
�
�
�#�#� �E�r�r�o�r� �H�a�n�d�l�i�n�g�
�
�
�
�A�l�l� �S�D�K� �m�e�t�h�o�d�s� �t�h�r�o�w� �a� �p�l�a�i�n� ��E�r�r�o�r�� �w�i�t�h� �a� �d�e�s�c�r�i�p�t�i�v�e� �m�e�s�s�a�g�e� �o�n� �f�a�i�l�u�r�e�.�
�
�
�
����t�y�p�e�s�c�r�i�p�t�
�
�i�m�p�o�r�t� �{� �D�e�c�e�n�t�r�a�V�a�u�l�t� �}� �f�r�o�m� �'�d�e�c�e�n�t�r�a�v�a�u�l�t�'�;�
�
�
�
�c�o�n�s�t� �v�a�u�l�t� �=� �n�e�w� �D�e�c�e�n�t�r�a�V�a�u�l�t�(�'�d�v�_�y�o�u�r�_�a�p�i�_�k�e�y�'�)�;�
�
�
�
�t�r�y� �{�
�
� � �c�o�n�s�t� �{� �f�i�l�e�I�d� �}� �=� �a�w�a�i�t� �v�a�u�l�t�.�u�p�l�o�a�d�(�f�i�l�e�,� �'�d�o�c�.�p�d�f�'�,� �'�a�p�p�l�i�c�a�t�i�o�n�/�p�d�f�'�)�;�
�
�}� �c�a�t�c�h� �(�e�r�r�)� �{�
�
� � �i�f� �(�e�r�r� �i�n�s�t�a�n�c�e�o�f� �E�r�r�o�r�)� �{�
�
� � � � �c�o�n�s�o�l�e�.�e�r�r�o�r�(�'�U�p�l�o�a�d� �f�a�i�l�e�d�:�'�,� �e�r�r�.�m�e�s�s�a�g�e�)�;�
�
� � � � �/�/� �C�o�m�m�o�n� �m�e�s�s�a�g�e�s�:�
�
� � � � �/�/� ��! �"�U�p�l�o�a�d� �f�a�i�l�e�d�:� �4�0�1� �U�n�a�u�t�h�o�r�i�z�e�d�"� �(�b�a�d� �A�P�I� �k�e�y�)�
�
� � � � �/�/� ��! �"�U�p�l�o�a�d� �f�a�i�l�e�d�:� �4�1�3� �P�a�y�l�o�a�d� �T�o�o� �L�a�r�g�e�"� �(�f�i�l�e� �t�o�o� �b�i�g�)�
�
� � � � �/�/� ��! �"�U�p�l�o�a�d� �f�a�i�l�e�d�:� �F�a�i�l�e�d� �t�o� �f�e�t�c�h�"� �(�n�e�t�w�o�r�k� �e�r�r�o�r�)�
�
� � �}�
�
�}�
�
�
�
�/�/� �I�n�t�e�g�r�i�t�y� �f�a�i�l�u�r�e� �o�n� �r�e�t�r�i�e�v�e�
�
�t�r�y� �{�
�
� � �c�o�n�s�t� �r�e�s�u�l�t� �=� �a�w�a�i�t� �v�a�u�l�t�.�r�e�t�r�i�e�v�e�(�f�i�l�e�I�d�)�;�
�
� � �i�f� �(�r�e�s�u�l�t�.�i�n�t�e�g�r�i�t�y� �=�=�=� �'�f�a�i�l�e�d�'�)� �{�
�
� � � � �t�h�r�o�w� �n�e�w� �E�r�r�o�r�(�'�H�a�s�h� �m�i�s�m�a�t�c�h� � �f�i�l�e� �m�a�y� �h�a�v�e� �b�e�e�n� �t�a�m�p�e�r�e�d� �w�i�t�h�'�)�;�
�
� � �}�
�
�}� �c�a�t�c�h� �(�e�r�r�)� �{�
�
� � �c�o�n�s�o�l�e�.�e�r�r�o�r�(�e�r�r�)�;�
�
�}�
�
����
�
�
�
�-�-�-�
�
�
�
�#�#� �E�n�v�i�r�o�n�m�e�n�t� �V�a�r�i�a�b�l�e�s�
�
�
�
�K�e�e�p� �y�o�u�r� �A�P�I� �k�e�y� �o�u�t� �o�f� �s�o�u�r�c�e� �c�o�d�e� �u�s�i�n�g� �e�n�v�i�r�o�n�m�e�n�t� �v�a�r�i�a�b�l�e�s�.�
�
�
�
�#�#�#� �N�o�d�e�.�j�s� �/� �N�e�x�t�.�j�s� �/� �V�i�t�e�
�
�
�
����b�a�s�h�
�
�#� �.�e�n�v�
�
�D�V�_�A�P�I�_�K�E�Y�=�d�v�_�y�o�u�r�_�a�p�i�_�k�e�y�_�h�e�r�e�
�
�D�V�_�A�P�I�_�U�R�L�=�h�t�t�p�s�:�/�/�d�e�c�e�n�t�r�a�-�v�a�u�l�t�.�o�n�r�e�n�d�e�r�.�c�o�m�/�a�p�i� � �#� �o�p�t�i�o�n�a�l� �o�v�e�r�r�i�d�e�
�
����
�
�
�
����t�y�p�e�s�c�r�i�p�t�
�
�/�/� �U�s�a�g�e�
�
�c�o�n�s�t� �v�a�u�l�t� �=� �n�e�w� �D�e�c�e�n�t�r�a�V�a�u�l�t�(�p�r�o�c�e�s�s�.�e�n�v�.�D�V�_�A�P�I�_�K�E�Y�!�,� �{�
�
� � �b�a�s�e�U�r�l�:� �p�r�o�c�e�s�s�.�e�n�v�.�D�V�_�A�P�I�_�U�R�L�
�
�}�)�;�
�
����
�
�
�
�#�#�#� �R�e�a�c�t� �(�V�i�t�e�)�
�
�
�
����b�a�s�h�
�
�#� �.�e�n�v�
�
�V�I�T�E�_�D�V�_�A�P�I�_�K�E�Y�=�d�v�_�y�o�u�r�_�a�p�i�_�k�e�y�_�h�e�r�e�
�
����
�
�
�
����t�y�p�e�s�c�r�i�p�t�
�
�c�o�n�s�t� �v�a�u�l�t� �=� �n�e�w� �D�e�c�e�n�t�r�a�V�a�u�l�t�(�i�m�p�o�r�t�.�m�e�t�a�.�e�n�v�.�V�I�T�E�_�D�V�_�A�P�I�_�K�E�Y�)�;�
�
����
�
�
�
�#�#�#� �C�r�e�a�t�e� �R�e�a�c�t� �A�p�p�
�
�
�
����b�a�s�h�
�
�#� �.�e�n�v�
�
�R�E�A�C�T�_�A�P�P�_�D�V�_�A�P�I�_�K�E�Y�=�d�v�_�y�o�u�r�_�a�p�i�_�k�e�y�_�h�e�r�e�
�
����
�
�
�
����t�y�p�e�s�c�r�i�p�t�
�
�c�o�n�s�t� �v�a�u�l�t� �=� �n�e�w� �D�e�c�e�n�t�r�a�V�a�u�l�t�(�p�r�o�c�e�s�s�.�e�n�v�.�R�E�A�C�T�_�A�P�P�_�D�V�_�A�P�I�_�K�E�Y�!�)�;�
�
����
�
�
�
�>� ��&� ���N�e�v�e�r� �c�o�m�m�i�t� ��.�e�n�v�� �f�i�l�e�s� �o�r� �h�a�r�d�c�o�d�e� �A�P�I� �k�e�y�s� �i�n� �c�l�i�e�n�t�-�s�i�d�e� �c�o�d�e�.��� �F�o�r� �b�r�o�w�s�e�r� �a�p�p�s�,� �p�r�o�x�y� �u�p�l�o�a�d�/�d�o�w�n�l�o�a�d� �t�h�r�o�u�g�h� �y�o�u�r� �o�w�n� �b�a�c�k�e�n�d� �a�n�d� �k�e�e�p� �t�h�e� ��D�V�_�A�P�I�_�K�E�Y�� �s�e�r�v�e�r�-�s�i�d�e� �o�n�l�y�.�
�
�
�
�-�-�-�
�
�
�
�#�#� �S�e�c�u�r�i�t�y� �M�o�d�e�l�
�
�
�
�|� �L�a�y�e�r� �|� �T�e�c�h�n�o�l�o�g�y� �|� �W�h�a�t� �h�a�p�p�e�n�s� �|�
�
�|�-�-�-�|�-�-�-�|�-�-�-�|�
�
�|� ���E�n�c�r�y�p�t�i�o�n��� �|� �A�E�S�-�2�5�6�-�G�C�M� �|� �F�i�l�e� �e�n�c�r�y�p�t�e�d� �b�e�f�o�r�e� �u�p�l�o�a�d� � �u�n�i�q�u�e� �k�e�y� �p�e�r� �f�i�l�e� �|�
�
�|� ���K�e�y� �s�t�o�r�a�g�e��� �|� �S�e�r�v�e�r�-�s�i�d�e� �w�r�a�p�p�i�n�g� �|� �P�e�r�-�f�i�l�e� �k�e�y� �w�r�a�p�p�e�d� �w�i�t�h� �m�a�s�t�e�r� �k�e�y� � �r�a�w� �k�e�y� �n�e�v�e�r� �p�e�r�s�i�s�t�e�d� �|�
�
�|� ���I�P�F�S� �u�p�l�o�a�d��� �|� �P�i�n�a�t�a� �|� �O�n�l�y� �e�n�c�r�y�p�t�e�d� �b�y�t�e�s� �s�t�o�r�e�d� � �f�i�l�e�n�a�m�e� �i�s� �a� �S�H�A�-�2�5�6� �h�a�s�h� �|�
�
�|� ���I�n�t�e�g�r�i�t�y� �p�r�o�o�f��� �|� �P�o�l�y�g�o�n� �b�l�o�c�k�c�h�a�i�n� �|� �S�H�A�-�2�5�6� �o�f� �e�n�c�r�y�p�t�e�d� �b�y�t�e�s� �a�n�c�h�o�r�e�d� �o�n�-�c�h�a�i�n� � �i�m�m�u�t�a�b�l�e� �|�
�
�|� ���D�e�c�r�y�p�t�i�o�n��� �|� �W�e�b� �C�r�y�p�t�o� �A�P�I� �(�S�D�K�)� �|� �D�e�c�r�y�p�t�i�o�n� �r�u�n�s� �i�n�s�i�d�e� �t�h�e� �S�D�K� �o�n� �t�h�e� �c�a�l�l�e�r�'�s� �m�a�c�h�i�n�e� �|�
�
�
�
���Z�e�r�o�-�K�n�o�w�l�e�d�g�e� �G�u�a�r�a�n�t�e�e���
�
�
�
�E�v�e�n� �i�f� �D�e�c�e�n�t�r�a�V�a�u�l�t� �s�e�r�v�e�r�s�,� �P�i�n�a�t�a�,� �o�r� �I�P�F�S� �n�o�d�e�s� �a�r�e� �f�u�l�l�y� �c�o�m�p�r�o�m�i�s�e�d�,� �a�n� �a�t�t�a�c�k�e�r� �g�e�t�s� �o�n�l�y� �e�n�c�r�y�p�t�e�d� �b�y�t�e�s� �a�n�d� �o�p�a�q�u�e� �h�a�s�h�e�s�.� �W�i�t�h�o�u�t� �t�h�e� �m�a�s�t�e�r� �e�n�c�r�y�p�t�i�o�n� �k�e�y� � �w�h�i�c�h� �n�e�v�e�r� �l�e�a�v�e�s� �y�o�u�r� �s�e�r�v�e�r� �i�n�f�r�a�s�t�r�u�c�t�u�r�e� � �n�o� �f�i�l�e� �c�o�n�t�e�n�t� �i�s� �r�e�c�o�v�e�r�a�b�l�e�.�
�
�
�
�T�h�e� �b�l�o�c�k�c�h�a�i�n� �a�n�c�h�o�r� �p�r�o�v�i�d�e�s� ���t�a�m�p�e�r� �e�v�i�d�e�n�c�e���:� �i�f� �a�n�y�o�n�e� �m�o�d�i�f�i�e�s� �t�h�e� �e�n�c�r�y�p�t�e�d� �b�y�t�e�s� �o�n� �I�P�F�S�,� �t�h�e� �S�H�A�-�2�5�6� �h�a�s�h� �w�i�l�l� �n�o� �l�o�n�g�e�r� �m�a�t�c�h� �t�h�e� �o�n�-�c�h�a�i�n� �r�e�c�o�r�d�,� �a�n�d� ��v�e�r�i�f�y�(�)�� �/� ��r�e�t�r�i�e�v�e�(�)�� �w�i�l�l� �f�l�a�g� �i�t� �i�m�m�e�d�i�a�t�e�l�y�.�
�
�
�
�-�-�-�
�
�
�
�#�#� �R�e�q�u�i�r�e�m�e�n�t�s�
�
�
�
���N�o�d�e�.�j�s���
�
�-� �N�o�d�e�.�j�s� �1�8� �o�r� �l�a�t�e�r� �(�u�s�e�s� �n�a�t�i�v�e� ��f�e�t�c�h�� �a�n�d� ��c�r�y�p�t�o�.�s�u�b�t�l�e��)�
�
�
�
���B�r�o�w�s�e�r���
�
�-� �C�h�r�o�m�e� �8�5�+� �/� �E�d�g�e� �8�5�+�
�
�-� �F�i�r�e�f�o�x� �9�0�+�
�
�-� �S�a�f�a�r�i� �1�5�+�
�
�
�
�>� �T�h�e� �S�D�K� �h�a�s� ���z�e�r�o� �n�p�m� �d�e�p�e�n�d�e�n�c�i�e�s��� � �i�t� �r�e�l�i�e�s� �o�n�l�y� �o�n� �p�l�a�t�f�o�r�m�-�n�a�t�i�v�e� �W�e�b� �A�P�I�s�.�
�
�
�
�-�-�-�
�
�
�
�#�#� �C�h�a�n�g�e�l�o�g�
�
�
�
�#�#�#� �0�.�1�.�0� � �I�n�i�t�i�a�l� �R�e�l�e�a�s�e�
�
�-� ��u�p�l�o�a�d��,� ��r�e�t�r�i�e�v�e��,� ��v�e�r�i�f�y��,� ��l�i�s�t��,� ��d�e�l�e�t�e��,� ��w�a�i�t�F�o�r�B�l�o�c�k�c�h�a�i�n��
�
�-� �A�E�S�-�2�5�6�-�G�C�M� �c�l�i�e�n�t�-�s�i�d�e� �d�e�c�r�y�p�t�i�o�n� �v�i�a� �W�e�b� �C�r�y�p�t�o� �A�P�I�
�
�-� �C�J�S� �+� �E�S�M� �+� �T�y�p�e�S�c�r�i�p�t� �d�e�c�l�a�r�a�t�i�o�n� �f�i�l�e�s�
�
�-� �Z�e�r�o� �d�e�p�e�n�d�e�n�c�i�e�s�
�
�
�
�-�-�-�
�
�
�
�#�#� �L�i�c�e�n�s�e�
�
�
�
�M�I�T� ��� �D�e�c�e�n�t�r�a�V�a�u�l�t�
�
�
