pyhanko-cli 0.3.0__tar.gz → 0.4.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (325) hide show
  1. pyhanko_cli-0.4.0/MANIFEST.in +3 -0
  2. {pyhanko_cli-0.3.0/src/pyhanko_cli.egg-info → pyhanko_cli-0.4.0}/PKG-INFO +4 -3
  3. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/crypto/certomancer.yml +16 -6
  4. pyhanko_cli-0.4.0/pyhanko_testing_commons/test_data/data/crypto/keys-ecdsa/decrypter-x25519.key.pem +3 -0
  5. pyhanko_cli-0.4.0/pyhanko_testing_commons/test_data/data/crypto/keys-ecdsa/decrypter-x448.key.pem +4 -0
  6. pyhanko_cli-0.4.0/pyhanko_testing_commons/test_data/data/crypto/keys-ecdsa/decrypter1.key.pem +5 -0
  7. pyhanko_cli-0.4.0/pyhanko_testing_commons/test_data/data/crypto/keys-ecdsa/decrypter2.key.pem +6 -0
  8. pyhanko_cli-0.4.0/pyhanko_testing_commons/test_data/data/crypto/keys-ecdsa/decrypter3.key.pem +8 -0
  9. pyhanko_cli-0.4.0/pyhanko_testing_commons/test_data/data/crypto/keys-ecdsa/intermediate_ca.key.pem +6 -0
  10. pyhanko_cli-0.4.0/pyhanko_testing_commons/test_data/data/crypto/keys-ecdsa/ocsp.key.pem +6 -0
  11. pyhanko_cli-0.4.0/pyhanko_testing_commons/test_data/data/crypto/keys-ecdsa/root_ca.key.pem +6 -0
  12. pyhanko_cli-0.4.0/pyhanko_testing_commons/test_data/data/crypto/keys-ecdsa/signer.key.pem +6 -0
  13. pyhanko_cli-0.4.0/pyhanko_testing_commons/test_data/data/crypto/keys-ecdsa/signer2.key.pem +6 -0
  14. pyhanko_cli-0.4.0/pyhanko_testing_commons/test_data/data/crypto/keys-ecdsa/tsa.key.pem +6 -0
  15. pyhanko_cli-0.4.0/pyhanko_testing_commons/test_data/data/crypto/keys-ecdsa/tsa2.key.pem +6 -0
  16. pyhanko_cli-0.4.0/pyhanko_testing_commons/test_data/data/crypto/keys-rsa/tsa.key.pem +30 -0
  17. pyhanko_cli-0.4.0/pyhanko_testing_commons/test_data/data/fonts/LICENSE.SourceSerif +93 -0
  18. pyhanko_cli-0.4.0/pyhanko_testing_commons/test_data/data/fonts/SourceSerif4-Regular.otf +0 -0
  19. pyhanko_cli-0.4.0/pyhanko_testing_commons/test_data/data/pdf/.gitignore +1 -0
  20. pyhanko_cli-0.4.0/pyhanko_testing_commons/test_data/data/pdf/layout-tests/double-newline.pdf +0 -0
  21. pyhanko_cli-0.4.0/pyhanko_testing_commons/test_data/data/pdf/layout-tests/source-serif-test.pdf +0 -0
  22. pyhanko_cli-0.4.0/pyhanko_testing_commons/test_data/data/pdf/no-mediabox.pdf +0 -0
  23. pyhanko_cli-0.4.0/pyhanko_testing_commons/test_data/data/pdf/pubkey-ecc-test.pdf +0 -0
  24. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyproject.toml +6 -4
  25. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/src/pyhanko/cli/_ctx.py +41 -0
  26. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/src/pyhanko/cli/_root.py +17 -2
  27. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/src/pyhanko/cli/_trust.py +6 -1
  28. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/src/pyhanko/cli/commands/crypt.py +9 -6
  29. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/src/pyhanko/cli/commands/signing/__init__.py +9 -2
  30. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/src/pyhanko/cli/commands/signing/pkcs11_cli.py +5 -4
  31. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/src/pyhanko/cli/commands/signing/plugin.py +57 -2
  32. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/src/pyhanko/cli/commands/signing/simple.py +5 -4
  33. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/src/pyhanko/cli/commands/signing/utils.py +10 -5
  34. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/src/pyhanko/cli/commands/validation/validate.py +9 -57
  35. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/src/pyhanko/cli/config.py +40 -1
  36. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/src/pyhanko/cli/plugin_api.py +13 -0
  37. pyhanko_cli-0.4.0/src/pyhanko/cli/version.py +2 -0
  38. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0/src/pyhanko_cli.egg-info}/PKG-INFO +4 -3
  39. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/src/pyhanko_cli.egg-info/SOURCES.txt +12 -4
  40. pyhanko_cli-0.4.0/src/pyhanko_cli.egg-info/requires.txt +7 -0
  41. pyhanko_cli-0.4.0/tests/__init__.py +0 -0
  42. pyhanko_cli-0.4.0/tests/conftest.py +227 -0
  43. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/tests/test_cli_crypt.py +22 -24
  44. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/tests/test_cli_ltv.py +2 -90
  45. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/tests/test_cli_plugins.py +110 -0
  46. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/tests/test_cli_signing.py +127 -29
  47. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/tests/test_cli_signing_pkcs11.py +35 -15
  48. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/tests/test_config.py +1 -0
  49. pyhanko_cli-0.4.0/tests/validation/__init__.py +0 -0
  50. pyhanko_cli-0.4.0/tests/validation/conftest.py +153 -0
  51. pyhanko_cli-0.4.0/tests/validation/test_cli_qualified_validation.py +780 -0
  52. pyhanko_cli-0.4.0/tests/validation/test_cli_validation.py +912 -0
  53. pyhanko_cli-0.3.0/MANIFEST.in +0 -1
  54. pyhanko_cli-0.3.0/pyhanko_testing_commons/test_data/data/crypto/keys-ecdsa/decrypter-x25519.key.pem +0 -3
  55. pyhanko_cli-0.3.0/pyhanko_testing_commons/test_data/data/crypto/keys-ecdsa/decrypter-x448.key.pem +0 -4
  56. pyhanko_cli-0.3.0/pyhanko_testing_commons/test_data/data/crypto/keys-ecdsa/decrypter1.key.pem +0 -5
  57. pyhanko_cli-0.3.0/pyhanko_testing_commons/test_data/data/crypto/keys-ecdsa/decrypter2.key.pem +0 -6
  58. pyhanko_cli-0.3.0/pyhanko_testing_commons/test_data/data/crypto/keys-ecdsa/decrypter3.key.pem +0 -7
  59. pyhanko_cli-0.3.0/pyhanko_testing_commons/test_data/data/crypto/keys-ecdsa/intermediate_ca.key.pem +0 -9
  60. pyhanko_cli-0.3.0/pyhanko_testing_commons/test_data/data/crypto/keys-ecdsa/ocsp.key.pem +0 -9
  61. pyhanko_cli-0.3.0/pyhanko_testing_commons/test_data/data/crypto/keys-ecdsa/root_ca.key.pem +0 -9
  62. pyhanko_cli-0.3.0/pyhanko_testing_commons/test_data/data/crypto/keys-ecdsa/signer.key.pem +0 -9
  63. pyhanko_cli-0.3.0/pyhanko_testing_commons/test_data/data/crypto/keys-ecdsa/signer2.key.pem +0 -9
  64. pyhanko_cli-0.3.0/pyhanko_testing_commons/test_data/data/crypto/keys-ecdsa/tsa.key.pem +0 -9
  65. pyhanko_cli-0.3.0/pyhanko_testing_commons/test_data/data/crypto/keys-ecdsa/tsa2.key.pem +0 -9
  66. pyhanko_cli-0.3.0/pyhanko_testing_commons/test_data/data/fonts/FreeSerif.otf +0 -0
  67. pyhanko_cli-0.3.0/pyhanko_testing_commons/test_data/data/fonts/LICENSE.freeserif +0 -29
  68. pyhanko_cli-0.3.0/pyhanko_testing_commons/test_data/data/pdf/.gitignore +0 -1
  69. pyhanko_cli-0.3.0/pyhanko_testing_commons/test_data/data/pdf/layout-tests/double-newline.pdf +0 -0
  70. pyhanko_cli-0.3.0/pyhanko_testing_commons/test_data/data/pdf/layout-tests/freeserif-test.pdf +0 -0
  71. pyhanko_cli-0.3.0/pyhanko_testing_commons/test_data/data/pdf/pubkey-ecc-test.pdf +0 -0
  72. pyhanko_cli-0.3.0/src/pyhanko/cli/version.py +0 -2
  73. pyhanko_cli-0.3.0/src/pyhanko_cli.egg-info/requires.txt +0 -6
  74. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/LICENSE +0 -0
  75. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/README.md +0 -0
  76. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/__init__.py +0 -0
  77. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/__init__.py +0 -0
  78. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/certomancer_trust_lists.py +0 -0
  79. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/crypto/keys-dsa/intermediate_ca.key.pem +0 -0
  80. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/crypto/keys-dsa/ocsp.key.pem +0 -0
  81. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/crypto/keys-dsa/params.pem +0 -0
  82. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/crypto/keys-dsa/root_ca.key.pem +0 -0
  83. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/crypto/keys-dsa/signer.key.pem +0 -0
  84. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/crypto/keys-dsa/signer2.key.pem +0 -0
  85. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/crypto/keys-dsa/tsa.key.pem +0 -0
  86. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/crypto/keys-dsa/tsa2.key.pem +0 -0
  87. /pyhanko_cli-0.3.0/pyhanko_testing_commons/test_data/data/crypto/keys-rsa/tsa.key.pem → /pyhanko_cli-0.4.0/pyhanko_testing_commons/test_data/data/crypto/keys-ecdsa/tsa_rsa.key.pem +0 -0
  88. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/crypto/keys-ed25519/intermediate_ca.key.pem +0 -0
  89. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/crypto/keys-ed25519/ocsp.key.pem +0 -0
  90. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/crypto/keys-ed25519/root_ca.key.pem +0 -0
  91. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/crypto/keys-ed25519/signer.key.pem +0 -0
  92. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/crypto/keys-ed25519/signer2.key.pem +0 -0
  93. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/crypto/keys-ed25519/tsa.key.pem +0 -0
  94. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/crypto/keys-ed25519/tsa2.key.pem +0 -0
  95. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/crypto/keys-ed448/intermediate_ca.key.pem +0 -0
  96. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/crypto/keys-ed448/ocsp.key.pem +0 -0
  97. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/crypto/keys-ed448/root_ca.key.pem +0 -0
  98. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/crypto/keys-ed448/signer.key.pem +0 -0
  99. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/crypto/keys-ed448/signer2.key.pem +0 -0
  100. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/crypto/keys-ed448/tsa.key.pem +0 -0
  101. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/crypto/keys-ed448/tsa2.key.pem +0 -0
  102. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/crypto/keys-rsa/indep_tsa.key.pem +0 -0
  103. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/crypto/keys-rsa/indep_tsa_root.key.pem +0 -0
  104. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/crypto/keys-rsa/interm_aa.key.pem +0 -0
  105. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/crypto/keys-rsa/intermediate_ca.key.pem +0 -0
  106. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/crypto/keys-rsa/leaf_aa.key.pem +0 -0
  107. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/crypto/keys-rsa/ocsp.key.pem +0 -0
  108. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/crypto/keys-rsa/root_aa.key.pem +0 -0
  109. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/crypto/keys-rsa/root_ca.key.pem +0 -0
  110. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/crypto/keys-rsa/signer.key.pem +0 -0
  111. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/crypto/keys-rsa/signer2.key.pem +0 -0
  112. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/crypto/keys-rsa/tsa2.key.pem +0 -0
  113. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/crypto/ocsp.req.der +0 -0
  114. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/crypto/ocsp.resp.der +0 -0
  115. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/crypto/real-misissued-qtst-cert.cer +0 -0
  116. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/crypto/real-qcert.cer +0 -0
  117. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/crypto/real-qtst-cert.cer +0 -0
  118. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/crypto/selfsigned.cert.pem +0 -0
  119. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/crypto/selfsigned.key.pem +0 -0
  120. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/crypto/selfsigned.pfx +0 -0
  121. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/crypto/some-chain.cert.pem +0 -0
  122. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/crypto/testing-ca/ca-chain.cert.pem +0 -0
  123. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/crypto/testing-ca/interm/decrypter1-old.cert.pem +0 -0
  124. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/crypto/testing-ca/interm/decrypter1.cert.pem +0 -0
  125. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/crypto/testing-ca/interm/decrypter1.pfx +0 -0
  126. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/crypto/testing-ca/interm/decrypter2.cert.pem +0 -0
  127. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/crypto/testing-ca/interm/decrypter2.pfx +0 -0
  128. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/crypto/testing-ca/interm/interm-ocsp.cert.pem +0 -0
  129. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/crypto/testing-ca/interm/interm-ocsp.pfx +0 -0
  130. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/crypto/testing-ca/interm/signer1-long.cert.pem +0 -0
  131. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/crypto/testing-ca/interm/signer1-long.pfx +0 -0
  132. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/crypto/testing-ca/interm/signer1.cert.pem +0 -0
  133. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/crypto/testing-ca/interm/signer1.pfx +0 -0
  134. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/crypto/testing-ca/interm/signer2.cert.pem +0 -0
  135. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/crypto/testing-ca/interm/signer2.pfx +0 -0
  136. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/crypto/testing-ca/root/interm.cert.pem +0 -0
  137. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/crypto/testing-ca/root/interm.pfx +0 -0
  138. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/crypto/testing-ca/root/root.cert.pem +0 -0
  139. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/crypto/testing-ca/root/root.pfx +0 -0
  140. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/crypto/testing-ca/root/tsa.cert.pem +0 -0
  141. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/crypto/testing-ca/root/tsa.pfx +0 -0
  142. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/crypto/testing-ca/root/tsa2.cert.pem +0 -0
  143. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/crypto/testing-ca/root/tsa2.pfx +0 -0
  144. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/crypto/testing-ca-setup/ca-setup.sh +0 -0
  145. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/crypto/testing-ca-setup/openssl.base.cnf +0 -0
  146. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/crypto/testing-ca-setup/pkcs11-setup-certomancer.sh +0 -0
  147. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/crypto/testing-ca-setup/pkcs11-setup.sh +0 -0
  148. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/crypto/testing-ca-setup/setup-params +0 -0
  149. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/crypto/tsa.cert.pem +0 -0
  150. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/fonts/LICENSE.Noto +0 -0
  151. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/fonts/NotoSans-Regular.ttf +0 -0
  152. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/fonts/NotoSansArabic-Regular.ttf +0 -0
  153. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/fonts/NotoSerifJP-Regular.otf +0 -0
  154. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/fonts/NotoSerifSubset.otf +0 -0
  155. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/img/stamp-indexed.png +0 -0
  156. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/img/stamp.png +0 -0
  157. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/broken-objstream1.pdf +0 -0
  158. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/broken-objstream2.pdf +0 -0
  159. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/broken-objstream3.pdf +0 -0
  160. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/broken-objstream4.pdf +0 -0
  161. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/broken-objstream5.pdf +0 -0
  162. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/broken-objstream6.pdf +0 -0
  163. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/certified-with-indirect-refs-in-dir.pdf +0 -0
  164. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/circular-page-tree.pdf +0 -0
  165. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/coverage-anomalies/base.pdf +0 -0
  166. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/coverage-anomalies/one-byterange.pdf +0 -0
  167. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/coverage-anomalies/signature-gap-too-big.pdf +0 -0
  168. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/coverage-anomalies/tail-uncovered.pdf +0 -0
  169. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/coverage-anomalies/weird-byterange.pdf +0 -0
  170. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/ed448-disallowed-hash.pdf +0 -0
  171. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/ed448-shake256-nolen.pdf +0 -0
  172. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/embedded-encrypted-nocf.pdf +0 -0
  173. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/empty-a4.pdf +0 -0
  174. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/extensions-direct.pdf +0 -0
  175. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/extensions-indirect-not-all-paths.pdf +0 -0
  176. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/extensions-indirect.pdf +0 -0
  177. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/extensions-update-direct.pdf +0 -0
  178. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/extensions-update-indirect.pdf +0 -0
  179. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/fontembed.pdf +0 -0
  180. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/form-tree-circular-ref-input.pdf +0 -0
  181. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/form-update-ap-indirect-sneaky-trailer.pdf +0 -0
  182. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/form-update-no-override-appearance-stream-ap-indirect-sneaky.pdf +0 -0
  183. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/form-update-no-override-appearance-stream-ap-indirect.pdf +0 -0
  184. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/form-update-original-ap-type-wrong.pdf +0 -0
  185. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/form-update-override-appearance-stream-ap-indirect-sneaky.pdf +0 -0
  186. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/form-update-override-appearance-stream-ap-indirect.pdf +0 -0
  187. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/form-update-override-appearance-stream-sneaky.pdf +0 -0
  188. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/form-update-override-appearance-stream.pdf +0 -0
  189. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/info-bin-producer-string.pdf +0 -0
  190. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/layout-tests/arabic-box.pdf +0 -0
  191. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/layout-tests/bitmap-bg.pdf +0 -0
  192. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/layout-tests/code128-test.pdf +0 -0
  193. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/layout-tests/fancy-qr-stamp-test.pdf +0 -0
  194. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/layout-tests/form-fill-result.pdf +0 -0
  195. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/layout-tests/four-stamps-fixed.pdf +0 -0
  196. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/layout-tests/four-stamps-natural.pdf +0 -0
  197. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/layout-tests/ja-vert-stamps.pdf +0 -0
  198. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/layout-tests/leaky-graphics-state-stamp-no-corr-result.pdf +0 -0
  199. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/layout-tests/leaky-graphics-state-stamp-result.pdf +0 -0
  200. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/layout-tests/scaled-bitmap-bg.pdf +0 -0
  201. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/layout-tests/stamp-from-static-pdf.pdf +0 -0
  202. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/layout-tests/stamp-on-pdf-bg.pdf +0 -0
  203. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/layout-tests/text-stamp-color.pdf +0 -0
  204. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/layout-tests/undef-bg-size.pdf +0 -0
  205. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/leaky-graphics-state-doc.pdf +0 -0
  206. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/malformed-encrypt-dict1.pdf +0 -0
  207. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/malformed-encrypt-dict2.pdf +0 -0
  208. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/minimal-aes256-empty-encrypted-string.pdf +0 -0
  209. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/minimal-aes256-malformed-oe.pdf +0 -0
  210. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/minimal-aes256-malformed-perms.pdf +0 -0
  211. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/minimal-aes256.pdf +0 -0
  212. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/minimal-annotless.pdf +0 -0
  213. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/minimal-badxref.pdf +0 -0
  214. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/minimal-broken-xref-size.pdf +0 -0
  215. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/minimal-hybrid-xref-mswordstyle.pdf +0 -0
  216. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/minimal-hybrid-xref-weirdgen.pdf +0 -0
  217. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/minimal-hybrid-xref.pdf +0 -0
  218. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/minimal-illegal-header.pdf +0 -0
  219. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/minimal-one-field-indir-annots.pdf +0 -0
  220. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/minimal-pdf-ua-and-a.pdf +0 -0
  221. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/minimal-pubkey-aes256.pdf +0 -0
  222. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/minimal-pubkey-rc4-envelope.pdf +0 -0
  223. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/minimal-pubkey-rc4.pdf +0 -0
  224. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/minimal-pubkey-unknown-envelope-alg.pdf +0 -0
  225. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/minimal-rc4.pdf +0 -0
  226. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/minimal-signed-twice-both-created.pdf +0 -0
  227. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/minimal-signed-twice-no-sig-type.pdf +0 -0
  228. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/minimal-signed-twice-second-created.pdf +0 -0
  229. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/minimal-startxref-hopeless.pdf +0 -0
  230. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/minimal-startxref-hopeless2.pdf +0 -0
  231. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/minimal-startxref-hopeless3.pdf +0 -0
  232. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/minimal-startxref-obo1.pdf +0 -0
  233. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/minimal-startxref-obo2.pdf +0 -0
  234. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/minimal-startxref-obo3.pdf +0 -0
  235. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/minimal-startxref-obo4.pdf +0 -0
  236. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/minimal-startxref-obo5.pdf +0 -0
  237. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/minimal-startxref-obo6.pdf +0 -0
  238. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/minimal-startxref-same-line.pdf +0 -0
  239. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/minimal-two-fields-aes256.pdf +0 -0
  240. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/minimal-two-fields-pubkey-aes256.pdf +0 -0
  241. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/minimal-two-fields-pubkey-rc4.pdf +0 -0
  242. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/minimal-two-fields-signed-twice.pdf +0 -0
  243. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/minimal-two-fields-tagged.pdf +0 -0
  244. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/minimal-two-fields.pdf +0 -0
  245. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/minimal-two-pages.pdf +0 -0
  246. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/minimal-with-field-aes256.pdf +0 -0
  247. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/minimal-with-field-pubkey-aes256.pdf +0 -0
  248. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/minimal-with-field-pubkey-rc4.pdf +0 -0
  249. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/minimal-with-field-rc4.pdf +0 -0
  250. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/minimal-with-field-tagged.pdf +0 -0
  251. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/minimal-with-field.pdf +0 -0
  252. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/minimal-with-nonexistent-refs.pdf +0 -0
  253. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/minimal-with-orphaned-xrefs.pdf +0 -0
  254. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/minimal-with-simple-form.pdf +0 -0
  255. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/minimal-with-textfield-group-var.pdf +0 -0
  256. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/minimal-with-textfield-group.pdf +0 -0
  257. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/minimal-xref.pdf +0 -0
  258. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/minimal.pdf +0 -0
  259. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/pades-lta-dss-indirect-arrs-test-2.pdf +0 -0
  260. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/pades-lta-dss-indirect-arrs-test.pdf +0 -0
  261. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/pades-with-old-style-signing-cert-attr-issser.pdf +0 -0
  262. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/pades-with-old-style-signing-cert-attr.pdf +0 -0
  263. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/page-tree-direct-kid.pdf +0 -0
  264. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/pdf-background-test.pdf +0 -0
  265. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/pdf-sig-with-econtent.pdf +0 -0
  266. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/pubkey-3des-test.pdf +0 -0
  267. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/pubkey-rc2-test.pdf +0 -0
  268. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/safedocs/CompactedPDFSyntaxTest.pdf +0 -0
  269. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/safedocs/SOURCE +0 -0
  270. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/scribble-decomp.pdf +0 -0
  271. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/scribble-in-arr.pdf +0 -0
  272. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/scribble.pdf +0 -0
  273. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/separate-annots-kids-indir.pdf +0 -0
  274. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/sig-no-signed-attrs.pdf +0 -0
  275. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/sig-with-ski-sid.pdf +0 -0
  276. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/signed-encrypted-pubkey-with-catalog-ref.pdf +0 -0
  277. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/source +0 -0
  278. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/struct-tree-circular-ref.pdf +0 -0
  279. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/pdf/uncompressed-objstream-sample.pdf +0 -0
  280. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/tl/COPYRIGHT +0 -0
  281. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/tl/eu-lotl-pivot-282.xml +0 -0
  282. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/tl/eu-lotl-pivot-300.xml +0 -0
  283. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/tl/eu-lotl-pivot-335.xml +0 -0
  284. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/tl/eu-lotl-pivot-341.xml +0 -0
  285. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/tl/eu-lotl.xml +0 -0
  286. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/tl/tsl-be.xml +0 -0
  287. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/tl/tsl-ee.xml +0 -0
  288. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/xml/bad-xml/SOURCE +0 -0
  289. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/xml/bad-xml/cyclic.xml +0 -0
  290. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/xml/bad-xml/dtd.xml +0 -0
  291. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/xml/bad-xml/external.xml +0 -0
  292. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/xml/bad-xml/external_file.xml +0 -0
  293. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/xml/bad-xml/quadratic.xml +0 -0
  294. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/xml/bad-xml/simple-ns.xml +0 -0
  295. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/xml/bad-xml/simple.xml +0 -0
  296. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/xml/bad-xml/xmlbomb.xml +0 -0
  297. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/xml/bad-xml/xmlbomb2.xml +0 -0
  298. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/data/xml/bad-xml/xmp-with-harmless-entity.xml +0 -0
  299. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_data/samples.py +0 -0
  300. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_utils/__init__.py +0 -0
  301. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_utils/csc_utils/__init__.py +0 -0
  302. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_utils/csc_utils/csc_dummy_client.py +0 -0
  303. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_utils/layout_test_utils.py +0 -0
  304. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_utils/pkcs11_utils/__init__.py +0 -0
  305. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_utils/pkcs11_utils/config.py +0 -0
  306. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_utils/pkcs11_utils/fixtures.py +0 -0
  307. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/pyhanko_testing_commons/test_utils/signing_commons.py +0 -0
  308. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/setup.cfg +0 -0
  309. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/src/pyhanko/__main__.py +0 -0
  310. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/src/pyhanko/cli/__init__.py +0 -0
  311. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/src/pyhanko/cli/cache.py +0 -0
  312. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/src/pyhanko/cli/commands/__init__.py +0 -0
  313. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/src/pyhanko/cli/commands/fields.py +0 -0
  314. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/src/pyhanko/cli/commands/stamp.py +0 -0
  315. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/src/pyhanko/cli/commands/validation/__init__.py +0 -0
  316. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/src/pyhanko/cli/commands/validation/ltv.py +0 -0
  317. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/src/pyhanko/cli/py.typed +0 -0
  318. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/src/pyhanko/cli/runtime.py +0 -0
  319. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/src/pyhanko/cli/utils.py +0 -0
  320. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/src/pyhanko_cli.egg-info/dependency_links.txt +0 -0
  321. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/src/pyhanko_cli.egg-info/entry_points.txt +0 -0
  322. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/src/pyhanko_cli.egg-info/top_level.txt +0 -0
  323. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/tests/test_cli_field_mgmt.py +0 -0
  324. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/tests/test_cli_stamp.py +0 -0
  325. {pyhanko_cli-0.3.0 → pyhanko_cli-0.4.0}/tests/test_runtime.py +0 -0
