Back to packages list

Vals using multiformats/bases/base64

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
// SPDX-License-Identifier: 0BSD
import { compressPoint } from "https://esm.town/v/vladimyr/libec";
import { bytesToMultibase } from "https://esm.town/v/vladimyr/libmultibase";
import { base64url } from "npm:multiformats/bases/base64";
type JWK = {
kty: "EC";
crv: string;
x: string;
y: string;
[propName: string]: unknown;
} | {
kty: "OKP";
crv: string;
x: string;
[propName: string]: unknown;
};
export function jwkToMultibase(jwk: JWK) {
if (jwk.kty === "OKP") {
const bytes = base64url.baseDecode(jwk.x);
return bytesToMultibase(bytes, jwk.crv);
}
if (jwk.kty === "EC") {
const bytes = compressPoint({
x: base64url.baseDecode(jwk.x),
y: base64url.baseDecode(jwk.y),
});
return bytesToMultibase(bytes, jwk.crv);
}
throw new TypeError("error: unsupported key type");
}
export function jwkToDidKey(jwk: JWK) {
const keyMultibase = jwkToMultibase(jwk);
return `did:key:${keyMultibase}`;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import { base64 as b64 } from "npm:multiformats/bases/base64";
export function newValURL(code?: string, base64 = true) {
const url = new URL("https://www.val.town/new");
if (!code) {
return url;
}
if (!base64) {
url.searchParams.set("code", code);
return url;
}
// @see: https://www.val.town/v/easrng/playground?v=343#L703-704
const bytes = new TextEncoder().encode(code);
url.searchParams.set("code64", b64.baseEncode(bytes));
return url;
}
1
Next