@fedify/fedify 0.10.0-dev.190 → 0.10.0-dev.195
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.
- package/CHANGES.md +41 -1
- package/esm/deps/jsr.io/@std/encoding/0.224.3/base64url.js +83 -0
- package/esm/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/mod.js +1 -1
- package/esm/federation/handler.js +1 -1
- package/esm/federation/middleware.js +435 -347
- package/esm/nodeinfo/types.js +1 -1
- package/esm/runtime/key.js +82 -0
- package/esm/testing/fixtures/w3id.org/security/multikey/v1 +35 -0
- package/esm/testing/fixtures/www.w3.org/ns/did/v1 +58 -0
- package/esm/vocab/application.yaml +15 -1
- package/esm/vocab/group.yaml +15 -1
- package/esm/vocab/multikey.yaml +33 -0
- package/esm/vocab/organization.yaml +15 -1
- package/esm/vocab/person.yaml +15 -1
- package/esm/vocab/service.yaml +15 -1
- package/esm/vocab/vocab.js +986 -13
- package/package.json +4 -1
- package/types/codegen/type.d.ts.map +1 -1
- package/types/deps/jsr.io/@std/async/{0.224.1 → 0.224.2}/delay.d.ts.map +1 -1
- package/types/deps/jsr.io/@std/encoding/0.224.3/base64url.d.ts +38 -0
- package/types/deps/jsr.io/@std/encoding/0.224.3/base64url.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/http/{0.224.3 → 0.224.4}/_negotiation/common.d.ts.map +1 -1
- package/types/deps/jsr.io/@std/http/{0.224.3 → 0.224.4}/_negotiation/encoding.d.ts.map +1 -1
- package/types/deps/jsr.io/@std/http/{0.224.3 → 0.224.4}/_negotiation/language.d.ts.map +1 -1
- package/types/deps/jsr.io/@std/http/{0.224.3 → 0.224.4}/_negotiation/media_type.d.ts.map +1 -1
- package/types/deps/jsr.io/@std/http/{0.224.3 → 0.224.4}/negotiation.d.ts.map +1 -1
- package/types/deps/jsr.io/@std/path/1.0.0-rc.1/_common/assert_path.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/path/1.0.0-rc.1/_common/basename.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/path/1.0.0-rc.1/_common/constants.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/path/1.0.0-rc.1/_common/dirname.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/path/1.0.0-rc.1/_common/normalize.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/path/1.0.0-rc.1/_common/normalize_string.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/path/1.0.0-rc.1/_common/strip_trailing_separators.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/path/1.0.0-rc.1/posix/_util.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/path/1.0.0-rc.1/posix/basename.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/path/1.0.0-rc.1/posix/dirname.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/path/1.0.0-rc.1/posix/extname.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/path/1.0.0-rc.1/posix/join.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/path/1.0.0-rc.1/posix/normalize.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/semver/0.224.3/_constants.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/_shared.d.ts.map +1 -1
- package/types/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/_test_comparator_set.d.ts.map +1 -1
- package/types/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/can_parse.d.ts.map +1 -1
- package/types/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/compare.d.ts.map +1 -1
- package/types/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/constants.d.ts.map +1 -1
- package/types/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/difference.d.ts.map +1 -1
- package/types/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/equals.d.ts.map +1 -1
- package/types/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/format.d.ts.map +1 -1
- package/types/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/format_range.d.ts.map +1 -1
- package/types/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/greater_or_equal.d.ts.map +1 -1
- package/types/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/greater_than.d.ts.map +1 -1
- package/types/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/greater_than_range.d.ts.map +1 -1
- package/types/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/increment.d.ts.map +1 -1
- package/types/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/is_range.d.ts.map +1 -1
- package/types/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/is_semver.d.ts.map +1 -1
- package/types/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/less_or_equal.d.ts.map +1 -1
- package/types/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/less_than.d.ts.map +1 -1
- package/types/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/less_than_range.d.ts.map +1 -1
- package/types/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/max_satisfying.d.ts.map +1 -1
- package/types/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/min_satisfying.d.ts.map +1 -1
- package/types/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/mod.d.ts +1 -1
- package/types/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/mod.d.ts.map +1 -1
- package/types/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/not_equals.d.ts.map +1 -1
- package/types/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/parse.d.ts.map +1 -1
- package/types/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/parse_range.d.ts.map +1 -1
- package/types/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/range_intersects.d.ts.map +1 -1
- package/types/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/range_max.d.ts.map +1 -1
- package/types/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/range_min.d.ts.map +1 -1
- package/types/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/satisfies.d.ts.map +1 -1
- package/types/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/test_range.d.ts.map +1 -1
- package/types/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/try_parse.d.ts.map +1 -1
- package/types/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/try_parse_range.d.ts.map +1 -1
- package/types/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/types.d.ts.map +1 -1
- package/types/deps/jsr.io/@std/text/{0.224.2 → 0.224.3}/_util.d.ts.map +1 -1
- package/types/deps/jsr.io/@std/text/{0.224.2 → 0.224.3}/case.d.ts.map +1 -1
- package/types/deps/jsr.io/@std/text/{0.224.2 → 0.224.3}/closest_string.d.ts.map +1 -1
- package/types/deps/jsr.io/@std/text/{0.224.2 → 0.224.3}/compare_similarity.d.ts.map +1 -1
- package/types/deps/jsr.io/@std/text/{0.224.2 → 0.224.3}/levenshtein_distance.d.ts.map +1 -1
- package/types/deps/jsr.io/@std/text/0.224.3/mod.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/text/{0.224.2 → 0.224.3}/word_similarity_sort.d.ts.map +1 -1
- package/types/deps/jsr.io/@std/url/{0.224.0 → 0.224.1}/_strip.d.ts.map +1 -1
- package/types/deps/jsr.io/@std/url/0.224.1/basename.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/url/0.224.1/dirname.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/url/0.224.1/extname.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/url/0.224.1/join.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/url/0.224.1/mod.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/url/0.224.1/normalize.d.ts.map +1 -0
- package/types/federation/context.d.ts +6 -1
- package/types/federation/context.d.ts.map +1 -1
- package/types/federation/middleware.d.ts.map +1 -1
- package/types/nodeinfo/types.d.ts +1 -1
- package/types/runtime/key.d.ts +20 -0
- package/types/runtime/key.d.ts.map +1 -1
- package/types/vocab/vocab.d.ts +249 -0
- package/types/vocab/vocab.d.ts.map +1 -1
- package/types/deps/jsr.io/@std/assert/0.226.0/assert.d.ts.map +0 -1
- package/types/deps/jsr.io/@std/assert/0.226.0/assertion_error.d.ts.map +0 -1
- package/types/deps/jsr.io/@std/semver/0.224.2/_constants.d.ts.map +0 -1
- package/types/deps/jsr.io/@std/text/0.224.2/mod.d.ts.map +0 -1
- package/types/deps/jsr.io/@std/url/0.224.0/basename.d.ts.map +0 -1
- package/types/deps/jsr.io/@std/url/0.224.0/dirname.d.ts.map +0 -1
- package/types/deps/jsr.io/@std/url/0.224.0/extname.d.ts.map +0 -1
- package/types/deps/jsr.io/@std/url/0.224.0/join.d.ts.map +0 -1
- package/types/deps/jsr.io/@std/url/0.224.0/mod.d.ts.map +0 -1
- package/types/deps/jsr.io/@std/url/0.224.0/normalize.d.ts.map +0 -1
- /package/esm/deps/jsr.io/@std/http/{0.224.3 → 0.224.4}/_negotiation/common.js +0 -0
- /package/esm/deps/jsr.io/@std/http/{0.224.3 → 0.224.4}/_negotiation/encoding.js +0 -0
- /package/esm/deps/jsr.io/@std/http/{0.224.3 → 0.224.4}/_negotiation/language.js +0 -0
- /package/esm/deps/jsr.io/@std/http/{0.224.3 → 0.224.4}/_negotiation/media_type.js +0 -0
- /package/esm/deps/jsr.io/@std/http/{0.224.3 → 0.224.4}/negotiation.js +0 -0
- /package/esm/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/_constants.js +0 -0
- /package/esm/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/_shared.js +0 -0
- /package/esm/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/_test_comparator_set.js +0 -0
- /package/esm/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/can_parse.js +0 -0
- /package/esm/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/compare.js +0 -0
- /package/esm/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/constants.js +0 -0
- /package/esm/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/difference.js +0 -0
- /package/esm/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/equals.js +0 -0
- /package/esm/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/format.js +0 -0
- /package/esm/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/format_range.js +0 -0
- /package/esm/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/greater_or_equal.js +0 -0
- /package/esm/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/greater_than.js +0 -0
- /package/esm/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/greater_than_range.js +0 -0
- /package/esm/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/increment.js +0 -0
- /package/esm/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/is_range.js +0 -0
- /package/esm/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/is_semver.js +0 -0
- /package/esm/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/less_or_equal.js +0 -0
- /package/esm/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/less_than.js +0 -0
- /package/esm/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/less_than_range.js +0 -0
- /package/esm/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/max_satisfying.js +0 -0
- /package/esm/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/min_satisfying.js +0 -0
- /package/esm/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/not_equals.js +0 -0
- /package/esm/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/parse.js +0 -0
- /package/esm/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/parse_range.js +0 -0
- /package/esm/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/range_intersects.js +0 -0
- /package/esm/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/range_max.js +0 -0
- /package/esm/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/range_min.js +0 -0
- /package/esm/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/satisfies.js +0 -0
- /package/esm/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/test_range.js +0 -0
- /package/esm/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/try_parse.js +0 -0
- /package/esm/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/try_parse_range.js +0 -0
- /package/esm/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/types.js +0 -0
- /package/types/deps/jsr.io/@std/http/{0.224.3 → 0.224.4}/_negotiation/common.d.ts +0 -0
- /package/types/deps/jsr.io/@std/http/{0.224.3 → 0.224.4}/_negotiation/encoding.d.ts +0 -0
- /package/types/deps/jsr.io/@std/http/{0.224.3 → 0.224.4}/_negotiation/language.d.ts +0 -0
- /package/types/deps/jsr.io/@std/http/{0.224.3 → 0.224.4}/_negotiation/media_type.d.ts +0 -0
- /package/types/deps/jsr.io/@std/http/{0.224.3 → 0.224.4}/negotiation.d.ts +0 -0
- /package/types/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/_constants.d.ts +0 -0
- /package/types/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/_shared.d.ts +0 -0
- /package/types/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/_test_comparator_set.d.ts +0 -0
- /package/types/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/can_parse.d.ts +0 -0
- /package/types/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/compare.d.ts +0 -0
- /package/types/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/constants.d.ts +0 -0
- /package/types/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/difference.d.ts +0 -0
- /package/types/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/equals.d.ts +0 -0
- /package/types/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/format.d.ts +0 -0
- /package/types/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/format_range.d.ts +0 -0
- /package/types/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/greater_or_equal.d.ts +0 -0
- /package/types/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/greater_than.d.ts +0 -0
- /package/types/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/greater_than_range.d.ts +0 -0
- /package/types/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/increment.d.ts +0 -0
- /package/types/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/is_range.d.ts +0 -0
- /package/types/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/is_semver.d.ts +0 -0
- /package/types/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/less_or_equal.d.ts +0 -0
- /package/types/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/less_than.d.ts +0 -0
- /package/types/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/less_than_range.d.ts +0 -0
- /package/types/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/max_satisfying.d.ts +0 -0
- /package/types/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/min_satisfying.d.ts +0 -0
- /package/types/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/not_equals.d.ts +0 -0
- /package/types/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/parse.d.ts +0 -0
- /package/types/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/parse_range.d.ts +0 -0
- /package/types/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/range_intersects.d.ts +0 -0
- /package/types/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/range_max.d.ts +0 -0
- /package/types/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/range_min.d.ts +0 -0
- /package/types/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/satisfies.d.ts +0 -0
- /package/types/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/test_range.d.ts +0 -0
- /package/types/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/try_parse.d.ts +0 -0
- /package/types/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/try_parse_range.d.ts +0 -0
- /package/types/deps/jsr.io/@std/semver/{0.224.2 → 0.224.3}/types.d.ts +0 -0
package/esm/nodeinfo/types.js
CHANGED
package/esm/runtime/key.js
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
import * as dntShim from "../_dnt.shims.js";
|
|
2
|
+
import { createPublicKey } from "node:crypto";
|
|
3
|
+
import { concat } from "../deps/jsr.io/@std/bytes/0.224.0/concat.js";
|
|
2
4
|
import { decodeBase64, encodeBase64 } from "../deps/jsr.io/@std/encoding/0.224.3/base64.js";
|
|
5
|
+
import { decodeBase64Url } from "../deps/jsr.io/@std/encoding/0.224.3/base64url.js";
|
|
6
|
+
import { decodeHex } from "../deps/jsr.io/@std/encoding/0.224.3/hex.js";
|
|
7
|
+
import { Integer, Sequence } from "asn1js";
|
|
8
|
+
import { decode, encode } from "multibase";
|
|
9
|
+
import { addPrefix, getCodeFromData, rmPrefix } from "multicodec";
|
|
3
10
|
import { PublicKeyInfo } from "pkijs";
|
|
4
11
|
import { validateCryptoKey } from "../sig/key.js";
|
|
5
12
|
const algorithms = {
|
|
@@ -44,3 +51,78 @@ export async function exportSpki(key) {
|
|
|
44
51
|
pem = (pem.match(/.{1,64}/g) || []).join("\n");
|
|
45
52
|
return `-----BEGIN PUBLIC KEY-----\n${pem}\n-----END PUBLIC KEY-----\n`;
|
|
46
53
|
}
|
|
54
|
+
/**
|
|
55
|
+
* Imports a [Multibase]-encoded public key.
|
|
56
|
+
*
|
|
57
|
+
* [Multibase]: https://www.w3.org/TR/vc-data-integrity/#multibase-0
|
|
58
|
+
* @param key The Multibase-encoded public key.
|
|
59
|
+
* @returns The imported public key.
|
|
60
|
+
* @throws {TypeError} If the key is invalid or unsupported.
|
|
61
|
+
* @since 0.10.0
|
|
62
|
+
*/
|
|
63
|
+
export async function importMultibaseKey(key) {
|
|
64
|
+
const decoded = decode(key);
|
|
65
|
+
const code = getCodeFromData(decoded);
|
|
66
|
+
const content = rmPrefix(decoded);
|
|
67
|
+
if (code === 0x1205) { // rsa-pub
|
|
68
|
+
const keyObject = createPublicKey({
|
|
69
|
+
// deno-lint-ignore no-explicit-any
|
|
70
|
+
key: content,
|
|
71
|
+
format: "der",
|
|
72
|
+
type: "pkcs1",
|
|
73
|
+
});
|
|
74
|
+
const spki = keyObject.export({ type: "spki", format: "der" }).buffer;
|
|
75
|
+
return await dntShim.crypto.subtle.importKey("spki", spki, { name: "RSASSA-PKCS1-v1_5", hash: "SHA-256" }, true, ["verify"]);
|
|
76
|
+
}
|
|
77
|
+
else if (code === 0xed) { // ed25519-pub
|
|
78
|
+
return await dntShim.crypto.subtle.importKey("raw", content, "Ed25519", true, ["verify"]);
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
throw new TypeError("Unsupported key type: " + code);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Exports a public key in [Multibase] format.
|
|
86
|
+
*
|
|
87
|
+
* [Multibase]: https://www.w3.org/TR/vc-data-integrity/#multibase-0
|
|
88
|
+
* @param key The public key to export.
|
|
89
|
+
* @returns The exported public key in Multibase format.
|
|
90
|
+
* @throws {TypeError} If the key is invalid or unsupported.
|
|
91
|
+
* @since 0.10.0
|
|
92
|
+
*/
|
|
93
|
+
export async function exportMultibaseKey(key) {
|
|
94
|
+
let content;
|
|
95
|
+
let code;
|
|
96
|
+
if (key.algorithm.name === "Ed25519") {
|
|
97
|
+
content = await dntShim.crypto.subtle.exportKey("raw", key);
|
|
98
|
+
code = 0xed; // ed25519-pub
|
|
99
|
+
}
|
|
100
|
+
else if (key.algorithm.name === "RSASSA-PKCS1-v1_5" &&
|
|
101
|
+
key.algorithm.hash.name ===
|
|
102
|
+
"SHA-256") {
|
|
103
|
+
const jwk = await dntShim.crypto.subtle.exportKey("jwk", key);
|
|
104
|
+
const n = concat([new Uint8Array([0]), decodeBase64Url(jwk.n)]);
|
|
105
|
+
const sequence = new Sequence({
|
|
106
|
+
value: [
|
|
107
|
+
new Integer({
|
|
108
|
+
isHexOnly: true,
|
|
109
|
+
valueHex: n,
|
|
110
|
+
}),
|
|
111
|
+
new Integer({
|
|
112
|
+
isHexOnly: true,
|
|
113
|
+
valueHex: decodeBase64Url(jwk.e),
|
|
114
|
+
}),
|
|
115
|
+
],
|
|
116
|
+
});
|
|
117
|
+
content = sequence.toBER(false);
|
|
118
|
+
code = 0x1205; // rsa-pub
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
throw new TypeError("Unsupported key type: " + JSON.stringify(key.algorithm));
|
|
122
|
+
}
|
|
123
|
+
const codeHex = code.toString(16);
|
|
124
|
+
const codeBytes = decodeHex(codeHex.length % 2 < 1 ? codeHex : "0" + codeHex);
|
|
125
|
+
const prefixed = addPrefix(codeBytes, new Uint8Array(content));
|
|
126
|
+
const encoded = encode("base58btc", prefixed);
|
|
127
|
+
return new TextDecoder().decode(encoded);
|
|
128
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
{
|
|
2
|
+
"@context": {
|
|
3
|
+
"id": "@id",
|
|
4
|
+
"type": "@type",
|
|
5
|
+
"@protected": true,
|
|
6
|
+
"Multikey": {
|
|
7
|
+
"@id": "https://w3id.org/security#Multikey",
|
|
8
|
+
"@context": {
|
|
9
|
+
"@protected": true,
|
|
10
|
+
"id": "@id",
|
|
11
|
+
"type": "@type",
|
|
12
|
+
"controller": {
|
|
13
|
+
"@id": "https://w3id.org/security#controller",
|
|
14
|
+
"@type": "@id"
|
|
15
|
+
},
|
|
16
|
+
"revoked": {
|
|
17
|
+
"@id": "https://w3id.org/security#revoked",
|
|
18
|
+
"@type": "http://www.w3.org/2001/XMLSchema#dateTime"
|
|
19
|
+
},
|
|
20
|
+
"expires": {
|
|
21
|
+
"@id": "https://w3id.org/security#expiration",
|
|
22
|
+
"@type": "http://www.w3.org/2001/XMLSchema#dateTime"
|
|
23
|
+
},
|
|
24
|
+
"publicKeyMultibase": {
|
|
25
|
+
"@id": "https://w3id.org/security#publicKeyMultibase",
|
|
26
|
+
"@type": "https://w3id.org/security#multibase"
|
|
27
|
+
},
|
|
28
|
+
"secretKeyMultibase": {
|
|
29
|
+
"@id": "https://w3id.org/security#secretKeyMultibase",
|
|
30
|
+
"@type": "https://w3id.org/security#multibase"
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
{
|
|
2
|
+
"@context": {
|
|
3
|
+
"@protected": true,
|
|
4
|
+
"id": "@id",
|
|
5
|
+
"type": "@type",
|
|
6
|
+
|
|
7
|
+
"alsoKnownAs": {
|
|
8
|
+
"@id": "https://www.w3.org/ns/activitystreams#alsoKnownAs",
|
|
9
|
+
"@type": "@id"
|
|
10
|
+
},
|
|
11
|
+
"assertionMethod": {
|
|
12
|
+
"@id": "https://w3id.org/security#assertionMethod",
|
|
13
|
+
"@type": "@id",
|
|
14
|
+
"@container": "@set"
|
|
15
|
+
},
|
|
16
|
+
"authentication": {
|
|
17
|
+
"@id": "https://w3id.org/security#authenticationMethod",
|
|
18
|
+
"@type": "@id",
|
|
19
|
+
"@container": "@set"
|
|
20
|
+
},
|
|
21
|
+
"capabilityDelegation": {
|
|
22
|
+
"@id": "https://w3id.org/security#capabilityDelegationMethod",
|
|
23
|
+
"@type": "@id",
|
|
24
|
+
"@container": "@set"
|
|
25
|
+
},
|
|
26
|
+
"capabilityInvocation": {
|
|
27
|
+
"@id": "https://w3id.org/security#capabilityInvocationMethod",
|
|
28
|
+
"@type": "@id",
|
|
29
|
+
"@container": "@set"
|
|
30
|
+
},
|
|
31
|
+
"controller": {
|
|
32
|
+
"@id": "https://w3id.org/security#controller",
|
|
33
|
+
"@type": "@id"
|
|
34
|
+
},
|
|
35
|
+
"keyAgreement": {
|
|
36
|
+
"@id": "https://w3id.org/security#keyAgreementMethod",
|
|
37
|
+
"@type": "@id",
|
|
38
|
+
"@container": "@set"
|
|
39
|
+
},
|
|
40
|
+
"service": {
|
|
41
|
+
"@id": "https://www.w3.org/ns/did#service",
|
|
42
|
+
"@type": "@id",
|
|
43
|
+
"@context": {
|
|
44
|
+
"@protected": true,
|
|
45
|
+
"id": "@id",
|
|
46
|
+
"type": "@type",
|
|
47
|
+
"serviceEndpoint": {
|
|
48
|
+
"@id": "https://www.w3.org/ns/did#serviceEndpoint",
|
|
49
|
+
"@type": "@id"
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
"verificationMethod": {
|
|
54
|
+
"@id": "https://w3id.org/security#verificationMethod",
|
|
55
|
+
"@type": "@id"
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
@@ -7,6 +7,8 @@ description: Describes a software application.
|
|
|
7
7
|
defaultContext:
|
|
8
8
|
- "https://www.w3.org/ns/activitystreams"
|
|
9
9
|
- "https://w3id.org/security/v1"
|
|
10
|
+
- "https://www.w3.org/ns/did/v1"
|
|
11
|
+
- "https://w3id.org/security/multikey/v1"
|
|
10
12
|
- manuallyApprovesFollowers: "as:manuallyApprovesFollowers"
|
|
11
13
|
toot: "http://joinmastodon.org/ns#"
|
|
12
14
|
discoverable: "toot:discoverable"
|
|
@@ -38,6 +40,18 @@ properties:
|
|
|
38
40
|
range:
|
|
39
41
|
- "https://w3id.org/security#Key"
|
|
40
42
|
|
|
43
|
+
- pluralName: assertionMethods
|
|
44
|
+
singularName: assertionMethod
|
|
45
|
+
singularAccessor: true
|
|
46
|
+
uri: "https://w3id.org/security#assertionMethod"
|
|
47
|
+
description: |
|
|
48
|
+
Represents this actor's public keys. It serves as equivalent to
|
|
49
|
+
the `publicKeys` property, but is used for [FEP-521a] compliance.
|
|
50
|
+
|
|
51
|
+
[FEP-521a]: https://codeberg.org/fediverse/fep/src/branch/main/fep/521a/fep-521a.md
|
|
52
|
+
range:
|
|
53
|
+
- "https://w3id.org/security#Multikey"
|
|
54
|
+
|
|
41
55
|
- singularName: manuallyApprovesFollowers
|
|
42
56
|
functional: true
|
|
43
57
|
uri: "https://www.w3.org/ns/activitystreams#manuallyApprovesFollowers"
|
|
@@ -67,7 +81,7 @@ properties:
|
|
|
67
81
|
followers, and a specific actor who also follows the recipient actor,
|
|
68
82
|
and the server has failed to de-duplicate the recipients list.
|
|
69
83
|
Such deduplication MUST be performed by comparing the `id` of the activities
|
|
70
|
-
and dropping any activities already seen.
|
|
84
|
+
and dropping any activities already seen.
|
|
71
85
|
range:
|
|
72
86
|
- "https://www.w3.org/ns/activitystreams#OrderedCollection"
|
|
73
87
|
|
package/esm/vocab/group.yaml
CHANGED
|
@@ -7,6 +7,8 @@ description: Represents a formal or informal collective of Actors.
|
|
|
7
7
|
defaultContext:
|
|
8
8
|
- "https://www.w3.org/ns/activitystreams"
|
|
9
9
|
- "https://w3id.org/security/v1"
|
|
10
|
+
- "https://www.w3.org/ns/did/v1"
|
|
11
|
+
- "https://w3id.org/security/multikey/v1"
|
|
10
12
|
- manuallyApprovesFollowers: "as:manuallyApprovesFollowers"
|
|
11
13
|
toot: "http://joinmastodon.org/ns#"
|
|
12
14
|
discoverable: "toot:discoverable"
|
|
@@ -38,6 +40,18 @@ properties:
|
|
|
38
40
|
range:
|
|
39
41
|
- "https://w3id.org/security#Key"
|
|
40
42
|
|
|
43
|
+
- pluralName: assertionMethods
|
|
44
|
+
singularName: assertionMethod
|
|
45
|
+
singularAccessor: true
|
|
46
|
+
uri: "https://w3id.org/security#assertionMethod"
|
|
47
|
+
description: |
|
|
48
|
+
Represents this actor's public keys. It serves as equivalent to
|
|
49
|
+
the `publicKeys` property, but is used for [FEP-521a] compliance.
|
|
50
|
+
|
|
51
|
+
[FEP-521a]: https://codeberg.org/fediverse/fep/src/branch/main/fep/521a/fep-521a.md
|
|
52
|
+
range:
|
|
53
|
+
- "https://w3id.org/security#Multikey"
|
|
54
|
+
|
|
41
55
|
- singularName: manuallyApprovesFollowers
|
|
42
56
|
functional: true
|
|
43
57
|
uri: "https://www.w3.org/ns/activitystreams#manuallyApprovesFollowers"
|
|
@@ -67,7 +81,7 @@ properties:
|
|
|
67
81
|
followers, and a specific actor who also follows the recipient actor,
|
|
68
82
|
and the server has failed to de-duplicate the recipients list.
|
|
69
83
|
Such deduplication MUST be performed by comparing the `id` of the activities
|
|
70
|
-
and dropping any activities already seen.
|
|
84
|
+
and dropping any activities already seen.
|
|
71
85
|
range:
|
|
72
86
|
- "https://www.w3.org/ns/activitystreams#OrderedCollection"
|
|
73
87
|
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
$schema: ../codegen/schema.yaml
|
|
2
|
+
name: Multikey
|
|
3
|
+
uri: "https://w3id.org/security#Multikey"
|
|
4
|
+
entity: true
|
|
5
|
+
description: |
|
|
6
|
+
Represents a key owned by an actor according to [FEP-521a: Representing
|
|
7
|
+
actor's public keys.][1]
|
|
8
|
+
|
|
9
|
+
[1]: https://codeberg.org/fediverse/fep/src/branch/main/fep/521a/fep-521a.md
|
|
10
|
+
defaultContext: "https://w3id.org/security/multikey/v1"
|
|
11
|
+
|
|
12
|
+
properties:
|
|
13
|
+
- singularName: controller
|
|
14
|
+
functional: true
|
|
15
|
+
uri: "https://w3id.org/security#controller"
|
|
16
|
+
description: An actor who owns this key.
|
|
17
|
+
range:
|
|
18
|
+
- "https://www.w3.org/ns/activitystreams#Application"
|
|
19
|
+
- "https://www.w3.org/ns/activitystreams#Group"
|
|
20
|
+
- "https://www.w3.org/ns/activitystreams#Organization"
|
|
21
|
+
- "https://www.w3.org/ns/activitystreams#Person"
|
|
22
|
+
- "https://www.w3.org/ns/activitystreams#Service"
|
|
23
|
+
|
|
24
|
+
- singularName: publicKey
|
|
25
|
+
functional: true
|
|
26
|
+
uri: "https://w3id.org/security#publicKeyMultibase"
|
|
27
|
+
description: |
|
|
28
|
+
A [Multibase]-encoded value of a [Multicodec] prefix and the key.
|
|
29
|
+
|
|
30
|
+
[Multibase]: https://www.w3.org/TR/vc-data-integrity/#multibase-0
|
|
31
|
+
[Multicodec]: https://github.com/multiformats/multicodec/
|
|
32
|
+
range:
|
|
33
|
+
- "fedify:multibaseKey"
|
|
@@ -7,6 +7,8 @@ description: Represents an organization.
|
|
|
7
7
|
defaultContext:
|
|
8
8
|
- "https://www.w3.org/ns/activitystreams"
|
|
9
9
|
- "https://w3id.org/security/v1"
|
|
10
|
+
- "https://www.w3.org/ns/did/v1"
|
|
11
|
+
- "https://w3id.org/security/multikey/v1"
|
|
10
12
|
- manuallyApprovesFollowers: "as:manuallyApprovesFollowers"
|
|
11
13
|
toot: "http://joinmastodon.org/ns#"
|
|
12
14
|
discoverable: "toot:discoverable"
|
|
@@ -38,6 +40,18 @@ properties:
|
|
|
38
40
|
range:
|
|
39
41
|
- "https://w3id.org/security#Key"
|
|
40
42
|
|
|
43
|
+
- pluralName: assertionMethods
|
|
44
|
+
singularName: assertionMethod
|
|
45
|
+
singularAccessor: true
|
|
46
|
+
uri: "https://w3id.org/security#assertionMethod"
|
|
47
|
+
description: |
|
|
48
|
+
Represents this actor's public keys. It serves as equivalent to
|
|
49
|
+
the `publicKeys` property, but is used for [FEP-521a] compliance.
|
|
50
|
+
|
|
51
|
+
[FEP-521a]: https://codeberg.org/fediverse/fep/src/branch/main/fep/521a/fep-521a.md
|
|
52
|
+
range:
|
|
53
|
+
- "https://w3id.org/security#Multikey"
|
|
54
|
+
|
|
41
55
|
- singularName: manuallyApprovesFollowers
|
|
42
56
|
functional: true
|
|
43
57
|
uri: "https://www.w3.org/ns/activitystreams#manuallyApprovesFollowers"
|
|
@@ -67,7 +81,7 @@ properties:
|
|
|
67
81
|
followers, and a specific actor who also follows the recipient actor,
|
|
68
82
|
and the server has failed to de-duplicate the recipients list.
|
|
69
83
|
Such deduplication MUST be performed by comparing the `id` of the activities
|
|
70
|
-
and dropping any activities already seen.
|
|
84
|
+
and dropping any activities already seen.
|
|
71
85
|
range:
|
|
72
86
|
- "https://www.w3.org/ns/activitystreams#OrderedCollection"
|
|
73
87
|
|
package/esm/vocab/person.yaml
CHANGED
|
@@ -7,6 +7,8 @@ description: Represents an individual person.
|
|
|
7
7
|
defaultContext:
|
|
8
8
|
- "https://www.w3.org/ns/activitystreams"
|
|
9
9
|
- "https://w3id.org/security/v1"
|
|
10
|
+
- "https://www.w3.org/ns/did/v1"
|
|
11
|
+
- "https://w3id.org/security/multikey/v1"
|
|
10
12
|
- manuallyApprovesFollowers: "as:manuallyApprovesFollowers"
|
|
11
13
|
toot: "http://joinmastodon.org/ns#"
|
|
12
14
|
discoverable: "toot:discoverable"
|
|
@@ -38,6 +40,18 @@ properties:
|
|
|
38
40
|
range:
|
|
39
41
|
- "https://w3id.org/security#Key"
|
|
40
42
|
|
|
43
|
+
- pluralName: assertionMethods
|
|
44
|
+
singularName: assertionMethod
|
|
45
|
+
singularAccessor: true
|
|
46
|
+
uri: "https://w3id.org/security#assertionMethod"
|
|
47
|
+
description: |
|
|
48
|
+
Represents this actor's public keys. It serves as equivalent to
|
|
49
|
+
the `publicKeys` property, but is used for [FEP-521a] compliance.
|
|
50
|
+
|
|
51
|
+
[FEP-521a]: https://codeberg.org/fediverse/fep/src/branch/main/fep/521a/fep-521a.md
|
|
52
|
+
range:
|
|
53
|
+
- "https://w3id.org/security#Multikey"
|
|
54
|
+
|
|
41
55
|
- singularName: manuallyApprovesFollowers
|
|
42
56
|
functional: true
|
|
43
57
|
uri: "https://www.w3.org/ns/activitystreams#manuallyApprovesFollowers"
|
|
@@ -67,7 +81,7 @@ properties:
|
|
|
67
81
|
followers, and a specific actor who also follows the recipient actor,
|
|
68
82
|
and the server has failed to de-duplicate the recipients list.
|
|
69
83
|
Such deduplication MUST be performed by comparing the `id` of the activities
|
|
70
|
-
and dropping any activities already seen.
|
|
84
|
+
and dropping any activities already seen.
|
|
71
85
|
range:
|
|
72
86
|
- "https://www.w3.org/ns/activitystreams#OrderedCollection"
|
|
73
87
|
|
package/esm/vocab/service.yaml
CHANGED
|
@@ -7,6 +7,8 @@ description: Represents a service of any kind.
|
|
|
7
7
|
defaultContext:
|
|
8
8
|
- "https://www.w3.org/ns/activitystreams"
|
|
9
9
|
- "https://w3id.org/security/v1"
|
|
10
|
+
- "https://www.w3.org/ns/did/v1"
|
|
11
|
+
- "https://w3id.org/security/multikey/v1"
|
|
10
12
|
- manuallyApprovesFollowers: "as:manuallyApprovesFollowers"
|
|
11
13
|
toot: "http://joinmastodon.org/ns#"
|
|
12
14
|
discoverable: "toot:discoverable"
|
|
@@ -38,6 +40,18 @@ properties:
|
|
|
38
40
|
range:
|
|
39
41
|
- "https://w3id.org/security#Key"
|
|
40
42
|
|
|
43
|
+
- pluralName: assertionMethods
|
|
44
|
+
singularName: assertionMethod
|
|
45
|
+
singularAccessor: true
|
|
46
|
+
uri: "https://w3id.org/security#assertionMethod"
|
|
47
|
+
description: |
|
|
48
|
+
Represents this actor's public keys. It serves as equivalent to
|
|
49
|
+
the `publicKeys` property, but is used for [FEP-521a] compliance.
|
|
50
|
+
|
|
51
|
+
[FEP-521a]: https://codeberg.org/fediverse/fep/src/branch/main/fep/521a/fep-521a.md
|
|
52
|
+
range:
|
|
53
|
+
- "https://w3id.org/security#Multikey"
|
|
54
|
+
|
|
41
55
|
- singularName: manuallyApprovesFollowers
|
|
42
56
|
functional: true
|
|
43
57
|
uri: "https://www.w3.org/ns/activitystreams#manuallyApprovesFollowers"
|
|
@@ -67,7 +81,7 @@ properties:
|
|
|
67
81
|
followers, and a specific actor who also follows the recipient actor,
|
|
68
82
|
and the server has failed to de-duplicate the recipients list.
|
|
69
83
|
Such deduplication MUST be performed by comparing the `id` of the activities
|
|
70
|
-
and dropping any activities already seen.
|
|
84
|
+
and dropping any activities already seen.
|
|
71
85
|
range:
|
|
72
86
|
- "https://www.w3.org/ns/activitystreams#OrderedCollection"
|
|
73
87
|
|