@@ -0,0 +1,3 @@
1
+ graft pyhanko_testing_commons
2
+ graft tests
3
+ global-exclude *.py[cod]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pyhanko-cli
3
- Version: 0.3.0
3
+ Version: 0.4.0
4
4
  Summary: CLI tools for stamping and signing PDF files
5
5
  Author-email: Matthias Valvekens <dev@mvalvekens.be>
6
6
  Maintainer-email: Matthias Valvekens <dev@mvalvekens.be>
@@ -27,8 +27,9 @@ Description-Content-Type: text/markdown
27
27
  License-File: LICENSE
28
28
  Requires-Dist: asn1crypto>=1.5.1
29
29
  Requires-Dist: tzlocal>=4.3
30
- Requires-Dist: pyhanko<0.35,>=0.34.0
31
- Requires-Dist: pyhanko-certvalidator<0.31,>=0.30.0
30
+ Requires-Dist: pyhanko<0.36,>=0.35.0
31
+ Requires-Dist: pyhanko-certvalidator<0.32,>=0.31.0
32
+ Requires-Dist: certifi>=2023.5.7
32
33
  Requires-Dist: click!=8.2.0,>=8.1.3
33
34
  Requires-Dist: platformdirs>=4.3.8
34
35
  Dynamic: license-file
