openbadgeslib 4.4.0__tar.gz → 4.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-4.4.0 → openbadgeslib-4.4.2}/Changelog.txt +30 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/PKG-INFO +1 -1
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/openbadgeslib/openbadges_keygenerator.py +8 -1
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/openbadgeslib/util.py +1 -1
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/openbadgeslib.egg-info/PKG-INFO +1 -1
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/tests/test_key_operation.py +14 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/CONTRIBUTING.md +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/GOVERNANCE.md +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/LICENSE.txt +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/MANIFEST.in +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/README.md +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/SECURITY.md +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/docs/README.md +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/openbadgeslib/__init__.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/openbadgeslib/_jsonmodel.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/openbadgeslib/_jws/__init__.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/openbadgeslib/_jws/exceptions.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/openbadgeslib/_jws/utils.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/openbadgeslib/_ob1_api.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/openbadgeslib/badge_model.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/openbadgeslib/baking.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/openbadgeslib/cli_common.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/openbadgeslib/config.ini.example +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/openbadgeslib/confparser.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/openbadgeslib/errors.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/openbadgeslib/issue.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/openbadgeslib/keys.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/openbadgeslib/logs.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/openbadgeslib/mail.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/openbadgeslib/ob1/__init__.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/openbadgeslib/ob1/badge.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/openbadgeslib/ob1/signer.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/openbadgeslib/ob1/verifier.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/openbadgeslib/ob2/__init__.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/openbadgeslib/ob2/models.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/openbadgeslib/ob2/signer.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/openbadgeslib/ob2/verifier.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/openbadgeslib/ob3/__init__.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/openbadgeslib/ob3/contexts/__init__.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/openbadgeslib/ob3/contexts/credentials-v2.json +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/openbadgeslib/ob3/contexts/ob-v3p0-context-3.0.1.json +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/openbadgeslib/ob3/contexts/ob-v3p0-context-3.0.2.json +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/openbadgeslib/ob3/contexts/ob-v3p0-context-3.0.3.json +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/openbadgeslib/ob3/contexts/ob-v3p0-extensions.json +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/openbadgeslib/ob3/contexts/security-data-integrity-v2.json +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/openbadgeslib/ob3/contexts/security-multikey-v1.json +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/openbadgeslib/ob3/credential.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/openbadgeslib/ob3/did.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/openbadgeslib/ob3/eudi.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/openbadgeslib/ob3/ldp.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/openbadgeslib/ob3/publish.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/openbadgeslib/ob3/signer.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/openbadgeslib/ob3/status.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/openbadgeslib/ob3/status_list.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/openbadgeslib/ob3/status_registry.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/openbadgeslib/ob3/verifier.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/openbadgeslib/oid4vci/__init__.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/openbadgeslib/oid4vci/codes.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/openbadgeslib/oid4vci/errors.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/openbadgeslib/oid4vci/formats.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/openbadgeslib/oid4vci/handler.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/openbadgeslib/oid4vci/memory_store.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/openbadgeslib/oid4vci/metadata.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/openbadgeslib/oid4vci/nonce.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/openbadgeslib/oid4vci/offer.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/openbadgeslib/oid4vci/reconcile.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/openbadgeslib/oid4vci/sqlite_store.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/openbadgeslib/oid4vci/store.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/openbadgeslib/openbadges_cli.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/openbadgeslib/openbadges_init.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/openbadgeslib/openbadges_publish.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/openbadgeslib/openbadges_signer.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/openbadgeslib/openbadges_status.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/openbadgeslib/openbadges_verifier.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/openbadgeslib/py.typed +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/openbadgeslib/verify.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/openbadgeslib.egg-info/SOURCES.txt +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/openbadgeslib.egg-info/dependency_links.txt +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/openbadgeslib.egg-info/entry_points.txt +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/openbadgeslib.egg-info/requires.txt +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/openbadgeslib.egg-info/top_level.txt +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/pyproject.toml +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/setup.cfg +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/tests/config1.ini +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/tests/conformance/Dockerfile.ob3 +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/tests/conformance/README.md +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/tests/conformance/conftest.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/tests/conformance/docker-compose.yml +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/tests/conformance/test_official_validators.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/tests/conftest.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/tests/fixtures/ob_schemas/README.md +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/tests/fixtures/ob_schemas/ob_v3p0_achievementcredential_schema.json +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/tests/fixtures/ob_schemas/ob_v3p0_profile_schema.json +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/tests/fixtures/ob_schemas/refresh.sh +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/tests/fixtures/vc_di_eddsa/README.md +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/tests/fixtures/vc_di_eddsa/credentials-examples-v2.json +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/tests/fixtures/vc_di_eddsa/doc-hash.txt +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/tests/fixtures/vc_di_eddsa/key-pair.json +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/tests/fixtures/vc_di_eddsa/proof-config-hash.txt +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/tests/fixtures/vc_di_eddsa/signed-credential.json +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/tests/images/sample1.png +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/tests/images/sample1.svg +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/tests/images/userimage01.svg +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/tests/ldp_helpers.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/tests/logo Python Espan/314/203a.svg" +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/tests/logo Python Espa/303/261a.svg" +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/tests/test_baking.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/tests/test_cli_json.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/tests/test_cli_smoke.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/tests/test_confparser.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/tests/test_docs.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/tests/test_eddsa.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/tests/test_errors.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/tests/test_examples.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/tests/test_issue.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/tests/test_issue_credential.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/tests/test_jsonmodel.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/tests/test_jws.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/tests/test_keys.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/tests/test_mail.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/tests/test_ob1_badge_io.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/tests/test_ob1_deprecation.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/tests/test_ob1_signer.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/tests/test_ob1_verifier.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/tests/test_ob2_cli.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/tests/test_ob2_error_branches.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/tests/test_ob2_models.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/tests/test_ob2_signer.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/tests/test_ob2_verifier.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/tests/test_ob3_conformance_schema.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/tests/test_ob3_contexts.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/tests/test_ob3_credential.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/tests/test_ob3_did.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/tests/test_ob3_did_doc.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/tests/test_ob3_endorsement.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/tests/test_ob3_eudi_oid4vci.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/tests/test_ob3_eudi_sd_jwt.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/tests/test_ob3_eudi_type_metadata.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/tests/test_ob3_eudi_x5c.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/tests/test_ob3_ldp.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/tests/test_ob3_ldp_cli.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/tests/test_ob3_ldp_ecdsa_sd.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/tests/test_ob3_ldp_errors.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/tests/test_ob3_ldp_sign.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/tests/test_ob3_publish_cli.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/tests/test_ob3_signer.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/tests/test_ob3_signer_cli_ldp.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/tests/test_ob3_status.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/tests/test_ob3_status_list.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/tests/test_ob3_status_registry.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/tests/test_ob3_verifier.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/tests/test_oid4vci_config.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/tests/test_oid4vci_protocol.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/tests/test_oid4vci_reservations.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/tests/test_oid4vci_store.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/tests/test_openbadges_cli.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/tests/test_public_api.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/tests/test_sign_ecc.pem +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/tests/test_sign_rsa.pem +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/tests/test_signer_batch.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/tests/test_util.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/tests/test_verifier_cli_coverage.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/tests/test_verify.py +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/tests/test_verify_ecc.pem +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/tests/test_verify_rsa.pem +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/tests/withoutxmlheader.svg +0 -0
- {openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/tests/withxmlheader.svg +0 -0
|
@@ -4,6 +4,36 @@ OpenBadgesLib - Changelog
|
|
|
4
4
|
Newest first. Dates are ISO 8601 (YYYY-MM-DD).
|
|
5
5
|
|
|
6
6
|
|
|
7
|
+
* v4.4.2 - 2026-08-13
|
|
8
|
+
|
|
9
|
+
- fix(cli): key generation no longer crashes on Windows, where
|
|
10
|
+
`os.fchmod` does not exist. `_write_pem_file` now guards the fchmod
|
|
11
|
+
call with `hasattr` and skips the permission dance on platforms
|
|
12
|
+
without it — there the POSIX mode bits are not the access control
|
|
13
|
+
(NTFS ACLs are), so skipping is the honest behaviour rather than a
|
|
14
|
+
best-effort `os.chmod` that would only toggle the read-only bit.
|
|
15
|
+
Regression introduced in v4.3.1 by #289; caught by the Windows CI leg.
|
|
16
|
+
- fix(tests): the v4.4.1 regression test for the above itself raised on
|
|
17
|
+
Windows (`monkeypatch.delattr` on an attribute the platform does not
|
|
18
|
+
have); it now skips where `os.fchmod` is already absent.
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
* v4.4.1 - 2026-08-13
|
|
22
|
+
|
|
23
|
+
Superseded the same day: its own regression test failed on Windows
|
|
24
|
+
(`monkeypatch.delattr` on an attribute the platform does not have), so
|
|
25
|
+
the release went out with the Windows CI leg still red. The library fix
|
|
26
|
+
below is correct and is carried forward unchanged; use v4.4.2.
|
|
27
|
+
|
|
28
|
+
- fix(cli): key generation no longer crashes on Windows, where
|
|
29
|
+
`os.fchmod` does not exist. `_write_pem_file` now guards the fchmod
|
|
30
|
+
call with `hasattr` and skips the permission dance on platforms
|
|
31
|
+
without it — there the POSIX mode bits are not the access control
|
|
32
|
+
(NTFS ACLs are), so skipping is the honest behaviour rather than a
|
|
33
|
+
best-effort `os.chmod` that would only toggle the read-only bit.
|
|
34
|
+
Regression introduced in v4.3.1 by #289; caught by the Windows CI leg.
|
|
35
|
+
|
|
36
|
+
|
|
7
37
|
* v4.4.0 - 2026-08-13
|
|
8
38
|
|
|
9
39
|
Track openvc-core 1.25: the OID4VCI discovery documents this library
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: openbadgeslib
|
|
3
|
-
Version: 4.4.
|
|
3
|
+
Version: 4.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
|
|
@@ -58,6 +58,12 @@ def _write_pem_file(path: str, data: bytes, mode: int) -> None:
|
|
|
58
58
|
with a symlink and redirect the permission change onto another file the
|
|
59
59
|
invoking user owns (#289). ``O_CREAT|O_EXCL`` already prevents following a
|
|
60
60
|
pre-planted symlink at create time; ``fchmod`` closes the post-close gap.
|
|
61
|
+
|
|
62
|
+
Windows has no ``os.fchmod`` and its ``os.chmod`` only toggles the
|
|
63
|
+
read-only bit, so there the mode argument is left to the platform and the
|
|
64
|
+
permission dance is skipped outright: NTFS ACLs, not POSIX bits, are the
|
|
65
|
+
access control, and the calling user's own profile directory is the
|
|
66
|
+
boundary that matters there.
|
|
61
67
|
"""
|
|
62
68
|
flags = os.O_WRONLY | os.O_CREAT | os.O_EXCL
|
|
63
69
|
fd = os.open(path, flags, mode)
|
|
@@ -65,7 +71,8 @@ def _write_pem_file(path: str, data: bytes, mode: int) -> None:
|
|
|
65
71
|
with os.fdopen(fd, 'wb') as f:
|
|
66
72
|
fd = -1 # ownership transferred to the file object
|
|
67
73
|
f.write(data)
|
|
68
|
-
os
|
|
74
|
+
if hasattr(os, 'fchmod'):
|
|
75
|
+
os.fchmod(f.fileno(), mode)
|
|
69
76
|
except Exception:
|
|
70
77
|
if fd >= 0:
|
|
71
78
|
os.close(fd)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: openbadgeslib
|
|
3
|
-
Version: 4.4.
|
|
3
|
+
Version: 4.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
|
|
@@ -256,3 +256,17 @@ class TestKeyGeneratorFileWrites:
|
|
|
256
256
|
path = tmp_path / 'no' / 'such' / 'dir' / 'key.pem'
|
|
257
257
|
with pytest.raises(OSError):
|
|
258
258
|
_write_pem_file(str(path), b'private-key', 0o600)
|
|
259
|
+
|
|
260
|
+
@pytest.mark.skipif(not hasattr(os, 'fchmod'),
|
|
261
|
+
reason='already the platform under simulation')
|
|
262
|
+
def test_write_pem_file_survives_a_platform_without_fchmod(
|
|
263
|
+
self, tmp_path, monkeypatch):
|
|
264
|
+
# Windows has no os.fchmod (its chmod toggles only the read-only bit),
|
|
265
|
+
# so the permission dance is skipped there and the write must still
|
|
266
|
+
# succeed — v4.3.1 crashed key generation on Windows with
|
|
267
|
+
# AttributeError on exactly this path.
|
|
268
|
+
import openbadgeslib.openbadges_keygenerator as module
|
|
269
|
+
monkeypatch.delattr(module.os, 'fchmod')
|
|
270
|
+
path = tmp_path / 'sign.pem'
|
|
271
|
+
_write_pem_file(str(path), b'private-key', 0o600)
|
|
272
|
+
assert path.read_bytes() == b'private-key'
|
|
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
|
{openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/openbadgeslib/ob3/contexts/ob-v3p0-context-3.0.1.json
RENAMED
|
File without changes
|
{openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/openbadgeslib/ob3/contexts/ob-v3p0-context-3.0.2.json
RENAMED
|
File without changes
|
{openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/openbadgeslib/ob3/contexts/ob-v3p0-context-3.0.3.json
RENAMED
|
File without changes
|
{openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/openbadgeslib/ob3/contexts/ob-v3p0-extensions.json
RENAMED
|
File without changes
|
|
File without changes
|
{openbadgeslib-4.4.0 → openbadgeslib-4.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
|
|
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-4.4.0 → openbadgeslib-4.4.2}/tests/fixtures/ob_schemas/ob_v3p0_profile_schema.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/tests/fixtures/vc_di_eddsa/credentials-examples-v2.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{openbadgeslib-4.4.0 → openbadgeslib-4.4.2}/tests/fixtures/vc_di_eddsa/proof-config-hash.txt
RENAMED
|
File without changes
|
{openbadgeslib-4.4.0 → openbadgeslib-4.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
|
|
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
|