@multiplatform.one/gpg 7.18.0 → 7.19.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.
Files changed (46) hide show
  1. package/dist/cjs/GpgButton.native.js.map +1 -1
  2. package/dist/cjs/GpgContext.native.js.map +1 -1
  3. package/dist/cjs/GpgIcon.native.js.map +1 -1
  4. package/dist/cjs/GpgProvider.cjs +7 -4
  5. package/dist/cjs/GpgProvider.native.js +7 -4
  6. package/dist/cjs/GpgProvider.native.js.map +1 -1
  7. package/dist/cjs/SignInWithGpg.native.js.map +1 -1
  8. package/dist/cjs/index.cjs +7 -1
  9. package/dist/cjs/index.native.js +7 -1
  10. package/dist/cjs/index.native.js.map +1 -1
  11. package/dist/cjs/screens.native.js.map +1 -1
  12. package/dist/cjs/signature.cjs +113 -0
  13. package/dist/cjs/signature.native.js +124 -0
  14. package/dist/cjs/signature.native.js.map +1 -0
  15. package/dist/cjs/signer.cjs +119 -0
  16. package/dist/cjs/signer.native.js +150 -0
  17. package/dist/cjs/signer.native.js.map +1 -0
  18. package/dist/cjs/useGpg.native.js.map +1 -1
  19. package/dist/esm/GpgProvider.mjs +7 -4
  20. package/dist/esm/GpgProvider.mjs.map +1 -1
  21. package/dist/esm/GpgProvider.native.js +7 -4
  22. package/dist/esm/GpgProvider.native.js.map +1 -1
  23. package/dist/esm/index.mjs +2 -1
  24. package/dist/esm/index.mjs.map +1 -1
  25. package/dist/esm/index.native.js +2 -1
  26. package/dist/esm/index.native.js.map +1 -1
  27. package/dist/esm/signature.mjs +88 -0
  28. package/dist/esm/signature.mjs.map +1 -0
  29. package/dist/esm/signature.native.js +96 -0
  30. package/dist/esm/signature.native.js.map +1 -0
  31. package/dist/esm/signer.mjs +88 -0
  32. package/dist/esm/signer.mjs.map +1 -0
  33. package/dist/esm/signer.native.js +116 -0
  34. package/dist/esm/signer.native.js.map +1 -0
  35. package/package.json +16 -3
  36. package/src/GpgProvider.tsx +7 -19
  37. package/src/index.ts +10 -1
  38. package/src/signature.ts +120 -0
  39. package/src/signer.ts +142 -0
  40. package/types/GpgProvider.d.ts.map +1 -1
  41. package/types/index.d.ts +1 -0
  42. package/types/index.d.ts.map +1 -1
  43. package/types/signature.d.ts +6 -0
  44. package/types/signature.d.ts.map +1 -0
  45. package/types/signer.d.ts +47 -0
  46. package/types/signer.d.ts.map +1 -0