@@ -37,25 +37,21 @@ keysets:
37
37
  keys:
38
38
  root:
39
39
  path: root_ca.key.pem
40
- password: secret
41
40
  interm:
42
41
  path: intermediate_ca.key.pem
43
- password: secret
44
42
  tsa:
45
43
  path: tsa.key.pem
46
- password: secret
47
44
  tsa2:
48
45
  path: tsa2.key.pem
46
+ tsa-rsa:
47
+ path: tsa_rsa.key.pem
49
48
  password: secret
50
49
  interm-ocsp:
51
50
  path: ocsp.key.pem
52
- password: secret
53
51
  signer1:
54
52
  path: signer.key.pem
55
- password: secret
56
53
  signer2:
57
54
  path: signer2.key.pem
58
- password: secret
59
55
  decrypter1:
60
56
  path: decrypter1.key.pem # secp256r1
61
57
  decrypter2:
@@ -333,6 +329,20 @@ pki-architectures:
333
329
  testing-ca-ecdsa:
334
330
  template: testing-ca
335
331
  keyset: testing-ca-ecdsa
332
+ entities:
333
+ tsa-rsa:
334
+ common-name: Time Stamping Authority (RSA)
335
+ certs:
336
+ tsa-rsa:
337
+ template: tsa
338
+ subject: tsa-rsa
339
+ subject-key: tsa-rsa
340
+ services:
341
+ time-stamping:
342
+ tsa-rsa:
343
+ signing-key: tsa-rsa
344
+ signing-cert: tsa-rsa
345
+ digest-algo: sha512
336
346
  ecc-testing-ca-with-decrypters:
