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/.gitlab-ci.yml b/.gitlab-ci.yml
deleted file mode 100644
index 4f531c7..0000000
--- a/.gitlab-ci.yml
+++ /dev/null
@@ -1,26 +0,0 @@
-image: jdrouet/docker-with-buildx:stable
-
-services:
- - docker:dind
-
-build:
- script:
- - docker build --file ci/build.dockerfile .
-
-integration:
- script:
- - docker build --file ci/e2e.dockerfile .
-
-audit:
- script:
- - docker build --file ci/audit.dockerfile .
-
-pages:
- before_script:
- - docker context create builders
- - docker buildx create --use builders
- script:
- - docker buildx build --file ci/docs.dockerfile --output type=local,dest=public .
- artifacts:
- paths:
- - public
diff --git a/.vale.ini b/.vale.ini
deleted file mode 100644
index c1d148d..0000000
--- a/.vale.ini
+++ /dev/null
@@ -1,6 +0,0 @@
-StylesPath = doc/.vale
-MinAlertLevel = suggestion
-Vocab = openpgp
-
-[*.md]
-BasedOnStyles = Vale
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/.vale/Vocab/openpgp/accept.txt b/doc/.vale/Vocab/openpgp/accept.txt
deleted file mode 100644
index 5421845..0000000
--- a/doc/.vale/Vocab/openpgp/accept.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-Keyoxide
-Nitrokey
-toolchain
-PGP's
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"