@@ -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
+ }
@@ -0,0 +1,150 @@
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 signer_exports = {};
26
+ __export(signer_exports, {
27
+ GPG_PUBLIC_KEY_BEGIN: () => GPG_PUBLIC_KEY_BEGIN,
28
+ GPG_SIGNATURE_BEGIN: () => GPG_SIGNATURE_BEGIN,
29
+ assertGpgSignature: () => assertGpgSignature,
30
+ createGpgSigner: () => createGpgSigner,
31
+ gpgSignCommand: () => gpgSignCommand,
32
+ gpgSignatureCovers: () => import_signature2.gpgSignatureCovers,
33
+ useGpgSigner: () => useGpgSigner
34
+ });
35
+ module.exports = __toCommonJS(signer_exports);
36
+ var import_react = require("react");
37
+ var import_signature = require("./signature.native.js");
38
+ var import_signature2 = require("./signature.native.js");
39
+ var GPG_SIGNATURE_BEGIN = "-----BEGIN PGP SIGNATURE-----";
40
+ var GPG_PUBLIC_KEY_BEGIN = "-----BEGIN PGP PUBLIC KEY BLOCK-----";
41
+ function gpgSignCommand(message) {
42
+ return `{ printf %s '${message.replace(/'/g, "'\\''")}' | gpg --detach-sign --armor; gpg --armor --export; }`;
43
+ }
44
+ function assertGpgSignature(blob) {
45
+ var trimmed = blob.trim();
46
+ if (!trimmed.includes(GPG_SIGNATURE_BEGIN) || !trimmed.includes(GPG_PUBLIC_KEY_BEGIN)) {
47
+ throw new Error("Paste the FULL output \u2014 it must contain both a PGP SIGNATURE and a PUBLIC KEY block.");
48
+ }
49
+ return trimmed;
50
+ }
51
+ function createGpgSigner() {
52
+ var pending = null;
53
+ var settle = null;
54
+ var listeners = /* @__PURE__ */new Set();
55
+ var emit = function emit2() {
56
+ var _iteratorNormalCompletion = true,
57
+ _didIteratorError = false,
58
+ _iteratorError = void 0;
59
+ try {
60
+ for (var _iterator = listeners[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
61
+ var listener = _step.value;
62
+ listener();
63
+ }
64
+ } catch (err) {
65
+ _didIteratorError = true;
66
+ _iteratorError = err;
67
+ } finally {
68
+ try {
69
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
70
+ _iterator.return();
71
+ }
72
+ } finally {
73
+ if (_didIteratorError) {
74
+ throw _iteratorError;
75
+ }
76
+ }
77
+ }
78
+ };
79
+ var signer = {
80
+ family: "gpg",
81
+ address: null,
82
+ capabilities: ["signMessage"],
83
+ get pending() {
84
+ return pending;
85
+ },
86
+ signMessage(message) {
87
+ settle === null || settle === void 0 ? void 0 : settle.reject(new Error("GPG signing was superseded by a newer request"));
88
+ return new Promise(function (resolve, reject) {
89
+ settle = {
90
+ resolve,
91
+ reject
92
+ };
93
+ pending = {
94
+ message,
95
+ command: gpgSignCommand(message)
96
+ };
97
+ emit();
98
+ });
99
+ },
100
+ submit(blob, request) {
101
+ if (!settle || !pending) throw new Error("No GPG signature was requested");
102
+ if (request !== pending) {
103
+ throw new Error("That GPG request was superseded; run the current command and paste its output");
104
+ }
105
+ var signature = assertGpgSignature(blob);
106
+ if (!(0, import_signature.gpgSignatureCovers)(signature, pending.message)) {
107
+ throw new Error("That signature is over a different message; run the current command and paste its output");
108
+ }
109
+ var {
110
+ resolve
111
+ } = settle;
112
+ settle = null;
113
+ pending = null;
114
+ emit();
115
+ resolve(signature);
116
+ },
117
+ cancel(reason) {
118
+ if (!settle) return;
119
+ var {
120
+ reject
121
+ } = settle;
122
+ settle = null;
123
+ pending = null;
124
+ emit();
125
+ reject(reason !== null && reason !== void 0 ? reason : new Error("GPG signing was cancelled"));
126
+ },
127
+ subscribe(listener) {
128
+ listeners.add(listener);
129
+ return function () {
130
+ return listeners.delete(listener);
131
+ };
132
+ }
133
+ };
134
+ return signer;
135
+ }
136
+ function useGpgSigner() {
137
+ var signer = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : defaultSigner();
138
+ (0, import_react.useSyncExternalStore)(signer.subscribe, function () {
139
+ return signer.pending;
140
+ }, function () {
141
+ return signer.pending;
142
+ });
143
+ return signer;
144
+ }
145
+ var sharedSigner = null;
146
+ function defaultSigner() {
147
+ sharedSigner !== null && sharedSigner !== void 0 ? sharedSigner : sharedSigner = createGpgSigner();
148
+ return sharedSigner;
149
+ }
150
+ //# sourceMappingURL=signer.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["__toCommonJS","mod","__copyProps","__defProp","value","signer_exports","__export","GPG_PUBLIC_KEY_BEGIN","GPG_SIGNATURE_BEGIN","assertGpgSignature","createGpgSigner","gpgSignCommand","gpgSignatureCovers","import_signature2","useGpgSigner","module","exports","import_react","require","import_signature","message","replace","blob","trimmed","trim","includes","Error","pending","settle","listeners","Set","emit","emit2","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_iterator","Symbol","iterator","_step","next","done","listener","err","return","signer","family","address","capabilities","signMessage","reject","Promise","resolve","command","submit","request","signature","cancel","reason"],"sources":["../../src/signer.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -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","useGpg_exports","useGpg","module","exports","import_react","require","import_GpgContext","useGpg2","gpg","useContext","GpgContext","message","command","status","GpgStatusState","ERROR","error","Error","isLoading","isSuccess","isError","isReady","signIn","signIn2","Promise","reject","reset","nonce","resetStatus","LOADING","SUCCESS"],"sources":["useGpg.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 useGpg_exports = {};\n__export(useGpg_exports, {\n useGpg: () => useGpg\n});\nmodule.exports = __toCommonJS(useGpg_exports);\nvar import_react = require(\"react\");\nvar import_GpgContext = require(\"./GpgContext\");\nvar useGpg = function useGpg2() {\n var gpg = (0, import_react.useContext)(import_GpgContext.GpgContext);\n if (!gpg) {\n return {\n message: null,\n command: null,\n status: import_GpgContext.GpgStatusState.ERROR,\n error: new Error(\"useGpg hook must be inside a GpgProvider.\"),\n isLoading: false,\n isSuccess: false,\n isError: true,\n isReady: false,\n signIn: function signIn2() {\n return Promise.reject();\n },\n reset: function reset() {\n }\n };\n }\n var { nonce, message, command, status, signIn, resetStatus } = gpg;\n var isLoading = status === import_GpgContext.GpgStatusState.LOADING || nonce.isLoading;\n var isSuccess = status === import_GpgContext.GpgStatusState.SUCCESS;\n var isError = status === import_GpgContext.GpgStatusState.ERROR;\n var isReady = !!message && !isLoading;\n return {\n message,\n command,\n status,\n error: nonce.error,\n isLoading,\n isSuccess,\n isError,\n isReady,\n signIn,\n reset: function reset() {\n return resetStatus();\n }\n };\n};\n//# sourceMappingURL=useGpg.js.map\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["__toCommonJS","mod","__copyProps","__defProp","value","useGpg_exports","__export","useGpg","module","exports","import_react","require","import_GpgContext","useGpg2","gpg","useContext","GpgContext","message","command","status","GpgStatusState","ERROR","error","Error","isLoading","isSuccess","isError","isReady","signIn","signIn2","Promise","reject","reset","nonce","resetStatus","LOADING","SUCCESS"],"sources":["../../src/useGpg.ts"],"sourcesContent":[null],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,YAAA,GAAAC,GAAA,IAAAC,WAAA,CAAAC,SAAA;EAAAC,KAAA;AAAA,IAAAH,GAAA;AAAA,IAAAI,cAAA;AAAAC,QAAA,CAAAD,cAAA;EAAAE,MAAA,EAAAA,CAAA,KAAAA;AAAA;AAAAC,MAAA,CAAAC,OAAA,GAAAT,YAA2B,CAAAK,cAAA;AAC3B,IAAAK,YAAA,GAAAC,OAA2C;AAoBpC,IAAAC,iBAAsC,GAAAD,OAAA;AAC3C,IAAAJ,MAAM,YAAMM,QAAA;EACZ,IAAIC,GAAC,GAAK,IAAAJ,YAAA,CAAAK,UAAA,EAAAH,iBAAA,CAAAI,UAAA;EACR,KAAAF,GAAA,EAAO;IAAA,OACL;MACAG,OAAA,EAAS;MACTC,OAAA,EAAQ;MACRC,MAAA,EAAOP,iBAAU,CAAAQ,cAAA,CAAAC,KAAA;MACjBC,KAAA,MAAWC,KAAA;MACXC,SAAA,EAAW;MACXC,SAAS;MACTC,OAAA,EAAS;MACTC,OAAA,EAAQ,KAAM;MACdC,MAAA,EAAO,SAAMC,QAAA;QAAC,OAAAC,OAAA,CAAAC,MAAA;MAChB;MACFC,KAAA,WAAAA,MAAA,GAEA;IACA;EACA;EACA;IAAMC,KAAA;IAAAhB,OAAU;IAAAC,OAAW;IAAAC,MAAA;IAAAS,MAAA;IAAAM;EAAA,CAAe,GAAApB,GAAA;EAC1C,IAAAU,SAAM,GAAUL,MAAE,KAAAP,iBAAY,CAAAQ,cAAA,CAAAe,OAAA,IAAAF,KAAA,CAAAT,SAAA;EAE9B,IAAAC,SAAO,GAAAN,MAAA,KAAAP,iBAAA,CAAAQ,cAAA,CAAAgB,OAAA;EAAA,IACLV,OAAA,GAAAP,MAAA,KAAAP,iBAAA,CAAAQ,cAAA,CAAAC,KAAA;EAAA,IACAM,OAAA,KAAAV,OAAA,KAAAO,SAAA;EAAA,OACA;IACAP,OAAO;IACPC,OAAA;IACAC,MAAA;IACAG,KAAA,EAAAW,KAAA,CAAAX,KAAA;IACAE,SAAA;IACAC,SAAA;IACAC,OAAO;IACTC,OAAA;IACFC,MAAA","ignoreList":[]}
@@ -2,6 +2,7 @@ import { useContext, useMemo, useRef, useState } from "react";
2
2
  import { useQuery } from "@tanstack/react-query";