337
347
  template: testing-ca
338
348
  keyset: testing-ca-ecdsa
@@ -0,0 +1,3 @@
1
+ -----BEGIN PRIVATE KEY-----
2
+ MC4CAQAwBQYDK2VuBCIEIPAG3siLd6hc/UxXoXTYkQDzeB4iX24nDNfwc3fPv0Bt
3
+ -----END PRIVATE KEY-----
@@ -0,0 +1,4 @@
1
+ -----BEGIN PRIVATE KEY-----
2
+ MEYCAQAwBQYDK2VvBDoEOAgg1UxiODX9qQ9upkZnBjN6dWr+dIi36xNV8kyU/zpH
3
+ XBAm3Rr2vtxn66FLb9GL86TYDlU6HpnI
4
+ -----END PRIVATE KEY-----
@@ -0,0 +1,5 @@
1
+ -----BEGIN PRIVATE KEY-----
2
+ MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgWNEOB9xGVakHc0Bn
3
+ MAGoHLG2GQEyIy7huKj+XDk4K9qhRANCAARZHAkkk9jRfB0O/HfSl7RXtphQuUjv
4
+ TffoL+fWKQQ9/2HdA2OHVzuEQLE+mzEpfvWSg8jtQtwhqn5owShkkrGT
5
+ -----END PRIVATE KEY-----
@@ -0,0 +1,6 @@
1
+ -----BEGIN PRIVATE KEY-----
2
+ MIG2AgEAMBAGByqGSM49AgEGBSuBBAAiBIGeMIGbAgEBBDD9QeFAQJqX70LshnR4
3
+ GrKhYdtpFlc+9Yiihn3Tz7gX1fsBxwdOXEQm9JpB37MHacahZANiAARh5dNyrcfb
4
+ 0Qwp60P4a65l5f0m3ol/SNQl/Lb1EYwovPjJuch9stppDWyZvGqJXfBuIBWhgJGd
5
+ QgXsKu1DDX6eJzUjzqv9bqjDMT2xHXYEucfM+dI5BvmwJq8xAAYMSyo=
6
+ -----END PRIVATE KEY-----
@@ -0,0 +1,8 @@
1
+ -----BEGIN PRIVATE KEY-----
2
+ MIHuAgEAMBAGByqGSM49AgEGBSuBBAAjBIHWMIHTAgEBBEIBtuGYcLkK2RLn5sMm
3
+ CXa7q9GJIKnc/KWK0wskosgbJgQ9X5l9SaD/SLY+LnFOTZHqwVCm7JidGUyb5JTB
4
+ 525E7K+hgYkDgYYABAHtqDSTH6safq3VrnZHmt6QI+HcT8z1ORO4OqBHxcFhAp7y
5
+ ZG5jGazFi73NTgGOyVJgzTVwzcaPdrTPmaSNUtoyrgCTdMbv5yPmQlS7mXuZ+r2b
6
+ 5TmdoIVi2ptXGi/5FEPeVotN//cLtrVS3U6px0mrEWNQH/ml7H7WshfDw/Idqf2Y
7
+ 0Q==
8
+ -----END PRIVATE KEY-----
@@ -0,0 +1,6 @@
1
+ -----BEGIN PRIVATE KEY-----
2
+ MIG2AgEAMBAGByqGSM49AgEGBSuBBAAiBIGeMIGbAgEBBDAEzwhf7zGYpmekTy2i
3
+ jKcPuGIL+VQs2v5EOuisZSDUtdF9kPKjo9N2Q7TOTjTAOM2hZANiAASPyBseZ0vP
4
+ AX2RKlwrPKg8Rcgmw5OdkxmRmSGgXtmm24eILFxQosQyxdyQK8AaijYLs/86rgfk
5
+ cvjwZ9mE0z0XhZs617SLovbuWvDg6aQGpUQR8AwbJIe/LqWO8cqqyMI=
6
+ -----END PRIVATE KEY-----
@@ -0,0 +1,6 @@
1
+ -----BEGIN PRIVATE KEY-----
2
+ MIG2AgEAMBAGByqGSM49AgEGBSuBBAAiBIGeMIGbAgEBBDB753e9U9IilLa3iBVJ
3
+ YrVnnXJG1zcac7RST0YnBrR35KVZkyfEysJdE70MTD8DLf+hZANiAARDcIq1rs/Q
4
+ s65aLELkes5BVgyYvPL0y/5aN2TV2p0iwzBtcMsGexPs9SShp5qJClVpCUQwq0kQ
5
+ nCZ4aLc5liR8uJf9UckKNiG+BjUfZGpwrC0uUAzrD18X06NH6aPLoNc=
6
+ -----END PRIVATE KEY-----
@@ -0,0 +1,6 @@
1
+ -----BEGIN PRIVATE KEY-----
2
+ MIG2AgEAMBAGByqGSM49AgEGBSuBBAAiBIGeMIGbAgEBBDDZELAjP9K1Tu4d60c4
3
+ uH3PIXkaFbK7VikKYA0CSET06LUUBI/19tvxn6LXWVrXUQShZANiAARoSeKHPKF8
4
+ tzbuY8/kVNgy6/2Tm6KU4H2CRsMTCCaTfOGhQOJFu5hLomfrW6S+mMz5Vzr+c/68
5
+ TUsoH8vLL3c6mrlsZDZhL95esPZCK3ScxyBFUHShKaCMM61Th3UVOxo=
6
+ -----END PRIVATE KEY-----
@@ -0,0 +1,6 @@
1
+ -----BEGIN PRIVATE KEY-----
2
+ MIG2AgEAMBAGByqGSM49AgEGBSuBBAAiBIGeMIGbAgEBBDCGwezdoIghoZnBPZM/
3
+ K2yhCVZUkHLDdx8nQtlqqPc+NpHS9UsOM0UnphiB1AbXu6ihZANiAARz7HrBWoCv
4
+ 7KyhernqqqAGDoiw34adGQd2wmsN+5TYhwhDCzS+vqtjc4m9FYER0T402HYMe7bM
5
+ SikY3y1JITMlGL3mspfnuMEgeRRpNw8jAqu7inScPOfTp4oKyIrOpjQ=
6
+ -----END PRIVATE KEY-----
@@ -0,0 +1,6 @@
1
+ -----BEGIN PRIVATE KEY-----
2
+ MIG2AgEAMBAGByqGSM49AgEGBSuBBAAiBIGeMIGbAgEBBDCtw/AbLPj9CsE7SyIm
3
+ xGUNFRvZonjaR7XZbNuls8Hh6dGVsiz2lYj1dpcPQ7NBLgGhZANiAASv5DVAVL8+
4
+ aNjbkjaFLCfMZx+KxudP6yewKTYk9kMQmx+9dEscz5XSUI/auHUCaYC4wtwWmV1w
5
+ 9IveFV+6JEU+0CRtiGRw9RvfGQcSasBrBJPkd/uUw33RGb1E/749YEI=
6
+ -----END PRIVATE KEY-----
@@ -0,0 +1,6 @@
1
+ -----BEGIN PRIVATE KEY-----
2
+ MIG2AgEAMBAGByqGSM49AgEGBSuBBAAiBIGeMIGbAgEBBDCHHys1SN4eaB8YckPF
3
+ 5BbJlHK1rebbDPVW/uwBybEYizVHLdVFFD3Wcbqmy5q5X0KhZANiAARHmIokodeT
4
+ 7yai1BnAKotkTFb9RKE5OFnULiwW1dGNmdl2+R7WBhf5kzMf6YwEO9u75XJlut26
5
+ leaIyem4jPQdcH4f/EjHJ4vZPrxVr1/5mm5tRJtWCxhvXdkQsROCsPY=
6
+ -----END PRIVATE KEY-----
@@ -0,0 +1,6 @@
1
+ -----BEGIN PRIVATE KEY-----
2
+ MIG2AgEAMBAGByqGSM49AgEGBSuBBAAiBIGeMIGbAgEBBDAt+eMBC8Uv+2JX+rwq
3
+ 5MHMVEHQu8sqtpVQ+w7lrnM7RlOXN2Z88tIhnFX83mOGPbmhZANiAAS/1cx5q4Ac
4
+ 2jSchMuKX7k8lgx9IV3GJwNnzZccmDGApP/P9nCg8SX6z1wKGohVgGkxpPuseBZQ
5
+ fi1qXujiuJL0BCCrGsSZRHxufnwzwo2y5hgT9ZCqi8elECdRp6pAIcY=
6
+ -----END PRIVATE KEY-----
@@ -0,0 +1,30 @@
1
+ -----BEGIN RSA PRIVATE KEY-----
2
+ Proc-Type: 4,ENCRYPTED
3
+ DEK-Info: AES-256-CBC,32635A4426FAA0AD7E76EB7D3ED8D696
4
+
5
+ PS9YmhrMah6NQwKb0emFT+Vi0gP4LA2WSn963waS6NHaeXJsCjqUBzWsjfhH3+MZ
6
+ VFNf+e8YMPojJR7WLLn0aweSEsJ2HtPebbmCqcf3VA0BUDDkpStvWx+06UIb9BcI
7
+ 6kZrJyVfpw0paAEt65i5faTrnAu5VxApQ8RxaCexYAm2abvdSBnBkqBG/Flh4nku
8
+ zUSl60WgynpX742e4l0++Twsw4RHQGSOPnvdT5VxSrcXSxL0Wgr0gDkHFMYBtYj3
9
+ NV6upBmHCjasLmAEZZmf4F34jDOCPmx0yPKlwVx/y5M+zq6XKQh6Cawoq0Pxy/Cl
10
+ 2y+/mPMUlY//fVdVCbbfwsU+U82n1mlEno6UhIiAlkPasmqX/fTZkWGZmhN5jrim
11
+ vm+dlqv/AhC3neJZLSITNq/idyWp3hpV3cZhQYWXw23zP5l+4IZf3PHuXpDaRKUG
12
+ ehaYN1ddbjXA8yaRf+UzROuE/eZg0+w3Y5GLObHzGmAMfi3D436MEj44ljiYu72P
13
+ OEpPvFJpr+WS/ftLFXe/wUyyHmp9dhY9E6Nrb0zK1ex8pOJXCa2nLpzMOmzwBObN
14
+ M4n1lx3exJPW8amVT3vhNpGVX0yryZzV0Y1xlWT5cwYWKR5+WASJxLXhxDaFHO+6
15
+ kwEx8tRtO/JW5zreWZh3u1Bp7+O/I09wAfCvil40gHur5GsxbfJ3UlqvxzT9qmo4
16
+ 6sUZbW7HdGYwCwHpTkXDd3l0UULyx5zAcuiEHBmSRXL2pLJF/ekVqTk7NvqpgsN8
17
+ AM1vB+uBFJHOiQ9ZxQTzM0P90Oby0IUhEdMFQQQAtmoZsw+LUhwwOAYrofjUYm5G
18
+ NZwWMwifFU5rMDgjvh6GNVVN+egtjwqamvxN/DXHO3AFMu4x9+EAtYg+k9bYbb9u
19
+ g5HpYblTQIg9ekZniC3Ik6Il7l/jzw6vB+1lFovQdBa+/jcqOEhZrbhsQzVi50FC
20
+ iSnIoZb+ZbbGa+rJam+OPtQ7C5WtbpLapukhnLgAyOUTrKBjDe1eOdoFyKBCQvc9
21
+ s+xDtppj9FcBSfZQ1VFk5RkSEw8KSD6PEDLEgLo1MY0AxQwb83IYy2UTPRoB84MY
22
+ 9HcrAm/fRYT1wqjv2n+BxZkdNq7ErpHLyvn/TA8vvIxT/A43qsmG7/g35p1f+fm/
23
+ RySDLGNZe4Wedr+/ipFKhECeSPsc/AewrOz2fU/unCY5UUB0NqKIOBE5mHG7fP9Q
24
+ 53ivR3ZFbvtW99xv1vEM/DyYdPEvSCSni7wjVJhnvhf0vbi8GEX68WIWQRvTbmD9
25
+ C8LzN1NFCc77jLwL+i9yr01yfDNBkFFR8hUS+Gkw5gBB2QD2xFzWpK0808phxU35
26
+ QBsOaVtyOH5cp+/xHpUSHBb7sd49YMiN8k2XuDEB9HHXqEeSLx8Y0MbDW+Mqo1Z5
27
+ IsflLMWE50gI6aAnaRL0tPlCttwCqT3CH527D4AmJkuFBhpvawJ0AuKLzMZMoH7K
28
+ /a0yuApjwY1T93x0yY5IAiraLNsBRgNUzN6Dg7nIp3TfvIDfHFYXunfc2ch8jctm
29
+ 0Aw9Snb499iYKY4+sho5ZaEzcWwwHV9Y2bkelG47I3zncSJSMKYm81Hw2jbrPgec
30
+ -----END RSA PRIVATE KEY-----
@@ -0,0 +1,93 @@
1
+ Copyright 2014 - 2023 Adobe (http://www.adobe.com/), with Reserved Font Name ‘Source’. All Rights Reserved. Source is a trademark of Adobe in the United States and/or other countries.
2
+
3
+ This Font Software is licensed under the SIL Open Font License, Version 1.1.
4
+
5
+ This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL
6
+
7
+
8
+ -----------------------------------------------------------
9
+ SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
10
+ -----------------------------------------------------------
11
+
12
+ PREAMBLE
13
+ The goals of the Open Font License (OFL) are to stimulate worldwide
14
+ development of collaborative font projects, to support the font creation
15
+ efforts of academic and linguistic communities, and to provide a free and
16
+ open framework in which fonts may be shared and improved in partnership
17
+ with others.
18
+
19
+ The OFL allows the licensed fonts to be used, studied, modified and
20
+ redistributed freely as long as they are not sold by themselves. The
21
+ fonts, including any derivative works, can be bundled, embedded,
22
+ redistributed and/or sold with any software provided that any reserved
23
+ names are not used by derivative works. The fonts and derivatives,
24
+ however, cannot be released under any other type of license. The
25
+ requirement for fonts to remain under this license does not apply
26
+ to any document created using the fonts or their derivatives.
27
+
28
+ DEFINITIONS
29
+ "Font Software" refers to the set of files released by the Copyright
30
+ Holder(s) under this license and clearly marked as such. This may
31
+ include source files, build scripts and documentation.
32
+
33
+ "Reserved Font Name" refers to any names specified as such after the
34
+ copyright statement(s).
35
+
36
+ "Original Version" refers to the collection of Font Software components as
37
+ distributed by the Copyright Holder(s).
38
+
39
+ "Modified Version" refers to any derivative made by adding to, deleting,
40
+ or substituting -- in part or in whole -- any of the components of the
41
+ Original Version, by changing formats or by porting the Font Software to a
42
+ new environment.
43
+
44
+ "Author" refers to any designer, engineer, programmer, technical
45
+ writer or other person who contributed to the Font Software.
46
+
47
+ PERMISSION & CONDITIONS
48
+ Permission is hereby granted, free of charge, to any person obtaining
49
+ a copy of the Font Software, to use, study, copy, merge, embed, modify,
50
+ redistribute, and sell modified and unmodified copies of the Font
51
+ Software, subject to the following conditions:
52
+
53
+ 1) Neither the Font Software nor any of its individual components,
54
+ in Original or Modified Versions, may be sold by itself.
55
+
56
+ 2) Original or Modified Versions of the Font Software may be bundled,
57
+ redistributed and/or sold with any software, provided that each copy
58
+ contains the above copyright notice and this license. These can be
59
+ included either as stand-alone text files, human-readable headers or
60
+ in the appropriate machine-readable metadata fields within text or
61
+ binary files as long as those fields can be easily viewed by the user.
62
+
63
+ 3) No Modified Version of the Font Software may use the Reserved Font
64
+ Name(s) unless explicit written permission is granted by the corresponding
65
+ Copyright Holder. This restriction only applies to the primary font name as
66
+ presented to the users.
67
+
68
+ 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
69
+ Software shall not be used to promote, endorse or advertise any
70
+ Modified Version, except to acknowledge the contribution(s) of the
71
+ Copyright Holder(s) and the Author(s) or with their explicit written
72
+ permission.
73
+
74
+ 5) The Font Software, modified or unmodified, in part or in whole,
75
+ must be distributed entirely under this license, and must not be
76
+ distributed under any other license. The requirement for fonts to
77
+ remain under this license does not apply to any document created
78
+ using the Font Software.
79
+
80
+ TERMINATION
81
+ This license becomes null and void if any of the above conditions are
82
+ not met.
83
+
84
+ DISCLAIMER
85
+ THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
86
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
87
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
88
+ OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
89
+ COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
90
+ INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
91
+ DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
92
+ FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
93
+ OTHER DEALINGS IN THE FONT SOFTWARE.
@@ -33,12 +33,13 @@ requires-python = ">=3.10"
33
33
  dependencies = [
34
34
  "asn1crypto>=1.5.1",
35
35
  "tzlocal>=4.3",
36
- "pyhanko>=0.34.0,<0.35",
37
- "pyhanko-certvalidator>=0.30.0,<0.31",
36
+ "pyhanko>=0.35.0,<0.36",
37
+ "pyhanko-certvalidator>=0.31.0,<0.32",
38
+ "certifi>=2023.5.7",
38
39
  "click>=8.1.3,!=8.2.0",
39
40
  "platformdirs>=4.3.8",
40
41
  ]
