@multiplatform.one/gpg 7.18.0 → 7.20.0
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/dist/cjs/GpgProvider.cjs +7 -4
- package/dist/cjs/GpgProvider.native.js +7 -4
- package/dist/cjs/GpgProvider.native.js.map +1 -1
- package/dist/cjs/index.cjs +7 -1
- package/dist/cjs/index.native.js +7 -1
- package/dist/cjs/index.native.js.map +1 -1
- package/dist/cjs/signature.cjs +113 -0
- package/dist/cjs/signature.native.js +124 -0
- package/dist/cjs/signature.native.js.map +1 -0
- package/dist/cjs/signer.cjs +119 -0
- package/dist/cjs/signer.native.js +150 -0
- package/dist/cjs/signer.native.js.map +1 -0
- package/dist/esm/GpgButton.native.js.map +1 -1
- package/dist/esm/GpgContext.native.js.map +1 -1
- package/dist/esm/GpgIcon.native.js.map +1 -1
- package/dist/esm/GpgProvider.mjs +7 -4
- package/dist/esm/GpgProvider.mjs.map +1 -1
- package/dist/esm/GpgProvider.native.js +7 -4
- package/dist/esm/GpgProvider.native.js.map +1 -1
- package/dist/esm/SignInWithGpg.native.js.map +1 -1
- package/dist/esm/index.mjs +2 -1
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/index.native.js +2 -1
- package/dist/esm/index.native.js.map +1 -1
- package/dist/esm/screens.native.js.map +1 -1
- package/dist/esm/signature.mjs +88 -0
- package/dist/esm/signature.mjs.map +1 -0
- package/dist/esm/signature.native.js +96 -0
- package/dist/esm/signature.native.js.map +1 -0
- package/dist/esm/signer.mjs +88 -0
- package/dist/esm/signer.mjs.map +1 -0
- package/dist/esm/signer.native.js +116 -0
- package/dist/esm/signer.native.js.map +1 -0
- package/dist/esm/useGpg.native.js.map +1 -1
- package/package.json +16 -3
- package/src/GpgProvider.tsx +7 -19
- package/src/index.ts +10 -1
- package/src/signature.ts +120 -0
- package/src/signer.ts +142 -0
- package/types/GpgProvider.d.ts.map +1 -1
- package/types/index.d.ts +1 -0
- package/types/index.d.ts.map +1 -1
- package/types/signature.d.ts +6 -0
- package/types/signature.d.ts.map +1 -0
- package/types/signer.d.ts +47 -0
- package/types/signer.d.ts.map +1 -0
package/dist/cjs/GpgProvider.cjs
CHANGED
|
@@ -30,6 +30,7 @@ var import_react = require("react");
|
|
|
30
30
|
var import_react_query = require("@tanstack/react-query");
|
|
31
31
|
var import_connectkit = require("@multiplatform.one/connectkit");
|
|
32
32
|
var import_GpgContext = require("./GpgContext.cjs");
|
|
33
|
+
var import_signer = require("./signer.cjs");
|
|
33
34
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
34
35
|
const GPG_NONCE_QUERY_KEY = "ckGpgNonce";
|
|
35
36
|
const b64 = s => window.btoa(unescape(encodeURIComponent(s)));
|
|
@@ -75,12 +76,14 @@ const GpgProvider = ({
|
|
|
75
76
|
const message = (0, import_react.useMemo)(() => nonce.data ? (buildMessageRef.current ?? defaultBuildMessage)({
|
|
76
77
|
nonce: nonce.data
|
|
77
78
|
}) : null, [nonce.data]);
|
|
78
|
-
const command = (0, import_react.useMemo)(() => message ?
|
|
79
|
+
const command = (0, import_react.useMemo)(() => message ? (0, import_signer.gpgSignCommand)(message) : null, [message]);
|
|
79
80
|
const signIn = async pastedBlob => {
|
|
80
|
-
|
|
81
|
-
|
|
81
|
+
let blob;
|
|
82
|
+
try {
|
|
83
|
+
blob = (0, import_signer.assertGpgSignature)(pastedBlob);
|
|
84
|
+
} catch (error) {
|
|
82
85
|
setStatus(import_GpgContext.GpgStatusState.ERROR);
|
|
83
|
-
throw
|
|
86
|
+
throw error;
|
|
84
87
|
}
|
|
85
88
|
if (!message) {
|
|
86
89
|
setStatus(import_GpgContext.GpgStatusState.ERROR);
|
|
@@ -33,6 +33,7 @@ var import_react = require("react");
|
|
|
33
33
|
var import_react_query = require("@tanstack/react-query");
|
|
34
34
|
var import_connectkit = require("@multiplatform.one/connectkit");
|
|
35
35
|
var import_GpgContext = require("./GpgContext.native.js");
|
|
36
|
+
var import_signer = require("./signer.native.js");
|
|
36
37
|
var GPG_NONCE_QUERY_KEY = "ckGpgNonce";
|
|
37
38
|
var b64 = function b642(s) {
|
|
38
39
|
return window.btoa(unescape(encodeURIComponent(s)));
|
|
@@ -89,13 +90,15 @@ var GpgProvider = function GpgProvider2(param) {
|
|
|
89
90
|
}) : null;
|
|
90
91
|
}, [nonce.data]);
|
|
91
92
|
var command = (0, import_react.useMemo)(function () {
|
|
92
|
-
return message ?
|
|
93
|
+
return message ? (0, import_signer.gpgSignCommand)(message) : null;
|
|
93
94
|
}, [message]);
|
|
94
95
|
var signIn = async function signIn2(pastedBlob) {
|
|
95
|
-
var blob
|
|
96
|
-
|
|
96
|
+
var blob;
|
|
97
|
+
try {
|
|
98
|
+
blob = (0, import_signer.assertGpgSignature)(pastedBlob);
|
|
99
|
+
} catch (error) {
|
|
97
100
|
setStatus(import_GpgContext.GpgStatusState.ERROR);
|
|
98
|
-
throw
|
|
101
|
+
throw error;
|
|
99
102
|
}
|
|
100
103
|
if (!message) {
|
|
101
104
|
setStatus(import_GpgContext.GpgStatusState.ERROR);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["__defProp","Object","defineProperty","__getOwnPropDesc","getOwnPropertyDescriptor","__getOwnPropNames","getOwnPropertyNames","__hasOwnProp","prototype","hasOwnProperty","__export","target","all","name","get","enumerable","__copyProps","to","from","except","desc","key","call","__toCommonJS","mod","value","GpgProvider_exports","GPG_NONCE_QUERY_KEY","GpgProvider","module","exports","import_jsx_runtime","require","import_react","import_react_query","import_connectkit","import_GpgContext","b64","b642","s","window","btoa","unescape","encodeURIComponent","defaultBuildMessage","param","nonce","location","host","origin","Date","toISOString","GpgProvider2","children","enabled","nonceRefetchInterval","buildMessage","onSignIn","gpgConfig","status","setStatus","useState","GpgStatusState","READY","resetStatus","resetStatus2","useContext","GpgContext","Error","Context","useQuery","queryKey","queryFn","getNonce","refetchInterval","refetchOnWindowFocus","refetchOnReconnect","staleTime","Infinity","buildMessageRef","useRef","current","message","useMemo","_buildMessageRef_current","data","command","replace","signIn","signIn2","pastedBlob","blob","trim","includes","ERROR","LOADING","result","onSign","username","password","SUCCESS","error","jsx","Provider"],"sources":["GpgProvider.native.js"],"sourcesContent":["\"use strict\";\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\nvar GpgProvider_exports = {};\n__export(GpgProvider_exports, {\n GPG_NONCE_QUERY_KEY: () => GPG_NONCE_QUERY_KEY,\n GpgProvider: () => GpgProvider\n});\nmodule.exports = __toCommonJS(GpgProvider_exports);\nvar import_jsx_runtime = require(\"react/jsx-runtime\");\nvar import_react = require(\"react\");\nvar import_react_query = require(\"@tanstack/react-query\");\nvar import_connectkit = require(\"@multiplatform.one/connectkit\");\nvar import_GpgContext = require(\"./GpgContext\");\nvar GPG_NONCE_QUERY_KEY = \"ckGpgNonce\";\nvar b64 = function b642(s) {\n return window.btoa(unescape(encodeURIComponent(s)));\n};\nfunction defaultBuildMessage(param) {\n var { nonce } = param;\n return `${window.location.host} wants you to sign in with your GPG key.\n\nURI: ${window.location.origin}\nVersion: 1\nNonce: ${nonce}\nIssued At: ${(/* @__PURE__ */ new Date()).toISOString()}`;\n}\nvar GpgProvider = function GpgProvider2(param) {\n var { children, enabled = true, nonceRefetchInterval = false, buildMessage, onSignIn, ...gpgConfig } = param;\n var [status, setStatus] = (0, import_react.useState)(import_GpgContext.GpgStatusState.READY);\n var resetStatus = function resetStatus2() {\n return setStatus(import_GpgContext.GpgStatusState.READY);\n };\n if ((0, import_react.useContext)(import_GpgContext.GpgContext)) {\n throw new Error(\"Multiple, nested usages of GpgProvider detected. Please use only one.\");\n }\n if ((0, import_react.useContext)(import_connectkit.Context)) {\n throw new Error(\"ConnectKitProvider must be mounted inside GpgProvider.\");\n }\n var nonce = (0, import_react_query.useQuery)({\n queryKey: [\n GPG_NONCE_QUERY_KEY\n ],\n queryFn: function queryFn() {\n return gpgConfig.getNonce();\n },\n refetchInterval: nonceRefetchInterval,\n // The challenge the user signs MUST equal the one we submit. Never refetch the nonce\n // out from under an in-flight signature — especially on window-focus, which fires every\n // time the user tabs to their terminal to run gpg and back.\n refetchOnWindowFocus: false,\n refetchOnReconnect: false,\n staleTime: Infinity\n });\n var buildMessageRef = (0, import_react.useRef)(buildMessage);\n buildMessageRef.current = buildMessage;\n var message = (0, import_react.useMemo)(function() {\n var _buildMessageRef_current;\n return nonce.data ? ((_buildMessageRef_current = buildMessageRef.current) !== null && _buildMessageRef_current !== void 0 ? _buildMessageRef_current : defaultBuildMessage)({\n nonce: nonce.data\n }) : null;\n }, [\n nonce.data\n ]);\n var command = (0, import_react.useMemo)(function() {\n return message ? `{ printf %s '${message.replace(/'/g, \"'\\\\''\")}' | gpg --detach-sign --armor; gpg --armor --export; }` : null;\n }, [\n message\n ]);\n var signIn = async function signIn2(pastedBlob) {\n var blob = pastedBlob.trim();\n if (!blob.includes(\"-----BEGIN PGP SIGNATURE-----\") || !blob.includes(\"-----BEGIN PGP PUBLIC KEY BLOCK-----\")) {\n setStatus(import_GpgContext.GpgStatusState.ERROR);\n throw new Error(\"Paste the FULL output \\u2014 it must contain both a PGP SIGNATURE and a PUBLIC KEY block.\");\n }\n if (!message) {\n setStatus(import_GpgContext.GpgStatusState.ERROR);\n throw new Error(\"Could not fetch nonce\");\n }\n try {\n setStatus(import_GpgContext.GpgStatusState.LOADING);\n var result = await gpgConfig.onSign({\n username: b64(blob),\n password: b64(message),\n message\n });\n if (result === false) throw new Error(\"GPG sign-in was rejected\");\n setStatus(import_GpgContext.GpgStatusState.SUCCESS);\n onSignIn === null || onSignIn === void 0 ? void 0 : onSignIn();\n return true;\n } catch (error) {\n setStatus(import_GpgContext.GpgStatusState.ERROR);\n throw error;\n }\n };\n return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_GpgContext.GpgContext.Provider, {\n value: {\n enabled,\n nonceRefetchInterval,\n buildMessage,\n ...gpgConfig,\n nonce,\n message,\n command,\n status,\n signIn,\n resetStatus\n },\n children\n });\n};\n//# sourceMappingURL=GpgProvider.js.map\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["__defProp","Object","defineProperty","__getOwnPropDesc","getOwnPropertyDescriptor","__getOwnPropNames","getOwnPropertyNames","__hasOwnProp","prototype","hasOwnProperty","__export","target","all","name","get","enumerable","__copyProps","to","from","except","desc","key","call","__toCommonJS","mod","value","GpgProvider_exports","GPG_NONCE_QUERY_KEY","GpgProvider","module","exports","import_jsx_runtime","require","import_react","import_react_query","import_connectkit","import_GpgContext","import_signer","b64","b642","s","window","btoa","unescape","encodeURIComponent","defaultBuildMessage","param","nonce","location","host","origin","Date","toISOString","GpgProvider2","children","enabled","nonceRefetchInterval","buildMessage","onSignIn","gpgConfig","status","setStatus","useState","GpgStatusState","READY","resetStatus","resetStatus2","useContext","GpgContext","Error","Context","useQuery","queryKey","queryFn","getNonce","refetchInterval","refetchOnWindowFocus","refetchOnReconnect","staleTime","Infinity","buildMessageRef","useRef","current","message","useMemo","_buildMessageRef_current","data","command","gpgSignCommand","signIn","signIn2","pastedBlob","blob","assertGpgSignature","error","ERROR","LOADING","result","onSign","username","password","SUCCESS","jsx","Provider"],"sources":["GpgProvider.native.js"],"sourcesContent":["\"use strict\";\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\nvar GpgProvider_exports = {};\n__export(GpgProvider_exports, {\n GPG_NONCE_QUERY_KEY: () => GPG_NONCE_QUERY_KEY,\n GpgProvider: () => GpgProvider\n});\nmodule.exports = __toCommonJS(GpgProvider_exports);\nvar import_jsx_runtime = require(\"react/jsx-runtime\");\nvar import_react = require(\"react\");\nvar import_react_query = require(\"@tanstack/react-query\");\nvar import_connectkit = require(\"@multiplatform.one/connectkit\");\nvar import_GpgContext = require(\"./GpgContext\");\nvar import_signer = require(\"./signer\");\nvar GPG_NONCE_QUERY_KEY = \"ckGpgNonce\";\nvar b64 = function b642(s) {\n return window.btoa(unescape(encodeURIComponent(s)));\n};\nfunction defaultBuildMessage(param) {\n var { nonce } = param;\n return `${window.location.host} wants you to sign in with your GPG key.\n\nURI: ${window.location.origin}\nVersion: 1\nNonce: ${nonce}\nIssued At: ${(/* @__PURE__ */ new Date()).toISOString()}`;\n}\nvar GpgProvider = function GpgProvider2(param) {\n var { children, enabled = true, nonceRefetchInterval = false, buildMessage, onSignIn, ...gpgConfig } = param;\n var [status, setStatus] = (0, import_react.useState)(import_GpgContext.GpgStatusState.READY);\n var resetStatus = function resetStatus2() {\n return setStatus(import_GpgContext.GpgStatusState.READY);\n };\n if ((0, import_react.useContext)(import_GpgContext.GpgContext)) {\n throw new Error(\"Multiple, nested usages of GpgProvider detected. Please use only one.\");\n }\n if ((0, import_react.useContext)(import_connectkit.Context)) {\n throw new Error(\"ConnectKitProvider must be mounted inside GpgProvider.\");\n }\n var nonce = (0, import_react_query.useQuery)({\n queryKey: [\n GPG_NONCE_QUERY_KEY\n ],\n queryFn: function queryFn() {\n return gpgConfig.getNonce();\n },\n refetchInterval: nonceRefetchInterval,\n // The challenge the user signs MUST equal the one we submit. Never refetch the nonce\n // out from under an in-flight signature — especially on window-focus, which fires every\n // time the user tabs to their terminal to run gpg and back.\n refetchOnWindowFocus: false,\n refetchOnReconnect: false,\n staleTime: Infinity\n });\n var buildMessageRef = (0, import_react.useRef)(buildMessage);\n buildMessageRef.current = buildMessage;\n var message = (0, import_react.useMemo)(function() {\n var _buildMessageRef_current;\n return nonce.data ? ((_buildMessageRef_current = buildMessageRef.current) !== null && _buildMessageRef_current !== void 0 ? _buildMessageRef_current : defaultBuildMessage)({\n nonce: nonce.data\n }) : null;\n }, [\n nonce.data\n ]);\n var command = (0, import_react.useMemo)(function() {\n return message ? (0, import_signer.gpgSignCommand)(message) : null;\n }, [\n message\n ]);\n var signIn = async function signIn2(pastedBlob) {\n var blob;\n try {\n blob = (0, import_signer.assertGpgSignature)(pastedBlob);\n } catch (error) {\n setStatus(import_GpgContext.GpgStatusState.ERROR);\n throw error;\n }\n if (!message) {\n setStatus(import_GpgContext.GpgStatusState.ERROR);\n throw new Error(\"Could not fetch nonce\");\n }\n try {\n setStatus(import_GpgContext.GpgStatusState.LOADING);\n var result = await gpgConfig.onSign({\n username: b64(blob),\n password: b64(message),\n message\n });\n if (result === false) throw new Error(\"GPG sign-in was rejected\");\n setStatus(import_GpgContext.GpgStatusState.SUCCESS);\n onSignIn === null || onSignIn === void 0 ? void 0 : onSignIn();\n return true;\n } catch (error) {\n setStatus(import_GpgContext.GpgStatusState.ERROR);\n throw error;\n }\n };\n return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_GpgContext.GpgContext.Provider, {\n value: {\n enabled,\n nonceRefetchInterval,\n buildMessage,\n ...gpgConfig,\n nonce,\n message,\n command,\n status,\n signIn,\n resetStatus\n },\n children\n });\n};\n//# sourceMappingURL=GpgProvider.js.map\n"],"mappings":"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","ignoreList":[]}
|
package/dist/cjs/index.cjs
CHANGED
|
@@ -42,11 +42,17 @@ __export(index_exports, {
|
|
|
42
42
|
GpgStatusState: () => import_GpgContext.GpgStatusState,
|
|
43
43
|
SignInWithGpg: () => import_SignInWithGpg.default,
|
|
44
44
|
SignInWithGpgButton: () => import_GpgButton.default,
|
|
45
|
+
assertGpgSignature: () => import_signer.assertGpgSignature,
|
|
46
|
+
createGpgSigner: () => import_signer.createGpgSigner,
|
|
45
47
|
gpgScreen: () => import_screens.gpgScreen,
|
|
46
|
-
|
|
48
|
+
gpgSignCommand: () => import_signer.gpgSignCommand,
|
|
49
|
+
gpgSignatureCovers: () => import_signer.gpgSignatureCovers,
|
|
50
|
+
useGpg: () => import_useGpg.useGpg,
|
|
51
|
+
useGpgSigner: () => import_signer.useGpgSigner
|
|
47
52
|
});
|
|
48
53
|
module.exports = __toCommonJS(index_exports);
|
|
49
54
|
var import_useGpg = require("./useGpg.cjs");
|
|
55
|
+
var import_signer = require("./signer.cjs");
|
|
50
56
|
var import_GpgProvider = require("./GpgProvider.cjs");
|
|
51
57
|
var import_GpgContext = require("./GpgContext.cjs");
|
|
52
58
|
var import_SignInWithGpg = __toESM(require("./SignInWithGpg.cjs"));
|
package/dist/cjs/index.native.js
CHANGED
|
@@ -44,11 +44,17 @@ __export(index_exports, {
|
|
|
44
44
|
GpgStatusState: () => import_GpgContext.GpgStatusState,
|
|
45
45
|
SignInWithGpg: () => import_SignInWithGpg.default,
|
|
46
46
|
SignInWithGpgButton: () => import_GpgButton.default,
|
|
47
|
+
assertGpgSignature: () => import_signer.assertGpgSignature,
|
|
48
|
+
createGpgSigner: () => import_signer.createGpgSigner,
|
|
47
49
|
gpgScreen: () => import_screens.gpgScreen,
|
|
48
|
-
|
|
50
|
+
gpgSignCommand: () => import_signer.gpgSignCommand,
|
|
51
|
+
gpgSignatureCovers: () => import_signer.gpgSignatureCovers,
|
|
52
|
+
useGpg: () => import_useGpg.useGpg,
|
|
53
|
+
useGpgSigner: () => import_signer.useGpgSigner
|
|
49
54
|
});
|
|
50
55
|
module.exports = __toCommonJS(index_exports);
|
|
51
56
|
var import_useGpg = require("./useGpg.native.js");
|
|
57
|
+
var import_signer = require("./signer.native.js");
|
|
52
58
|
var import_GpgProvider = require("./GpgProvider.native.js");
|
|
53
59
|
var import_GpgContext = require("./GpgContext.native.js");
|
|
54
60
|
var import_SignInWithGpg = __toESM(require("./SignInWithGpg.native.js"));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["__create","Object","create","__defProp","defineProperty","__getOwnPropDesc","getOwnPropertyDescriptor","__getOwnPropNames","getOwnPropertyNames","__getProtoOf","getPrototypeOf","__hasOwnProp","prototype","hasOwnProperty","__export","target","all","name","get","enumerable","__copyProps","to","from","except","desc","key","call","__toESM","mod","isNodeMode","__esModule","value","__toCommonJS","index_exports","GPGButton","import_GpgButton","GPG_NONCE_QUERY_KEY","import_GpgProvider","GpgBridge","import_screens","GpgContext","import_GpgContext","GpgProvider","GpgScreenRegistrar","GpgStatusState","SignInWithGpg","import_SignInWithGpg","default","SignInWithGpgButton","gpgScreen","useGpg","import_useGpg","module","exports","require"],"sources":["index.native.js"],"sourcesContent":["\"use strict\";\nvar __create = Object.create;\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __getProtoOf = Object.getPrototypeOf;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(\n // If the importer is in node compatibility mode or this is not an ESM\n // file that has been converted to a CommonJS file using a Babel-\n // compatible transform (i.e. \"__esModule\" has not been set), then set\n // \"default\" to the CommonJS \"module.exports\" for node compatibility.\n isNodeMode || !mod || !mod.__esModule ? __defProp(target, \"default\", { value: mod, enumerable: true }) : target,\n mod\n));\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\nvar index_exports = {};\n__export(index_exports, {\n GPGButton: () => import_GpgButton.GPGButton,\n GPG_NONCE_QUERY_KEY: () => import_GpgProvider.GPG_NONCE_QUERY_KEY,\n GpgBridge: () => import_screens.GpgBridge,\n GpgContext: () => import_GpgContext.GpgContext,\n GpgProvider: () => import_GpgProvider.GpgProvider,\n GpgScreenRegistrar: () => import_screens.GpgScreenRegistrar,\n GpgStatusState: () => import_GpgContext.GpgStatusState,\n SignInWithGpg: () => import_SignInWithGpg.default,\n SignInWithGpgButton: () => import_GpgButton.default,\n gpgScreen: () => import_screens.gpgScreen,\n useGpg: () => import_useGpg.useGpg\n});\nmodule.exports = __toCommonJS(index_exports);\nvar import_useGpg = require(\"./useGpg\");\nvar import_GpgProvider = require(\"./GpgProvider\");\nvar import_GpgContext = require(\"./GpgContext\");\nvar import_SignInWithGpg = __toESM(require(\"./SignInWithGpg\"));\nvar import_GpgButton = __toESM(require(\"./GpgButton\"));\nvar import_screens = require(\"./screens\");\n//# sourceMappingURL=index.js.map\n"],"mappings":"AAAA,YAAY;;AACZ,IAAIA,QAAQ,GAAGC,MAAM,CAACC,MAAM;AAC5B,IAAIC,SAAS,GAAGF,MAAM,CAACG,cAAc;AACrC,IAAIC,gBAAgB,GAAGJ,MAAM,CAACK,wBAAwB;AACtD,IAAIC,iBAAiB,GAAGN,MAAM,CAACO,mBAAmB;AAClD,IAAIC,YAAY,GAAGR,MAAM,CAACS,cAAc;AACxC,IAAIC,YAAY,GAAGV,MAAM,CAACW,SAAS,CAACC,cAAc;AAClD,IAAIC,QAAQ,GAAGA,CAACC,MAAM,EAAEC,GAAG,KAAK;EAC9B,KAAK,IAAIC,IAAI,IAAID,GAAG,EAClBb,SAAS,CAACY,MAAM,EAAEE,IAAI,EAAE;IAAEC,GAAG,EAAEF,GAAG,CAACC,IAAI,CAAC;IAAEE,UAAU,EAAE;EAAK,CAAC,CAAC;AACjE,CAAC;AACD,IAAIC,WAAW,GAAGA,CAACC,EAAE,EAAEC,IAAI,EAAEC,MAAM,EAAEC,IAAI,KAAK;EAC5C,IAAIF,IAAI,IAAI,OAAOA,IAAI,KAAK,QAAQ,IAAI,OAAOA,IAAI,KAAK,UAAU,EAAE;IAClE,KAAK,IAAIG,GAAG,IAAIlB,iBAAiB,CAACe,IAAI,CAAC,EACrC,IAAI,CAACX,YAAY,CAACe,IAAI,CAACL,EAAE,EAAEI,GAAG,CAAC,IAAIA,GAAG,KAAKF,MAAM,EAC/CpB,SAAS,CAACkB,EAAE,EAAEI,GAAG,EAAE;MAAEP,GAAG,EAAEA,CAAA,KAAMI,IAAI,CAACG,GAAG,CAAC;MAAEN,UAAU,EAAE,EAAEK,IAAI,GAAGnB,gBAAgB,CAACiB,IAAI,EAAEG,GAAG,CAAC,CAAC,IAAID,IAAI,CAACL;IAAW,CAAC,CAAC;EACxH;EACA,OAAOE,EAAE;AACX,CAAC;AACD,IAAIM,OAAO,GAAGA,CAACC,GAAG,EAAEC,UAAU,EAAEd,MAAM,MAAMA,MAAM,GAAGa,GAAG,IAAI,IAAI,GAAG5B,QAAQ,CAACS,YAAY,CAACmB,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAER,WAAW;AAC9G;AACA;AACA;AACA;AACAS,UAAU,IAAI,CAACD,GAAG,IAAI,CAACA,GAAG,CAACE,UAAU,GAAG3B,SAAS,CAACY,MAAM,EAAE,SAAS,EAAE;EAAEgB,KAAK,EAAEH,GAAG;EAAET,UAAU,EAAE;AAAK,CAAC,CAAC,GAAGJ,MAAM,EAC/Ga,GACF,CAAC,CAAC;AACF,IAAII,YAAY,GAAIJ,GAAG,IAAKR,WAAW,CAACjB,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE;EAAE4B,KAAK,EAAE;AAAK,CAAC,CAAC,EAAEH,GAAG,CAAC;AAC1F,IAAIK,aAAa,GAAG,CAAC,CAAC;AACtBnB,QAAQ,CAACmB,aAAa,EAAE;EACtBC,SAAS,EAAEA,CAAA,KAAMC,gBAAgB,CAACD,SAAS;EAC3CE,mBAAmB,EAAEA,CAAA,KAAMC,kBAAkB,CAACD,mBAAmB;EACjEE,SAAS,EAAEA,CAAA,KAAMC,cAAc,CAACD,SAAS;EACzCE,UAAU,EAAEA,CAAA,KAAMC,iBAAiB,CAACD,UAAU;EAC9CE,WAAW,EAAEA,CAAA,KAAML,kBAAkB,CAACK,WAAW;EACjDC,kBAAkB,EAAEA,CAAA,KAAMJ,cAAc,CAACI,kBAAkB;EAC3DC,cAAc,EAAEA,CAAA,KAAMH,iBAAiB,CAACG,cAAc;EACtDC,aAAa,EAAEA,CAAA,KAAMC,oBAAoB,CAACC,OAAO;EACjDC,mBAAmB,EAAEA,CAAA,KAAMb,gBAAgB,CAACY,OAAO;EACnDE,SAAS,EAAEA,CAAA,
|
|
1
|
+
{"version":3,"names":["__create","Object","create","__defProp","defineProperty","__getOwnPropDesc","getOwnPropertyDescriptor","__getOwnPropNames","getOwnPropertyNames","__getProtoOf","getPrototypeOf","__hasOwnProp","prototype","hasOwnProperty","__export","target","all","name","get","enumerable","__copyProps","to","from","except","desc","key","call","__toESM","mod","isNodeMode","__esModule","value","__toCommonJS","index_exports","GPGButton","import_GpgButton","GPG_NONCE_QUERY_KEY","import_GpgProvider","GpgBridge","import_screens","GpgContext","import_GpgContext","GpgProvider","GpgScreenRegistrar","GpgStatusState","SignInWithGpg","import_SignInWithGpg","default","SignInWithGpgButton","assertGpgSignature","import_signer","createGpgSigner","gpgScreen","gpgSignCommand","gpgSignatureCovers","useGpg","import_useGpg","useGpgSigner","module","exports","require"],"sources":["index.native.js"],"sourcesContent":["\"use strict\";\nvar __create = Object.create;\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __getProtoOf = Object.getPrototypeOf;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(\n // If the importer is in node compatibility mode or this is not an ESM\n // file that has been converted to a CommonJS file using a Babel-\n // compatible transform (i.e. \"__esModule\" has not been set), then set\n // \"default\" to the CommonJS \"module.exports\" for node compatibility.\n isNodeMode || !mod || !mod.__esModule ? __defProp(target, \"default\", { value: mod, enumerable: true }) : target,\n mod\n));\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\nvar index_exports = {};\n__export(index_exports, {\n GPGButton: () => import_GpgButton.GPGButton,\n GPG_NONCE_QUERY_KEY: () => import_GpgProvider.GPG_NONCE_QUERY_KEY,\n GpgBridge: () => import_screens.GpgBridge,\n GpgContext: () => import_GpgContext.GpgContext,\n GpgProvider: () => import_GpgProvider.GpgProvider,\n GpgScreenRegistrar: () => import_screens.GpgScreenRegistrar,\n GpgStatusState: () => import_GpgContext.GpgStatusState,\n SignInWithGpg: () => import_SignInWithGpg.default,\n SignInWithGpgButton: () => import_GpgButton.default,\n assertGpgSignature: () => import_signer.assertGpgSignature,\n createGpgSigner: () => import_signer.createGpgSigner,\n gpgScreen: () => import_screens.gpgScreen,\n gpgSignCommand: () => import_signer.gpgSignCommand,\n gpgSignatureCovers: () => import_signer.gpgSignatureCovers,\n useGpg: () => import_useGpg.useGpg,\n useGpgSigner: () => import_signer.useGpgSigner\n});\nmodule.exports = __toCommonJS(index_exports);\nvar import_useGpg = require(\"./useGpg\");\nvar import_signer = require(\"./signer\");\nvar import_GpgProvider = require(\"./GpgProvider\");\nvar import_GpgContext = require(\"./GpgContext\");\nvar import_SignInWithGpg = __toESM(require(\"./SignInWithGpg\"));\nvar import_GpgButton = __toESM(require(\"./GpgButton\"));\nvar import_screens = require(\"./screens\");\n//# sourceMappingURL=index.js.map\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all) __defProp(target, name, {
|
|
7
|
+
get: all[name],
|
|
8
|
+
enumerable: true
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
|
|
14
|
+
get: () => from[key],
|
|
15
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
|
|
21
|
+
value: true
|
|
22
|
+
}), mod);
|
|
23
|
+
var signature_exports = {};
|
|
24
|
+
__export(signature_exports, {
|
|
25
|
+
gpgSignatureCovers: () => gpgSignatureCovers
|
|
26
|
+
});
|
|
27
|
+
module.exports = __toCommonJS(signature_exports);
|
|
28
|
+
var import_legacy = require("@noble/hashes/legacy.js");
|
|
29
|
+
var import_sha2 = require("@noble/hashes/sha2.js");
|
|
30
|
+
const BEGIN = "-----BEGIN PGP SIGNATURE-----";
|
|
31
|
+
const END = "-----END PGP SIGNATURE-----";
|
|
32
|
+
const hashes = {
|
|
33
|
+
2: import_legacy.sha1,
|
|
34
|
+
3: import_legacy.ripemd160,
|
|
35
|
+
8: import_sha2.sha256,
|
|
36
|
+
9: import_sha2.sha384,
|
|
37
|
+
10: import_sha2.sha512,
|
|
38
|
+
11: import_sha2.sha224
|
|
39
|
+
};
|
|
40
|
+
function dearmor(text) {
|
|
41
|
+
const start = text.indexOf(BEGIN);
|
|
42
|
+
const end = text.indexOf(END, start);
|
|
43
|
+
if (start < 0 || end < 0) throw new Error("No PGP SIGNATURE block in the paste");
|
|
44
|
+
const lines = text.slice(start + BEGIN.length, end).split(/\r?\n/).map(line => line.trim());
|
|
45
|
+
const blank = lines.indexOf("", 1);
|
|
46
|
+
const hasHeaders = lines.slice(1, blank < 0 ? 0 : blank).some(line => line.includes(": "));
|
|
47
|
+
const body = (hasHeaders ? lines.slice(blank) : lines).filter(line => line && !/^=[A-Za-z0-9+/]{4}$/.test(line));
|
|
48
|
+
const binary = atob(body.join(""));
|
|
49
|
+
return Uint8Array.from(binary, c => c.charCodeAt(0));
|
|
50
|
+
}
|
|
51
|
+
function signaturePackets(bytes) {
|
|
52
|
+
const packets = [];
|
|
53
|
+
let at = 0;
|
|
54
|
+
while (at < bytes.length) {
|
|
55
|
+
const ctb = bytes[at++];
|
|
56
|
+
if (!(ctb & 128)) throw new Error("The PGP SIGNATURE block is not OpenPGP data");
|
|
57
|
+
let tag;
|
|
58
|
+
let length;
|
|
59
|
+
if (ctb & 64) {
|
|
60
|
+
tag = ctb & 63;
|
|
61
|
+
const first = bytes[at++];
|
|
62
|
+
if (first < 192) length = first;else if (first < 224) length = (first - 192 << 8) + bytes[at++] + 192;else if (first === 255) {
|
|
63
|
+
length = new DataView(bytes.buffer, bytes.byteOffset + at, 4).getUint32(0);
|
|
64
|
+
at += 4;
|
|
65
|
+
} else throw new Error("Partial-length PGP packets are not a detached signature");
|
|
66
|
+
} else {
|
|
67
|
+
tag = ctb >> 2 & 15;
|
|
68
|
+
const size = [1, 2, 4][ctb & 3];
|
|
69
|
+
if (size === void 0) throw new Error("Indeterminate-length PGP packets are not supported");
|
|
70
|
+
length = 0;
|
|
71
|
+
for (let i = 0; i < size; i++) length = length * 256 + bytes[at++];
|
|
72
|
+
}
|
|
73
|
+
if (at + length > bytes.length) throw new Error("The PGP SIGNATURE block is truncated");
|
|
74
|
+
if (tag === 2) packets.push(bytes.subarray(at, at + length));
|
|
75
|
+
at += length;
|
|
76
|
+
}
|
|
77
|
+
return packets;
|
|
78
|
+
}
|
|
79
|
+
function quickCheck(packet, message) {
|
|
80
|
+
if (packet[0] !== 4) {
|
|
81
|
+
throw new Error(`A version ${packet[0]} PGP signature cannot be checked here; sign with a v4 key`);
|
|
82
|
+
}
|
|
83
|
+
const sigType = packet[1];
|
|
84
|
+
if (sigType !== 0 && sigType !== 1) {
|
|
85
|
+
throw new Error(`PGP signature type 0x${sigType.toString(16)} is not a document signature`);
|
|
86
|
+
}
|
|
87
|
+
const hash = hashes[packet[3]];
|
|
88
|
+
if (!hash) throw new Error(`PGP hash algorithm ${packet[3]} is not supported`);
|
|
89
|
+
const hashedEnd = 6 + (packet[4] << 8 | packet[5]);
|
|
90
|
+
const unhashedLength = packet[hashedEnd] << 8 | packet[hashedEnd + 1];
|
|
91
|
+
const left16 = hashedEnd + 2 + unhashedLength;
|
|
92
|
+
if (left16 + 2 > packet.length) throw new Error("The PGP signature packet is truncated");
|
|
93
|
+
const data = sigType === 1 ? new TextEncoder().encode(new TextDecoder().decode(message).replace(/\r?\n/g, "\n").replace(/\n/g, "\r\n")) : message;
|
|
94
|
+
const trailer = new Uint8Array(6);
|
|
95
|
+
trailer[0] = 4;
|
|
96
|
+
trailer[1] = 255;
|
|
97
|
+
new DataView(trailer.buffer).setUint32(2, hashedEnd);
|
|
98
|
+
const input = new Uint8Array(data.length + hashedEnd + trailer.length);
|
|
99
|
+
input.set(data, 0);
|
|
100
|
+
input.set(packet.subarray(0, hashedEnd), data.length);
|
|
101
|
+
input.set(trailer, data.length + hashedEnd);
|
|
102
|
+
const digest = hash(input);
|
|
103
|
+
return [packet[left16] << 8 | packet[left16 + 1], digest[0] << 8 | digest[1]];
|
|
104
|
+
}
|
|
105
|
+
function gpgSignatureCovers(blob, message) {
|
|
106
|
+
const packets = signaturePackets(dearmor(blob));
|
|
107
|
+
if (!packets.length) throw new Error("The PGP SIGNATURE block holds no signature");
|
|
108
|
+
const bytes = new TextEncoder().encode(message);
|
|
109
|
+
return packets.every(packet => {
|
|
110
|
+
const [expected, actual] = quickCheck(packet, bytes);
|
|
111
|
+
return expected === actual;
|
|
112
|
+
});
|
|
113
|
+
}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all) __defProp(target, name, {
|
|
9
|
+
get: all[name],
|
|
10
|
+
enumerable: true
|
|
11
|
+
});
|
|
12
|
+
};
|
|
13
|
+
var __copyProps = (to, from, except, desc) => {
|
|
14
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
15
|
+
for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
|
|
16
|
+
get: () => from[key],
|
|
17
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
return to;
|
|
21
|
+
};
|
|
22
|
+
var __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
|
|
23
|
+
value: true
|
|
24
|
+
}), mod);
|
|
25
|
+
var signature_exports = {};
|
|
26
|
+
__export(signature_exports, {
|
|
27
|
+
gpgSignatureCovers: () => gpgSignatureCovers
|
|
28
|
+
});
|
|
29
|
+
module.exports = __toCommonJS(signature_exports);
|
|
30
|
+
var import_legacy = require("@noble/hashes/legacy.js");
|
|
31
|
+
var import_sha2 = require("@noble/hashes/sha2.js");
|
|
32
|
+
var BEGIN = "-----BEGIN PGP SIGNATURE-----";
|
|
33
|
+
var END = "-----END PGP SIGNATURE-----";
|
|
34
|
+
var hashes = {
|
|
35
|
+
2: import_legacy.sha1,
|
|
36
|
+
3: import_legacy.ripemd160,
|
|
37
|
+
8: import_sha2.sha256,
|
|
38
|
+
9: import_sha2.sha384,
|
|
39
|
+
10: import_sha2.sha512,
|
|
40
|
+
11: import_sha2.sha224
|
|
41
|
+
};
|
|
42
|
+
function dearmor(text) {
|
|
43
|
+
var start = text.indexOf(BEGIN);
|
|
44
|
+
var end = text.indexOf(END, start);
|
|
45
|
+
if (start < 0 || end < 0) throw new Error("No PGP SIGNATURE block in the paste");
|
|
46
|
+
var lines = text.slice(start + BEGIN.length, end).split(/\r?\n/).map(function (line) {
|
|
47
|
+
return line.trim();
|
|
48
|
+
});
|
|
49
|
+
var blank = lines.indexOf("", 1);
|
|
50
|
+
var hasHeaders = lines.slice(1, blank < 0 ? 0 : blank).some(function (line) {
|
|
51
|
+
return line.includes(": ");
|
|
52
|
+
});
|
|
53
|
+
var body = (hasHeaders ? lines.slice(blank) : lines).filter(function (line) {
|
|
54
|
+
return line && !/^=[A-Za-z0-9+/]{4}$/.test(line);
|
|
55
|
+
});
|
|
56
|
+
var binary = atob(body.join(""));
|
|
57
|
+
return Uint8Array.from(binary, function (c) {
|
|
58
|
+
return c.charCodeAt(0);
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
function signaturePackets(bytes) {
|
|
62
|
+
var packets = [];
|
|
63
|
+
var at = 0;
|
|
64
|
+
while (at < bytes.length) {
|
|
65
|
+
var ctb = bytes[at++];
|
|
66
|
+
if (!(ctb & 128)) throw new Error("The PGP SIGNATURE block is not OpenPGP data");
|
|
67
|
+
var tag = void 0;
|
|
68
|
+
var length = void 0;
|
|
69
|
+
if (ctb & 64) {
|
|
70
|
+
tag = ctb & 63;
|
|
71
|
+
var first = bytes[at++];
|
|
72
|
+
if (first < 192) length = first;else if (first < 224) length = (first - 192 << 8) + bytes[at++] + 192;else if (first === 255) {
|
|
73
|
+
length = new DataView(bytes.buffer, bytes.byteOffset + at, 4).getUint32(0);
|
|
74
|
+
at += 4;
|
|
75
|
+
} else throw new Error("Partial-length PGP packets are not a detached signature");
|
|
76
|
+
} else {
|
|
77
|
+
tag = ctb >> 2 & 15;
|
|
78
|
+
var size = [1, 2, 4][ctb & 3];
|
|
79
|
+
if (size === void 0) throw new Error("Indeterminate-length PGP packets are not supported");
|
|
80
|
+
length = 0;
|
|
81
|
+
for (var i = 0; i < size; i++) length = length * 256 + bytes[at++];
|
|
82
|
+
}
|
|
83
|
+
if (at + length > bytes.length) throw new Error("The PGP SIGNATURE block is truncated");
|
|
84
|
+
if (tag === 2) packets.push(bytes.subarray(at, at + length));
|
|
85
|
+
at += length;
|
|
86
|
+
}
|
|
87
|
+
return packets;
|
|
88
|
+
}
|
|
89
|
+
function quickCheck(packet, message) {
|
|
90
|
+
if (packet[0] !== 4) {
|
|
91
|
+
throw new Error(`A version ${packet[0]} PGP signature cannot be checked here; sign with a v4 key`);
|
|
92
|
+
}
|
|
93
|
+
var sigType = packet[1];
|
|
94
|
+
if (sigType !== 0 && sigType !== 1) {
|
|
95
|
+
throw new Error(`PGP signature type 0x${sigType.toString(16)} is not a document signature`);
|
|
96
|
+
}
|
|
97
|
+
var hash = hashes[packet[3]];
|
|
98
|
+
if (!hash) throw new Error(`PGP hash algorithm ${packet[3]} is not supported`);
|
|
99
|
+
var hashedEnd = 6 + (packet[4] << 8 | packet[5]);
|
|
100
|
+
var unhashedLength = packet[hashedEnd] << 8 | packet[hashedEnd + 1];
|
|
101
|
+
var left16 = hashedEnd + 2 + unhashedLength;
|
|
102
|
+
if (left16 + 2 > packet.length) throw new Error("The PGP signature packet is truncated");
|
|
103
|
+
var data = sigType === 1 ? new TextEncoder().encode(new TextDecoder().decode(message).replace(/\r?\n/g, "\n").replace(/\n/g, "\r\n")) : message;
|
|
104
|
+
var trailer = new Uint8Array(6);
|
|
105
|
+
trailer[0] = 4;
|
|
106
|
+
trailer[1] = 255;
|
|
107
|
+
new DataView(trailer.buffer).setUint32(2, hashedEnd);
|
|
108
|
+
var input = new Uint8Array(data.length + hashedEnd + trailer.length);
|
|
109
|
+
input.set(data, 0);
|
|
110
|
+
input.set(packet.subarray(0, hashedEnd), data.length);
|
|
111
|
+
input.set(trailer, data.length + hashedEnd);
|
|
112
|
+
var digest = hash(input);
|
|
113
|
+
return [packet[left16] << 8 | packet[left16 + 1], digest[0] << 8 | digest[1]];
|
|
114
|
+
}
|
|
115
|
+
function gpgSignatureCovers(blob, message) {
|
|
116
|
+
var packets = signaturePackets(dearmor(blob));
|
|
117
|
+
if (!packets.length) throw new Error("The PGP SIGNATURE block holds no signature");
|
|
118
|
+
var bytes = new TextEncoder().encode(message);
|
|
119
|
+
return packets.every(function (packet) {
|
|
120
|
+
var [expected, actual] = quickCheck(packet, bytes);
|
|
121
|
+
return expected === actual;
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=signature.native.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["__defProp","Object","defineProperty","__getOwnPropDesc","getOwnPropertyDescriptor","__getOwnPropNames","getOwnPropertyNames","__hasOwnProp","prototype","hasOwnProperty","__export","target","all","name","get","enumerable","__copyProps","to","from","except","desc","key","call","__toCommonJS","mod","value","signature_exports","gpgSignatureCovers","module","exports","import_legacy","require","import_sha2","BEGIN","END","hashes","sha1","ripemd160","sha256","sha384","sha512","sha224","dearmor","text","start","indexOf","end","Error","lines","slice","length","split","map","line","trim","blank","hasHeaders","some","includes","body","filter","test","binary","atob","join","Uint8Array","c","charCodeAt","signaturePackets","bytes","packets","at","ctb","tag","first","DataView","buffer","byteOffset","getUint32","size","i","push","subarray","quickCheck","packet","message","sigType","toString","hash","hashedEnd","unhashedLength","left16","data","TextEncoder","encode","TextDecoder","decode","replace","trailer","setUint32","input","set","digest","blob","every","expected","actual"],"sources":["signature.native.js"],"sourcesContent":["\"use strict\";\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\nvar signature_exports = {};\n__export(signature_exports, {\n gpgSignatureCovers: () => gpgSignatureCovers\n});\nmodule.exports = __toCommonJS(signature_exports);\nvar import_legacy = require(\"@noble/hashes/legacy.js\");\nvar import_sha2 = require(\"@noble/hashes/sha2.js\");\nvar BEGIN = \"-----BEGIN PGP SIGNATURE-----\";\nvar END = \"-----END PGP SIGNATURE-----\";\nvar hashes = {\n 2: import_legacy.sha1,\n 3: import_legacy.ripemd160,\n 8: import_sha2.sha256,\n 9: import_sha2.sha384,\n 10: import_sha2.sha512,\n 11: import_sha2.sha224\n};\nfunction dearmor(text) {\n var start = text.indexOf(BEGIN);\n var end = text.indexOf(END, start);\n if (start < 0 || end < 0) throw new Error(\"No PGP SIGNATURE block in the paste\");\n var lines = text.slice(start + BEGIN.length, end).split(/\\r?\\n/).map(function(line) {\n return line.trim();\n });\n var blank = lines.indexOf(\"\", 1);\n var hasHeaders = lines.slice(1, blank < 0 ? 0 : blank).some(function(line) {\n return line.includes(\": \");\n });\n var body = (hasHeaders ? lines.slice(blank) : lines).filter(function(line) {\n return line && !/^=[A-Za-z0-9+/]{4}$/.test(line);\n });\n var binary = atob(body.join(\"\"));\n return Uint8Array.from(binary, function(c) {\n return c.charCodeAt(0);\n });\n}\nfunction signaturePackets(bytes) {\n var packets = [];\n var at = 0;\n while (at < bytes.length) {\n var ctb = bytes[at++];\n if (!(ctb & 128)) throw new Error(\"The PGP SIGNATURE block is not OpenPGP data\");\n var tag = void 0;\n var length = void 0;\n if (ctb & 64) {\n tag = ctb & 63;\n var first = bytes[at++];\n if (first < 192) length = first;\n else if (first < 224) length = (first - 192 << 8) + bytes[at++] + 192;\n else if (first === 255) {\n length = new DataView(bytes.buffer, bytes.byteOffset + at, 4).getUint32(0);\n at += 4;\n } else throw new Error(\"Partial-length PGP packets are not a detached signature\");\n } else {\n tag = ctb >> 2 & 15;\n var size = [\n 1,\n 2,\n 4\n ][ctb & 3];\n if (size === void 0) throw new Error(\"Indeterminate-length PGP packets are not supported\");\n length = 0;\n for (var i = 0; i < size; i++) length = length * 256 + bytes[at++];\n }\n if (at + length > bytes.length) throw new Error(\"The PGP SIGNATURE block is truncated\");\n if (tag === 2) packets.push(bytes.subarray(at, at + length));\n at += length;\n }\n return packets;\n}\nfunction quickCheck(packet, message) {\n if (packet[0] !== 4) {\n throw new Error(`A version ${packet[0]} PGP signature cannot be checked here; sign with a v4 key`);\n }\n var sigType = packet[1];\n if (sigType !== 0 && sigType !== 1) {\n throw new Error(`PGP signature type 0x${sigType.toString(16)} is not a document signature`);\n }\n var hash = hashes[packet[3]];\n if (!hash) throw new Error(`PGP hash algorithm ${packet[3]} is not supported`);\n var hashedEnd = 6 + (packet[4] << 8 | packet[5]);\n var unhashedLength = packet[hashedEnd] << 8 | packet[hashedEnd + 1];\n var left16 = hashedEnd + 2 + unhashedLength;\n if (left16 + 2 > packet.length) throw new Error(\"The PGP signature packet is truncated\");\n var data = sigType === 1 ? new TextEncoder().encode(new TextDecoder().decode(message).replace(/\\r?\\n/g, \"\\n\").replace(/\\n/g, \"\\r\\n\")) : message;\n var trailer = new Uint8Array(6);\n trailer[0] = 4;\n trailer[1] = 255;\n new DataView(trailer.buffer).setUint32(2, hashedEnd);\n var input = new Uint8Array(data.length + hashedEnd + trailer.length);\n input.set(data, 0);\n input.set(packet.subarray(0, hashedEnd), data.length);\n input.set(trailer, data.length + hashedEnd);\n var digest = hash(input);\n return [\n packet[left16] << 8 | packet[left16 + 1],\n digest[0] << 8 | digest[1]\n ];\n}\nfunction gpgSignatureCovers(blob, message) {\n var packets = signaturePackets(dearmor(blob));\n if (!packets.length) throw new Error(\"The PGP SIGNATURE block holds no signature\");\n var bytes = new TextEncoder().encode(message);\n return packets.every(function(packet) {\n var [expected, actual] = quickCheck(packet, bytes);\n return expected === actual;\n });\n}\n//# sourceMappingURL=signature.js.map\n"],"mappings":"AAAA,YAAY;;AACZ,IAAIA,SAAS,GAAGC,MAAM,CAACC,cAAc;AACrC,IAAIC,gBAAgB,GAAGF,MAAM,CAACG,wBAAwB;AACtD,IAAIC,iBAAiB,GAAGJ,MAAM,CAACK,mBAAmB;AAClD,IAAIC,YAAY,GAAGN,MAAM,CAACO,SAAS,CAACC,cAAc;AAClD,IAAIC,QAAQ,GAAGA,CAACC,MAAM,EAAEC,GAAG,KAAK;EAC9B,KAAK,IAAIC,IAAI,IAAID,GAAG,EAClBZ,SAAS,CAACW,MAAM,EAAEE,IAAI,EAAE;IAAEC,GAAG,EAAEF,GAAG,CAACC,IAAI,CAAC;IAAEE,UAAU,EAAE;EAAK,CAAC,CAAC;AACjE,CAAC;AACD,IAAIC,WAAW,GAAGA,CAACC,EAAE,EAAEC,IAAI,EAAEC,MAAM,EAAEC,IAAI,KAAK;EAC5C,IAAIF,IAAI,IAAI,OAAOA,IAAI,KAAK,QAAQ,IAAI,OAAOA,IAAI,KAAK,UAAU,EAAE;IAClE,KAAK,IAAIG,GAAG,IAAIhB,iBAAiB,CAACa,IAAI,CAAC,EACrC,IAAI,CAACX,YAAY,CAACe,IAAI,CAACL,EAAE,EAAEI,GAAG,CAAC,IAAIA,GAAG,KAAKF,MAAM,EAC/CnB,SAAS,CAACiB,EAAE,EAAEI,GAAG,EAAE;MAAEP,GAAG,EAAEA,CAAA,KAAMI,IAAI,CAACG,GAAG,CAAC;MAAEN,UAAU,EAAE,EAAEK,IAAI,GAAGjB,gBAAgB,CAACe,IAAI,EAAEG,GAAG,CAAC,CAAC,IAAID,IAAI,CAACL;IAAW,CAAC,CAAC;EACxH;EACA,OAAOE,EAAE;AACX,CAAC;AACD,IAAIM,YAAY,GAAIC,GAAG,IAAKR,WAAW,CAAChB,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE;EAAEyB,KAAK,EAAE;AAAK,CAAC,CAAC,EAAED,GAAG,CAAC;AAC1F,IAAIE,iBAAiB,GAAG,CAAC,CAAC;AAC1BhB,QAAQ,CAACgB,iBAAiB,EAAE;EAC1BC,kBAAkB,EAAEA,CAAA,KAAMA;AAC5B,CAAC,CAAC;AACFC,MAAM,CAACC,OAAO,GAAGN,YAAY,CAACG,iBAAiB,CAAC;AAChD,IAAII,aAAa,GAAGC,OAAO,CAAC,yBAAyB,CAAC;AACtD,IAAIC,WAAW,GAAGD,OAAO,CAAC,uBAAuB,CAAC;AAClD,IAAIE,KAAK,GAAG,+BAA+B;AAC3C,IAAIC,GAAG,GAAG,6BAA6B;AACvC,IAAIC,MAAM,GAAG;EACX,CAAC,EAAEL,aAAa,CAACM,IAAI;EACrB,CAAC,EAAEN,aAAa,CAACO,SAAS;EAC1B,CAAC,EAAEL,WAAW,CAACM,MAAM;EACrB,CAAC,EAAEN,WAAW,CAACO,MAAM;EACrB,EAAE,EAAEP,WAAW,CAACQ,MAAM;EACtB,EAAE,EAAER,WAAW,CAACS;AAClB,CAAC;AACD,SAASC,OAAOA,CAACC,IAAI,EAAE;EACrB,IAAIC,KAAK,GAAGD,IAAI,CAACE,OAAO,CAACZ,KAAK,CAAC;EAC/B,IAAIa,GAAG,GAAGH,IAAI,CAACE,OAAO,CAACX,GAAG,EAAEU,KAAK,CAAC;EAClC,IAAIA,KAAK,GAAG,CAAC,IAAIE,GAAG,GAAG,CAAC,EAAE,MAAM,IAAIC,KAAK,CAAC,qCAAqC,CAAC;EAChF,IAAIC,KAAK,GAAGL,IAAI,CAACM,KAAK,CAACL,KAAK,GAAGX,KAAK,CAACiB,MAAM,EAAEJ,GAAG,CAAC,CAACK,KAAK,CAAC,OAAO,CAAC,CAACC,GAAG,CAAC,UAASC,IAAI,EAAE;IAClF,OAAOA,IAAI,CAACC,IAAI,CAAC,CAAC;EACpB,CAAC,CAAC;EACF,IAAIC,KAAK,GAAGP,KAAK,CAACH,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;EAChC,IAAIW,UAAU,GAAGR,KAAK,CAACC,KAAK,CAAC,CAAC,EAAEM,KAAK,GAAG,CAAC,GAAG,CAAC,GAAGA,KAAK,CAAC,CAACE,IAAI,CAAC,UAASJ,IAAI,EAAE;IACzE,OAAOA,IAAI,CAACK,QAAQ,CAAC,IAAI,CAAC;EAC5B,CAAC,CAAC;EACF,IAAIC,IAAI,GAAG,CAACH,UAAU,GAAGR,KAAK,CAACC,KAAK,CAACM,KAAK,CAAC,GAAGP,KAAK,EAAEY,MAAM,CAAC,UAASP,IAAI,EAAE;IACzE,OAAOA,IAAI,IAAI,CAAC,qBAAqB,CAACQ,IAAI,CAACR,IAAI,CAAC;EAClD,CAAC,CAAC;EACF,IAAIS,MAAM,GAAGC,IAAI,CAACJ,IAAI,CAACK,IAAI,CAAC,EAAE,CAAC,CAAC;EAChC,OAAOC,UAAU,CAAC/C,IAAI,CAAC4C,MAAM,EAAE,UAASI,CAAC,EAAE;IACzC,OAAOA,CAAC,CAACC,UAAU,CAAC,CAAC,CAAC;EACxB,CAAC,CAAC;AACJ;AACA,SAASC,gBAAgBA,CAACC,KAAK,EAAE;EAC/B,IAAIC,OAAO,GAAG,EAAE;EAChB,IAAIC,EAAE,GAAG,CAAC;EACV,OAAOA,EAAE,GAAGF,KAAK,CAACnB,MAAM,EAAE;IACxB,IAAIsB,GAAG,GAAGH,KAAK,CAACE,EAAE,EAAE,CAAC;IACrB,IAAI,EAAEC,GAAG,GAAG,GAAG,CAAC,EAAE,MAAM,IAAIzB,KAAK,CAAC,6CAA6C,CAAC;IAChF,IAAI0B,GAAG,GAAG,KAAK,CAAC;IAChB,IAAIvB,MAAM,GAAG,KAAK,CAAC;IACnB,IAAIsB,GAAG,GAAG,EAAE,EAAE;MACZC,GAAG,GAAGD,GAAG,GAAG,EAAE;MACd,IAAIE,KAAK,GAAGL,KAAK,CAACE,EAAE,EAAE,CAAC;MACvB,IAAIG,KAAK,GAAG,GAAG,EAAExB,MAAM,GAAGwB,KAAK,CAAC,KAC3B,IAAIA,KAAK,GAAG,GAAG,EAAExB,MAAM,GAAG,CAACwB,KAAK,GAAG,GAAG,IAAI,CAAC,IAAIL,KAAK,CAACE,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,KACjE,IAAIG,KAAK,KAAK,GAAG,EAAE;QACtBxB,MAAM,GAAG,IAAIyB,QAAQ,CAACN,KAAK,CAACO,MAAM,EAAEP,KAAK,CAACQ,UAAU,GAAGN,EAAE,EAAE,CAAC,CAAC,CAACO,SAAS,CAAC,CAAC,CAAC;QAC1EP,EAAE,IAAI,CAAC;MACT,CAAC,MAAM,MAAM,IAAIxB,KAAK,CAAC,yDAAyD,CAAC;IACnF,CAAC,MAAM;MACL0B,GAAG,GAAGD,GAAG,IAAI,CAAC,GAAG,EAAE;MACnB,IAAIO,IAAI,GAAG,CACT,CAAC,EACD,CAAC,EACD,CAAC,CACF,CAACP,GAAG,GAAG,CAAC,CAAC;MACV,IAAIO,IAAI,KAAK,KAAK,CAAC,EAAE,MAAM,IAAIhC,KAAK,CAAC,oDAAoD,CAAC;MAC1FG,MAAM,GAAG,CAAC;MACV,KAAK,IAAI8B,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGD,IAAI,EAAEC,CAAC,EAAE,EAAE9B,MAAM,GAAGA,MAAM,GAAG,GAAG,GAAGmB,KAAK,CAACE,EAAE,EAAE,CAAC;IACpE;IACA,IAAIA,EAAE,GAAGrB,MAAM,GAAGmB,KAAK,CAACnB,MAAM,EAAE,MAAM,IAAIH,KAAK,CAAC,sCAAsC,CAAC;IACvF,IAAI0B,GAAG,KAAK,CAAC,EAAEH,OAAO,CAACW,IAAI,CAACZ,KAAK,CAACa,QAAQ,CAACX,EAAE,EAAEA,EAAE,GAAGrB,MAAM,CAAC,CAAC;IAC5DqB,EAAE,IAAIrB,MAAM;EACd;EACA,OAAOoB,OAAO;AAChB;AACA,SAASa,UAAUA,CAACC,MAAM,EAAEC,OAAO,EAAE;EACnC,IAAID,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE;IACnB,MAAM,IAAIrC,KAAK,CAAC,aAAaqC,MAAM,CAAC,CAAC,CAAC,2DAA2D,CAAC;EACpG;EACA,IAAIE,OAAO,GAAGF,MAAM,CAAC,CAAC,CAAC;EACvB,IAAIE,OAAO,KAAK,CAAC,IAAIA,OAAO,KAAK,CAAC,EAAE;IAClC,MAAM,IAAIvC,KAAK,CAAC,wBAAwBuC,OAAO,CAACC,QAAQ,CAAC,EAAE,CAAC,8BAA8B,CAAC;EAC7F;EACA,IAAIC,IAAI,GAAGrD,MAAM,CAACiD,MAAM,CAAC,CAAC,CAAC,CAAC;EAC5B,IAAI,CAACI,IAAI,EAAE,MAAM,IAAIzC,KAAK,CAAC,sBAAsBqC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC;EAC9E,IAAIK,SAAS,GAAG,CAAC,IAAIL,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAGA,MAAM,CAAC,CAAC,CAAC,CAAC;EAChD,IAAIM,cAAc,GAAGN,MAAM,CAACK,SAAS,CAAC,IAAI,CAAC,GAAGL,MAAM,CAACK,SAAS,GAAG,CAAC,CAAC;EACnE,IAAIE,MAAM,GAAGF,SAAS,GAAG,CAAC,GAAGC,cAAc;EAC3C,IAAIC,MAAM,GAAG,CAAC,GAAGP,MAAM,CAAClC,MAAM,EAAE,MAAM,IAAIH,KAAK,CAAC,uCAAuC,CAAC;EACxF,IAAI6C,IAAI,GAAGN,OAAO,KAAK,CAAC,GAAG,IAAIO,WAAW,CAAC,CAAC,CAACC,MAAM,CAAC,IAAIC,WAAW,CAAC,CAAC,CAACC,MAAM,CAACX,OAAO,CAAC,CAACY,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAACA,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,GAAGZ,OAAO;EAC/I,IAAIa,OAAO,GAAG,IAAIjC,UAAU,CAAC,CAAC,CAAC;EAC/BiC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;EACdA,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG;EAChB,IAAIvB,QAAQ,CAACuB,OAAO,CAACtB,MAAM,CAAC,CAACuB,SAAS,CAAC,CAAC,EAAEV,SAAS,CAAC;EACpD,IAAIW,KAAK,GAAG,IAAInC,UAAU,CAAC2B,IAAI,CAAC1C,MAAM,GAAGuC,SAAS,GAAGS,OAAO,CAAChD,MAAM,CAAC;EACpEkD,KAAK,CAACC,GAAG,CAACT,IAAI,EAAE,CAAC,CAAC;EAClBQ,KAAK,CAACC,GAAG,CAACjB,MAAM,CAACF,QAAQ,CAAC,CAAC,EAAEO,SAAS,CAAC,EAAEG,IAAI,CAAC1C,MAAM,CAAC;EACrDkD,KAAK,CAACC,GAAG,CAACH,OAAO,EAAEN,IAAI,CAAC1C,MAAM,GAAGuC,SAAS,CAAC;EAC3C,IAAIa,MAAM,GAAGd,IAAI,CAACY,KAAK,CAAC;EACxB,OAAO,CACLhB,MAAM,CAACO,MAAM,CAAC,IAAI,CAAC,GAAGP,MAAM,CAACO,MAAM,GAAG,CAAC,CAAC,EACxCW,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAGA,MAAM,CAAC,CAAC,CAAC,CAC3B;AACH;AACA,SAAS3E,kBAAkBA,CAAC4E,IAAI,EAAElB,OAAO,EAAE;EACzC,IAAIf,OAAO,GAAGF,gBAAgB,CAAC1B,OAAO,CAAC6D,IAAI,CAAC,CAAC;EAC7C,IAAI,CAACjC,OAAO,CAACpB,MAAM,EAAE,MAAM,IAAIH,KAAK,CAAC,4CAA4C,CAAC;EAClF,IAAIsB,KAAK,GAAG,IAAIwB,WAAW,CAAC,CAAC,CAACC,MAAM,CAACT,OAAO,CAAC;EAC7C,OAAOf,OAAO,CAACkC,KAAK,CAAC,UAASpB,MAAM,EAAE;IACpC,IAAI,CAACqB,QAAQ,EAAEC,MAAM,CAAC,GAAGvB,UAAU,CAACC,MAAM,EAAEf,KAAK,CAAC;IAClD,OAAOoC,QAAQ,KAAKC,MAAM;EAC5B,CAAC,CAAC;AACJ","ignoreList":[]}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all) __defProp(target, name, {
|
|
7
|
+
get: all[name],
|
|
8
|
+
enumerable: true
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
|
|
14
|
+
get: () => from[key],
|
|
15
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
|
|
21
|
+
value: true
|
|
22
|
+
}), mod);
|
|
23
|
+
var signer_exports = {};
|
|
24
|
+
__export(signer_exports, {
|
|
25
|
+
GPG_PUBLIC_KEY_BEGIN: () => GPG_PUBLIC_KEY_BEGIN,
|
|
26
|
+
GPG_SIGNATURE_BEGIN: () => GPG_SIGNATURE_BEGIN,
|
|
27
|
+
assertGpgSignature: () => assertGpgSignature,
|
|
28
|
+
createGpgSigner: () => createGpgSigner,
|
|
29
|
+
gpgSignCommand: () => gpgSignCommand,
|
|
30
|
+
gpgSignatureCovers: () => import_signature2.gpgSignatureCovers,
|
|
31
|
+
useGpgSigner: () => useGpgSigner
|
|
32
|
+
});
|
|
33
|
+
module.exports = __toCommonJS(signer_exports);
|
|
34
|
+
var import_react = require("react");
|
|
35
|
+
var import_signature = require("./signature.cjs");
|
|
36
|
+
var import_signature2 = require("./signature.cjs");
|
|
37
|
+
const GPG_SIGNATURE_BEGIN = "-----BEGIN PGP SIGNATURE-----";
|
|
38
|
+
const GPG_PUBLIC_KEY_BEGIN = "-----BEGIN PGP PUBLIC KEY BLOCK-----";
|
|
39
|
+
function gpgSignCommand(message) {
|
|
40
|
+
return `{ printf %s '${message.replace(/'/g, "'\\''")}' | gpg --detach-sign --armor; gpg --armor --export; }`;
|
|
41
|
+
}
|
|
42
|
+
function assertGpgSignature(blob) {
|
|
43
|
+
const trimmed = blob.trim();
|
|
44
|
+
if (!trimmed.includes(GPG_SIGNATURE_BEGIN) || !trimmed.includes(GPG_PUBLIC_KEY_BEGIN)) {
|
|
45
|
+
throw new Error("Paste the FULL output \u2014 it must contain both a PGP SIGNATURE and a PUBLIC KEY block.");
|
|
46
|
+
}
|
|
47
|
+
return trimmed;
|
|
48
|
+
}
|
|
49
|
+
function createGpgSigner() {
|
|
50
|
+
let pending = null;
|
|
51
|
+
let settle = null;
|
|
52
|
+
const listeners = /* @__PURE__ */new Set();
|
|
53
|
+
const emit = () => {
|
|
54
|
+
for (const listener of listeners) listener();
|
|
55
|
+
};
|
|
56
|
+
const signer = {
|
|
57
|
+
family: "gpg",
|
|
58
|
+
address: null,
|
|
59
|
+
capabilities: ["signMessage"],
|
|
60
|
+
get pending() {
|
|
61
|
+
return pending;
|
|
62
|
+
},
|
|
63
|
+
signMessage(message) {
|
|
64
|
+
settle?.reject(new Error("GPG signing was superseded by a newer request"));
|
|
65
|
+
return new Promise((resolve, reject) => {
|
|
66
|
+
settle = {
|
|
67
|
+
resolve,
|
|
68
|
+
reject
|
|
69
|
+
};
|
|
70
|
+
pending = {
|
|
71
|
+
message,
|
|
72
|
+
command: gpgSignCommand(message)
|
|
73
|
+
};
|
|
74
|
+
emit();
|
|
75
|
+
});
|
|
76
|
+
},
|
|
77
|
+
submit(blob, request) {
|
|
78
|
+
if (!settle || !pending) throw new Error("No GPG signature was requested");
|
|
79
|
+
if (request !== pending) {
|
|
80
|
+
throw new Error("That GPG request was superseded; run the current command and paste its output");
|
|
81
|
+
}
|
|
82
|
+
const signature = assertGpgSignature(blob);
|
|
83
|
+
if (!(0, import_signature.gpgSignatureCovers)(signature, pending.message)) {
|
|
84
|
+
throw new Error("That signature is over a different message; run the current command and paste its output");
|
|
85
|
+
}
|
|
86
|
+
const {
|
|
87
|
+
resolve
|
|
88
|
+
} = settle;
|
|
89
|
+
settle = null;
|
|
90
|
+
pending = null;
|
|
91
|
+
emit();
|
|
92
|
+
resolve(signature);
|
|
93
|
+
},
|
|
94
|
+
cancel(reason) {
|
|
95
|
+
if (!settle) return;
|
|
96
|
+
const {
|
|
97
|
+
reject
|
|
98
|
+
} = settle;
|
|
99
|
+
settle = null;
|
|
100
|
+
pending = null;
|
|
101
|
+
emit();
|
|
102
|
+
reject(reason ?? new Error("GPG signing was cancelled"));
|
|
103
|
+
},
|
|
104
|
+
subscribe(listener) {
|
|
105
|
+
listeners.add(listener);
|
|
106
|
+
return () => listeners.delete(listener);
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
return signer;
|
|
110
|
+
}
|
|
111
|
+
function useGpgSigner(signer = defaultSigner()) {
|
|
112
|
+
(0, import_react.useSyncExternalStore)(signer.subscribe, () => signer.pending, () => signer.pending);
|
|
113
|
+
return signer;
|
|
114
|
+
}
|
|
115
|
+
let sharedSigner = null;
|
|
116
|
+
function defaultSigner() {
|
|
117
|
+
sharedSigner ??= createGpgSigner();
|
|
118
|
+
return sharedSigner;
|
|
119
|
+
}
|