core-3nweb-client-lib 0.47.4 → 0.48.1
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/build/core/asmail/delivery/common.d.ts +2 -0
- package/build/core/asmail/delivery/msg.js +2 -2
- package/build/core/asmail/inbox/attachments/fs.d.ts +2 -1
- package/build/core/asmail/inbox/attachments/fs.js +4 -3
- package/build/core/asmail/inbox/index.d.ts +3 -0
- package/build/core/asmail/inbox/index.js +4 -3
- package/build/core/asmail/inbox/msg-on-disk.js +1 -1
- package/build/core/asmail/index.d.ts +3 -1
- package/build/core/asmail/index.js +5 -2
- package/build/core/asmail/msg/packer.d.ts +4 -2
- package/build/core/asmail/msg/packer.js +28 -22
- package/build/core/asmail/sending-params/index.d.ts +2 -1
- package/build/core/asmail/sending-params/index.js +2 -2
- package/build/core/asmail/sending-params/invitations-anon.d.ts +3 -1
- package/build/core/asmail/sending-params/invitations-anon.js +6 -5
- package/build/core/id-manager/index.d.ts +4 -2
- package/build/core/id-manager/index.js +8 -7
- package/build/core/index.d.ts +3 -1
- package/build/core/index.js +11 -10
- package/build/core/keyring/common.d.ts +3 -2
- package/build/core/keyring/common.js +7 -7
- package/build/core/keyring/correspondent-keys.d.ts +4 -2
- package/build/core/keyring/correspondent-keys.js +10 -9
- package/build/core/keyring/index.d.ts +3 -1
- package/build/core/keyring/index.js +6 -5
- package/build/core/keyring/published-intro-key.d.ts +3 -1
- package/build/core/keyring/published-intro-key.js +8 -5
- package/build/core/startup/sign-up.d.ts +7 -5
- package/build/core/startup/sign-up.js +9 -8
- package/build/core/storage/index.d.ts +5 -3
- package/build/core/storage/index.js +9 -8
- package/build/core/storage/local/storage.d.ts +3 -1
- package/build/core/storage/local/storage.js +5 -4
- package/build/core/storage/synced/storage.d.ts +4 -2
- package/build/core/storage/synced/storage.js +7 -6
- package/build/injected-globals/platform-devfs.d.ts +13 -20
- package/build/ipc-via-protobuf/connector-services-side.js +1 -2
- package/build/lib-client/mailer-id/provisioner.d.ts +3 -1
- package/build/lib-client/mailer-id/provisioner.js +3 -3
- package/build/lib-client/objs-on-disk/obj-folders.js +3 -2
- package/build/lib-client/request-utils.d.ts +2 -2
- package/build/lib-client/request-utils.js +3 -3
- package/build/lib-client/xsp-fs/common.d.ts +2 -0
- package/build/lib-client/xsp-fs/common.js +2 -1
- package/build/lib-client/xsp-fs/file-node.d.ts +2 -1
- package/build/lib-client/xsp-fs/file-node.js +3 -3
- package/build/lib-client/xsp-fs/folder-node.d.ts +3 -2
- package/build/lib-client/xsp-fs/folder-node.js +10 -11
- package/build/lib-client/xsp-fs/link-node.d.ts +2 -1
- package/build/lib-client/xsp-fs/link-node.js +3 -3
- package/build/lib-client/xsp-fs/node-persistence.d.ts +4 -2
- package/build/lib-client/xsp-fs/node-persistence.js +4 -4
- package/build/lib-common/async-fs-node.d.ts +13 -17
- package/build/lib-common/mailerid-sigs/id-provider.d.ts +6 -5
- package/build/lib-common/mailerid-sigs/id-provider.js +7 -7
- package/build/lib-common/mailerid-sigs/user.d.ts +3 -2
- package/build/lib-common/mailerid-sigs/user.js +1 -1
- package/build/lib-common/mailerid-sigs/utils-NaCl-Ed.d.ts +3 -2
- package/build/lib-common/mailerid-sigs/utils-NaCl-Ed.js +4 -4
- package/build/lib-common/processes/sleep.js +2 -1
- package/build/lib-common/rng-def.d.ts +3 -0
- package/build/lib-common/rng-def.js +32 -0
- package/build/lib-common/timed-non-weak-cache.js +3 -2
- package/build/lib-common/weak-cache.js +2 -1
- package/build/{lib-common → lib-common-on-node}/random-node.js +2 -2
- package/build/lib-common-on-node/request-from-node.js +2 -2
- package/build/tests/caps-api/asmail/specs/send-with-attacment-from-storage.js +2 -2
- package/build/tests/caps-api/file-sink-checks/different-cases.js +1 -1
- package/build/tests/caps-api/file-sink-checks/splice.js +5 -5
- package/build/tests/caps-api/file-sink-checks/truncate.js +2 -2
- package/build/tests/caps-api/fs-checks/not-versioned/getByteSink.js +3 -3
- package/build/tests/caps-api/fs-checks/not-versioned/getByteSource.js +2 -2
- package/build/tests/caps-api/fs-checks/not-versioned/readBytes.js +3 -3
- package/build/tests/caps-api/fs-checks/not-versioned/writeBytes.js +10 -10
- package/build/tests/caps-api/fs-checks/sync-on-one-dev/startUpload.js +1 -1
- package/build/tests/caps-api/fs-checks/sync-on-one-dev/stat.js +1 -1
- package/build/tests/caps-api/fs-checks/sync-on-one-dev/status.js +1 -1
- package/build/tests/caps-api/fs-checks/sync-on-one-dev/upload.js +1 -1
- package/build/tests/caps-api/fs-checks/sync-with-two-devs/conflicts.js +1 -1
- package/build/tests/caps-api/fs-checks/sync-with-two-devs/update-propagation.js +1 -1
- package/build/tests/caps-api/fs-checks/versioned/archiveCurrent.js +1 -1
- package/build/tests/caps-api/fs-checks/versioned/getByteSink.js +4 -4
- package/build/tests/caps-api/fs-checks/versioned/getByteSource.js +2 -2
- package/build/tests/caps-api/fs-checks/versioned/readBytes.js +3 -3
- package/build/tests/caps-api/fs-checks/versioned/writeBytes.js +9 -9
- package/build/tests/caps-api/fs-checks/with-core-restarts/xattrs.js +1 -1
- package/build/tests/caps-api/startup/signin-empty-cache.js +1 -1
- package/build/tests/computer.3nweb.core/id-manager.js +1 -1
- package/build/tests/libs-for-tests/core-runner.js +2 -2
- package/build/tests/units/folder-node-serialization.js +1 -1
- package/build/tests/units/mid-sigs-NaCl-Ed.js +10 -9
- package/build/tests/units/obj-folders.js +1 -1
- package/package.json +1 -1
- /package/build/{lib-common → lib-common-on-node}/random-node.d.ts +0 -0
|
@@ -18,7 +18,6 @@
|
|
|
18
18
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
19
|
exports.ExposedObjs = exports.ServicesSideImpl = void 0;
|
|
20
20
|
const protobuf_msg_1 = require("./protobuf-msg");
|
|
21
|
-
const random_node_1 = require("../lib-common/random-node");
|
|
22
21
|
const connector_1 = require("./connector");
|
|
23
22
|
class ServicesSideImpl {
|
|
24
23
|
constructor(sendMsg) {
|
|
@@ -161,7 +160,7 @@ class ExposedObjs {
|
|
|
161
160
|
newRef(objType) {
|
|
162
161
|
let id;
|
|
163
162
|
do {
|
|
164
|
-
id = (
|
|
163
|
+
id = `${Math.floor(Math.random() * Number.MAX_SAFE_INTEGER)}`;
|
|
165
164
|
} while (this.objs.has(id));
|
|
166
165
|
return {
|
|
167
166
|
objType, path: [id]
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { NetClient } from '../request-utils';
|
|
2
2
|
import { ServiceUser, ICalcDHSharedKey, LoginCompletion } from '../user-with-pkl-session';
|
|
3
3
|
import { MailerIdSigner } from '../../lib-common/mailerid-sigs/user';
|
|
4
|
+
import { AsyncRNG } from '../../lib-common/rng-def';
|
|
4
5
|
export interface ProvisioningCompletion {
|
|
5
6
|
keyParams: any;
|
|
6
7
|
serverPKey: Uint8Array;
|
|
@@ -13,6 +14,7 @@ export interface ProvisioningCompletion {
|
|
|
13
14
|
* identified by a given uri.
|
|
14
15
|
*/
|
|
15
16
|
export declare class MailerIdProvisioner extends ServiceUser {
|
|
17
|
+
private readonly random;
|
|
16
18
|
private userCert;
|
|
17
19
|
private provCert;
|
|
18
20
|
private midDomain;
|
|
@@ -22,7 +24,7 @@ export declare class MailerIdProvisioner extends ServiceUser {
|
|
|
22
24
|
* @param userId
|
|
23
25
|
* @param uri identifies place of MailerId service.
|
|
24
26
|
*/
|
|
25
|
-
constructor(userId: string, serviceUri: string, net: NetClient);
|
|
27
|
+
constructor(userId: string, serviceUri: string, net: NetClient, random: AsyncRNG);
|
|
26
28
|
private setUrlAndDomain;
|
|
27
29
|
/**
|
|
28
30
|
* @param pkey is a public key, that needs to be certified.
|
|
@@ -22,7 +22,6 @@ const user_with_pkl_session_1 = require("../user-with-pkl-session");
|
|
|
22
22
|
const jwkeys_1 = require("../../lib-common/jwkeys");
|
|
23
23
|
const json_utils_1 = require("../../lib-common/json-utils");
|
|
24
24
|
const canonical_address_1 = require("../../lib-common/canonical-address");
|
|
25
|
-
const random = require("../../lib-common/random-node");
|
|
26
25
|
const api = require("../../lib-common/service-api/mailer-id/provisioning");
|
|
27
26
|
const assert_1 = require("../../lib-common/assert");
|
|
28
27
|
const user_1 = require("../../lib-common/mailerid-sigs/user");
|
|
@@ -40,11 +39,12 @@ class MailerIdProvisioner extends user_with_pkl_session_1.ServiceUser {
|
|
|
40
39
|
* @param userId
|
|
41
40
|
* @param uri identifies place of MailerId service.
|
|
42
41
|
*/
|
|
43
|
-
constructor(userId, serviceUri, net) {
|
|
42
|
+
constructor(userId, serviceUri, net, random) {
|
|
44
43
|
super(userId, {
|
|
45
44
|
login: '',
|
|
46
45
|
logout: ''
|
|
47
46
|
}, net);
|
|
47
|
+
this.random = random;
|
|
48
48
|
this.userCert = undefined;
|
|
49
49
|
this.provCert = undefined;
|
|
50
50
|
this.midDomain = undefined;
|
|
@@ -142,7 +142,7 @@ class MailerIdProvisioner extends user_with_pkl_session_1.ServiceUser {
|
|
|
142
142
|
* Undefined value means that a default key should be used.
|
|
143
143
|
*/
|
|
144
144
|
async provisionSigner(keyId) {
|
|
145
|
-
const pair = (0, user_1.generateSigningKeyPair)(random
|
|
145
|
+
const pair = await (0, user_1.generateSigningKeyPair)(this.random);
|
|
146
146
|
await this.setUrlAndDomain();
|
|
147
147
|
const login = await this.super_login(keyId);
|
|
148
148
|
const completion = async (dhsharedKeyCalc, certDuration, assertDuration = DEFAULT_ASSERTION_VALIDITY) => {
|
|
@@ -229,10 +229,11 @@ class RotationsProc {
|
|
|
229
229
|
return (0, path_1.join)(this.generationsFolder, `${backetIndex}`);
|
|
230
230
|
}
|
|
231
231
|
setNextCacheRotation(secs) {
|
|
232
|
-
|
|
232
|
+
var _a, _b;
|
|
233
|
+
(_b = (_a = setTimeout(async () => {
|
|
233
234
|
await this.rotate();
|
|
234
235
|
this.setNextCacheRotation(this.generations[0].period);
|
|
235
|
-
}, secs * 1000).unref();
|
|
236
|
+
}, secs * 1000)).unref) === null || _b === void 0 ? void 0 : _b.call(_a);
|
|
236
237
|
}
|
|
237
238
|
async rotate() {
|
|
238
239
|
const now = Math.floor(Date.now() / 1000);
|
|
@@ -28,9 +28,9 @@ export interface Headers {
|
|
|
28
28
|
get(name: string): string | undefined;
|
|
29
29
|
}
|
|
30
30
|
export type ContentType = 'application/json' | 'application/octet-stream' | 'text/plain';
|
|
31
|
-
export type RequestFn<T> = (opts: RequestOpts,
|
|
31
|
+
export type RequestFn<T> = (opts: RequestOpts, reqContentType?: ContentType, reqBody?: Uint8Array) => Promise<Reply<T>>;
|
|
32
32
|
export declare function processRequest<T>(requester: (opts: https.RequestOptions) => ClientRequest, httpsOpts: https.RequestOptions, opts: RequestOpts, reqBody: Uint8Array | undefined, attempt?: number): Promise<Reply<T>>;
|
|
33
|
-
export declare function formHttpsReqOpts(opts: RequestOpts,
|
|
33
|
+
export declare function formHttpsReqOpts(opts: RequestOpts, reqContentType?: ContentType, reqBody?: Uint8Array): https.RequestOptions;
|
|
34
34
|
export declare function extractIntHeader(rep: Reply<any>, headerName: string): number;
|
|
35
35
|
export type OpenWebSocket = (url: string, sessionId: string) => Promise<Reply<WebSocket>>;
|
|
36
36
|
export interface NetClient {
|
|
@@ -45,7 +45,7 @@ async function processRequest(requester, httpsOpts, opts, reqBody, attempt = 0)
|
|
|
45
45
|
throw err;
|
|
46
46
|
}
|
|
47
47
|
}
|
|
48
|
-
function formHttpsReqOpts(opts,
|
|
48
|
+
function formHttpsReqOpts(opts, reqContentType, reqBody) {
|
|
49
49
|
var _a;
|
|
50
50
|
if (!opts.url) {
|
|
51
51
|
throw new Error(`Cannot send net request, cause url is not set in given options.`);
|
|
@@ -65,8 +65,8 @@ function formHttpsReqOpts(opts, contentType, reqBody) {
|
|
|
65
65
|
if (reqBody) {
|
|
66
66
|
netReqOpts.headers['Content-Length'] = reqBody.length;
|
|
67
67
|
}
|
|
68
|
-
if (
|
|
69
|
-
netReqOpts.headers[exports.CONTENT_TYPE_HEADER] =
|
|
68
|
+
if (reqContentType) {
|
|
69
|
+
netReqOpts.headers[exports.CONTENT_TYPE_HEADER] = reqContentType;
|
|
70
70
|
}
|
|
71
71
|
if (opts.sessionId) {
|
|
72
72
|
netReqOpts.headers[exports.SESSION_ID_HEADER] = opts.sessionId;
|
|
@@ -3,6 +3,7 @@ import type { AsyncSBoxCryptor, Subscribe, ObjSource } from 'xsp-files';
|
|
|
3
3
|
import type { Observable } from 'rxjs';
|
|
4
4
|
import type { LogError } from '../logging/log-to-file';
|
|
5
5
|
import { StorageConnectionStatus } from '../../core/storage/synced/remote-events';
|
|
6
|
+
import { AsyncRNG } from '../../lib-common/rng-def';
|
|
6
7
|
export type { AsyncSBoxCryptor } from 'xsp-files';
|
|
7
8
|
export type { FolderInJSON } from './folder-node';
|
|
8
9
|
type StorageType = web3n.files.FSType;
|
|
@@ -48,6 +49,7 @@ export interface Storage {
|
|
|
48
49
|
readonly type: StorageType;
|
|
49
50
|
readonly versioned: boolean;
|
|
50
51
|
readonly cryptor: AsyncSBoxCryptor;
|
|
52
|
+
readonly random: AsyncRNG;
|
|
51
53
|
readonly nodes: NodesContainer;
|
|
52
54
|
readonly logError: LogError;
|
|
53
55
|
getNodeEvents(): Observable<NodeEvent>;
|
|
@@ -103,7 +103,8 @@ function wrapStorageImplementation(impl) {
|
|
|
103
103
|
close: impl.close.bind(impl),
|
|
104
104
|
removeObj: impl.removeObj.bind(impl),
|
|
105
105
|
status: impl.status.bind(impl),
|
|
106
|
-
cryptor: impl.cryptor
|
|
106
|
+
cryptor: impl.cryptor,
|
|
107
|
+
random: impl.random
|
|
107
108
|
};
|
|
108
109
|
return Object.freeze(wrap);
|
|
109
110
|
}
|
|
@@ -8,6 +8,7 @@ import { Storage, AsyncSBoxCryptor } from './common';
|
|
|
8
8
|
import { Subscribe, ObjSource } from 'xsp-files';
|
|
9
9
|
import { CommonAttrs, XAttrs } from './attrs';
|
|
10
10
|
import { NodePersistance } from './node-persistence';
|
|
11
|
+
import { AsyncRNG } from '../../lib-common/rng-def';
|
|
11
12
|
type FileByteSource = web3n.files.FileByteSource;
|
|
12
13
|
type FileByteSink = web3n.files.FileByteSink;
|
|
13
14
|
type XAttrsChanges = web3n.files.XAttrsChanges;
|
|
@@ -20,7 +21,7 @@ interface FileAttrs {
|
|
|
20
21
|
xattrs?: XAttrs;
|
|
21
22
|
}
|
|
22
23
|
declare class FilePersistance extends NodePersistance {
|
|
23
|
-
constructor(zNonce: Uint8Array, key: Uint8Array, cryptor: AsyncSBoxCryptor);
|
|
24
|
+
constructor(zNonce: Uint8Array, key: Uint8Array, cryptor: AsyncSBoxCryptor, random: AsyncRNG);
|
|
24
25
|
getFileAttrs(objSrc: ObjSource): Promise<FileAttrs>;
|
|
25
26
|
getFileSource(objSrc: ObjSource): Promise<FileByteSource>;
|
|
26
27
|
readBytes(objSrc: ObjSource, start: number | undefined, end: number | undefined): Promise<Uint8Array | undefined>;
|
|
@@ -30,8 +30,8 @@ const attrs_1 = require("./attrs");
|
|
|
30
30
|
const file_1 = require("../../lib-common/exceptions/file");
|
|
31
31
|
const node_persistence_1 = require("./node-persistence");
|
|
32
32
|
class FilePersistance extends node_persistence_1.NodePersistance {
|
|
33
|
-
constructor(zNonce, key, cryptor) {
|
|
34
|
-
super(zNonce, key, cryptor);
|
|
33
|
+
constructor(zNonce, key, cryptor, random) {
|
|
34
|
+
super(zNonce, key, cryptor, random);
|
|
35
35
|
Object.seal(this);
|
|
36
36
|
}
|
|
37
37
|
async getFileAttrs(objSrc) {
|
|
@@ -87,7 +87,7 @@ class FileNode extends node_in_fs_1.NodeInFS {
|
|
|
87
87
|
if (!fileName || !objId) {
|
|
88
88
|
throw new Error("Bad file parameter(s) given");
|
|
89
89
|
}
|
|
90
|
-
this.crypto = new FilePersistance((0, xsp_files_1.idToHeaderNonce)(this.objId), key, this.storage.cryptor);
|
|
90
|
+
this.crypto = new FilePersistance((0, xsp_files_1.idToHeaderNonce)(this.objId), key, this.storage.cryptor, this.storage.random);
|
|
91
91
|
Object.seal(this);
|
|
92
92
|
}
|
|
93
93
|
static async makeForNew(storage, parentId, name, key) {
|
|
@@ -6,6 +6,7 @@ import { LinkParameters } from '../fs-utils/files';
|
|
|
6
6
|
import { AsyncSBoxCryptor, Subscribe, ObjSource } from 'xsp-files';
|
|
7
7
|
import { CommonAttrs, XAttrs } from './attrs';
|
|
8
8
|
import { NodePersistance } from './node-persistence';
|
|
9
|
+
import { AsyncRNG } from '../../lib-common/rng-def';
|
|
9
10
|
type ListingEntry = web3n.files.ListingEntry;
|
|
10
11
|
type XAttrsChanges = web3n.files.XAttrsChanges;
|
|
11
12
|
type FolderDiff = web3n.files.FolderDiff;
|
|
@@ -54,14 +55,14 @@ export interface FolderInJSON extends FolderInfo {
|
|
|
54
55
|
xattrs?: any;
|
|
55
56
|
}
|
|
56
57
|
declare class FolderPersistance extends NodePersistance {
|
|
57
|
-
constructor(zNonce: Uint8Array, key: Uint8Array, cryptor: AsyncSBoxCryptor);
|
|
58
|
+
constructor(zNonce: Uint8Array, key: Uint8Array, cryptor: AsyncSBoxCryptor, random: AsyncRNG);
|
|
58
59
|
write(folderInfo: FolderInfo, version: number, attrs: CommonAttrs, xattrs: XAttrs | undefined): Promise<Subscribe>;
|
|
59
60
|
read(src: ObjSource): Promise<{
|
|
60
61
|
folderInfo: FolderInfo;
|
|
61
62
|
attrs: CommonAttrs;
|
|
62
63
|
xattrs?: XAttrs;
|
|
63
64
|
}>;
|
|
64
|
-
static readFolderContent(objId: string | null, key: Uint8Array, src: ObjSource, cryptor: AsyncSBoxCryptor): Promise<FolderInfo>;
|
|
65
|
+
static readFolderContent(objId: string | null, key: Uint8Array, src: ObjSource, cryptor: AsyncSBoxCryptor, random: AsyncRNG): Promise<FolderInfo>;
|
|
65
66
|
}
|
|
66
67
|
export interface FolderLinkParams {
|
|
67
68
|
folderName: string;
|
|
@@ -32,7 +32,6 @@ const exceptions_1 = require("./exceptions");
|
|
|
32
32
|
const deferred_1 = require("../../lib-common/processes/deferred");
|
|
33
33
|
const json_utils_1 = require("../../lib-common/json-utils");
|
|
34
34
|
const xsp_files_1 = require("xsp-files");
|
|
35
|
-
const random = require("../../lib-common/random-node");
|
|
36
35
|
const folder_node_serialization_1 = require("./folder-node-serialization");
|
|
37
36
|
const attrs_1 = require("./attrs");
|
|
38
37
|
const node_persistence_1 = require("./node-persistence");
|
|
@@ -50,8 +49,8 @@ function jsonToInfoAndAttrs(json) {
|
|
|
50
49
|
return { attrs, folderInfo };
|
|
51
50
|
}
|
|
52
51
|
class FolderPersistance extends node_persistence_1.NodePersistance {
|
|
53
|
-
constructor(zNonce, key, cryptor) {
|
|
54
|
-
super(zNonce, key, cryptor);
|
|
52
|
+
constructor(zNonce, key, cryptor, random) {
|
|
53
|
+
super(zNonce, key, cryptor, random);
|
|
55
54
|
Object.seal(this);
|
|
56
55
|
}
|
|
57
56
|
async write(folderInfo, version, attrs, xattrs) {
|
|
@@ -63,12 +62,12 @@ class FolderPersistance extends node_persistence_1.NodePersistance {
|
|
|
63
62
|
const folderInfo = (0, folder_node_serialization_1.parseFolderInfo)(content);
|
|
64
63
|
return { folderInfo, xattrs, attrs: attrs_1.CommonAttrs.fromAttrs(attrs) };
|
|
65
64
|
}
|
|
66
|
-
static async readFolderContent(objId, key, src, cryptor) {
|
|
65
|
+
static async readFolderContent(objId, key, src, cryptor, random) {
|
|
67
66
|
if (objId === null) {
|
|
68
67
|
throw new Error("Missing objId for non-root folder");
|
|
69
68
|
}
|
|
70
69
|
const zNonce = (0, xsp_files_1.idToHeaderNonce)(objId);
|
|
71
|
-
const { folderInfo } = await (new FolderPersistance(zNonce, key, cryptor)).read(src);
|
|
70
|
+
const { folderInfo } = await (new FolderPersistance(zNonce, key, cryptor, random)).read(src);
|
|
72
71
|
return folderInfo;
|
|
73
72
|
}
|
|
74
73
|
}
|
|
@@ -95,14 +94,14 @@ class FolderNode extends node_in_fs_1.NodeInFS {
|
|
|
95
94
|
else if (objId === null) {
|
|
96
95
|
throw new Error("Missing objId for non-root folder");
|
|
97
96
|
}
|
|
98
|
-
this.crypto = new FolderPersistance(zNonce, key, storage.cryptor);
|
|
97
|
+
this.crypto = new FolderPersistance(zNonce, key, storage.cryptor, storage.random);
|
|
99
98
|
if (setNewAttrs) {
|
|
100
99
|
this.attrs = attrs_1.CommonAttrs.makeForTimeNow();
|
|
101
100
|
}
|
|
102
101
|
Object.seal(this);
|
|
103
102
|
}
|
|
104
103
|
static async newRoot(storage, key) {
|
|
105
|
-
const zNonce = await random
|
|
104
|
+
const zNonce = await storage.random(xsp_files_1.NONCE_LENGTH);
|
|
106
105
|
const rf = new FolderNode(storage, undefined, null, zNonce, 0, undefined, key, true);
|
|
107
106
|
rf.storage.nodes.set(rf);
|
|
108
107
|
await rf.saveFirstVersion(undefined);
|
|
@@ -486,7 +485,7 @@ class FolderNode extends node_in_fs_1.NodeInFS {
|
|
|
486
485
|
* @param name
|
|
487
486
|
*/
|
|
488
487
|
async makeAndSaveNewChildFolderNode(name, changes) {
|
|
489
|
-
const key = await random
|
|
488
|
+
const key = await this.storage.random(xsp_files_1.KEY_LENGTH);
|
|
490
489
|
const childObjId = await this.storage.generateNewObjId();
|
|
491
490
|
const node = new FolderNode(this.storage, name, childObjId, (0, xsp_files_1.idToHeaderNonce)(childObjId), 0, this.objId, key, true);
|
|
492
491
|
await node.saveFirstVersion(changes).catch((exc) => {
|
|
@@ -514,7 +513,7 @@ class FolderNode extends node_in_fs_1.NodeInFS {
|
|
|
514
513
|
* @param name
|
|
515
514
|
*/
|
|
516
515
|
async makeAndSaveNewChildFileNode(name) {
|
|
517
|
-
const key = await random
|
|
516
|
+
const key = await this.storage.random(xsp_files_1.KEY_LENGTH);
|
|
518
517
|
const node = await file_node_1.FileNode.makeForNew(this.storage, this.objId, name, key);
|
|
519
518
|
await node.save([]).catch((exc) => {
|
|
520
519
|
if (!exc.objExists) {
|
|
@@ -531,7 +530,7 @@ class FolderNode extends node_in_fs_1.NodeInFS {
|
|
|
531
530
|
* @param params
|
|
532
531
|
*/
|
|
533
532
|
async makeAndSaveNewChildLinkNode(name, params) {
|
|
534
|
-
const key = await random
|
|
533
|
+
const key = await this.storage.random(xsp_files_1.KEY_LENGTH);
|
|
535
534
|
const node = await link_node_1.LinkNode.makeForNew(this.storage, this.objId, name, key);
|
|
536
535
|
await node.save(params).catch((exc) => {
|
|
537
536
|
if (!exc.objExists) {
|
|
@@ -895,7 +894,7 @@ class FolderNode extends node_in_fs_1.NodeInFS {
|
|
|
895
894
|
if (node.isFolder) {
|
|
896
895
|
const objs = [node.objId];
|
|
897
896
|
const src = await storage.getObjSrc(node.objId, versionBeforeRm, true);
|
|
898
|
-
const folderContent = await FolderPersistance.readFolderContent(node.objId, node.key, src, storage.cryptor);
|
|
897
|
+
const folderContent = await FolderPersistance.readFolderContent(node.objId, node.key, src, storage.cryptor, storage.random);
|
|
899
898
|
for (const child of Object.values(folderContent.nodes)) {
|
|
900
899
|
(0, for_arrays_1.appendArray)(objs, await this.listRemovedInTreeToUploadRm(child));
|
|
901
900
|
}
|
|
@@ -8,10 +8,11 @@ import { Storage, AsyncSBoxCryptor } from './common';
|
|
|
8
8
|
import { ObjSource, Subscribe } from 'xsp-files';
|
|
9
9
|
import { CommonAttrs, XAttrs } from './attrs';
|
|
10
10
|
import { NodePersistance } from './node-persistence';
|
|
11
|
+
import { AsyncRNG } from '../../lib-common/rng-def';
|
|
11
12
|
type VersionedReadFlags = web3n.files.VersionedReadFlags;
|
|
12
13
|
type Stats = web3n.files.Stats;
|
|
13
14
|
declare class LinkPersistance extends NodePersistance {
|
|
14
|
-
constructor(zNonce: Uint8Array, key: Uint8Array, cryptor: AsyncSBoxCryptor);
|
|
15
|
+
constructor(zNonce: Uint8Array, key: Uint8Array, cryptor: AsyncSBoxCryptor, random: AsyncRNG);
|
|
15
16
|
read(src: ObjSource): Promise<{
|
|
16
17
|
params: LinkParameters<any>;
|
|
17
18
|
attrs: CommonAttrs;
|
|
@@ -30,8 +30,8 @@ const xsp_files_1 = require("xsp-files");
|
|
|
30
30
|
const attrs_1 = require("./attrs");
|
|
31
31
|
const node_persistence_1 = require("./node-persistence");
|
|
32
32
|
class LinkPersistance extends node_persistence_1.NodePersistance {
|
|
33
|
-
constructor(zNonce, key, cryptor) {
|
|
34
|
-
super(zNonce, key, cryptor);
|
|
33
|
+
constructor(zNonce, key, cryptor, random) {
|
|
34
|
+
super(zNonce, key, cryptor, random);
|
|
35
35
|
Object.seal(this);
|
|
36
36
|
}
|
|
37
37
|
async read(src) {
|
|
@@ -82,7 +82,7 @@ class LinkNode extends node_in_fs_1.NodeInFS {
|
|
|
82
82
|
if (!name || !objId || !parentId) {
|
|
83
83
|
throw new Error("Bad link parameter(s) given");
|
|
84
84
|
}
|
|
85
|
-
this.crypto = new LinkPersistance((0, xsp_files_1.idToHeaderNonce)(this.objId), key, this.storage.cryptor);
|
|
85
|
+
this.crypto = new LinkPersistance((0, xsp_files_1.idToHeaderNonce)(this.objId), key, this.storage.cryptor, this.storage.random);
|
|
86
86
|
Object.seal(this);
|
|
87
87
|
}
|
|
88
88
|
static async makeForNew(storage, parentId, name, key) {
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import { AsyncSBoxCryptor, Subscribe, ObjSource } from 'xsp-files';
|
|
6
6
|
import { CommonAttrs, XAttrs } from './attrs';
|
|
7
|
+
import { AsyncRNG } from '../../lib-common/rng-def';
|
|
7
8
|
/**
|
|
8
9
|
* This does reading and writing, keeping keys. This and extending objects are
|
|
9
10
|
* used in file system nodes as thematic place with persistence functionality.
|
|
@@ -11,9 +12,10 @@ import { CommonAttrs, XAttrs } from './attrs';
|
|
|
11
12
|
export declare abstract class NodePersistance {
|
|
12
13
|
private zerothHeaderNonce;
|
|
13
14
|
private key;
|
|
14
|
-
private cryptor;
|
|
15
|
+
private readonly cryptor;
|
|
16
|
+
protected readonly random: AsyncRNG;
|
|
15
17
|
private workLabel;
|
|
16
|
-
protected constructor(zerothHeaderNonce: Uint8Array, key: Uint8Array, cryptor: AsyncSBoxCryptor);
|
|
18
|
+
protected constructor(zerothHeaderNonce: Uint8Array, key: Uint8Array, cryptor: AsyncSBoxCryptor, random: AsyncRNG);
|
|
17
19
|
wipe(): void;
|
|
18
20
|
compareKey(keyB64: string): boolean;
|
|
19
21
|
fileKeyInBase64(): string;
|
|
@@ -24,7 +24,6 @@ exports.NodePersistance = void 0;
|
|
|
24
24
|
const xsp_files_1 = require("xsp-files");
|
|
25
25
|
const buffer_utils_1 = require("../../lib-common/buffer-utils");
|
|
26
26
|
const deferred_1 = require("../../lib-common/processes/deferred");
|
|
27
|
-
const random = require("../../lib-common/random-node");
|
|
28
27
|
const cryptor_work_labels_1 = require("../cryptor-work-labels");
|
|
29
28
|
const pv1 = require("./xsp-payload-v1");
|
|
30
29
|
const pv2 = require("./xsp-payload-v2");
|
|
@@ -34,10 +33,11 @@ const SEG_SIZE = 16; // in 256-byte blocks = 4K in bytes
|
|
|
34
33
|
* used in file system nodes as thematic place with persistence functionality.
|
|
35
34
|
*/
|
|
36
35
|
class NodePersistance {
|
|
37
|
-
constructor(zerothHeaderNonce, key, cryptor) {
|
|
36
|
+
constructor(zerothHeaderNonce, key, cryptor, random) {
|
|
38
37
|
this.zerothHeaderNonce = zerothHeaderNonce;
|
|
39
38
|
this.key = key;
|
|
40
39
|
this.cryptor = cryptor;
|
|
40
|
+
this.random = random;
|
|
41
41
|
this.workLabel = cryptor_work_labels_1.cryptoWorkLabels.makeForNonce('storage', this.zerothHeaderNonce);
|
|
42
42
|
}
|
|
43
43
|
wipe() {
|
|
@@ -62,13 +62,13 @@ class NodePersistance {
|
|
|
62
62
|
if (!this.key) {
|
|
63
63
|
throw new Error("Cannot use wiped object.");
|
|
64
64
|
}
|
|
65
|
-
return (0, xsp_files_1.makeSegmentsWriter)(this.key, this.zerothHeaderNonce, version, { type: 'new', segSize: SEG_SIZE, payloadFormat: 2 }, random
|
|
65
|
+
return (0, xsp_files_1.makeSegmentsWriter)(this.key, this.zerothHeaderNonce, version, { type: 'new', segSize: SEG_SIZE, payloadFormat: 2 }, this.random, this.cryptor, this.workLabel);
|
|
66
66
|
}
|
|
67
67
|
async segWriterWithBase(newVersion, base) {
|
|
68
68
|
if (!this.key) {
|
|
69
69
|
throw new Error("Cannot use wiped object.");
|
|
70
70
|
}
|
|
71
|
-
return (0, xsp_files_1.makeSegmentsWriter)(this.key, this.zerothHeaderNonce, newVersion, { type: 'update', base, payloadFormat: 2 }, random
|
|
71
|
+
return (0, xsp_files_1.makeSegmentsWriter)(this.key, this.zerothHeaderNonce, newVersion, { type: 'update', base, payloadFormat: 2 }, this.random, this.cryptor, this.workLabel);
|
|
72
72
|
}
|
|
73
73
|
async decryptedByteSrc(src) {
|
|
74
74
|
if (!this.key) {
|
|
@@ -5,31 +5,27 @@ export type { FileHandle, FileException, Stats } from '../injected-globals/platf
|
|
|
5
5
|
* fs functions follow node's type, and are injected via global object to allow injection in
|
|
6
6
|
* non-node environments, like Android or browser.
|
|
7
7
|
*/
|
|
8
|
-
export declare const appendFile: (path: string, data: string | Uint8Array, options?: (import("fs").ObjectEncodingOptions &
|
|
8
|
+
export declare const appendFile: (path: string, data: string | Uint8Array, options?: (import("fs").ObjectEncodingOptions & {
|
|
9
9
|
flush?: boolean | undefined;
|
|
10
10
|
}) | BufferEncoding | null) => Promise<void>, lstat: (path: string, opts?: import("fs").StatOptions) => Promise<import("fs").Stats>, mkdir: (path: string, options?: {
|
|
11
11
|
recursive?: boolean;
|
|
12
|
-
}) => Promise<
|
|
13
|
-
(path: string, options?:
|
|
14
|
-
encoding?: null
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
(path: string, options: ({
|
|
12
|
+
}) => Promise<unknown>, open: (path: string, flags?: string | number, mode?: import("fs").Mode) => Promise<FileHandle>, readFile: {
|
|
13
|
+
(path: string, options?: {
|
|
14
|
+
encoding?: null;
|
|
15
|
+
} | null): Promise<Buffer>;
|
|
16
|
+
(path: string, options: {
|
|
18
17
|
encoding: BufferEncoding;
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
(path: string, options?: (import("fs").ObjectEncodingOptions & import("events").Abortable & {
|
|
22
|
-
flag?: import("fs").OpenMode | undefined;
|
|
23
|
-
}) | BufferEncoding | null): Promise<string | Buffer>;
|
|
18
|
+
} | BufferEncoding): Promise<string>;
|
|
19
|
+
(path: string, options?: import("fs").ObjectEncodingOptions | BufferEncoding | null): Promise<string | Buffer>;
|
|
24
20
|
}, readdir: (path: string) => Promise<string[]>, readlink: {
|
|
25
21
|
(path: string, options?: import("fs").ObjectEncodingOptions | BufferEncoding | null): Promise<string>;
|
|
26
22
|
(path: string, options: import("fs").BufferEncodingOption): Promise<Buffer>;
|
|
27
23
|
(path: string, options?: import("fs").ObjectEncodingOptions | string | null): Promise<string | Buffer>;
|
|
28
|
-
}, rename: (oldPath: string, newPath: string) => Promise<void>, rmdir: (path: string, options?: import("fs").RmDirOptions) => Promise<void>, stat: (path: string, opts?: import("fs").StatOptions) => Promise<import("fs").Stats>, symlink: (target: string, path: string, type?: string | null) => Promise<void>, truncate: (path: string, len?: number) => Promise<void>, unlink: (path: string) => Promise<void>, writeFile: (file: string, data: string |
|
|
29
|
-
mode?: import("fs").Mode
|
|
30
|
-
flag?: import("fs").OpenMode
|
|
31
|
-
flush?: boolean
|
|
32
|
-
}
|
|
24
|
+
}, rename: (oldPath: string, newPath: string) => Promise<void>, rmdir: (path: string, options?: import("fs").RmDirOptions) => Promise<void>, stat: (path: string, opts?: import("fs").StatOptions) => Promise<import("fs").Stats>, symlink: (target: string, path: string, type?: string | null) => Promise<void>, truncate: (path: string, len?: number) => Promise<void>, unlink: (path: string) => Promise<void>, writeFile: (file: string, data: string | Uint8Array, options?: (import("fs").ObjectEncodingOptions & {
|
|
25
|
+
mode?: import("fs").Mode;
|
|
26
|
+
flag?: import("fs").OpenMode;
|
|
27
|
+
flush?: boolean;
|
|
28
|
+
}) | BufferEncoding | null) => Promise<void>, copyFile: (src: string, dst: string, overwrite?: boolean, dstMode?: string) => Promise<void>;
|
|
33
29
|
/**
|
|
34
30
|
* @param fh is an open file handle
|
|
35
31
|
* @param pos is a position in the file, from which reading should start
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { arrays } from "ecma-nacl";
|
|
2
|
+
import { AsyncRNG } from "../rng-def";
|
|
2
3
|
type JsonKey = web3n.keys.JsonKey;
|
|
3
4
|
type SignedLoad = web3n.keys.SignedLoad;
|
|
4
5
|
export declare const KID_BYTES_LENGTH = 9;
|
|
@@ -15,10 +16,10 @@ export declare function makeSelfSignedCert(address: string, validityPeriod: numb
|
|
|
15
16
|
* @return Generated root key and a self-signed certificate for respective
|
|
16
17
|
* public key.
|
|
17
18
|
*/
|
|
18
|
-
export declare function generateRootKey(address: string, validityPeriod: number, random:
|
|
19
|
+
export declare function generateRootKey(address: string, validityPeriod: number, random: AsyncRNG, arrFactory?: arrays.Factory): Promise<{
|
|
19
20
|
cert: SignedLoad;
|
|
20
21
|
skey: JsonKey;
|
|
21
|
-
}
|
|
22
|
+
}>;
|
|
22
23
|
/**
|
|
23
24
|
* @param address is an address of an issuer
|
|
24
25
|
* @param validityPeriod validity period of a generated self-signed
|
|
@@ -29,10 +30,10 @@ export declare function generateRootKey(address: string, validityPeriod: number,
|
|
|
29
30
|
* @return Generated provider's key and a certificate for a respective
|
|
30
31
|
* public key.
|
|
31
32
|
*/
|
|
32
|
-
export declare function generateProviderKey(address: string, validityPeriod: number, rootJKey: JsonKey, random:
|
|
33
|
+
export declare function generateProviderKey(address: string, validityPeriod: number, rootJKey: JsonKey, random: AsyncRNG, arrFactory?: arrays.Factory): Promise<{
|
|
33
34
|
cert: SignedLoad;
|
|
34
35
|
skey: JsonKey;
|
|
35
|
-
}
|
|
36
|
+
}>;
|
|
36
37
|
/**
|
|
37
38
|
* MailerId providing service should use this object to generate certificates.
|
|
38
39
|
*/
|
|
@@ -25,12 +25,12 @@ const ecma_nacl_1 = require("ecma-nacl");
|
|
|
25
25
|
const jwkeys_1 = require("../jwkeys");
|
|
26
26
|
const buffer_utils_1 = require("../buffer-utils");
|
|
27
27
|
const index_1 = require("./index");
|
|
28
|
-
function genSignKeyPair(use, kidLen, random, arrFactory) {
|
|
29
|
-
const pair = ecma_nacl_1.signing.generate_keypair(random(32), arrFactory);
|
|
28
|
+
async function genSignKeyPair(use, kidLen, random, arrFactory) {
|
|
29
|
+
const pair = ecma_nacl_1.signing.generate_keypair(await random(32), arrFactory);
|
|
30
30
|
const pkey = {
|
|
31
31
|
use: use,
|
|
32
32
|
alg: ecma_nacl_1.signing.JWK_ALG_NAME,
|
|
33
|
-
kid: buffer_utils_1.base64.pack(random(kidLen)),
|
|
33
|
+
kid: buffer_utils_1.base64.pack(await random(kidLen)),
|
|
34
34
|
k: buffer_utils_1.base64.pack(pair.pkey)
|
|
35
35
|
};
|
|
36
36
|
const skey = {
|
|
@@ -87,11 +87,11 @@ function makeSelfSignedCert(address, validityPeriod, sjkey, arrFactory) {
|
|
|
87
87
|
* @return Generated root key and a self-signed certificate for respective
|
|
88
88
|
* public key.
|
|
89
89
|
*/
|
|
90
|
-
function generateRootKey(address, validityPeriod, random, arrFactory) {
|
|
90
|
+
async function generateRootKey(address, validityPeriod, random, arrFactory) {
|
|
91
91
|
if (validityPeriod < 1) {
|
|
92
92
|
throw new Error(`Illegal validity period: ${validityPeriod}`);
|
|
93
93
|
}
|
|
94
|
-
const rootPair = genSignKeyPair(index_1.KEY_USE.ROOT, exports.KID_BYTES_LENGTH, random, arrFactory);
|
|
94
|
+
const rootPair = await genSignKeyPair(index_1.KEY_USE.ROOT, exports.KID_BYTES_LENGTH, random, arrFactory);
|
|
95
95
|
const now = Math.floor(Date.now() / 1000);
|
|
96
96
|
const rootCert = makeCert(rootPair.pkey, address, address, now, now + validityPeriod, rootPair.skey, arrFactory);
|
|
97
97
|
return { cert: rootCert, skey: (0, jwkeys_1.keyToJson)(rootPair.skey) };
|
|
@@ -106,12 +106,12 @@ function generateRootKey(address, validityPeriod, random, arrFactory) {
|
|
|
106
106
|
* @return Generated provider's key and a certificate for a respective
|
|
107
107
|
* public key.
|
|
108
108
|
*/
|
|
109
|
-
function generateProviderKey(address, validityPeriod, rootJKey, random, arrFactory) {
|
|
109
|
+
async function generateProviderKey(address, validityPeriod, rootJKey, random, arrFactory) {
|
|
110
110
|
if (validityPeriod < 1) {
|
|
111
111
|
throw new Error(`Illegal validity period: ${validityPeriod}`);
|
|
112
112
|
}
|
|
113
113
|
const rootKey = (0, jwkeys_1.keyFromJson)(rootJKey, index_1.KEY_USE.ROOT, ecma_nacl_1.signing.JWK_ALG_NAME, ecma_nacl_1.signing.SECRET_KEY_LENGTH);
|
|
114
|
-
const provPair = genSignKeyPair(index_1.KEY_USE.PROVIDER, exports.KID_BYTES_LENGTH, random, arrFactory);
|
|
114
|
+
const provPair = await genSignKeyPair(index_1.KEY_USE.PROVIDER, exports.KID_BYTES_LENGTH, random, arrFactory);
|
|
115
115
|
const now = Math.floor(Date.now() / 1000);
|
|
116
116
|
const rootCert = makeCert(provPair.pkey, address, address, now, now + validityPeriod, rootKey, arrFactory);
|
|
117
117
|
return { cert: rootCert, skey: (0, jwkeys_1.keyToJson)(provPair.skey) };
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { arrays } from "ecma-nacl";
|
|
2
2
|
import { Keypair } from "./index";
|
|
3
|
+
import { AsyncRNG } from "../rng-def";
|
|
3
4
|
type JsonKey = web3n.keys.JsonKey;
|
|
4
5
|
type Key = web3n.keys.Key;
|
|
5
6
|
type SignedLoad = web3n.keys.SignedLoad;
|
|
@@ -44,7 +45,7 @@ export interface MailerIdSigner {
|
|
|
44
45
|
}
|
|
45
46
|
export declare const KID_BYTES_LENGTH = 9;
|
|
46
47
|
export declare const MAX_SIG_VALIDITY: number;
|
|
47
|
-
export declare function generateSigningKeyPair(random:
|
|
48
|
+
export declare function generateSigningKeyPair(random: AsyncRNG, arrFactory?: arrays.Factory): Promise<Keypair>;
|
|
48
49
|
/**
|
|
49
50
|
* @param signKey which will be used to sign assertions/keys. Note that
|
|
50
51
|
* this key shall be wiped, when signer is destroyed, as key is neither
|
|
@@ -34,7 +34,7 @@ function correlateSKeyWithItsCert(skey, cert) {
|
|
|
34
34
|
}
|
|
35
35
|
exports.KID_BYTES_LENGTH = 9;
|
|
36
36
|
exports.MAX_SIG_VALIDITY = 30 * 60;
|
|
37
|
-
function generateSigningKeyPair(random, arrFactory) {
|
|
37
|
+
async function generateSigningKeyPair(random, arrFactory) {
|
|
38
38
|
return (0, utils_NaCl_Ed_1.genSignKeyPair)(index_1.KEY_USE.SIGN, exports.KID_BYTES_LENGTH, random, arrFactory);
|
|
39
39
|
}
|
|
40
40
|
/**
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { arrays } from "ecma-nacl";
|
|
2
2
|
import { Keypair } from "./index";
|
|
3
|
+
import { AsyncRNG } from "../rng-def";
|
|
3
4
|
type JsonKey = web3n.keys.JsonKey;
|
|
4
5
|
type Key = web3n.keys.Key;
|
|
5
6
|
type SignedLoad = web3n.keys.SignedLoad;
|
|
6
|
-
export declare function genSignKeyPair(use: string, kidLen: number, random:
|
|
7
|
+
export declare function genSignKeyPair(use: string, kidLen: number, random: AsyncRNG, arrFactory?: arrays.Factory): Promise<Keypair>;
|
|
7
8
|
export declare function makeCert(pkey: JsonKey, principalAddr: string, issuer: string, issuedAt: number, expiresAt: number, signKey: Key, arrFactory?: arrays.Factory): SignedLoad;
|
|
8
9
|
export {};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/*
|
|
3
|
-
Copyright (C) 2015 - 2017, 2025 3NSoft Inc.
|
|
3
|
+
Copyright (C) 2015 - 2017, 2025 - 2026 3NSoft Inc.
|
|
4
4
|
|
|
5
5
|
This program is free software: you can redistribute it and/or modify it under
|
|
6
6
|
the terms of the GNU General Public License as published by the Free Software
|
|
@@ -21,12 +21,12 @@ exports.makeCert = makeCert;
|
|
|
21
21
|
const ecma_nacl_1 = require("ecma-nacl");
|
|
22
22
|
const buffer_utils_1 = require("../buffer-utils");
|
|
23
23
|
const index_1 = require("./index");
|
|
24
|
-
function genSignKeyPair(use, kidLen, random, arrFactory) {
|
|
25
|
-
const pair = ecma_nacl_1.signing.generate_keypair(random(ecma_nacl_1.signing.SEED_LENGTH), arrFactory);
|
|
24
|
+
async function genSignKeyPair(use, kidLen, random, arrFactory) {
|
|
25
|
+
const pair = ecma_nacl_1.signing.generate_keypair(await random(ecma_nacl_1.signing.SEED_LENGTH), arrFactory);
|
|
26
26
|
const pkey = {
|
|
27
27
|
use: use,
|
|
28
28
|
alg: ecma_nacl_1.signing.JWK_ALG_NAME,
|
|
29
|
-
kid: buffer_utils_1.base64.pack(random(kidLen)),
|
|
29
|
+
kid: buffer_utils_1.base64.pack(await random(kidLen)),
|
|
30
30
|
k: buffer_utils_1.base64.pack(pair.pkey)
|
|
31
31
|
};
|
|
32
32
|
const skey = {
|
|
@@ -19,7 +19,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
19
19
|
exports.sleep = sleep;
|
|
20
20
|
function sleep(millis) {
|
|
21
21
|
return new Promise((resolve) => {
|
|
22
|
-
|
|
22
|
+
var _a, _b;
|
|
23
|
+
(_b = (_a = setTimeout(resolve, millis)).unref) === null || _b === void 0 ? void 0 : _b.call(_a);
|
|
23
24
|
});
|
|
24
25
|
}
|
|
25
26
|
Object.freeze(exports);
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*
|
|
3
|
+
Copyright (C) 2026 3NSoft Inc.
|
|
4
|
+
|
|
5
|
+
This program is free software: you can redistribute it and/or modify it under
|
|
6
|
+
the terms of the GNU General Public License as published by the Free Software
|
|
7
|
+
Foundation, either version 3 of the License, or (at your option) any later
|
|
8
|
+
version.
|
|
9
|
+
|
|
10
|
+
This program is distributed in the hope that it will be useful, but
|
|
11
|
+
WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
13
|
+
See the GNU General Public License for more details.
|
|
14
|
+
|
|
15
|
+
You should have received a copy of the GNU General Public License along with
|
|
16
|
+
this program. If not, see <http://www.gnu.org/licenses/>.
|
|
17
|
+
*/
|
|
18
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
+
exports.stringOfB64UrlSafeChars = stringOfB64UrlSafeChars;
|
|
20
|
+
exports.stringOfB64Chars = stringOfB64Chars;
|
|
21
|
+
const buffer_utils_1 = require("./buffer-utils");
|
|
22
|
+
async function stringOfB64UrlSafeChars(numOfChars, random) {
|
|
23
|
+
const numOfbytes = 3 * (1 + Math.floor(numOfChars / 4));
|
|
24
|
+
const byteArr = await random(numOfbytes);
|
|
25
|
+
return buffer_utils_1.base64urlSafe.pack(byteArr).substring(0, numOfChars);
|
|
26
|
+
}
|
|
27
|
+
async function stringOfB64Chars(numOfChars, random) {
|
|
28
|
+
const numOfbytes = 3 * (1 + Math.floor(numOfChars / 4));
|
|
29
|
+
const byteArr = await random(numOfbytes);
|
|
30
|
+
return byteArr.toString('base64').substring(0, numOfChars);
|
|
31
|
+
}
|
|
32
|
+
Object.freeze(exports);
|