41
- version = "0.3.0"
42
+ version = "0.4.0"
42
43
 
43
44
 
44
45
  [project.readme]
@@ -53,7 +54,7 @@ Changes = "https://docs.pyhanko.eu/en/latest/changelog.html"
53
54
  "Issue Tracker" = "https://github.com/MatthiasValvekens/pyHanko/issues"
54
55
 
55
56
  [dependency-groups]
56
- testing-base = ["pytest>=6.1.1", "requests-mock>=1.8.0", "freezegun>=1.1.0", "certomancer>=0.13.0,<0.14", "pytest-cov>=4.0,<7.1", "pytest-asyncio>=1.1.0,<2.0"]
57
+ testing-base = ["pytest>=6.1.1", "requests-mock>=1.8.0", "freezegun>=1.1.0", "certomancer>=0.13.0,<0.15", "pytest-cov>=4.0,<7.2", "pytest-asyncio>=1.1.0,<2.0"]
57
58
  testing = [{include-group = "testing-base"}, "aiohttp>=3.9,<3.14", "pytest-aiohttp>=1.0.4,<1.2.0", "pyhanko[pkcs11,opentype,async_http,image-support,qr,etsi]"]
58
59
 
59
60
  [project.scripts]
@@ -76,6 +77,7 @@ markers = [
76
77
  "hsm: run test on HSM platform",
77
78
  "algo: indicate signing algorithm used in test", # so far only used in PKCS#11 suite
78
79
  ]
