lpgp 0.2.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/LICENSE +52 -0
- package/README.md +218 -0
- package/dist/config.d.ts +17 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +31 -0
- package/dist/config.js.map +1 -0
- package/dist/db.d.ts +80 -0
- package/dist/db.d.ts.map +1 -0
- package/dist/db.js +284 -0
- package/dist/db.js.map +1 -0
- package/dist/decrypt.d.ts +2 -0
- package/dist/decrypt.d.ts.map +1 -0
- package/dist/decrypt.js +25 -0
- package/dist/decrypt.js.map +1 -0
- package/dist/encrypt.d.ts +2 -0
- package/dist/encrypt.d.ts.map +1 -0
- package/dist/encrypt.js +18 -0
- package/dist/encrypt.js.map +1 -0
- package/dist/key-manager.d.ts +119 -0
- package/dist/key-manager.d.ts.map +1 -0
- package/dist/key-manager.js +1235 -0
- package/dist/key-manager.js.map +1 -0
- package/dist/key-utils.d.ts +47 -0
- package/dist/key-utils.d.ts.map +1 -0
- package/dist/key-utils.js +199 -0
- package/dist/key-utils.js.map +1 -0
- package/dist/keychain.d.ts +22 -0
- package/dist/keychain.d.ts.map +1 -0
- package/dist/keychain.js +73 -0
- package/dist/keychain.js.map +1 -0
- package/dist/pgp-tool.d.ts +3 -0
- package/dist/pgp-tool.d.ts.map +1 -0
- package/dist/pgp-tool.js +1061 -0
- package/dist/pgp-tool.js.map +1 -0
- package/dist/prompts.d.ts +11 -0
- package/dist/prompts.d.ts.map +1 -0
- package/dist/prompts.js +109 -0
- package/dist/prompts.js.map +1 -0
- package/dist/schema.sql +86 -0
- package/dist/system-keys.d.ts +32 -0
- package/dist/system-keys.d.ts.map +1 -0
- package/dist/system-keys.js +123 -0
- package/dist/system-keys.js.map +1 -0
- package/dist/ui.d.ts +94 -0
- package/dist/ui.d.ts.map +1 -0
- package/dist/ui.js +175 -0
- package/dist/ui.js.map +1 -0
- package/package.json +56 -0
package/dist/db.js
ADDED
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
import Database from 'better-sqlite3';
|
|
2
|
+
import { readFileSync, existsSync, mkdirSync, copyFileSync } from 'fs';
|
|
3
|
+
import { join, dirname } from 'path';
|
|
4
|
+
import { fileURLToPath } from 'url';
|
|
5
|
+
import { getConfigDir, getDbPath } from './config.js';
|
|
6
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
7
|
+
const __dirname = dirname(__filename);
|
|
8
|
+
// New location: ~/.lpgp/data.db
|
|
9
|
+
const DB_DIR = getConfigDir();
|
|
10
|
+
const DB_PATH = getDbPath();
|
|
11
|
+
// Schema is bundled with the package
|
|
12
|
+
const SCHEMA_PATH = join(__dirname, 'schema.sql');
|
|
13
|
+
// Legacy locations (for migration)
|
|
14
|
+
const LEGACY_DB_DIR = join(__dirname, '..', 'db');
|
|
15
|
+
const LEGACY_DB_PATH = join(LEGACY_DB_DIR, 'data.db');
|
|
16
|
+
const LEGACY_JSON_PATH = join(LEGACY_DB_DIR, 'data.json');
|
|
17
|
+
// SQLite stores booleans as 0/1, so we need conversion helpers
|
|
18
|
+
function boolToInt(value) {
|
|
19
|
+
return value ? 1 : 0;
|
|
20
|
+
}
|
|
21
|
+
function intToBool(value) {
|
|
22
|
+
return value === 1;
|
|
23
|
+
}
|
|
24
|
+
export class Db {
|
|
25
|
+
db;
|
|
26
|
+
constructor() {
|
|
27
|
+
// Ensure config directory exists (handled by getConfigDir, but be explicit)
|
|
28
|
+
if (!existsSync(DB_DIR)) {
|
|
29
|
+
mkdirSync(DB_DIR, { recursive: true });
|
|
30
|
+
}
|
|
31
|
+
// Migrate from legacy location if needed
|
|
32
|
+
this.migrateFromLegacyLocation();
|
|
33
|
+
// Initialize database
|
|
34
|
+
this.db = new Database(DB_PATH);
|
|
35
|
+
this.db.pragma('journal_mode = WAL'); // Better performance for concurrent reads
|
|
36
|
+
// Initialize schema
|
|
37
|
+
this.initializeSchema();
|
|
38
|
+
// Migrate old JSON data if it exists (from legacy location)
|
|
39
|
+
this.migrateFromJson();
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Migrate database from the old project-local location to ~/.lpgp
|
|
43
|
+
*/
|
|
44
|
+
migrateFromLegacyLocation() {
|
|
45
|
+
// If new db already exists, nothing to migrate
|
|
46
|
+
if (existsSync(DB_PATH)) {
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
// Check if there's a database in the legacy location
|
|
50
|
+
if (existsSync(LEGACY_DB_PATH)) {
|
|
51
|
+
try {
|
|
52
|
+
// Copy the old database to the new location
|
|
53
|
+
copyFileSync(LEGACY_DB_PATH, DB_PATH);
|
|
54
|
+
// Also copy WAL and SHM files if they exist
|
|
55
|
+
const walPath = LEGACY_DB_PATH + '-wal';
|
|
56
|
+
const shmPath = LEGACY_DB_PATH + '-shm';
|
|
57
|
+
if (existsSync(walPath)) {
|
|
58
|
+
copyFileSync(walPath, DB_PATH + '-wal');
|
|
59
|
+
}
|
|
60
|
+
if (existsSync(shmPath)) {
|
|
61
|
+
copyFileSync(shmPath, DB_PATH + '-shm');
|
|
62
|
+
}
|
|
63
|
+
console.log(`Migrated database from ${LEGACY_DB_PATH} to ${DB_PATH}`);
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
console.error('Failed to migrate database from legacy location:', error);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
initializeSchema() {
|
|
71
|
+
const schema = readFileSync(SCHEMA_PATH, 'utf-8');
|
|
72
|
+
this.db.exec(schema);
|
|
73
|
+
}
|
|
74
|
+
migrateFromJson() {
|
|
75
|
+
if (!existsSync(LEGACY_JSON_PATH)) {
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
try {
|
|
79
|
+
const fileContent = readFileSync(LEGACY_JSON_PATH, 'utf-8').trim();
|
|
80
|
+
if (fileContent === '') {
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
const oldData = JSON.parse(fileContent);
|
|
84
|
+
// Migrate keypairs (with default values for new fields)
|
|
85
|
+
for (const kp of oldData.keypair) {
|
|
86
|
+
const existing = this.db
|
|
87
|
+
.prepare('SELECT id FROM keypair WHERE fingerprint = ?')
|
|
88
|
+
.get(kp.fingerprint);
|
|
89
|
+
if (!existing) {
|
|
90
|
+
this.db
|
|
91
|
+
.prepare(`INSERT INTO keypair (
|
|
92
|
+
name, email, fingerprint, public_key, private_key, passphrase_protected,
|
|
93
|
+
algorithm, key_size, can_sign, can_encrypt, can_certify, can_authenticate,
|
|
94
|
+
expires_at, revoked, revocation_reason, created_at, updated_at, last_used_at, is_default
|
|
95
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`)
|
|
96
|
+
.run(kp.name, kp.email, kp.fingerprint, kp.public_key, kp.private_key, boolToInt(kp.passphrase_protected), 'RSA', // Default algorithm
|
|
97
|
+
'4096', // Default key size
|
|
98
|
+
1, // can_sign
|
|
99
|
+
1, // can_encrypt
|
|
100
|
+
0, // can_certify
|
|
101
|
+
0, // can_authenticate
|
|
102
|
+
null, // expires_at
|
|
103
|
+
0, // revoked
|
|
104
|
+
null, // revocation_reason
|
|
105
|
+
kp.created_at, kp.updated_at, null, // last_used_at
|
|
106
|
+
boolToInt(kp.is_default));
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
// Migrate contacts (with default values for new fields)
|
|
110
|
+
for (const contact of oldData.contact) {
|
|
111
|
+
const existing = this.db
|
|
112
|
+
.prepare('SELECT id FROM contact WHERE fingerprint = ?')
|
|
113
|
+
.get(contact.fingerprint);
|
|
114
|
+
if (!existing) {
|
|
115
|
+
this.db
|
|
116
|
+
.prepare(`INSERT INTO contact (
|
|
117
|
+
name, email, fingerprint, public_key, algorithm, key_size,
|
|
118
|
+
trusted, last_verified_at, notes, expires_at, revoked, created_at, updated_at
|
|
119
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`)
|
|
120
|
+
.run(contact.name, contact.email, contact.fingerprint, contact.public_key, 'RSA', // Default algorithm
|
|
121
|
+
'4096', // Default key size
|
|
122
|
+
boolToInt(contact.trusted), null, // last_verified_at
|
|
123
|
+
contact.notes || null, null, // expires_at
|
|
124
|
+
0, // revoked
|
|
125
|
+
contact.created_at, contact.updated_at);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
console.log('Successfully migrated data from JSON to SQLite');
|
|
129
|
+
}
|
|
130
|
+
catch (error) {
|
|
131
|
+
console.error('Failed to migrate JSON data:', error);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
select({ table, where, }) {
|
|
135
|
+
if (table === 'settings') {
|
|
136
|
+
const row = this.db.prepare('SELECT * FROM settings WHERE id = 1').get();
|
|
137
|
+
if (!row) {
|
|
138
|
+
throw new Error('Settings not found');
|
|
139
|
+
}
|
|
140
|
+
// Convert SQLite integers to booleans
|
|
141
|
+
return {
|
|
142
|
+
...row,
|
|
143
|
+
auto_sign_messages: intToBool(row.auto_sign_messages),
|
|
144
|
+
prefer_inline_pgp: intToBool(row.prefer_inline_pgp),
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
let sql = `SELECT * FROM ${table}`;
|
|
148
|
+
let params = [];
|
|
149
|
+
if (where) {
|
|
150
|
+
const operator = where.compare === 'is'
|
|
151
|
+
? '='
|
|
152
|
+
: where.compare === 'is not'
|
|
153
|
+
? '!='
|
|
154
|
+
: where.compare === 'like'
|
|
155
|
+
? 'LIKE'
|
|
156
|
+
: 'NOT LIKE';
|
|
157
|
+
sql += ` WHERE ${String(where.key)} ${operator} ?`;
|
|
158
|
+
params.push(where.compare === 'like' || where.compare === 'not like'
|
|
159
|
+
? `%${where.value}%`
|
|
160
|
+
: where.value);
|
|
161
|
+
}
|
|
162
|
+
const rows = this.db.prepare(sql).all(...params);
|
|
163
|
+
// Convert SQLite integers to booleans for keypair and contact
|
|
164
|
+
return rows.map((row) => {
|
|
165
|
+
if (table === 'keypair') {
|
|
166
|
+
return {
|
|
167
|
+
...row,
|
|
168
|
+
passphrase_protected: intToBool(row.passphrase_protected),
|
|
169
|
+
can_sign: intToBool(row.can_sign),
|
|
170
|
+
can_encrypt: intToBool(row.can_encrypt),
|
|
171
|
+
can_certify: intToBool(row.can_certify),
|
|
172
|
+
can_authenticate: intToBool(row.can_authenticate),
|
|
173
|
+
revoked: intToBool(row.revoked),
|
|
174
|
+
is_default: intToBool(row.is_default),
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
else if (table === 'contact') {
|
|
178
|
+
return {
|
|
179
|
+
...row,
|
|
180
|
+
trusted: intToBool(row.trusted),
|
|
181
|
+
revoked: intToBool(row.revoked),
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
return row;
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
insert(table, value) {
|
|
188
|
+
if (table === 'settings') {
|
|
189
|
+
// Settings is a single row, use UPDATE instead
|
|
190
|
+
const updates = value;
|
|
191
|
+
const setPairs = [];
|
|
192
|
+
const params = [];
|
|
193
|
+
for (const [key, val] of Object.entries(updates)) {
|
|
194
|
+
setPairs.push(`${key} = ?`);
|
|
195
|
+
if (typeof val === 'boolean') {
|
|
196
|
+
params.push(boolToInt(val));
|
|
197
|
+
}
|
|
198
|
+
else {
|
|
199
|
+
params.push(val);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
this.db.prepare(`UPDATE settings SET ${setPairs.join(', ')} WHERE id = 1`).run(...params);
|
|
203
|
+
return this.select({ table: 'settings' });
|
|
204
|
+
}
|
|
205
|
+
const now = new Date().toISOString();
|
|
206
|
+
const record = { ...value, created_at: now, updated_at: now };
|
|
207
|
+
// Convert booleans to integers for SQLite
|
|
208
|
+
if (table === 'keypair') {
|
|
209
|
+
record.passphrase_protected = boolToInt(record.passphrase_protected);
|
|
210
|
+
record.can_sign = boolToInt(record.can_sign ?? true);
|
|
211
|
+
record.can_encrypt = boolToInt(record.can_encrypt ?? true);
|
|
212
|
+
record.can_certify = boolToInt(record.can_certify ?? false);
|
|
213
|
+
record.can_authenticate = boolToInt(record.can_authenticate ?? false);
|
|
214
|
+
record.revoked = boolToInt(record.revoked ?? false);
|
|
215
|
+
record.is_default = boolToInt(record.is_default ?? false);
|
|
216
|
+
}
|
|
217
|
+
else if (table === 'contact') {
|
|
218
|
+
record.trusted = boolToInt(record.trusted ?? false);
|
|
219
|
+
record.revoked = boolToInt(record.revoked ?? false);
|
|
220
|
+
}
|
|
221
|
+
const keys = Object.keys(record);
|
|
222
|
+
const placeholders = keys.map(() => '?').join(', ');
|
|
223
|
+
const values = keys.map((k) => record[k]);
|
|
224
|
+
const sql = `INSERT INTO ${table} (${keys.join(', ')}) VALUES (${placeholders})`;
|
|
225
|
+
const info = this.db.prepare(sql).run(...values);
|
|
226
|
+
// Fetch and return the inserted record
|
|
227
|
+
return this.db.prepare(`SELECT * FROM ${table} WHERE id = ?`).get(info.lastInsertRowid);
|
|
228
|
+
}
|
|
229
|
+
update(table, where, updates) {
|
|
230
|
+
const now = new Date().toISOString();
|
|
231
|
+
const record = { ...updates, updated_at: now };
|
|
232
|
+
// Convert booleans to integers for SQLite
|
|
233
|
+
if (table === 'keypair' && record) {
|
|
234
|
+
if ('passphrase_protected' in record)
|
|
235
|
+
record.passphrase_protected = boolToInt(record.passphrase_protected);
|
|
236
|
+
if ('can_sign' in record)
|
|
237
|
+
record.can_sign = boolToInt(record.can_sign);
|
|
238
|
+
if ('can_encrypt' in record)
|
|
239
|
+
record.can_encrypt = boolToInt(record.can_encrypt);
|
|
240
|
+
if ('can_certify' in record)
|
|
241
|
+
record.can_certify = boolToInt(record.can_certify);
|
|
242
|
+
if ('can_authenticate' in record)
|
|
243
|
+
record.can_authenticate = boolToInt(record.can_authenticate);
|
|
244
|
+
if ('revoked' in record)
|
|
245
|
+
record.revoked = boolToInt(record.revoked);
|
|
246
|
+
if ('is_default' in record)
|
|
247
|
+
record.is_default = boolToInt(record.is_default);
|
|
248
|
+
}
|
|
249
|
+
else if (table === 'contact' && record) {
|
|
250
|
+
if ('trusted' in record)
|
|
251
|
+
record.trusted = boolToInt(record.trusted);
|
|
252
|
+
if ('revoked' in record)
|
|
253
|
+
record.revoked = boolToInt(record.revoked);
|
|
254
|
+
}
|
|
255
|
+
else if (table === 'settings' && record) {
|
|
256
|
+
if ('auto_sign_messages' in record)
|
|
257
|
+
record.auto_sign_messages = boolToInt(record.auto_sign_messages);
|
|
258
|
+
if ('prefer_inline_pgp' in record)
|
|
259
|
+
record.prefer_inline_pgp = boolToInt(record.prefer_inline_pgp);
|
|
260
|
+
}
|
|
261
|
+
const setPairs = [];
|
|
262
|
+
const params = [];
|
|
263
|
+
for (const [key, val] of Object.entries(record)) {
|
|
264
|
+
if (key === 'id')
|
|
265
|
+
continue; // Don't update id
|
|
266
|
+
setPairs.push(`${key} = ?`);
|
|
267
|
+
params.push(val);
|
|
268
|
+
}
|
|
269
|
+
params.push(where.value);
|
|
270
|
+
const sql = `UPDATE ${table} SET ${setPairs.join(', ')} WHERE ${String(where.key)} = ?`;
|
|
271
|
+
this.db.prepare(sql).run(...params);
|
|
272
|
+
}
|
|
273
|
+
delete(table, where) {
|
|
274
|
+
if (table === 'settings') {
|
|
275
|
+
throw new Error('Cannot delete settings row');
|
|
276
|
+
}
|
|
277
|
+
const sql = `DELETE FROM ${table} WHERE ${String(where.key)} = ?`;
|
|
278
|
+
this.db.prepare(sql).run(where.value);
|
|
279
|
+
}
|
|
280
|
+
close() {
|
|
281
|
+
this.db.close();
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
//# sourceMappingURL=db.js.map
|
package/dist/db.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"db.js","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decrypt.d.ts","sourceRoot":"","sources":["../src/decrypt.ts"],"names":[],"mappings":"AAUA,wBAAsB,cAAc,CAClC,gBAAgB,EAAE,MAAM,EACxB,iBAAiB,EAAE,MAAM,EACzB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,CAAC,CAkBjB"}
|
package/dist/decrypt.js
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import * as openpgp from 'openpgp';
|
|
2
|
+
// Config to allow weak keys like DSA (not recommended for production)
|
|
3
|
+
const weakKeyConfig = {
|
|
4
|
+
rejectPublicKeyAlgorithms: new Set(),
|
|
5
|
+
rejectHashAlgorithms: new Set(),
|
|
6
|
+
rejectMessageHashAlgorithms: new Set(),
|
|
7
|
+
rejectCurves: new Set(),
|
|
8
|
+
};
|
|
9
|
+
export async function decryptMessage(encryptedMessage, privateKeyArmored, passphrase) {
|
|
10
|
+
const privateKey = await openpgp.decryptKey({
|
|
11
|
+
privateKey: await openpgp.readPrivateKey({ armoredKey: privateKeyArmored, config: weakKeyConfig }),
|
|
12
|
+
passphrase,
|
|
13
|
+
config: weakKeyConfig,
|
|
14
|
+
});
|
|
15
|
+
const message = await openpgp.readMessage({
|
|
16
|
+
armoredMessage: encryptedMessage,
|
|
17
|
+
});
|
|
18
|
+
const { data: decrypted } = await openpgp.decrypt({
|
|
19
|
+
message,
|
|
20
|
+
decryptionKeys: privateKey,
|
|
21
|
+
config: weakKeyConfig,
|
|
22
|
+
});
|
|
23
|
+
return decrypted;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=decrypt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decrypt.js","sourceRoot":"","sources":["../src/decrypt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,SAAS,CAAA;AAElC,sEAAsE;AACtE,MAAM,aAAa,GAAG;IACpB,yBAAyB,EAAE,IAAI,GAAG,EAAE;IACpC,oBAAoB,EAAE,IAAI,GAAG,EAAE;IAC/B,2BAA2B,EAAE,IAAI,GAAG,EAAE;IACtC,YAAY,EAAE,IAAI,GAAG,EAAE;CACxB,CAAA;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,gBAAwB,EACxB,iBAAyB,EACzB,UAAkB;IAElB,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC;QAC1C,UAAU,EAAE,MAAM,OAAO,CAAC,cAAc,CAAC,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;QAClG,UAAU;QACV,MAAM,EAAE,aAAa;KACtB,CAAC,CAAA;IAEF,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC;QACxC,cAAc,EAAE,gBAAgB;KACjC,CAAC,CAAA;IAEF,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC;QAChD,OAAO;QACP,cAAc,EAAE,UAAU;QAC1B,MAAM,EAAE,aAAa;KACtB,CAAC,CAAA;IAEF,OAAO,SAAmB,CAAA;AAC5B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"encrypt.d.ts","sourceRoot":"","sources":["../src/encrypt.ts"],"names":[],"mappings":"AAUA,wBAAsB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAU/F"}
|
package/dist/encrypt.js
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import * as openpgp from 'openpgp';
|
|
2
|
+
// Config to allow weak keys like DSA (not recommended for production)
|
|
3
|
+
const weakKeyConfig = {
|
|
4
|
+
rejectPublicKeyAlgorithms: new Set(),
|
|
5
|
+
rejectHashAlgorithms: new Set(),
|
|
6
|
+
rejectMessageHashAlgorithms: new Set(),
|
|
7
|
+
rejectCurves: new Set(),
|
|
8
|
+
};
|
|
9
|
+
export async function encryptMessage(message, publicKeyArmored) {
|
|
10
|
+
const publicKey = await openpgp.readKey({ armoredKey: publicKeyArmored, config: weakKeyConfig });
|
|
11
|
+
const encrypted = await openpgp.encrypt({
|
|
12
|
+
message: await openpgp.createMessage({ text: message }),
|
|
13
|
+
encryptionKeys: publicKey,
|
|
14
|
+
config: weakKeyConfig,
|
|
15
|
+
});
|
|
16
|
+
return encrypted;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=encrypt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"encrypt.js","sourceRoot":"","sources":["../src/encrypt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,SAAS,CAAA;AAElC,sEAAsE;AACtE,MAAM,aAAa,GAAG;IACpB,yBAAyB,EAAE,IAAI,GAAG,EAAE;IACpC,oBAAoB,EAAE,IAAI,GAAG,EAAE;IAC/B,2BAA2B,EAAE,IAAI,GAAG,EAAE;IACtC,YAAY,EAAE,IAAI,GAAG,EAAE;CACxB,CAAA;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAAe,EAAE,gBAAwB;IAC5E,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,CAAA;IAEhG,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC;QACtC,OAAO,EAAE,MAAM,OAAO,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;QACvD,cAAc,EAAE,SAAS;QACzB,MAAM,EAAE,aAAa;KACtB,CAAC,CAAA;IAEF,OAAO,SAAmB,CAAA;AAC5B,CAAC"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { Db, type Keypair } from './db.js';
|
|
2
|
+
export declare class KeyManager {
|
|
3
|
+
private db;
|
|
4
|
+
constructor(db: Db);
|
|
5
|
+
/**
|
|
6
|
+
* Check if there's a default keypair configured
|
|
7
|
+
*/
|
|
8
|
+
hasDefaultKeypair(): boolean;
|
|
9
|
+
/**
|
|
10
|
+
* Get the default keypair
|
|
11
|
+
*/
|
|
12
|
+
getDefaultKeypair(): Keypair | null;
|
|
13
|
+
/**
|
|
14
|
+
* Prompt user to set up their first keypair
|
|
15
|
+
*/
|
|
16
|
+
setupFirstKeypair(): Promise<void>;
|
|
17
|
+
/**
|
|
18
|
+
* Import a keypair (public + private keys)
|
|
19
|
+
*/
|
|
20
|
+
importKeypair(setAsDefault?: boolean): Promise<void>;
|
|
21
|
+
/**
|
|
22
|
+
* Generate a new PGP keypair
|
|
23
|
+
*/
|
|
24
|
+
generateKeypair(setAsDefault?: boolean): Promise<void>;
|
|
25
|
+
/**
|
|
26
|
+
* Import a keypair from system GPG
|
|
27
|
+
*/
|
|
28
|
+
importFromSystemGpg(): Promise<void>;
|
|
29
|
+
/**
|
|
30
|
+
* List all keypairs
|
|
31
|
+
*/
|
|
32
|
+
listKeypairs(): void;
|
|
33
|
+
/**
|
|
34
|
+
* Show key management menu
|
|
35
|
+
*/
|
|
36
|
+
showKeyManagementMenu(): Promise<'back' | 'main-menu' | void>;
|
|
37
|
+
/**
|
|
38
|
+
* View and manage individual keys
|
|
39
|
+
*/
|
|
40
|
+
private viewAndManageKeys;
|
|
41
|
+
/**
|
|
42
|
+
* Manage an individual key
|
|
43
|
+
*/
|
|
44
|
+
private manageIndividualKey;
|
|
45
|
+
/**
|
|
46
|
+
* Copy public key to clipboard
|
|
47
|
+
*/
|
|
48
|
+
private copyPublicKey;
|
|
49
|
+
/**
|
|
50
|
+
* Export keypair to files
|
|
51
|
+
*/
|
|
52
|
+
private exportKeypair;
|
|
53
|
+
/**
|
|
54
|
+
* Rename a keypair
|
|
55
|
+
*/
|
|
56
|
+
private renameKeypair;
|
|
57
|
+
/**
|
|
58
|
+
* Set a keypair as default by ID
|
|
59
|
+
*/
|
|
60
|
+
private setDefaultKeypairById;
|
|
61
|
+
/**
|
|
62
|
+
* Clear stored passphrase from system keychain
|
|
63
|
+
*/
|
|
64
|
+
private clearStoredPassphrase;
|
|
65
|
+
/**
|
|
66
|
+
* Delete a keypair by ID
|
|
67
|
+
*/
|
|
68
|
+
private deleteKeypairById;
|
|
69
|
+
/**
|
|
70
|
+
* Set a keypair as default
|
|
71
|
+
*/
|
|
72
|
+
private setDefaultKeypair;
|
|
73
|
+
/**
|
|
74
|
+
* Delete a keypair
|
|
75
|
+
*/
|
|
76
|
+
private deleteKeypair;
|
|
77
|
+
/**
|
|
78
|
+
* Read multiline input from stdin
|
|
79
|
+
*/
|
|
80
|
+
private readMultilineInput;
|
|
81
|
+
/**
|
|
82
|
+
* Read PGP key input with smart detection
|
|
83
|
+
* Allows finishing with Enter when a complete key is detected, or Ctrl+D
|
|
84
|
+
*/
|
|
85
|
+
private readKeyInput;
|
|
86
|
+
/**
|
|
87
|
+
* View and manage contacts
|
|
88
|
+
*/
|
|
89
|
+
private viewAndManageContacts;
|
|
90
|
+
/**
|
|
91
|
+
* Manage an individual contact
|
|
92
|
+
*/
|
|
93
|
+
private manageIndividualContact;
|
|
94
|
+
/**
|
|
95
|
+
* Copy contact's public key to clipboard
|
|
96
|
+
*/
|
|
97
|
+
private copyContactPublicKey;
|
|
98
|
+
/**
|
|
99
|
+
* View contact's public key
|
|
100
|
+
*/
|
|
101
|
+
private viewContactPublicKey;
|
|
102
|
+
/**
|
|
103
|
+
* Rename a contact
|
|
104
|
+
*/
|
|
105
|
+
private renameContact;
|
|
106
|
+
/**
|
|
107
|
+
* Edit contact notes
|
|
108
|
+
*/
|
|
109
|
+
private editContactNotes;
|
|
110
|
+
/**
|
|
111
|
+
* Toggle contact trust status
|
|
112
|
+
*/
|
|
113
|
+
private toggleContactTrust;
|
|
114
|
+
/**
|
|
115
|
+
* Delete a contact
|
|
116
|
+
*/
|
|
117
|
+
private deleteContact;
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=key-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"key-manager.d.ts","sourceRoot":"","sources":["../src/key-manager.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,EAAE,EAAE,KAAK,OAAO,EAAgB,MAAM,SAAS,CAAA;AAuCxD,qBAAa,UAAU;IACrB,OAAO,CAAC,EAAE,CAAI;gBAEF,EAAE,EAAE,EAAE;IAIlB;;OAEG;IACH,iBAAiB,IAAI,OAAO;IAQ5B;;OAEG;IACH,iBAAiB,IAAI,OAAO,GAAG,IAAI;IAQnC;;OAEG;IACG,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IA6CxC;;OAEG;IACG,aAAa,CAAC,YAAY,GAAE,OAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IA0NjE;;OAEG;IACG,eAAe,CAAC,YAAY,GAAE,OAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAwHnE;;OAEG;IACG,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;IAqK1C;;OAEG;IACH,YAAY,IAAI,IAAI;IAqBpB;;OAEG;IACG,qBAAqB,IAAI,OAAO,CAAC,MAAM,GAAG,WAAW,GAAG,IAAI,CAAC;IA+CnE;;OAEG;YACW,iBAAiB;IA2C/B;;OAEG;YACW,mBAAmB;IAiFjC;;OAEG;YACW,aAAa;IAsB3B;;OAEG;YACW,aAAa;IAoE3B;;OAEG;YACW,aAAa;IAiB3B;;OAEG;YACW,qBAAqB;IAgBnC;;OAEG;YACW,qBAAqB;IAwBnC;;OAEG;YACW,iBAAiB;IAoB/B;;OAEG;YACW,iBAAiB;IAmC/B;;OAEG;YACW,aAAa;IAuC3B;;OAEG;YACW,kBAAkB;IAmBhC;;;OAGG;YACW,YAAY;IA4B1B;;OAEG;YACW,qBAAqB;IA2CnC;;OAEG;YACW,uBAAuB;IA+ErC;;OAEG;YACW,oBAAoB;IAsBlC;;OAEG;YACW,oBAAoB;IAmBlC;;OAEG;YACW,aAAa;IAiB3B;;OAEG;YACW,gBAAgB;IAgB9B;;OAEG;YACW,kBAAkB;IAWhC;;OAEG;YACW,aAAa;CAmB5B"}
|