openbadgeslib 3.4.0__tar.gz → 3.4.2__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.
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/Changelog.txt +22 -0
- {openbadgeslib-3.4.0/openbadgeslib.egg-info → openbadgeslib-3.4.2}/PKG-INFO +12 -9
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/README.md +9 -7
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/openbadgeslib/util.py +1 -1
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2/openbadgeslib.egg-info}/PKG-INFO +12 -9
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/openbadgeslib.egg-info/requires.txt +1 -1
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/pyproject.toml +5 -2
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/LICENSE.txt +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/MANIFEST.in +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/docs/README.md +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/openbadgeslib/__init__.py +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/openbadgeslib/_jws/__init__.py +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/openbadgeslib/_jws/exceptions.py +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/openbadgeslib/_jws/utils.py +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/openbadgeslib/badge.py +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/openbadgeslib/baking.py +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/openbadgeslib/config.ini.example +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/openbadgeslib/confparser.py +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/openbadgeslib/errors.py +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/openbadgeslib/keys.py +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/openbadgeslib/logs.py +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/openbadgeslib/mail.py +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/openbadgeslib/ob1/__init__.py +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/openbadgeslib/ob1/badge.py +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/openbadgeslib/ob1/signer.py +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/openbadgeslib/ob1/verifier.py +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/openbadgeslib/ob2/__init__.py +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/openbadgeslib/ob2/models.py +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/openbadgeslib/ob2/signer.py +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/openbadgeslib/ob2/verifier.py +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/openbadgeslib/ob3/__init__.py +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/openbadgeslib/ob3/contexts/__init__.py +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/openbadgeslib/ob3/contexts/credentials-v2.json +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/openbadgeslib/ob3/contexts/ob-v3p0-context-3.0.1.json +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/openbadgeslib/ob3/contexts/ob-v3p0-context-3.0.2.json +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/openbadgeslib/ob3/contexts/ob-v3p0-context-3.0.3.json +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/openbadgeslib/ob3/contexts/security-data-integrity-v2.json +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/openbadgeslib/ob3/contexts/security-multikey-v1.json +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/openbadgeslib/ob3/credential.py +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/openbadgeslib/ob3/did.py +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/openbadgeslib/ob3/eudi.py +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/openbadgeslib/ob3/ldp.py +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/openbadgeslib/ob3/signer.py +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/openbadgeslib/ob3/status.py +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/openbadgeslib/ob3/status_list.py +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/openbadgeslib/ob3/status_registry.py +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/openbadgeslib/ob3/verifier.py +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/openbadgeslib/openbadges_init.py +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/openbadgeslib/openbadges_keygenerator.py +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/openbadgeslib/openbadges_publish.py +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/openbadgeslib/openbadges_signer.py +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/openbadgeslib/openbadges_verifier.py +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/openbadgeslib/py.typed +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/openbadgeslib/signer.py +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/openbadgeslib/verifier.py +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/openbadgeslib.egg-info/SOURCES.txt +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/openbadgeslib.egg-info/dependency_links.txt +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/openbadgeslib.egg-info/entry_points.txt +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/openbadgeslib.egg-info/top_level.txt +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/setup.cfg +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/tests/config1.ini +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/tests/conformance/Dockerfile.ob3 +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/tests/conformance/README.md +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/tests/conformance/conftest.py +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/tests/conformance/docker-compose.yml +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/tests/conformance/test_official_validators.py +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/tests/conftest.py +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/tests/fixtures/ob_schemas/README.md +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/tests/fixtures/ob_schemas/ob_v3p0_achievementcredential_schema.json +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/tests/fixtures/ob_schemas/ob_v3p0_profile_schema.json +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/tests/fixtures/ob_schemas/refresh.sh +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/tests/fixtures/vc_di_eddsa/README.md +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/tests/fixtures/vc_di_eddsa/credentials-examples-v2.json +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/tests/fixtures/vc_di_eddsa/doc-hash.txt +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/tests/fixtures/vc_di_eddsa/key-pair.json +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/tests/fixtures/vc_di_eddsa/proof-config-hash.txt +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/tests/fixtures/vc_di_eddsa/signed-credential.json +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/tests/images/sample1.png +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/tests/images/sample1.svg +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/tests/images/userimage01.svg +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/tests/ldp_helpers.py +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/tests/logo Python Espan/314/203a.svg" +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/tests/logo Python Espa/303/261a.svg" +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/tests/runtests.sh +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/tests/test_cli_json.py +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/tests/test_cli_smoke.py +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/tests/test_confparser.py +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/tests/test_docs.py +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/tests/test_eddsa.py +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/tests/test_jws.py +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/tests/test_key_operation.py +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/tests/test_ob1_badge_io.py +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/tests/test_ob1_signer.py +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/tests/test_ob1_verifier.py +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/tests/test_ob2_cli.py +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/tests/test_ob2_models.py +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/tests/test_ob2_signer.py +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/tests/test_ob2_verifier.py +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/tests/test_ob3_conformance_schema.py +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/tests/test_ob3_contexts.py +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/tests/test_ob3_credential.py +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/tests/test_ob3_did.py +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/tests/test_ob3_did_doc.py +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/tests/test_ob3_eudi_sd_jwt.py +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/tests/test_ob3_ldp.py +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/tests/test_ob3_ldp_cli.py +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/tests/test_ob3_ldp_sign.py +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/tests/test_ob3_publish_cli.py +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/tests/test_ob3_signer.py +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/tests/test_ob3_signer_cli_ldp.py +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/tests/test_ob3_status.py +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/tests/test_ob3_status_list.py +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/tests/test_ob3_status_registry.py +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/tests/test_ob3_verifier.py +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/tests/test_sign_ecc.pem +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/tests/test_sign_rsa.pem +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/tests/test_util.py +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/tests/test_verify_ecc.pem +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/tests/test_verify_rsa.pem +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/tests/withoutxmlheader.svg +0 -0
- {openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/tests/withxmlheader.svg +0 -0
|
@@ -4,6 +4,28 @@ OpenBadgesLib - Changelog
|
|
|
4
4
|
Newest first. Dates are ISO 8601 (YYYY-MM-DD).
|
|
5
5
|
|
|
6
6
|
|
|
7
|
+
* v3.4.2 - 2026-07-07
|
|
8
|
+
|
|
9
|
+
- build(eudi): the `[eudi]` extra now tracks `openvc-core>=1.8,<2` (was
|
|
10
|
+
`>=0.8,<0.9`). openvc-core reached 1.0 with a published SemVer/deprecation
|
|
11
|
+
contract and an add-only return-object guarantee, so the tight pre-1.0 pin
|
|
12
|
+
is no longer needed — the pin now floors at the tested version and caps at
|
|
13
|
+
the next major. The SD-JWT VC API openbadgeslib consumes
|
|
14
|
+
(`SdJwtVcProofSuite.issue/.verify`, `Ed25519SigningKey`, `P256SigningKey`)
|
|
15
|
+
is unchanged across the jump and the full test suite passes against
|
|
16
|
+
openvc-core 1.8.0. Note the 1.0 breaking changes (schema resolver returns
|
|
17
|
+
bytes, proof-error taxonomy move) touch surfaces openbadgeslib never
|
|
18
|
+
imports.
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
* v3.4.1 - 2026-07-06
|
|
22
|
+
|
|
23
|
+
- build: advertise Python 3.14 support — add it to the CI test matrix (lint
|
|
24
|
+
+ mypy + the full suite now run on 3.10–3.14) and the trove classifier, so
|
|
25
|
+
3.14 shows as supported on PyPI. No code change; the suite already runs
|
|
26
|
+
clean on CPython 3.14.
|
|
27
|
+
|
|
28
|
+
|
|
7
29
|
* v3.4.0 - 2026-07-06
|
|
8
30
|
|
|
9
31
|
- feat(ob3): issue and verify Open Badges 3.0 as EUDI **SD-JWT VC** (the
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: openbadgeslib
|
|
3
|
-
Version: 3.4.
|
|
3
|
+
Version: 3.4.2
|
|
4
4
|
Summary: Production-ready Python library & CLI for Open Badges 3.0 (W3C Verifiable Credentials): issue, verify, and revoke JWT-VC credentials with Bitstring Status Lists and did:web — plus strict OB 2.0 and legacy OB 1.0.
|
|
5
5
|
Author-email: Luis González Fernández <luisgf@luisgf.es>, Jesús Cea Avión <jcea@jcea.es>
|
|
6
6
|
License: LGPLv3
|
|
@@ -21,6 +21,7 @@ Classifier: Programming Language :: Python :: 3.10
|
|
|
21
21
|
Classifier: Programming Language :: Python :: 3.11
|
|
22
22
|
Classifier: Programming Language :: Python :: 3.12
|
|
23
23
|
Classifier: Programming Language :: Python :: 3.13
|
|
24
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
24
25
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
25
26
|
Classifier: Natural Language :: English
|
|
26
27
|
Classifier: Natural Language :: Spanish
|
|
@@ -37,7 +38,7 @@ Requires-Dist: defusedxml>=0.7
|
|
|
37
38
|
Provides-Extra: ldp
|
|
38
39
|
Requires-Dist: pyld>=2.0.4; extra == "ldp"
|
|
39
40
|
Provides-Extra: eudi
|
|
40
|
-
Requires-Dist: openvc-core<
|
|
41
|
+
Requires-Dist: openvc-core<2,>=1.8; extra == "eudi"
|
|
41
42
|
Provides-Extra: dev
|
|
42
43
|
Requires-Dist: pytest>=8.0; extra == "dev"
|
|
43
44
|
Requires-Dist: pytest-cov>=5.0; extra == "dev"
|
|
@@ -52,7 +53,7 @@ Dynamic: license-file
|
|
|
52
53
|
|
|
53
54
|
[](https://github.com/luisgf/openbadgeslib/actions/workflows/ci.yml)
|
|
54
55
|
[](https://pypi.org/project/openbadgeslib/)
|
|
55
|
-
[](https://github.com/luisgf/openbadgeslib/actions/workflows/ci.yml)
|
|
56
57
|
[](#license)
|
|
57
58
|
|
|
58
59
|
**A production-ready Python library & CLI for the full Open Badges 3.0 issuer
|
|
@@ -89,7 +90,7 @@ legacy format, selected with `-V {1,2,3}` (default `3`).
|
|
|
89
90
|
(EdDSA) — *plus* native **W3C Data Integrity / LDP** signing
|
|
90
91
|
(`eddsa-rdfc-2022`, Ed25519, optional `[ldp]` extra). Both proof formats
|
|
91
92
|
issue *and* verify offline, no external service.
|
|
92
|
-
- **Lean and typed** — `mypy --strict`, CI on Python 3.10–3.
|
|
93
|
+
- **Lean and typed** — `mypy --strict`, CI on Python 3.10–3.14, a small
|
|
93
94
|
dependency set, dataclasses + explicit validation (no Pydantic).
|
|
94
95
|
- **Dual-licensed** LGPLv3 (library) / BSD-2-Clause (CLI tools).
|
|
95
96
|
|
|
@@ -101,19 +102,21 @@ Open Badges landscape splits into three groups: 1EdTech's **verify-only** OB 2.0
|
|
|
101
102
|
reference validator, heavyweight **Django server platforms** (the Badgr lineage),
|
|
102
103
|
and a thin tail of **standalone libraries** — of which openbadgeslib is the only
|
|
103
104
|
actively-maintained, pip-installable, offline one that covers all three OB
|
|
104
|
-
versions
|
|
105
|
+
versions, both native OB 3.0 proof formats (VC-JWT and Data Integrity), and an
|
|
106
|
+
additive EUDI SD-JWT VC wallet track.
|
|
105
107
|
|
|
106
|
-
| Capability | **openbadgeslib** | [validator-core](https://github.com/1EdTech/openbadges-validator-core) | [Badgr /
|
|
108
|
+
| Capability | **openbadgeslib** | [validator-core](https://github.com/1EdTech/openbadges-validator-core) | [Badgr / open-educational-badges](https://github.com/open-educational-badges/badgr-server) (a) | [pyopenbadges](https://github.com/CoopCodeCommun/pyopenbadges) | [didkit](https://github.com/spruceid/didkit-python) (b) |
|
|
107
109
|
| --- | --- | --- | --- | --- | --- |
|
|
108
110
|
| Open Badges versions | 1.0, 2.0, **3.0** | 0.5–2.0 | 1.1, 2.0, 3.0 | 3.0 only | generic VC |
|
|
109
111
|
| Issue / verify | ✅ both | verify only | issue; partial verify | both | both (VC + VP) |
|
|
110
112
|
| OB 3.0 proof: VC-JWT (JOSE) | ✅ RS/ES/EdDSA | — | — | roadmap | ✅ not OB-aware |
|
|
111
113
|
| OB 3.0 proof: Data Integrity / LDP | ✅ issue + verify (`eddsa-rdfc-2022`) | — | issue only (Ed25519) | home-grown, non-conformant | older suites; no `rdfc-2022` in wheel |
|
|
114
|
+
| OB 3.0 as EUDI SD-JWT VC (selective disclosure) | ✅ issue + verify (Ed25519/P-256, `[eudi]` extra) | — | — | — | — |
|
|
112
115
|
| Revocation / suspension | ✅ W3C Bitstring Status List | hosted check | `1EdTechRevocationList` | ad-hoc flag | — |
|
|
113
116
|
| `did:web` (generate + resolve) | ✅ | — | — | — | resolve only |
|
|
114
117
|
| Image baking (SVG + PNG) | ✅ | unbake only | ✅ | — | — |
|
|
115
118
|
| Form factor | library + 5 CLI tools | library + CLI | Django server | library | binding |
|
|
116
|
-
| Typing / CI | `mypy --strict`, CI 3.10–3.
|
|
119
|
+
| Typing / CI | `mypy --strict`, CI 3.10–3.14 | — | — | Pydantic | — |
|
|
117
120
|
| License | LGPLv3 / BSD-2 | Apache-2.0 | AGPL-3.0 | MIT/LGPL | Apache-2.0 |
|
|
118
121
|
|
|
119
122
|
(a) The actively-maintained community fork (open-educational-badges): it
|
|
@@ -126,13 +129,13 @@ archived (read-only since July 2025).
|
|
|
126
129
|
|
|
127
130
|
For authoritative OB 2.0 *validation* semantics, 1EdTech's Python
|
|
128
131
|
[`openbadges-validator-core`](https://github.com/1EdTech/openbadges-validator-core)
|
|
129
|
-
and Node [`openbadges-validator`](https://github.com/
|
|
132
|
+
and Node [`openbadges-validator`](https://github.com/mozilla/openbadges-validator)
|
|
130
133
|
remain the reference; openbadgeslib focuses on the full issuer lifecycle across
|
|
131
134
|
all three OB versions.
|
|
132
135
|
|
|
133
136
|
## Requirements
|
|
134
137
|
|
|
135
|
-
- Python >= 3.10 (tested on 3.10–3.
|
|
138
|
+
- Python >= 3.10 (tested on 3.10–3.14)
|
|
136
139
|
- [pycryptodome](https://pypi.org/project/pycryptodome/) >= 3.20
|
|
137
140
|
- [ecdsa](https://pypi.org/project/ecdsa/) >= 0.19
|
|
138
141
|
- [pypng](https://pypi.org/project/pypng/) >= 0.20220715.0
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
[](https://github.com/luisgf/openbadgeslib/actions/workflows/ci.yml)
|
|
4
4
|
[](https://pypi.org/project/openbadgeslib/)
|
|
5
|
-
[](https://github.com/luisgf/openbadgeslib/actions/workflows/ci.yml)
|
|
6
6
|
[](#license)
|
|
7
7
|
|
|
8
8
|
**A production-ready Python library & CLI for the full Open Badges 3.0 issuer
|
|
@@ -39,7 +39,7 @@ legacy format, selected with `-V {1,2,3}` (default `3`).
|
|
|
39
39
|
(EdDSA) — *plus* native **W3C Data Integrity / LDP** signing
|
|
40
40
|
(`eddsa-rdfc-2022`, Ed25519, optional `[ldp]` extra). Both proof formats
|
|
41
41
|
issue *and* verify offline, no external service.
|
|
42
|
-
- **Lean and typed** — `mypy --strict`, CI on Python 3.10–3.
|
|
42
|
+
- **Lean and typed** — `mypy --strict`, CI on Python 3.10–3.14, a small
|
|
43
43
|
dependency set, dataclasses + explicit validation (no Pydantic).
|
|
44
44
|
- **Dual-licensed** LGPLv3 (library) / BSD-2-Clause (CLI tools).
|
|
45
45
|
|
|
@@ -51,19 +51,21 @@ Open Badges landscape splits into three groups: 1EdTech's **verify-only** OB 2.0
|
|
|
51
51
|
reference validator, heavyweight **Django server platforms** (the Badgr lineage),
|
|
52
52
|
and a thin tail of **standalone libraries** — of which openbadgeslib is the only
|
|
53
53
|
actively-maintained, pip-installable, offline one that covers all three OB
|
|
54
|
-
versions
|
|
54
|
+
versions, both native OB 3.0 proof formats (VC-JWT and Data Integrity), and an
|
|
55
|
+
additive EUDI SD-JWT VC wallet track.
|
|
55
56
|
|
|
56
|
-
| Capability | **openbadgeslib** | [validator-core](https://github.com/1EdTech/openbadges-validator-core) | [Badgr /
|
|
57
|
+
| Capability | **openbadgeslib** | [validator-core](https://github.com/1EdTech/openbadges-validator-core) | [Badgr / open-educational-badges](https://github.com/open-educational-badges/badgr-server) (a) | [pyopenbadges](https://github.com/CoopCodeCommun/pyopenbadges) | [didkit](https://github.com/spruceid/didkit-python) (b) |
|
|
57
58
|
| --- | --- | --- | --- | --- | --- |
|
|
58
59
|
| Open Badges versions | 1.0, 2.0, **3.0** | 0.5–2.0 | 1.1, 2.0, 3.0 | 3.0 only | generic VC |
|
|
59
60
|
| Issue / verify | ✅ both | verify only | issue; partial verify | both | both (VC + VP) |
|
|
60
61
|
| OB 3.0 proof: VC-JWT (JOSE) | ✅ RS/ES/EdDSA | — | — | roadmap | ✅ not OB-aware |
|
|
61
62
|
| OB 3.0 proof: Data Integrity / LDP | ✅ issue + verify (`eddsa-rdfc-2022`) | — | issue only (Ed25519) | home-grown, non-conformant | older suites; no `rdfc-2022` in wheel |
|
|
63
|
+
| OB 3.0 as EUDI SD-JWT VC (selective disclosure) | ✅ issue + verify (Ed25519/P-256, `[eudi]` extra) | — | — | — | — |
|
|
62
64
|
| Revocation / suspension | ✅ W3C Bitstring Status List | hosted check | `1EdTechRevocationList` | ad-hoc flag | — |
|
|
63
65
|
| `did:web` (generate + resolve) | ✅ | — | — | — | resolve only |
|
|
64
66
|
| Image baking (SVG + PNG) | ✅ | unbake only | ✅ | — | — |
|
|
65
67
|
| Form factor | library + 5 CLI tools | library + CLI | Django server | library | binding |
|
|
66
|
-
| Typing / CI | `mypy --strict`, CI 3.10–3.
|
|
68
|
+
| Typing / CI | `mypy --strict`, CI 3.10–3.14 | — | — | Pydantic | — |
|
|
67
69
|
| License | LGPLv3 / BSD-2 | Apache-2.0 | AGPL-3.0 | MIT/LGPL | Apache-2.0 |
|
|
68
70
|
|
|
69
71
|
(a) The actively-maintained community fork (open-educational-badges): it
|
|
@@ -76,13 +78,13 @@ archived (read-only since July 2025).
|
|
|
76
78
|
|
|
77
79
|
For authoritative OB 2.0 *validation* semantics, 1EdTech's Python
|
|
78
80
|
[`openbadges-validator-core`](https://github.com/1EdTech/openbadges-validator-core)
|
|
79
|
-
and Node [`openbadges-validator`](https://github.com/
|
|
81
|
+
and Node [`openbadges-validator`](https://github.com/mozilla/openbadges-validator)
|
|
80
82
|
remain the reference; openbadgeslib focuses on the full issuer lifecycle across
|
|
81
83
|
all three OB versions.
|
|
82
84
|
|
|
83
85
|
## Requirements
|
|
84
86
|
|
|
85
|
-
- Python >= 3.10 (tested on 3.10–3.
|
|
87
|
+
- Python >= 3.10 (tested on 3.10–3.14)
|
|
86
88
|
- [pycryptodome](https://pypi.org/project/pycryptodome/) >= 3.20
|
|
87
89
|
- [ecdsa](https://pypi.org/project/ecdsa/) >= 0.19
|
|
88
90
|
- [pypng](https://pypi.org/project/pypng/) >= 0.20220715.0
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: openbadgeslib
|
|
3
|
-
Version: 3.4.
|
|
3
|
+
Version: 3.4.2
|
|
4
4
|
Summary: Production-ready Python library & CLI for Open Badges 3.0 (W3C Verifiable Credentials): issue, verify, and revoke JWT-VC credentials with Bitstring Status Lists and did:web — plus strict OB 2.0 and legacy OB 1.0.
|
|
5
5
|
Author-email: Luis González Fernández <luisgf@luisgf.es>, Jesús Cea Avión <jcea@jcea.es>
|
|
6
6
|
License: LGPLv3
|
|
@@ -21,6 +21,7 @@ Classifier: Programming Language :: Python :: 3.10
|
|
|
21
21
|
Classifier: Programming Language :: Python :: 3.11
|
|
22
22
|
Classifier: Programming Language :: Python :: 3.12
|
|
23
23
|
Classifier: Programming Language :: Python :: 3.13
|
|
24
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
24
25
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
25
26
|
Classifier: Natural Language :: English
|
|
26
27
|
Classifier: Natural Language :: Spanish
|
|
@@ -37,7 +38,7 @@ Requires-Dist: defusedxml>=0.7
|
|
|
37
38
|
Provides-Extra: ldp
|
|
38
39
|
Requires-Dist: pyld>=2.0.4; extra == "ldp"
|
|
39
40
|
Provides-Extra: eudi
|
|
40
|
-
Requires-Dist: openvc-core<
|
|
41
|
+
Requires-Dist: openvc-core<2,>=1.8; extra == "eudi"
|
|
41
42
|
Provides-Extra: dev
|
|
42
43
|
Requires-Dist: pytest>=8.0; extra == "dev"
|
|
43
44
|
Requires-Dist: pytest-cov>=5.0; extra == "dev"
|
|
@@ -52,7 +53,7 @@ Dynamic: license-file
|
|
|
52
53
|
|
|
53
54
|
[](https://github.com/luisgf/openbadgeslib/actions/workflows/ci.yml)
|
|
54
55
|
[](https://pypi.org/project/openbadgeslib/)
|
|
55
|
-
[](https://github.com/luisgf/openbadgeslib/actions/workflows/ci.yml)
|
|
56
57
|
[](#license)
|
|
57
58
|
|
|
58
59
|
**A production-ready Python library & CLI for the full Open Badges 3.0 issuer
|
|
@@ -89,7 +90,7 @@ legacy format, selected with `-V {1,2,3}` (default `3`).
|
|
|
89
90
|
(EdDSA) — *plus* native **W3C Data Integrity / LDP** signing
|
|
90
91
|
(`eddsa-rdfc-2022`, Ed25519, optional `[ldp]` extra). Both proof formats
|
|
91
92
|
issue *and* verify offline, no external service.
|
|
92
|
-
- **Lean and typed** — `mypy --strict`, CI on Python 3.10–3.
|
|
93
|
+
- **Lean and typed** — `mypy --strict`, CI on Python 3.10–3.14, a small
|
|
93
94
|
dependency set, dataclasses + explicit validation (no Pydantic).
|
|
94
95
|
- **Dual-licensed** LGPLv3 (library) / BSD-2-Clause (CLI tools).
|
|
95
96
|
|
|
@@ -101,19 +102,21 @@ Open Badges landscape splits into three groups: 1EdTech's **verify-only** OB 2.0
|
|
|
101
102
|
reference validator, heavyweight **Django server platforms** (the Badgr lineage),
|
|
102
103
|
and a thin tail of **standalone libraries** — of which openbadgeslib is the only
|
|
103
104
|
actively-maintained, pip-installable, offline one that covers all three OB
|
|
104
|
-
versions
|
|
105
|
+
versions, both native OB 3.0 proof formats (VC-JWT and Data Integrity), and an
|
|
106
|
+
additive EUDI SD-JWT VC wallet track.
|
|
105
107
|
|
|
106
|
-
| Capability | **openbadgeslib** | [validator-core](https://github.com/1EdTech/openbadges-validator-core) | [Badgr /
|
|
108
|
+
| Capability | **openbadgeslib** | [validator-core](https://github.com/1EdTech/openbadges-validator-core) | [Badgr / open-educational-badges](https://github.com/open-educational-badges/badgr-server) (a) | [pyopenbadges](https://github.com/CoopCodeCommun/pyopenbadges) | [didkit](https://github.com/spruceid/didkit-python) (b) |
|
|
107
109
|
| --- | --- | --- | --- | --- | --- |
|
|
108
110
|
| Open Badges versions | 1.0, 2.0, **3.0** | 0.5–2.0 | 1.1, 2.0, 3.0 | 3.0 only | generic VC |
|
|
109
111
|
| Issue / verify | ✅ both | verify only | issue; partial verify | both | both (VC + VP) |
|
|
110
112
|
| OB 3.0 proof: VC-JWT (JOSE) | ✅ RS/ES/EdDSA | — | — | roadmap | ✅ not OB-aware |
|
|
111
113
|
| OB 3.0 proof: Data Integrity / LDP | ✅ issue + verify (`eddsa-rdfc-2022`) | — | issue only (Ed25519) | home-grown, non-conformant | older suites; no `rdfc-2022` in wheel |
|
|
114
|
+
| OB 3.0 as EUDI SD-JWT VC (selective disclosure) | ✅ issue + verify (Ed25519/P-256, `[eudi]` extra) | — | — | — | — |
|
|
112
115
|
| Revocation / suspension | ✅ W3C Bitstring Status List | hosted check | `1EdTechRevocationList` | ad-hoc flag | — |
|
|
113
116
|
| `did:web` (generate + resolve) | ✅ | — | — | — | resolve only |
|
|
114
117
|
| Image baking (SVG + PNG) | ✅ | unbake only | ✅ | — | — |
|
|
115
118
|
| Form factor | library + 5 CLI tools | library + CLI | Django server | library | binding |
|
|
116
|
-
| Typing / CI | `mypy --strict`, CI 3.10–3.
|
|
119
|
+
| Typing / CI | `mypy --strict`, CI 3.10–3.14 | — | — | Pydantic | — |
|
|
117
120
|
| License | LGPLv3 / BSD-2 | Apache-2.0 | AGPL-3.0 | MIT/LGPL | Apache-2.0 |
|
|
118
121
|
|
|
119
122
|
(a) The actively-maintained community fork (open-educational-badges): it
|
|
@@ -126,13 +129,13 @@ archived (read-only since July 2025).
|
|
|
126
129
|
|
|
127
130
|
For authoritative OB 2.0 *validation* semantics, 1EdTech's Python
|
|
128
131
|
[`openbadges-validator-core`](https://github.com/1EdTech/openbadges-validator-core)
|
|
129
|
-
and Node [`openbadges-validator`](https://github.com/
|
|
132
|
+
and Node [`openbadges-validator`](https://github.com/mozilla/openbadges-validator)
|
|
130
133
|
remain the reference; openbadgeslib focuses on the full issuer lifecycle across
|
|
131
134
|
all three OB versions.
|
|
132
135
|
|
|
133
136
|
## Requirements
|
|
134
137
|
|
|
135
|
-
- Python >= 3.10 (tested on 3.10–3.
|
|
138
|
+
- Python >= 3.10 (tested on 3.10–3.14)
|
|
136
139
|
- [pycryptodome](https://pypi.org/project/pycryptodome/) >= 3.20
|
|
137
140
|
- [ecdsa](https://pypi.org/project/ecdsa/) >= 0.19
|
|
138
141
|
- [pypng](https://pypi.org/project/pypng/) >= 0.20220715.0
|
|
@@ -30,6 +30,7 @@ classifiers = [
|
|
|
30
30
|
"Programming Language :: Python :: 3.11",
|
|
31
31
|
"Programming Language :: Python :: 3.12",
|
|
32
32
|
"Programming Language :: Python :: 3.13",
|
|
33
|
+
"Programming Language :: Python :: 3.14",
|
|
33
34
|
"Topic :: Software Development :: Libraries :: Python Modules",
|
|
34
35
|
"Natural Language :: English",
|
|
35
36
|
"Natural Language :: Spanish",
|
|
@@ -52,10 +53,12 @@ ldp = [
|
|
|
52
53
|
"pyld>=2.0.4",
|
|
53
54
|
]
|
|
54
55
|
# EUDI track: issue/verify badges as SD-JWT VC (the EU wallet / ARF format) via
|
|
55
|
-
# the generic openvc-core library.
|
|
56
|
+
# the generic openvc-core library. openvc-core is stable (1.x) with a published
|
|
57
|
+
# SemVer/deprecation contract, so the pin follows SemVer: floor at the version
|
|
58
|
+
# the suite is tested against, ceiling at the next major.
|
|
56
59
|
# See openbadgeslib/ob3/eudi.py.
|
|
57
60
|
eudi = [
|
|
58
|
-
"openvc-core>=
|
|
61
|
+
"openvc-core>=1.8,<2",
|
|
59
62
|
]
|
|
60
63
|
dev = [
|
|
61
64
|
"pytest>=8.0",
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/openbadgeslib/ob3/contexts/ob-v3p0-context-3.0.1.json
RENAMED
|
File without changes
|
{openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/openbadgeslib/ob3/contexts/ob-v3p0-context-3.0.2.json
RENAMED
|
File without changes
|
{openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/openbadgeslib/ob3/contexts/ob-v3p0-context-3.0.3.json
RENAMED
|
File without changes
|
|
File without changes
|
{openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/openbadgeslib/ob3/contexts/security-multikey-v1.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/tests/fixtures/ob_schemas/ob_v3p0_profile_schema.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/tests/fixtures/vc_di_eddsa/credentials-examples-v2.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/tests/fixtures/vc_di_eddsa/proof-config-hash.txt
RENAMED
|
File without changes
|
{openbadgeslib-3.4.0 → openbadgeslib-3.4.2}/tests/fixtures/vc_di_eddsa/signed-credential.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|