80
+ strict = true
79
81
 
80
82
  [tool.coverage.run]
81
83
  omit = ["*docs*", "*test*", "*venv*", "setup.py", "_saslprep.py"]
@@ -1,3 +1,5 @@
1
+ import getpass
2
+ from abc import ABC, abstractmethod
1
3
  from dataclasses import dataclass, field
2
4
  from typing import Optional
3
5
 
@@ -6,6 +8,39 @@ from pyhanko.sign.fields import SigFieldSpec
6
8
  from pyhanko.sign.signers import PdfSignatureMetadata
7
9
  from pyhanko.stamp import BaseStampStyle
8
10
 
11
+ __all__ = [
12
+ 'PasswordPrompter',
13
+ 'GetpassPrompter',
14
+ 'UXContext',
15
+ 'CLIContext',
16
+ ]
17
+
18
+
19
+ class PasswordPrompter(ABC):
20
+ """
21
+ Interface for prompting the user for a password / passphrase / PIN.
22
+ """
23
+
24
+ @abstractmethod
25
+ def prompt_for_password(self, prompt: str) -> str:
26
+ """
27
+ Prompt the user for a password.
28
+
29
+ :param prompt: The prompt string to display to the user.
30
+ :return: The password entered by the user.
31
+ """
32
+ raise NotImplementedError
33
+
34
+
35
+ class GetpassPrompter(PasswordPrompter):
36
+ """
37
+ Default :class:`PasswordPrompter` implementation that uses
38
+ :func:`getpass.getpass`.
39
+ """
40
+
41
+ def prompt_for_password(self, prompt: str) -> str:
42
+ return getpass.getpass(prompt=prompt)
43
+
9
44
 
