@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.
- package/dist/cjs/GpgButton.native.js.map +1 -1
- package/dist/cjs/GpgContext.native.js.map +1 -1
- package/dist/cjs/GpgIcon.native.js.map +1 -1
- 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/SignInWithGpg.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/screens.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/cjs/useGpg.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/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/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/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
|
@@ -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":";;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,YAAA,GAAAC,GAAA,IAAAC,WAAA,CAAAC,SAAA;EAAAC,KAAA;AAAA,IAAAH,GAAA;AAAA,IAAAI,cAAA;AAAAC,QAAA,CAAAD,cAAA;EAAAE,oBAAA,EAAAA,CAAA,KAAAA,oBAAA;EAAAC,mBAAA,EAAAA,CAAA,KAAAA,mBAAA;EAAAC,kBAAA,EAAAA,CAAA,KAAAA,kBAAA;EAAAC,eAAA,EAAAA,CAAA,KAAAA,eAAA;EAAAC,cAAA,EAAAA,CAAA,KAAAA,cAAA;EAAAC,kBAAA,EAAAA,CAAA,KAAAC,iBAAA,CAAAD,kBAAA;EAAAE,YAAA,EAAAA,CAAA,KAAAA;AAAA;AAAAC,MAAA,CAAAC,OAAA,GAAAhB,YAAqC,CAAAK,cAAA;AACrC,IAAAY,YAAA,GAAAC,OAAmC;AAEnC,IAAAC,gBAAA,GAAAD,OAAmC;AAS5B,IAAAL,iBAAM,GAAAK,OAAsB;AAC5B,IAAAV,mBAAM,kCAAuB;AAQ7B,IAAAD,oBAAwB,yCAAyB;AACtD,SAAOI,eAAAS,OAAgB,EAAQ;EACjC,uBAAAA,OAAA,CAAAC,OAAA;AAGO;AACL,SAAMZ,kBAAeA,CAAKa,IAAA;EAC1B,IAAIC,OAAC,GAAQD,IAAA,CAAAE,IAAS;EACpB,KAAAD,OAAU,CAAAE,QAAA,CAAAjB,mBAAA,MAAAe,OAAA,CAAAE,QAAA,CAAAlB,oBAAA;IAAA,MACR,IAAAmB,KAAA;EAAA;EAEJ,OAAAH,OAAA;AACA;AACF,SAAAb,gBAAA;EA+BO,IAAAiB,OAAS;EACd,IAAIC,MAAA,OAAiC;EACrC,IAAIC,SAAqF,sBAAAC,GAAA;EACzF,IAAAC,IAAM,YAAYC,MAAA;IAClB,IAAMC,yBAAa;MAAAC,iBAAA;MAAAC,cAAA;IACjB;MACF,SAAAC,SAAA,GAAAP,SAAA,CAAAQ,MAAA,CAAAC,QAAA,KAAAC,KAAA,IAAAN,yBAAA,IAAAM,KAAA,GAAAH,SAAA,CAAAI,IAAA,IAAAC,IAAA,GAAAR,yBAAA;QAEM,IAAAS,QAAoB,GAAAH,KAAA,CAAAnC,KAAA;QACxBsC,QAAQ;MACR;IACA,SAAAC,GAAA,EAAc;MACdT,iBAAc;MACZC,cAAO,GAAAQ,GAAA;IACT;MACA;QACE,KAAAV,yBAAyB,IAAAG,SAAA,CAAAQ,MAAA;UACzBR,SAAW,CAAAQ,MAAiB;QAC1B;MACA;QACA,IAAAV,iBAAK;UACN,MAAAC,cAAA;QACH;MACA;IACE;EACA;EACE,IAAAU,MAAA,GAAM;IAAIC,MACR;IAAAC,OACF;IAAAC,YACF,GACA,aAAM,CACN;IACE,IAAArB,OAAMA,CAAA,EAAI;MAAA,OACRA,OAAA;IAAA;IACFsB,WACFA,CAAA7B,OAAA;MACAQ,MAAM,KAAE,QAAQA,MAAI,uBAAAA,MAAA,CAAAsB,MAAA,KAAAxB,KAAA;MACpB,WAASyB,OAAA,WAAAC,OAAA,EAAAF,MAAA;QACTtB,MAAA,GAAU;UACVwB,OAAK;UACLF;QACF;QACAvB,OAAO;UACDP,OAAC;UACLiC,OAAQ,EAAA1C,cAAW,CAAAS,OAAA;QACnB;QACAW,IAAA;MACA;IACA;IACFuB,OAAAhC,IAAA,EAAAiC,OAAA;MACA,KAAA3B,MAAU,KAAAD,OAAU,YAAAD,KAAA;MAClB,IAAA6B,OAAU,KAAI5B,OAAQ;QACtB,MAAO,IAAAD,KAAM,gFAAyB;MACxC;MACF,IAAA8B,SAAA,GAAA/C,kBAAA,CAAAa,IAAA;MACA,IAAO,KAAAH,gBAAA,CAAAP,kBAAA,EAAA4C,SAAA,EAAA7B,OAAA,CAAAP,OAAA;QACT,UAAAM,KAAA;MAOO;MACL;QAAA0B;MAAA,IAAAxB,MAAA;MACEA,MAAO;MACPD,OAAM,OAAO;MACbI,IAAM;MACRqB,OAAA,CAAAI,SAAA;IACA;IACFC,OAAAC,MAAA;MAEI,KAAA9B,MAAA,EAAiC;MACrC,IAAS;QAAAsB;MAAA,IAAAtB,MAA2B;MAClCA,MAAA,OAAiB;MACjBD,OAAO;MACTI,IAAA","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
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":[]}
|
package/dist/esm/GpgProvider.mjs
CHANGED
|
@@ -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 ?
|
|
51
|
+
const command = useMemo(() => message ? gpgSignCommand(message) : null, [message]);
|
|
51
52
|
const signIn = async pastedBlob => {
|
|
52
|
-
|
|
53
|
-
|
|
53
|
+
let blob;
|
|
54
|
+
try {
|
|
55
|
+
blob = assertGpgSignature(pastedBlob);
|
|
56
|
+
} catch (error) {
|
|
54
57
|
setStatus(GpgStatusState.ERROR);
|
|
55
|
-
throw
|
|
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","
|
|
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":"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","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 ?
|
|
63
|
+
return message ? gpgSignCommand(message) : null;
|
|
63
64
|
}, [message]);
|
|
64
65
|
var signIn = async function signIn2(pastedBlob) {
|
|
65
|
-
var blob
|
|
66
|
-
|
|
66
|
+
var blob;
|
|
67
|
+
try {
|
|
68
|
+
blob = assertGpgSignature(pastedBlob);
|
|
69
|
+
} catch (error) {
|
|
67
70
|
setStatus(GpgStatusState.ERROR);
|
|
68
|
-
throw
|
|
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","
|
|
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":[]}
|
package/dist/esm/index.mjs
CHANGED
|
@@ -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
|
package/dist/esm/index.mjs.map
CHANGED
|
@@ -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":[]}
|
package/dist/esm/index.native.js
CHANGED
|
@@ -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,
|
|
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":[]}
|