3
3
  import { Context as ConnectKitContext } from "@multiplatform.one/connectkit";
4
4
  import { GpgContext, GpgStatusState } from "./GpgContext.mjs";
5
+ import { assertGpgSignature, gpgSignCommand } from "./signer.mjs";
5
6
  import { jsx } from "react/jsx-runtime";
6
7
  const GPG_NONCE_QUERY_KEY = "ckGpgNonce";
7
8
  const b64 = s => window.btoa(unescape(encodeURIComponent(s)));
@@ -47,12 +48,14 @@ const GpgProvider = ({
47
48
  const message = useMemo(() => nonce.data ? (buildMessageRef.current ?? defaultBuildMessage)({
48
49
  nonce: nonce.data
49
50
  }) : null, [nonce.data]);
50
- const command = useMemo(() => message ? `{ printf %s '${message.replace(/'/g, "'\\''")}' | gpg --detach-sign --armor; gpg --armor --export; }` : null, [message]);
51
+ const command = useMemo(() => message ? gpgSignCommand(message) : null, [message]);
51
52
  const signIn = async pastedBlob => {
52
- const blob = pastedBlob.trim();
53
- if (!blob.includes("-----BEGIN PGP SIGNATURE-----") || !blob.includes("-----BEGIN PGP PUBLIC KEY BLOCK-----")) {
53
+ let blob;
54
+ try {
55
+ blob = assertGpgSignature(pastedBlob);
56
+ } catch (error) {
54
57
  setStatus(GpgStatusState.ERROR);
55
- throw new Error("Paste the FULL output \u2014 it must contain both a PGP SIGNATURE and a PUBLIC KEY block.");
58
+ throw error;
56
59
  }
57
60
  if (!message) {
58
61
  setStatus(GpgStatusState.ERROR);
@@ -1 +1 @@
1
- {"version":3,"names":["useContext","useMemo","useRef","useState","useQuery","Context","ConnectKitContext","GpgContext","GpgStatusState","jsx","GPG_NONCE_QUERY_KEY","b64","s","window","btoa","unescape","encodeURIComponent","defaultBuildMessage","nonce","location","host","origin","Date","toISOString","GpgProvider","children","enabled","nonceRefetchInterval","buildMessage","onSignIn","gpgConfig","status","setStatus","READY","resetStatus","Error","queryKey","queryFn","getNonce","refetchInterval","refetchOnWindowFocus","refetchOnReconnect","staleTime","Infinity","buildMessageRef","current","message","data","command","replace","signIn","pastedBlob","blob","trim","includes","ERROR","LOADING","result","onSign","username","password","SUCCESS","error","Provider","value"],"sources":["../../src/GpgProvider.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["useContext","useMemo","useRef","useState","useQuery","Context","ConnectKitContext","GpgContext","GpgStatusState","assertGpgSignature","gpgSignCommand","jsx","GPG_NONCE_QUERY_KEY","b64","s","window","btoa","unescape","encodeURIComponent","defaultBuildMessage","nonce","location","host","origin","Date","toISOString","GpgProvider","children","enabled","nonceRefetchInterval","buildMessage","onSignIn","gpgConfig","status","setStatus","READY","resetStatus","Error","queryKey","queryFn","getNonce","refetchInterval","refetchOnWindowFocus","refetchOnReconnect","staleTime","Infinity","buildMessageRef","current","message","data","command","signIn","pastedBlob","blob","error","ERROR","LOADING","result","onSign","username","password","SUCCESS","Provider","value"],"sources":["../../src/GpgProvider.tsx"],"sourcesContent":[null],"mappings":"AAAA,SAAoBA,UAAA,EAAYC,OAAA,EAASC,MAAA,EAAQC,QAAA,QAAgB;AACjE,SAASC,QAAA,QAAgB;AAEzB,SAASC,OAAA,IAAWC,iBAAA,QAAyB;AAC7C,SAASC,UAAA,EAAuBC,cAAA,QAAsB;AACtD,SAASC,kBAAA,EAAoBC,cAAA,QAAsB;AAuG/C,SAAAC,GAAA;AAhGG,MAAMC,mBAAA,GAAsB;AAInC,MAAMC,GAAA,GAAOC,CAAA,IAAcC,MAAA,CAAOC,IAAA,CAAKC,QAAA,CAASC,kBAAA,CAAmBJ,CAAC,CAAC,CAAC;AAItE,SAASK,oBAAoB;EAAEC;AAAM,GAA8B;EACjE,OACE,GAAGL,MAAA,CAAOM,QAAA,CAASC,IAAI;AAAA;AAAA,OACfP,MAAA,CAAOM,QAAA,CAASE,MAAM;AAAA;AAAA,SAEpBH,KAAK;AAAA,cACD,mBAAII,IAAA,CAAK,GAAEC,WAAA,CAAY,CAAC;AAE1C;AAEO,MAAMC,WAAA,GAAcA,CAAC;EAC1BC,QAAA;EACAC,OAAA,GAAU;EACVC,oBAAA,GAAuB;EACvBC,YAAA;EACAC,QAAA;EACA,GAAGC;AACL,MAAa;EACX,MAAM,CAACC,MAAA,EAAQC,SAAS,IAAI/B,QAAA,CAAyBK,cAAA,CAAe2B,KAAK;EACzE,MAAMC,WAAA,GAAcA,CAAA,KAAMF,SAAA,CAAU1B,cAAA,CAAe2B,KAAK;EAIxD,IAAInC,UAAA,CAAWO,UAAU,GAAG;IAC1B,MAAM,IAAI8B,KAAA,CAAM,uEAAuE;EACzF;EACA,IAAIrC,UAAA,CAAWM,iBAAiB,GAAG;IACjC,MAAM,IAAI+B,KAAA,CAAM,wDAAwD;EAC1E;EAEA,MAAMjB,KAAA,GAAQhB,QAAA,CAAS;IACrBkC,QAAA,EAAU,CAAC1B,mBAAmB;IAC9B2B,OAAA,EAASA,CAAA,KAAMP,SAAA,CAAUQ,QAAA,CAAS;IAClCC,eAAA,EAAiBZ,oBAAA;IAAA;IAAA;IAAA;IAIjBa,oBAAA,EAAsB;IACtBC,kBAAA,EAAoB;IACpBC,SAAA,EAAWC;EACb,CAAC;EAOD,MAAMC,eAAA,GAAkB5C,MAAA,CAAO4B,YAAY;EAC3CgB,eAAA,CAAgBC,OAAA,GAAUjB,YAAA;EAC1B,MAAMkB,OAAA,GAAU/C,OAAA,CACd,MACEmB,KAAA,CAAM6B,IAAA,IAAQH,eAAA,CAAgBC,OAAA,IAAW5B,mBAAA,EAAqB;IAAEC,KAAA,EAAOA,KAAA,CAAM6B;EAAK,CAAC,IAAI,MACzF,CAAC7B,KAAA,CAAM6B,IAAI,CACb;EACA,MAAMC,OAAA,GAAUjD,OAAA,CAAQ,MAAO+C,OAAA,GAAUtC,cAAA,CAAesC,OAAO,IAAI,MAAO,CAACA,OAAO,CAAC;EAEnF,MAAMG,MAAA,GAAS,MAAOC,UAAA,IAAyC;IAC7D,IAAIC,IAAA;IACJ,IAAI;MACFA,IAAA,GAAO5C,kBAAA,CAAmB2C,UAAU;IACtC,SAASE,KAAA,EAAO;MACdpB,SAAA,CAAU1B,cAAA,CAAe+C,KAAK;MAC9B,MAAMD,KAAA;IACR;IACA,IAAI,CAACN,OAAA,EAAS;MACZd,SAAA,CAAU1B,cAAA,CAAe+C,KAAK;MAC9B,MAAM,IAAIlB,KAAA,CAAM,uBAAuB;IACzC;IACA,IAAI;MACFH,SAAA,CAAU1B,cAAA,CAAegD,OAAO;MAEhC,MAAMC,MAAA,GAAS,MAAMzB,SAAA,CAAU0B,MAAA,CAAO;QACpCC,QAAA,EAAU9C,GAAA,CAAIwC,IAAI;QAClBO,QAAA,EAAU/C,GAAA,CAAImC,OAAO;QACrBA;MACF,CAAC;MAED,IAAIS,MAAA,KAAW,OAAO,MAAM,IAAIpB,KAAA,CAAM,0BAA0B;MAChEH,SAAA,CAAU1B,cAAA,CAAeqD,OAAO;MAChC9B,QAAA,GAAW;MACX,OAAO;IACT,SAASuB,KAAA,EAAO;MACdpB,SAAA,CAAU1B,cAAA,CAAe+C,KAAK;MAC9B,MAAMD,KAAA;IACR;EACF;EAEA,OACE,eAAA3C,GAAA,CAACJ,UAAA,CAAWuD,QAAA,EAAX;IACCC,KAAA,EAAO;MACLnC,OAAA;MACAC,oBAAA;MACAC,YAAA;MACA,GAAGE,SAAA;MACHZ,KAAA;MACA4B,OAAA;MACAE,OAAA;MACAjB,MAAA;MACAkB,MAAA;MACAf;IACF;IAECT;EAAA,CACH;AAEJ","ignoreList":[]}
@@ -3,6 +3,7 @@ import { useContext, useMemo, useRef, useState } from "react";
3
3
  import { useQuery } from "@tanstack/react-query";
4
4
  import { Context as ConnectKitContext } from "@multiplatform.one/connectkit";
5
5
  import { GpgContext, GpgStatusState } from "./GpgContext.native.js";
6
+ import { assertGpgSignature, gpgSignCommand } from "./signer.native.js";
6
7
  var GPG_NONCE_QUERY_KEY = "ckGpgNonce";
7
8
  var b64 = function b642(s) {
8
9
  return window.btoa(unescape(encodeURIComponent(s)));
@@ -59,13 +60,15 @@ var GpgProvider = function GpgProvider2(param) {
59
60
  }) : null;
60
61
  }, [nonce.data]);
61
62
  var command = useMemo(function () {
62
- return message ? `{ printf %s '${message.replace(/'/g, "'\\''")}' | gpg --detach-sign --armor; gpg --armor --export; }` : null;
63
+ return message ? gpgSignCommand(message) : null;
63
64
  }, [message]);
64
65
  var signIn = async function signIn2(pastedBlob) {
65
- var blob = pastedBlob.trim();
66
- if (!blob.includes("-----BEGIN PGP SIGNATURE-----") || !blob.includes("-----BEGIN PGP PUBLIC KEY BLOCK-----")) {
66
+ var blob;
67
+ try {
68
+ blob = assertGpgSignature(pastedBlob);
69
+ } catch (error) {
67
70
  setStatus(GpgStatusState.ERROR);
68
- throw new Error("Paste the FULL output \u2014 it must contain both a PGP SIGNATURE and a PUBLIC KEY block.");
71
+ throw error;
69
72
  }
70
73
  if (!message) {
71
74
  setStatus(GpgStatusState.ERROR);
@@ -1 +1 @@
1
- {"version":3,"names":["jsx","_jsx","useContext","useMemo","useRef","useState","useQuery","Context","ConnectKitContext","GpgContext","GpgStatusState","GPG_NONCE_QUERY_KEY","b64","b642","s","window","btoa","unescape","encodeURIComponent","defaultBuildMessage","param","nonce","location","host","origin","Date","toISOString","GpgProvider","GpgProvider2","children","enabled","nonceRefetchInterval","buildMessage","onSignIn","gpgConfig","status","setStatus","READY","resetStatus","resetStatus2","Error","queryKey","queryFn","getNonce","refetchInterval","refetchOnWindowFocus","refetchOnReconnect","staleTime","Infinity","buildMessageRef","current","message","_buildMessageRef_current","data","command","replace","signIn","signIn2","pastedBlob","blob","trim","includes","ERROR","LOADING","result","onSign","username","password","SUCCESS","error","Provider","value"],"sources":["../../src/GpgProvider.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["jsx","_jsx","useContext","useMemo","useRef","useState","useQuery","Context","ConnectKitContext","GpgContext","GpgStatusState","assertGpgSignature","gpgSignCommand","GPG_NONCE_QUERY_KEY","b64","b642","s","window","btoa","unescape","encodeURIComponent","defaultBuildMessage","param","nonce","location","host","origin","Date","toISOString","GpgProvider","GpgProvider2","children","enabled","nonceRefetchInterval","buildMessage","onSignIn","gpgConfig","status","setStatus","READY","resetStatus","resetStatus2","Error","queryKey","queryFn","getNonce","refetchInterval","refetchOnWindowFocus","refetchOnReconnect","staleTime","Infinity","buildMessageRef","current","message","_buildMessageRef_current","data","command","signIn","signIn2","pastedBlob","blob","error","ERROR","LOADING","result","onSign","username","password","SUCCESS","Provider","value"],"sources":["../../src/GpgProvider.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -1,8 +1,9 @@
1
1
  import { useGpg } from "./useGpg.mjs";
2
+ import { createGpgSigner, useGpgSigner, gpgSignCommand, assertGpgSignature, gpgSignatureCovers } from "./signer.mjs";
2
3
  import { GpgProvider, GPG_NONCE_QUERY_KEY } from "./GpgProvider.mjs";
3
4
  import { GpgContext, GpgStatusState } from "./GpgContext.mjs";
4
5
  import { default as default2 } from "./SignInWithGpg.mjs";
5
6
  import { default as default3, GPGButton } from "./GpgButton.mjs";
6
7
  import { gpgScreen, GpgScreenRegistrar, GpgBridge } from "./screens.mjs";
7
- export { GPGButton, GPG_NONCE_QUERY_KEY, GpgBridge, GpgContext, GpgProvider, GpgScreenRegistrar, GpgStatusState, default2 as SignInWithGpg, default3 as SignInWithGpgButton, gpgScreen, useGpg };
8
+ export { GPGButton, GPG_NONCE_QUERY_KEY, GpgBridge, GpgContext, GpgProvider, GpgScreenRegistrar, GpgStatusState, default2 as SignInWithGpg, default3 as SignInWithGpgButton, assertGpgSignature, createGpgSigner, gpgScreen, gpgSignCommand, gpgSignatureCovers, useGpg, useGpgSigner };
8
9
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"names":["useGpg","GpgProvider","GPG_NONCE_QUERY_KEY","GpgContext","GpgStatusState","default","default2","default3","GPGButton","gpgScreen","GpgScreenRegistrar","GpgBridge"],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"AAKA,SAASA,MAAA,QAAc;AACvB,SAASC,WAAA,EAAaC,mBAAA,QAA2B;AACjD,SAASC,UAAA,EAAYC,cAAA,QAAsB;AAG3C,SAAoBC,OAAA,IAAXC,QAAA,QAAgC;AACzC,SAAoBD,OAAA,IAAXE,QAAA,EAAgCC,SAAA,QAAiB;AAE1D,SAASC,SAAA,EAAWC,kBAAA,EAAoBC,SAAA,QAAiB","ignoreList":[]}
1
+ {"version":3,"names":["useGpg","createGpgSigner","useGpgSigner","gpgSignCommand","assertGpgSignature","gpgSignatureCovers","GpgProvider","GPG_NONCE_QUERY_KEY","GpgContext","GpgStatusState","default","default2","default3","GPGButton","gpgScreen","GpgScreenRegistrar","GpgBridge"],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"AAKA,SAASA,MAAA,QAAc;AACvB,SACEC,eAAA,EACAC,YAAA,EACAC,cAAA,EACAC,kBAAA,EACAC,kBAAA,QAGK;AACP,SAASC,WAAA,EAAaC,mBAAA,QAA2B;AACjD,SAASC,UAAA,EAAYC,cAAA,QAAsB;AAG3C,SAAoBC,OAAA,IAAXC,QAAA,QAAgC;AACzC,SAAoBD,OAAA,IAAXE,QAAA,EAAgCC,SAAA,QAAiB;AAE1D,SAASC,SAAA,EAAWC,kBAAA,EAAoBC,SAAA,QAAiB","ignoreList":[]}
@@ -1,8 +1,9 @@
1
1
  import { useGpg } from "./useGpg.native.js";
2
+ import { createGpgSigner, useGpgSigner, gpgSignCommand, assertGpgSignature, gpgSignatureCovers } from "./signer.native.js";
2
3
  import { GpgProvider, GPG_NONCE_QUERY_KEY } from "./GpgProvider.native.js";
3
4
  import { GpgContext, GpgStatusState } from "./GpgContext.native.js";
4
5
  import { default as default2 } from "./SignInWithGpg.native.js";
5
6
  import { default as default3, GPGButton } from "./GpgButton.native.js";
6
7
  import { gpgScreen, GpgScreenRegistrar, GpgBridge } from "./screens.native.js";
7
- export { GPGButton, GPG_NONCE_QUERY_KEY, GpgBridge, GpgContext, GpgProvider, GpgScreenRegistrar, GpgStatusState, default2 as SignInWithGpg, default3 as SignInWithGpgButton, gpgScreen, useGpg };
8
+ export { GPGButton, GPG_NONCE_QUERY_KEY, GpgBridge, GpgContext, GpgProvider, GpgScreenRegistrar, GpgStatusState, default2 as SignInWithGpg, default3 as SignInWithGpgButton, assertGpgSignature, createGpgSigner, gpgScreen, gpgSignCommand, gpgSignatureCovers, useGpg, useGpgSigner };
8
9
  //# sourceMappingURL=index.native.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["useGpg","GpgProvider","GPG_NONCE_QUERY_KEY","GpgContext","GpgStatusState","default","default2","default3","GPGButton","gpgScreen","GpgScreenRegistrar","GpgBridge"],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"AAKA,SAASA,MAAA,QAAc;AACvB,SAASC,WAAA,EAAaC,mBAAA,QAA2B;AACjD,SAASC,UAAA,EAAYC,cAAA,QAAsB;AAG3C,SAAoBC,OAAA,IAAXC,QAAA,QAAgC;AACzC,SAAoBD,OAAA,IAAXE,QAAA,EAAgCC,SAAA,QAAiB;AAE1D,SAASC,SAAA,EAAWC,kBAAA,EAAoBC,SAAA,QAAiB","ignoreList":[]}
1
+ {"version":3,"names":["useGpg","createGpgSigner","useGpgSigner","gpgSignCommand","assertGpgSignature","gpgSignatureCovers","GpgProvider","GPG_NONCE_QUERY_KEY","GpgContext","GpgStatusState","default","default2","default3","GPGButton","gpgScreen","GpgScreenRegistrar","GpgBridge"],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"AAKA,SAASA,MAAA,QAAc;AACvB,SAAAC,eAAA,EAAAC,YAAA,EAAAC,cAAA,EAAAC,kBAAA,EAAAC,kBAAA;AAAA,SACEC,WAAA,EAAAC,mBAAA;AAAA,SACAC,UAAA,EAAAC,cAAA;AAAA,SACAC,OAAA,IAAAC,QAAA;AAAA,SACAD,OAAA,IAAAE,QAAA,EAAAC,SAAA;AAAA,SACAC,SAAA,EAAAC,kBAAA,EAAAC,SAAA;AAAA,SAIFH,SAAS,EACTN,mBAAqB,EAGrBS,SAAoB,EACpBR,UAAoB,EAEpBF,WAAS,E","ignoreList":[]}
@@ -0,0 +1,88 @@
1
+ import { ripemd160, sha1 } from "@noble/hashes/legacy.js";
2
+ import { sha224, sha256, sha384, sha512 } from "@noble/hashes/sha2.js";
3
+ const BEGIN = "-----BEGIN PGP SIGNATURE-----";
4
+ const END = "-----END PGP SIGNATURE-----";
5
+ const hashes = {
6
+ 2: sha1,
7
+ 3: ripemd160,
8
+ 8: sha256,
9
+ 9: sha384,
10
+ 10: sha512,
11
+ 11: sha224
12
+ };
13
+ function dearmor(text) {
14
+ const start = text.indexOf(BEGIN);
15
+ const end = text.indexOf(END, start);
16
+ if (start < 0 || end < 0) throw new Error("No PGP SIGNATURE block in the paste");
17
+ const lines = text.slice(start + BEGIN.length, end).split(/\r?\n/).map(line => line.trim());
18
+ const blank = lines.indexOf("", 1);
19
+ const hasHeaders = lines.slice(1, blank < 0 ? 0 : blank).some(line => line.includes(": "));
20
+ const body = (hasHeaders ? lines.slice(blank) : lines).filter(line => line && !/^=[A-Za-z0-9+/]{4}$/.test(line));
21
+ const binary = atob(body.join(""));
22
+ return Uint8Array.from(binary, c => c.charCodeAt(0));
23
+ }
24
+ function signaturePackets(bytes) {
25
+ const packets = [];
26
+ let at = 0;
27
+ while (at < bytes.length) {
28
+ const ctb = bytes[at++];
29
+ if (!(ctb & 128)) throw new Error("The PGP SIGNATURE block is not OpenPGP data");
30
+ let tag;
31
+ let length;
32
+ if (ctb & 64) {
33
+ tag = ctb & 63;
34
+ const first = bytes[at++];
35
+ if (first < 192) length = first;else if (first < 224) length = (first - 192 << 8) + bytes[at++] + 192;else if (first === 255) {
36
+ length = new DataView(bytes.buffer, bytes.byteOffset + at, 4).getUint32(0);
37
+ at += 4;
38
+ } else throw new Error("Partial-length PGP packets are not a detached signature");
39
+ } else {
40
+ tag = ctb >> 2 & 15;
41
+ const size = [1, 2, 4][ctb & 3];
42
+ if (size === void 0) throw new Error("Indeterminate-length PGP packets are not supported");
43
+ length = 0;
44
+ for (let i = 0; i < size; i++) length = length * 256 + bytes[at++];
45
+ }
46
+ if (at + length > bytes.length) throw new Error("The PGP SIGNATURE block is truncated");
47
+ if (tag === 2) packets.push(bytes.subarray(at, at + length));
48
+ at += length;
49
+ }
50
+ return packets;
51
+ }
52
+ function quickCheck(packet, message) {
53
+ if (packet[0] !== 4) {
54
+ throw new Error(`A version ${packet[0]} PGP signature cannot be checked here; sign with a v4 key`);
55
+ }
56
+ const sigType = packet[1];
57
+ if (sigType !== 0 && sigType !== 1) {
58
+ throw new Error(`PGP signature type 0x${sigType.toString(16)} is not a document signature`);
59
+ }
60
+ const hash = hashes[packet[3]];
61
+ if (!hash) throw new Error(`PGP hash algorithm ${packet[3]} is not supported`);
62
+ const hashedEnd = 6 + (packet[4] << 8 | packet[5]);
63
+ const unhashedLength = packet[hashedEnd] << 8 | packet[hashedEnd + 1];
64
+ const left16 = hashedEnd + 2 + unhashedLength;
65
+ if (left16 + 2 > packet.length) throw new Error("The PGP signature packet is truncated");
66
+ const data = sigType === 1 ? new TextEncoder().encode(new TextDecoder().decode(message).replace(/\r?\n/g, "\n").replace(/\n/g, "\r\n")) : message;
67
+ const trailer = new Uint8Array(6);
68
+ trailer[0] = 4;
69
+ trailer[1] = 255;
70
+ new DataView(trailer.buffer).setUint32(2, hashedEnd);
71
+ const input = new Uint8Array(data.length + hashedEnd + trailer.length);
72
+ input.set(data, 0);
73
+ input.set(packet.subarray(0, hashedEnd), data.length);
74
+ input.set(trailer, data.length + hashedEnd);
75
+ const digest = hash(input);
76
+ return [packet[left16] << 8 | packet[left16 + 1], digest[0] << 8 | digest[1]];
77
+ }
78
+ function gpgSignatureCovers(blob, message) {
79
+ const packets = signaturePackets(dearmor(blob));
80
+ if (!packets.length) throw new Error("The PGP SIGNATURE block holds no signature");
81
+ const bytes = new TextEncoder().encode(message);
82
+ return packets.every(packet => {
83
+ const [expected, actual] = quickCheck(packet, bytes);
84
+ return expected === actual;
85
+ });
86
+ }
87
+ export { gpgSignatureCovers };
88
+ //# sourceMappingURL=signature.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["ripemd160","sha1","sha224","sha256","sha384","sha512","BEGIN","END","hashes","dearmor","text","start","indexOf","end","Error","lines","slice","length","split","map","line","trim","blank","hasHeaders","some","includes","body","filter","test","binary","atob","join","Uint8Array","from","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","gpgSignatureCovers","blob","every","expected","actual"],"sources":["../../src/signature.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}