10
45
  @dataclass
11
46
  class UXContext:
@@ -21,6 +56,12 @@ class UXContext:
21
56
  or passes `--style-name` explicitly.
22
57
  """
23
58
 
59
+ prompter: PasswordPrompter = field(default_factory=GetpassPrompter)
60
+ """
61
+ Implementation to use when prompting the user for a password, passphrase
62
+ or PIN.
63
+ """
64
+
24
65
 
25
66
  @dataclass
26
67
  class CLIContext:
@@ -3,8 +3,9 @@ import logging
3
3
  from typing import Iterable, Optional
4
4
 
5
5
  import click
6
+ import yaml
6
7
  from pyhanko.cli._ctx import CLIContext
7
- from pyhanko.cli.config import CLIRootConfig, parse_cli_config
8
+ from pyhanko.cli.config import CLIRootConfig, parse_cli_config_from_dict
8
9
  from pyhanko.cli.plugin_api import (
9
10
  SIGNING_PLUGIN_ENTRY_POINT_GROUP,
10
11
  SIGNING_PLUGIN_REGISTRY,
@@ -71,7 +72,7 @@ def _root(ctx: click.Context, config, verbose, no_plugins):
71
72
  ctx_obj: CLIContext = ctx.obj
72
73
  cfg: Optional[CLIRootConfig] = None
73
74
  if config_text is not None:
74
- cfg = parse_cli_config(config_text)
75
+ cfg = load_root_config(yaml.safe_load(config_text), no_plugins)
75
76
  ctx_obj.config = cfg.config
76
77
  log_config = cfg.log_config
77
78
  else:
@@ -107,6 +108,20 @@ def _root(ctx: click.Context, config, verbose, no_plugins):
107
108
  logging.debug('There was no configuration to parse.')
108
109
 
109
110
 
111
+ def load_root_config(config_dict, only_default_plugins=False) -> CLIRootConfig:
112
+
113
+ cfg = parse_cli_config_from_dict(config_dict)
114
+
115
+ from .commands.signing import register
116
+
117
+ plugins_to_register = _load_plugins(
118
+ cfg, plugins_enabled=not only_default_plugins
119
+ )
120
+ register(plugins_to_register)
121
+
122
+ return cfg
123
+
124
+
110
125
  def _load_plugins(root_config: Optional[CLIRootConfig], plugins_enabled: bool):
111
126
  from importlib import metadata
112
127
 
@@ -1,8 +1,10 @@
1
1
  import asyncio
2
+ import ssl
2
3
  from dataclasses import dataclass
3
4
  from datetime import timedelta
4
5
  from typing import Any, Dict, Iterable, Optional, TypeVar, Union
5
6
 
7
+ import certifi
6
8
  import click
7
9
  from asn1crypto import x509
8
10
  from pyhanko.cli.cache import get_eutl_cache_dir
@@ -114,7 +116,10 @@ async def init_trust_manager(
114
116
  if settings.eutl_force_redownload:
115
117
  tl_cache.reset()
116
118
 
117
- async with aiohttp.ClientSession() as client:
119
+ ssl_context = ssl.create_default_context(cafile=certifi.where())
120
+ async with aiohttp.ClientSession(
121
+ connector=aiohttp.TCPConnector(ssl=ssl_context)
122
+ ) as client:
118
123
  if isinstance(settings.territories, str) and settings.territories:
119
124
  territories = {
120
125
  t.strip() for t in settings.territories.split(',')
@@ -1,7 +1,6 @@
1
- import getpass
2
-
3
1
  import click
4
2
  from pyhanko.cli._root import cli_root
3
+ from pyhanko.cli.plugin_api import prompt_for_password
5
4
  from pyhanko.cli.runtime import pyhanko_exception_manager
6
5
  from pyhanko.cli.utils import _warn_empty_passphrase, readable_file
7
6
  from pyhanko.keys import load_certs_from_pemder
@@ -37,7 +36,7 @@ def encrypt_file(infile, outfile, password, recipient):
37
36
  "Specify either a password or a list of recipients."
38
37
  )
39
38
  elif not password and not recipient:
40
- password = getpass.getpass(prompt='Output file password: ')
39
+ password = prompt_for_password(prompt='Output file password: ')
41
40
 
42
41
  recipient_certs = None
43
42
  if recipient:
@@ -96,7 +95,7 @@ def decrypt_with_password(infile, outfile, password, force):
96
95
  "File is not encrypted with the standard (password-based) security handler"
97
96
  )
98
97
  if not password:
99
- password = getpass.getpass(prompt='File password: ')
98
+ password = prompt_for_password(prompt='File password: ')
100
99
  auth_result = r.decrypt(password)
101
100
  if auth_result.status == crypt.AuthStatus.USER and not force:
102
101
  raise click.ClickException(
@@ -147,7 +146,9 @@ def decrypt_with_pemder(infile, outfile, key, cert, passfile, force, no_pass):
147
146
  passphrase = passfile.read()
148
147
  passfile.close()
149
148
  elif not no_pass:
150
- passphrase = getpass.getpass(prompt='Key passphrase: ').encode('utf-8')
149
+ passphrase = prompt_for_password(prompt='Key passphrase: ').encode(
150
+ 'utf-8'
151
+ )
151
152
  if not passphrase:
152
153
  _warn_empty_passphrase()
153
154
  passphrase = None
@@ -206,7 +207,9 @@ def _decrypt_pubkey(
206
207
  @decrypt_force_flag
207
208
  def decrypt_with_pkcs12(infile, outfile, pfx, passfile, force):
208
209
  if passfile is None:
209
- passphrase = getpass.getpass(prompt='Key passphrase: ').encode('utf-8')
210
+ passphrase = prompt_for_password(prompt='Key passphrase: ').encode(
211
+ 'utf-8'
212
+ )
210
213
  else:
211
214
  passphrase = passfile.readline().strip().encode('utf-8')
212
215
  passfile.close()
@@ -7,7 +7,10 @@ from pyhanko.cli._trust import (
7
7
  build_vc_kwargs,
8
8
  trust_options,
9
9
  )
10
- from pyhanko.cli.commands.signing.plugin import command_from_plugin
10
+ from pyhanko.cli.commands.signing.plugin import (
11
+ command_from_plugin,
12
+ preconfigured_identity_command,
13
+ )
11
14
  from pyhanko.cli.commands.stamp import select_style
12
15
  from pyhanko.cli.utils import parse_field_location_spec
13
16
  from pyhanko.pdf_utils.incremental_writer import IncrementalPdfFileWriter
@@ -273,9 +276,12 @@ def register(plugins: List[SigningCommandPlugin]):
273
276
  # we reset the command list before (re)populating it, in order to
274
277
  # make the tests more consistent
275
278
  addsig.commands = {}
279
+ available_commands = {}
276
280
  for signer_plugin in plugins:
277
281
  if signer_plugin.is_available():
278
- addsig.add_command(command_from_plugin(signer_plugin))
282
+ cmd = command_from_plugin(signer_plugin)
283
+ addsig.add_command(cmd)
284
+ available_commands[signer_plugin.subcommand_name] = cmd
279
285
  else:
280
286
  addsig.add_command(
281
287
  click.Command(
@@ -284,6 +290,7 @@ def register(plugins: List[SigningCommandPlugin]):
284
290
  callback=_unavailable(signer_plugin),
285
291
  )
286
292
  )
293
+ addsig.add_command(preconfigured_identity_command(available_commands))
287
294
 
288
295
 
289
296
  readable_file = click.Path(exists=True, readable=True, dir_okay=False)
@@ -1,13 +1,12 @@
1
1
  import contextlib
2
2
  import dataclasses
3
- import getpass
4
3
  import os
5
4
  from typing import ContextManager, List, Optional
6
5
 
7
6
  import click
8
7
  from pyhanko.cli._ctx import CLIContext
9
8
  from pyhanko.cli.config import CLIConfig
10
- from pyhanko.cli.plugin_api import SigningCommandPlugin
9
+ from pyhanko.cli.plugin_api import SigningCommandPlugin, prompt_for_password
11
10
  from pyhanko.cli.utils import logger, readable_file
12
11
  from pyhanko.config.errors import ConfigurationError
13
12
  from pyhanko.config.pkcs11 import (
@@ -193,13 +192,15 @@ def _pkcs11_signer_context(
193
192
  )
194
193
 
195
194
  if pkcs11_config.prompt_pin == PKCS11PinEntryMode.PROMPT and pin is None:
196
- pin = getpass.getpass(prompt='PKCS#11 user PIN: ')
195
+ pin = prompt_for_password(prompt='PKCS#11 user PIN: ')
197
196
 
198
197
  with pkcs11.PKCS11SigningContext(pkcs11_config, user_pin=pin) as signer:
199
198
  if pkcs11_config.signing_pin_mode == PKCS11SigningPinEntryMode.PROMPT:
200
199
 
201
200
  def _signing_kwargs(*_args, **_kwargs):
202
- signing_pin = getpass.getpass(prompt='PKCS#11 signing PIN: ')
201
+ signing_pin = prompt_for_password(
202
+ prompt='PKCS#11 signing PIN: '
203
+ )
203
204
  return {'pin': signing_pin}
204
205
 
205
206
  signer.sign_kwargs = _signing_kwargs
@@ -1,6 +1,6 @@
1
1
  import asyncio
2
2
  from datetime import datetime
3
- from typing import List, Optional
3
+ from typing import Dict, List, Optional
4
4
 
5
5
  import click
6
6
  import tzlocal
@@ -103,7 +103,9 @@ def _callback_logic(
103
103
  out.write(output_bytes)
104
104
  else:
105
105
  with open_for_signing(
106
- infile_path=infile, lenient=cli_ctx.lenient
106
+ infile_path=infile,
107
+ lenient=cli_ctx.lenient,
108
+ prompter=cli_ctx.ux.prompter,
107
109
  ) as w:
108
110
  if cli_ctx.ux.visible_signature_desired:
109
111
  _ensure_field_visible(
@@ -146,3 +148,56 @@ def command_from_plugin(plugin: SigningCommandPlugin) -> click.Command:
146
148
  help=plugin.help_summary,
147
149
  params=params,
148
150
  )
151
+
152
+
153
+ def preconfigured_identity_command(
154
+ plugins_by_name: Dict[str, click.Command],
155
+ ) -> click.Command:
156
+
157
+ def _callback(*, identity: str, infile: str, outfile: str):
158
+ ctx = click.get_current_context()
159
+ cli_ctx: CLIContext = ctx.obj
160
+ config = cli_ctx.config
161
+ if config is None:
162
+ raise click.ClickException(
163
+ "Identity command requires a config file"
164
+ )
165
+ try:
166
+ identity_obj = config.identities[identity]
167
+ except KeyError:
168
+ raise click.ClickException(
169
+ f"Identity {identity!r} not found in config file"
170
+ )
171
+ try:
172
+ plugin = plugins_by_name[identity_obj.plugin]
173
+ except KeyError:
174
+ raise click.ClickException(
175
+ f"Plugin {identity_obj.plugin!r} referenced by "
176
+ f"identity {identity!r} is not available"
177
+ )
178
+ # To make sure the semantics of the "identity <key>" invocation
179
+ # are the exact same as those of the underlying plugin's command,
180
+ # we invoke the _actual_ command here
181
+ valid_keys = {p.name for p in plugin.params}
182
+ params = {}
183
+ for k, v in identity_obj.parameters.items():
184
+ if k not in valid_keys:
185
+ raise click.ClickException(
186
+ f"Parameter {k!r} defined by {identity!r} "
187
+ f"not known for plugin {identity_obj.plugin!r}."
188
+ )
189
+ params[k] = v
190
+ params['infile'] = infile
191
+ params['outfile'] = outfile
192
+ ctx.invoke(plugin, **params)
193
+
194
+ return click.Command(
195
+ name="identity",
196
+ callback=_callback,
197
+ help="sign using identity defined in config file",
198
+ params=[
199
+ click.Argument(('identity',), type=str),
200
+ click.Argument(('infile',), type=readable_file),
201
+ click.Argument(('outfile',), type=writable_file),
202
+ ],
203
+ )