diff --git a/.env/lib64 b/.env/lib64 deleted file mode 120000 index 7951405..0000000 --- a/.env/lib64 +++ /dev/null @@ -1 +0,0 @@ -lib \ No newline at end of file diff --git a/.env/pyvenv.cfg b/.env/pyvenv.cfg deleted file mode 100644 index 38070cb..0000000 --- a/.env/pyvenv.cfg +++ /dev/null @@ -1,3 +0,0 @@ -home = /usr/bin -include-system-site-packages = false -version = 3.10.9 diff --git a/.gitea/default_merge_message/MERGE_TEMPLATE.md b/.gitea/default_merge_message/MERGE_TEMPLATE.md deleted file mode 100644 index 401eccc..0000000 --- a/.gitea/default_merge_message/MERGE_TEMPLATE.md +++ /dev/null @@ -1 +0,0 @@ -Merge PR '${PullRequestTitle}' diff --git a/.gitignore b/.gitignore index 0989361..f3ef0df 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ README.sh README.python +.env /target @@ -72,4 +73,4 @@ docs/_build/ .vscode/ # Pyenv -.python-version \ No newline at end of file +.python-version diff --git a/.woodpecker/audit.yml b/.woodpecker/audit.yml deleted file mode 100644 index 67887b1..0000000 --- a/.woodpecker/audit.yml +++ /dev/null @@ -1,12 +0,0 @@ -pipeline: - audit: - image: woodpeckerci/plugin-docker-buildx - settings: - dockerfile: ci/audit.dockerfile - # do not push - dry_run: true - # do not refresh image - pull_image: false - purge: false - when: - event: [push, cron, pull_request] diff --git a/.woodpecker/build.yml b/.woodpecker/build.yml deleted file mode 100644 index 06c8c0a..0000000 --- a/.woodpecker/build.yml +++ /dev/null @@ -1,27 +0,0 @@ -matrix: - RUST_TOOLCHAIN: - - stable - - beta - - nightly - -pipeline: - build-${RUST_TOOLCHAIN}: - image: woodpeckerci/plugin-docker-buildx - settings: - dockerfile: ci/build.dockerfile - # do not push - dry_run: true - # do not refresh image - pull_image: false - purge: false - build_args: RUST_TOOLCHAIN=${RUST_TOOLCHAIN} - - notify: - image: rust - secrets: [ codeberg_token ] - commands: - - export - - bash ./ci/add-comment.sh "build-${RUST_TOOLCHAIN}" - when: - event: [ pull_request ] - status: [ failure ] diff --git a/.woodpecker/direct-minimal-versions.yml b/.woodpecker/direct-minimal-versions.yml deleted file mode 100644 index 2f65c10..0000000 --- a/.woodpecker/direct-minimal-versions.yml +++ /dev/null @@ -1,14 +0,0 @@ -pipeline: - # Checks if minimal versions specified in Cargo.toml - # are also valid. - check-direct-minimal-versions: - image: rust - commands: - - apt-get update -y -qq - - apt-get install -y -qq --no-install-recommends clang make pkg-config nettle-dev libssl-dev pcscd libpcsclite-dev - # This is available only in nightly for now: - # https://github.com/rust-lang/cargo/pull/11688 - # FIXME: According to the PR linked it should be available in Cargo 1.70 - # CHECK: https://github.com/rust-lang/rust/releases/latest tag_name >= 1.70.0 - - rustup toolchain install nightly - - cargo +nightly check -Zdirect-minimal-versions diff --git a/.woodpecker/doc-check-links.yml b/.woodpecker/doc-check-links.yml deleted file mode 100644 index a53f80f..0000000 --- a/.woodpecker/doc-check-links.yml +++ /dev/null @@ -1,5 +0,0 @@ -pipeline: - check-links: - image: rust - commands: - - bash ./ci/url-validator.sh README.md diff --git a/.woodpecker/doc-pages.yml b/.woodpecker/doc-pages.yml deleted file mode 100644 index 8022755..0000000 --- a/.woodpecker/doc-pages.yml +++ /dev/null @@ -1,47 +0,0 @@ -pipeline: - pages: - image: woodpeckerci/plugin-docker-buildx - settings: - dockerfile: ci/docs.dockerfile - output: type=local,dest=public - # do not push, push cannot be used with output simultaneously anyway - dry_run: true - # do not refresh image - pull_image: false - purge: false - - docs-vale: - # See: https://vale.sh/docs/vale-cli/installation/ - image: jdkato/vale - group: build - secrets: [ codeberg_token ] - commands: - - apk --no-cache add curl - - > - vale --output=JSON . | - python ./ci/vale-to-review.py | - curl -i -H"Content-Type: application/json" --data-binary @- -H "Authorization: token $CODEBERG_TOKEN" "https://codeberg.org/api/v1/repos/$CI_REPO/pulls/$CI_COMMIT_PULL_REQUEST/reviews" - when: - event: pull_request - - pages-publish: - image: bitnami/git - secrets: [ codeberg_token ] - commands: - - git config --global user.email bot+pages@metacode.biz - - git config --global user.name "Page Renderer" - - git clone -b pages https://$CODEBERG_TOKEN@codeberg.org/$CI_REPO.git $CI_REPO_NAME - - cp -ar public/. $CI_REPO_NAME/ - # Needed for custom domains - - cp .domains $CI_REPO_NAME || true # Ignore if it doesn't exist - - cd $CI_REPO_NAME - - > - if [ -z "$(git status --porcelain)" ]; then - echo "No changes" - else - git add . - git commit -m "Update rendered page" -m "Source: $CI_COMMIT_SHA" -m "See: $CI_BUILD_LINK" - git push - fi - when: - event: push diff --git a/.woodpecker/e2e.yml b/.woodpecker/e2e.yml deleted file mode 100644 index e3781d6..0000000 --- a/.woodpecker/e2e.yml +++ /dev/null @@ -1,20 +0,0 @@ -pipeline: - e2e: - image: woodpeckerci/plugin-docker-buildx - settings: - dockerfile: ci/e2e.dockerfile - # do not push - dry_run: true - # do not refresh image - pull_image: false - purge: false - - notify: - image: rust - secrets: [ codeberg_token ] - commands: - - export - - bash ./ci/add-comment.sh "e2e" - when: - event: [ pull_request ] - status: [ failure ] diff --git a/.woodpecker/update-deps.yml b/.woodpecker/update-deps.yml deleted file mode 100644 index e4e6f75..0000000 --- a/.woodpecker/update-deps.yml +++ /dev/null @@ -1,38 +0,0 @@ -pipeline: - update-deps: - image: rust - secrets: [ codeberg_token ] - commands: - - git config --global user.email bot+deps@metacode.biz - - git config --global user.name "Dependency Updater" - - cargo install cargo-edit - - > - REPORT=$(cargo upgrade --incompatible | sed -ne 's/.*/ &/p') - - cargo update - - if [ -z "$(git status --porcelain)" ]; then - echo "No changes" - else - # Fix commit date to the commit on the tip of the main branch. - # This makes daily updates a no-op if the only difference - # is current date. - export GIT_AUTHOR_DATE="$(git log -1 --format=%cd)" - export GIT_COMMITTER_DATE="$GIT_AUTHOR_DATE" - - git checkout -b update-deps - git add . - git commit -m "Update dependencies" -m "The following dependencies will be upgraded:" -m "$REPORT" -m "Build: $CI_SYSTEM_LINK/$CI_REPO/pipeline/$CI_BUILD_NUMBER" --signoff - # Force update overwriting last changes - git push --force https://$CODEBERG_TOKEN@codeberg.org/$CI_REPO.git update-deps - - if [ -z "$(curl -sSL 'https://codeberg.org/api/v1/repos/$CI_REPO/pulls?state=open' | grep 'Update dependencies')" ]; then - echo "Build: $CI_SYSTEM_LINK/$CI_REPO/pipeline/$CI_BUILD_NUMBER" >> /tmp/body - curl -sSL -H "Authorization: token $CODEBERG_TOKEN" -d head=update-deps -d base=main -d title="Update dependencies" -d body="See commit message for exact dependencies that have been upgraded. (This is automated PR from a bot)." "https://codeberg.org/api/v1/repos/$CI_REPO/pulls" - echo "PR created" - else - echo "PR is already open" - fi - fi - when: - event: cron diff --git a/README.md b/README.md index 86d36a9..74e1a82 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,11 @@ - + # PySequoia [![PyPI version](https://badge.fury.io/py/pysequoia.svg)](https://pypi.org/project/pysequoia/) [![PyPI Downloads](https://img.shields.io/pypi/dm/pysequoia.svg?label=PyPI%20downloads)]( https://pypi.org/project/pysequoia/) -[![status-badge](https://ci.codeberg.org/api/badges/wiktor/pysequoia/status.svg)](https://ci.codeberg.org/wiktor/pysequoia) +[![CI](https://github.com/wiktor-k/pysequoia/actions/workflows/ci.yml/badge.svg)](https://github.com/wiktor-k/pysequoia/actions/workflows/ci.yml) This library provides [OpenPGP][] facilities in Python through the [Sequoia PGP][SQ] library. If you need to work with encryption and @@ -128,11 +128,7 @@ other OpenPGP software (e.g. if a User ID uses SHA-1 in its back-signature, it may be missing from the list of User IDs returned by this package). -Checking certificates for problems ("linting") [is planned][LINT] but -not yet implemented. - [SP]: https://docs.rs/sequoia-openpgp/latest/sequoia_openpgp/policy/struct.StandardPolicy.html -[LINT]: https://codeberg.org/wiktor/pysequoia/issues/52 Certificates have two forms, one is ASCII armored and one is raw bytes: @@ -462,7 +458,7 @@ conditions. ## Sponsors -My work is supported by these generous organizations (alphabetical +My work was supported by these generous organizations (alphabetical order): - [nlnet.nl](https://nlnet.nl/) diff --git a/ci/add-comment.sh b/ci/add-comment.sh deleted file mode 100644 index c0b843a..0000000 --- a/ci/add-comment.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash - -set -euxo pipefail - -curl --fail -i -d body="Pipeline \`$1\` has status: ${CI_JOB_STATUS}." -H "Authorization: token $CODEBERG_TOKEN" "https://codeberg.org/api/v1/repos/$CI_REPO/issues/$CI_COMMIT_PULL_REQUEST/comments" diff --git a/doc/stf-report-1.md b/doc/stf-report-1.md deleted file mode 100644 index 5d8eb07..0000000 --- a/doc/stf-report-1.md +++ /dev/null @@ -1,61 +0,0 @@ -# STF - -## Design and Implement a Python API for Sequoia - -Python is a popular programming language. We have received many requests over -the past few years to add first-class for Python to Sequoia. For instance, SecureDrop -is implemented in Python, and uses OpenPGP. This project will implement Python -bindings for Sequoia's high-level functionality. - -For this project, we will do the following: - -### Design and implement a high-level Python API for standard OpenPGP operations - -Survey existing Python projects to determine the commonly used -functionality. - -Expose functionality related to the following areas: - - - [Signatures](https://wiktor.codeberg.page/pysequoia/#sign), - - [Encryption](https://wiktor.codeberg.page/pysequoia/#encrypt) and [decryption](https://wiktor.codeberg.page/pysequoia/#decrypt), - - Certificate manipulation ([setting expiration](https://wiktor.codeberg.page/pysequoia/#key-expiration), [adding User IDs](https://wiktor.codeberg.page/pysequoia/#user-ids), etc.) - -(50% - 80 days) - -Milestone status: ✅ 100% complete. - -Future work: - - - [Add `verify` function](https://codeberg.org/wiktor/pysequoia/issues/54), - - [Add support for encrypting/decrypting/signing files](https://codeberg.org/wiktor/pysequoia/issues/65), - - [Add certificate inspection](https://codeberg.org/wiktor/pysequoia/issues/56), - - [Check key validity function](https://codeberg.org/wiktor/pysequoia/issues/52). - -### Design and implement a Python API for accessing a cert-d certificate store - -See https://sequoia-pgp.gitlab.io/pgp-cert-d/. - -Implemented using [`Store` class](https://wiktor.codeberg.page/pysequoia/#certd-integration). - -(25% - 40 days) - -Milestone status: ✅ 100% complete. - -Future work: - - - [Consider using sequoia-cert-store](https://codeberg.org/wiktor/pysequoia/issues/15). - -### Design and implement a Python API for retrieval and publication of certificates - -This will focus on [HKPS](https://wiktor.codeberg.page/pysequoia/#key-server), [WKD](https://wiktor.codeberg.page/pysequoia/#wkd) and [VKS](https://wiktor.codeberg.page/pysequoia/#vks). - -(25% - 40 days) - -Milestone status: ✅ 100% complete. - -Future work: - - - [Add Keyserver.search for returning multiple certificates](https://codeberg.org/wiktor/pysequoia/issues/58), - - [WKD.search should return an array](https://codeberg.org/wiktor/pysequoia/issues/57). - -Total cost: 160 days diff --git a/doc/stf-report-2.md b/doc/stf-report-2.md deleted file mode 100644 index d6a5687..0000000 --- a/doc/stf-report-2.md +++ /dev/null @@ -1,58 +0,0 @@ -# STF - -The following describes goals set in the initial document as well as links to actual code changes that implement these goals. - -1. Design and Implement a Python API for Sequoia - -For this project, we will do the following: - -- Design and implement a high-level Python API for standard OpenPGP operations - Comment: A vast array of OpenPGP operations is available through our Python package. The API description is available at https://pypi.org/project/pysequoia/ - -- Survey existing Python projects to determine the commonly used functionality. - Comment: We selected keyringctl and gpg-lacre as two high-profile projects using OpenPGP and struggling with either GnuPG or low-level command line invocations - -- Expose functionality related to the following areas: - - - Signatures. - Comment: Feature implemented. Documentation available at: https://wiktor.codeberg.page/pysequoia/#sign - - Encryption. - Comment: Feature implemented. Documentation available at: https://wiktor.codeberg.page/pysequoia/#encrypt - - Decryption. - Comment: Feature implemented. Documentation available at: https://wiktor.codeberg.page/pysequoia/#decrypt - - Certificate manipulation: - - setting expiration. - Comment: Feature implemented. Documentation available at: https://wiktor.codeberg.page/pysequoia/#key-expiration - - adding User IDs. - Comment: Feature implemented. Documentation available at: https://wiktor.codeberg.page/pysequoia/#user-ids - -Additional work done: - - - certificate generation: https://codeberg.org/wiktor/pysequoia#generate - - certificate merging: https://codeberg.org/wiktor/pysequoia#merge - - revoking User IDs: https://codeberg.org/wiktor/pysequoia#user-ids - - notations manipulation: https://codeberg.org/wiktor/pysequoia#notations - - support for OpenPGP Cards: https://codeberg.org/wiktor/pysequoia#openpgp-cards - - comprehensive test suite: https://codeberg.org/wiktor/pysequoia#testing covering smartcards as well as documentation - -2. Design and implement a Python API for accessing a cert-d certificate store - -Comment: Feature implemented using `Store` class. Documentation available at: https://wiktor.codeberg.page/pysequoia/#certd-integration - -3. Design and implement a Python API for retrieval and publication of certificates - -- HKPS. - Comment: Feature implemented. Documentation available at: https://wiktor.codeberg.page/pysequoia/#key-server -- WKD. - Comment: Feature implemented. Documentation available at: https://wiktor.codeberg.page/pysequoia/#wkd -- VKS. - Comment: Feature implemented. Documentation available at: https://wiktor.codeberg.page/pysequoia/#vks - -Additional work done: - - - Add Keyserver.search for returning multiple certificates: https://codeberg.org/wiktor/pysequoia/issues/58 - -4. Integrations for other projects (in progress): - - keyringctl: https://gitlab.archlinux.org/archlinux/archlinux-keyring/-/merge_requests/225 - - gpg-lacre: https://git.disroot.org/Disroot/gpg-lacre/pulls/127 - diff --git a/pyproject.toml b/pyproject.toml index 97d8bb6..3b86aca 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -22,7 +22,7 @@ license = {file = "LICENSE"} description = "Provides OpenPGP facilities using Sequoia-PGP library" [project.urls] -homepage = "https://codeberg.org/wiktor/pysequoia" -changelog = "https://codeberg.org/wiktor/pysequoia/releases" -repository = "https://codeberg.org/wiktor/pysequoia" -"Bug Tracker" = "https://codeberg.org/wiktor/pysequoia/issues" +homepage = "https://github.com/wiktor-k/pysequoia" +changelog = "https://github.com/wiktor-k/pysequoia/tags" +repository = "https://github.com/wiktor-k/pysequoia" +"Bug Tracker" = "https://github.com/wiktor-k/pysequoia/issues"