@vollcrypt/files-node 0.1.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/index.d.ts +167 -0
- package/index.js +347 -0
- package/package.json +65 -0
- package/vollcrypt-files-node.win32-x64-msvc.node +0 -0
package/index.d.ts
ADDED
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
/* tslint:disable */
|
|
2
|
+
/* eslint-disable */
|
|
3
|
+
|
|
4
|
+
/* auto-generated by NAPI-RS */
|
|
5
|
+
|
|
6
|
+
export declare function generateDek(): Buffer
|
|
7
|
+
export declare function generateFileId(): Buffer
|
|
8
|
+
export declare function generateSalt(): Buffer
|
|
9
|
+
export declare function generateGk(): Buffer
|
|
10
|
+
export interface ChunkEnvelope {
|
|
11
|
+
chunkIndex: number
|
|
12
|
+
iv: Buffer
|
|
13
|
+
ciphertext: Buffer
|
|
14
|
+
tag: Buffer
|
|
15
|
+
}
|
|
16
|
+
export declare function encryptChunk(dek: Uint8Array, fileId: Uint8Array, chunkIndex: number, plaintext: Uint8Array): ChunkEnvelope
|
|
17
|
+
export declare function decryptChunk(dek: Uint8Array, fileId: Uint8Array, chunkIndex: number, envelope: ChunkEnvelope): Buffer
|
|
18
|
+
export declare function chunkLeafHash(envelope: ChunkEnvelope): Buffer
|
|
19
|
+
export declare function merkleRoot(leaves: Array<Uint8Array>): Buffer
|
|
20
|
+
export declare function merkleProof(leaves: Array<Uint8Array>, leafIndex: number): Array<Buffer>
|
|
21
|
+
export declare function verifyMerkleProof(leaf: Uint8Array, leafIndex: number, totalLeaves: number, proof: Array<Uint8Array>, expectedRoot: Uint8Array): boolean
|
|
22
|
+
export interface KdfChoice {
|
|
23
|
+
kind: string
|
|
24
|
+
rounds?: number
|
|
25
|
+
mCost?: number
|
|
26
|
+
tCost?: number
|
|
27
|
+
pCost?: number
|
|
28
|
+
salt?: Buffer
|
|
29
|
+
}
|
|
30
|
+
export interface WrapEntry {
|
|
31
|
+
kind: string
|
|
32
|
+
salt?: Buffer
|
|
33
|
+
rounds?: number
|
|
34
|
+
mCost?: number
|
|
35
|
+
tCost?: number
|
|
36
|
+
pCost?: number
|
|
37
|
+
recipientId?: Buffer
|
|
38
|
+
gkVersion?: number
|
|
39
|
+
ephemeralX25519?: Buffer
|
|
40
|
+
ciphertextMlKem?: Buffer
|
|
41
|
+
groupId?: Buffer
|
|
42
|
+
wrappedKey: Buffer
|
|
43
|
+
}
|
|
44
|
+
export declare function wrapDekWithPassword(dek: Uint8Array, password: string, kdf: KdfChoice): WrapEntry
|
|
45
|
+
export declare function unwrapDekWithPassword(wrap: WrapEntry, password: string): Buffer
|
|
46
|
+
export declare function unwrapDekWithPasswordAsync(wrap: WrapEntry, password: string): Promise<unknown>
|
|
47
|
+
export interface KeySubpair {
|
|
48
|
+
x25519: Buffer
|
|
49
|
+
mlKem: Buffer
|
|
50
|
+
}
|
|
51
|
+
export interface RecipientKeypair {
|
|
52
|
+
publicKey: KeySubpair
|
|
53
|
+
secretKey: KeySubpair
|
|
54
|
+
}
|
|
55
|
+
export declare function generateRecipientKeypair(): RecipientKeypair
|
|
56
|
+
export declare function wrapKeyToRecipient(key: Uint8Array, recipientId: Uint8Array, gkVersion: number, recipientPk: KeySubpair): WrapEntry
|
|
57
|
+
export declare function unwrapKeyWithRecipientKey(wrap: WrapEntry, recipientSk: KeySubpair): Buffer
|
|
58
|
+
export declare function wrapDekForGroup(dek: Uint8Array, groupId: Uint8Array, gkVersion: number, gk: Uint8Array): WrapEntry
|
|
59
|
+
export declare function unwrapDekWithGroupKey(wrap: WrapEntry, gk: Uint8Array): Buffer
|
|
60
|
+
export interface Ed25519KeypairObj {
|
|
61
|
+
publicKey: Buffer
|
|
62
|
+
secretKey: Buffer
|
|
63
|
+
}
|
|
64
|
+
export declare function ed25519KeypairGenerate(): Ed25519KeypairObj
|
|
65
|
+
export declare function ed25519Sign(sk: Uint8Array, message: Uint8Array): Buffer
|
|
66
|
+
export declare function ed25519Verify(pk: Uint8Array, message: Uint8Array, signature: Uint8Array): boolean
|
|
67
|
+
export interface MemberPublicKeyObj {
|
|
68
|
+
recipient: KeySubpair
|
|
69
|
+
signingPk: Buffer
|
|
70
|
+
}
|
|
71
|
+
export interface SignedMetadata {
|
|
72
|
+
kind: string
|
|
73
|
+
signerPubkey?: Buffer
|
|
74
|
+
timestamp: number
|
|
75
|
+
keyLogId?: Buffer
|
|
76
|
+
sealedGroupId?: Buffer
|
|
77
|
+
sealedGkVersion?: number
|
|
78
|
+
iv?: Buffer
|
|
79
|
+
sealedPayload?: Buffer
|
|
80
|
+
sealedTag?: Buffer
|
|
81
|
+
}
|
|
82
|
+
export interface HeaderObj {
|
|
83
|
+
version: number
|
|
84
|
+
mode: number
|
|
85
|
+
cipherId: number
|
|
86
|
+
fileId: Buffer
|
|
87
|
+
chunkSize: number
|
|
88
|
+
plaintextSize: number
|
|
89
|
+
merkleRoot: Buffer
|
|
90
|
+
wraps: Array<WrapEntry>
|
|
91
|
+
signedMetadata?: SignedMetadata
|
|
92
|
+
signature?: Buffer
|
|
93
|
+
}
|
|
94
|
+
export interface ParsedHeaderObj {
|
|
95
|
+
header: HeaderObj
|
|
96
|
+
headerLen: number
|
|
97
|
+
}
|
|
98
|
+
export interface RewrapResult {
|
|
99
|
+
header: Buffer
|
|
100
|
+
updatedCount: number
|
|
101
|
+
}
|
|
102
|
+
export declare function rewrapDekInHeader(headerBytes: Uint8Array, oldGk: Uint8Array, newGk: Uint8Array, newGkVersion: number): RewrapResult
|
|
103
|
+
export declare function cryptoShredHeader(headerBytes: Uint8Array): Buffer
|
|
104
|
+
export declare function signHeaderPlain(header: HeaderObj, signerPk: Uint8Array, signerSk: Uint8Array, keyLogId: Uint8Array, timestamp: number): HeaderObj
|
|
105
|
+
export declare function signHeaderSealed(header: HeaderObj, signerPk: Uint8Array, signerSk: Uint8Array, keyLogId: Uint8Array, timestamp: number, sealedGroupId: Uint8Array, sealedGkVersion: number, sealedGk: Uint8Array): HeaderObj
|
|
106
|
+
export declare function verifyHeaderSignaturePlain(header: HeaderObj): Buffer
|
|
107
|
+
export declare function verifyHeaderSignatureSealed(header: HeaderObj, sealedGk: Uint8Array): Buffer
|
|
108
|
+
export interface KeyLogEntry {
|
|
109
|
+
kind: string
|
|
110
|
+
userId?: Buffer
|
|
111
|
+
deviceId: Buffer
|
|
112
|
+
devicePubkey?: Buffer
|
|
113
|
+
humanLabel?: string
|
|
114
|
+
prevHash: Buffer
|
|
115
|
+
timestamp: number
|
|
116
|
+
signature: Buffer
|
|
117
|
+
}
|
|
118
|
+
export interface SenderInfo {
|
|
119
|
+
signerPubkey: Buffer
|
|
120
|
+
userId: Buffer
|
|
121
|
+
deviceId: Buffer
|
|
122
|
+
deviceWasActive: boolean
|
|
123
|
+
humanLabel?: string
|
|
124
|
+
}
|
|
125
|
+
export declare function resolveSender(header: HeaderObj, keyLog: KeyLog, sealedGk?: Uint8Array | undefined | null): SenderInfo
|
|
126
|
+
export interface PipelinedSignInfoObj {
|
|
127
|
+
kind: string
|
|
128
|
+
signerEd25519Pk: Buffer
|
|
129
|
+
signerEd25519Sk: Buffer
|
|
130
|
+
keyLogId: Buffer
|
|
131
|
+
timestamp: number
|
|
132
|
+
sealedGroupId?: Buffer
|
|
133
|
+
sealedGkVersion?: number
|
|
134
|
+
sealedGk?: Buffer
|
|
135
|
+
}
|
|
136
|
+
export declare function encryptFilePipelinedAsync(sourcePath: string, destPath: string, dek: Uint8Array, fileId: Uint8Array, chunkSize: number, wraps: Array<WrapEntry>, mode: number, numWorkers: number, signInfo?: PipelinedSignInfoObj | undefined | null): Promise<unknown>
|
|
137
|
+
export declare function decryptFilePipelinedAsync(sourcePath: string, destPath: string, dek: Uint8Array, numWorkers: number): Promise<unknown>
|
|
138
|
+
export declare class GroupManifest {
|
|
139
|
+
static genesis(groupId: Uint8Array, initialGk: Uint8Array, founderMemberId: Uint8Array, founderRecipientPk: KeySubpair, founderEd25519Pk: Uint8Array, founderEd25519Sk: Uint8Array, timestamp: number): GroupManifest
|
|
140
|
+
static parse(bytes: Uint8Array): GroupManifest
|
|
141
|
+
write(): Buffer
|
|
142
|
+
verify(): void
|
|
143
|
+
addMember(newMemberId: Uint8Array, newMemberPk: MemberPublicKeyObj, currentGk: Uint8Array, adminPk: Uint8Array, adminSk: Uint8Array, timestamp: number): void
|
|
144
|
+
removeMember(removedMemberId: Uint8Array, adminPk: Uint8Array, adminSk: Uint8Array, timestamp: number): void
|
|
145
|
+
rotateGroupKey(newGk: Uint8Array, adminPk: Uint8Array, adminSk: Uint8Array, timestamp: number): number
|
|
146
|
+
shredGroupKey(versionToShred: number, reason: string, adminPk: Uint8Array, adminSk: Uint8Array, timestamp: number): void
|
|
147
|
+
currentMembers(): Array<Buffer>
|
|
148
|
+
currentGkVersion(): number
|
|
149
|
+
findMemberWrap(memberId: Uint8Array): WrapEntry
|
|
150
|
+
findMemberWrapForVersion(memberId: Uint8Array, gkVersion: number): WrapEntry
|
|
151
|
+
isVersionShredded(gkVersion: number): boolean
|
|
152
|
+
}
|
|
153
|
+
export declare class HeaderClass {
|
|
154
|
+
static parse(bytes: Uint8Array): ParsedHeaderObj
|
|
155
|
+
static write(header: HeaderObj): Buffer
|
|
156
|
+
}
|
|
157
|
+
export declare class KeyLog {
|
|
158
|
+
static create(authorityPubkey: Uint8Array): KeyLog
|
|
159
|
+
static parse(bytes: Uint8Array): KeyLog
|
|
160
|
+
write(): Buffer
|
|
161
|
+
verify(): void
|
|
162
|
+
registerDevice(userId: Uint8Array, deviceId: Uint8Array, devicePk: Uint8Array, humanLabel: string, authoritySk: Uint8Array, timestamp: number): Buffer
|
|
163
|
+
revokeDevice(deviceId: Uint8Array, authoritySk: Uint8Array, timestamp: number): void
|
|
164
|
+
lookupByEntryHash(hash: Uint8Array): KeyLogEntry | null
|
|
165
|
+
deviceWasActiveAt(deviceId: Uint8Array, timestamp: number): boolean
|
|
166
|
+
userForDevice(deviceId: Uint8Array): Buffer | null
|
|
167
|
+
}
|
package/index.js
ADDED
|
@@ -0,0 +1,347 @@
|
|
|
1
|
+
/* tslint:disable */
|
|
2
|
+
/* eslint-disable */
|
|
3
|
+
/* prettier-ignore */
|
|
4
|
+
|
|
5
|
+
/* auto-generated by NAPI-RS */
|
|
6
|
+
|
|
7
|
+
const { existsSync, readFileSync } = require('fs')
|
|
8
|
+
const { join } = require('path')
|
|
9
|
+
|
|
10
|
+
const { platform, arch } = process
|
|
11
|
+
|
|
12
|
+
let nativeBinding = null
|
|
13
|
+
let localFileExisted = false
|
|
14
|
+
let loadError = null
|
|
15
|
+
|
|
16
|
+
function isMusl() {
|
|
17
|
+
// For Node 10
|
|
18
|
+
if (!process.report || typeof process.report.getReport !== 'function') {
|
|
19
|
+
try {
|
|
20
|
+
const lddPath = require('child_process').execSync('which ldd').toString().trim()
|
|
21
|
+
return readFileSync(lddPath, 'utf8').includes('musl')
|
|
22
|
+
} catch (e) {
|
|
23
|
+
return true
|
|
24
|
+
}
|
|
25
|
+
} else {
|
|
26
|
+
const { glibcVersionRuntime } = process.report.getReport().header
|
|
27
|
+
return !glibcVersionRuntime
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
switch (platform) {
|
|
32
|
+
case 'android':
|
|
33
|
+
switch (arch) {
|
|
34
|
+
case 'arm64':
|
|
35
|
+
localFileExisted = existsSync(join(__dirname, 'vollcrypt-files-node.android-arm64.node'))
|
|
36
|
+
try {
|
|
37
|
+
if (localFileExisted) {
|
|
38
|
+
nativeBinding = require('./vollcrypt-files-node.android-arm64.node')
|
|
39
|
+
} else {
|
|
40
|
+
nativeBinding = require('@vollcrypt/files-node-android-arm64')
|
|
41
|
+
}
|
|
42
|
+
} catch (e) {
|
|
43
|
+
loadError = e
|
|
44
|
+
}
|
|
45
|
+
break
|
|
46
|
+
case 'arm':
|
|
47
|
+
localFileExisted = existsSync(join(__dirname, 'vollcrypt-files-node.android-arm-eabi.node'))
|
|
48
|
+
try {
|
|
49
|
+
if (localFileExisted) {
|
|
50
|
+
nativeBinding = require('./vollcrypt-files-node.android-arm-eabi.node')
|
|
51
|
+
} else {
|
|
52
|
+
nativeBinding = require('@vollcrypt/files-node-android-arm-eabi')
|
|
53
|
+
}
|
|
54
|
+
} catch (e) {
|
|
55
|
+
loadError = e
|
|
56
|
+
}
|
|
57
|
+
break
|
|
58
|
+
default:
|
|
59
|
+
throw new Error(`Unsupported architecture on Android ${arch}`)
|
|
60
|
+
}
|
|
61
|
+
break
|
|
62
|
+
case 'win32':
|
|
63
|
+
switch (arch) {
|
|
64
|
+
case 'x64':
|
|
65
|
+
localFileExisted = existsSync(
|
|
66
|
+
join(__dirname, 'vollcrypt-files-node.win32-x64-msvc.node')
|
|
67
|
+
)
|
|
68
|
+
try {
|
|
69
|
+
if (localFileExisted) {
|
|
70
|
+
nativeBinding = require('./vollcrypt-files-node.win32-x64-msvc.node')
|
|
71
|
+
} else {
|
|
72
|
+
nativeBinding = require('@vollcrypt/files-node-win32-x64-msvc')
|
|
73
|
+
}
|
|
74
|
+
} catch (e) {
|
|
75
|
+
loadError = e
|
|
76
|
+
}
|
|
77
|
+
break
|
|
78
|
+
case 'ia32':
|
|
79
|
+
localFileExisted = existsSync(
|
|
80
|
+
join(__dirname, 'vollcrypt-files-node.win32-ia32-msvc.node')
|
|
81
|
+
)
|
|
82
|
+
try {
|
|
83
|
+
if (localFileExisted) {
|
|
84
|
+
nativeBinding = require('./vollcrypt-files-node.win32-ia32-msvc.node')
|
|
85
|
+
} else {
|
|
86
|
+
nativeBinding = require('@vollcrypt/files-node-win32-ia32-msvc')
|
|
87
|
+
}
|
|
88
|
+
} catch (e) {
|
|
89
|
+
loadError = e
|
|
90
|
+
}
|
|
91
|
+
break
|
|
92
|
+
case 'arm64':
|
|
93
|
+
localFileExisted = existsSync(
|
|
94
|
+
join(__dirname, 'vollcrypt-files-node.win32-arm64-msvc.node')
|
|
95
|
+
)
|
|
96
|
+
try {
|
|
97
|
+
if (localFileExisted) {
|
|
98
|
+
nativeBinding = require('./vollcrypt-files-node.win32-arm64-msvc.node')
|
|
99
|
+
} else {
|
|
100
|
+
nativeBinding = require('@vollcrypt/files-node-win32-arm64-msvc')
|
|
101
|
+
}
|
|
102
|
+
} catch (e) {
|
|
103
|
+
loadError = e
|
|
104
|
+
}
|
|
105
|
+
break
|
|
106
|
+
default:
|
|
107
|
+
throw new Error(`Unsupported architecture on Windows: ${arch}`)
|
|
108
|
+
}
|
|
109
|
+
break
|
|
110
|
+
case 'darwin':
|
|
111
|
+
localFileExisted = existsSync(join(__dirname, 'vollcrypt-files-node.darwin-universal.node'))
|
|
112
|
+
try {
|
|
113
|
+
if (localFileExisted) {
|
|
114
|
+
nativeBinding = require('./vollcrypt-files-node.darwin-universal.node')
|
|
115
|
+
} else {
|
|
116
|
+
nativeBinding = require('@vollcrypt/files-node-darwin-universal')
|
|
117
|
+
}
|
|
118
|
+
break
|
|
119
|
+
} catch {}
|
|
120
|
+
switch (arch) {
|
|
121
|
+
case 'x64':
|
|
122
|
+
localFileExisted = existsSync(join(__dirname, 'vollcrypt-files-node.darwin-x64.node'))
|
|
123
|
+
try {
|
|
124
|
+
if (localFileExisted) {
|
|
125
|
+
nativeBinding = require('./vollcrypt-files-node.darwin-x64.node')
|
|
126
|
+
} else {
|
|
127
|
+
nativeBinding = require('@vollcrypt/files-node-darwin-x64')
|
|
128
|
+
}
|
|
129
|
+
} catch (e) {
|
|
130
|
+
loadError = e
|
|
131
|
+
}
|
|
132
|
+
break
|
|
133
|
+
case 'arm64':
|
|
134
|
+
localFileExisted = existsSync(
|
|
135
|
+
join(__dirname, 'vollcrypt-files-node.darwin-arm64.node')
|
|
136
|
+
)
|
|
137
|
+
try {
|
|
138
|
+
if (localFileExisted) {
|
|
139
|
+
nativeBinding = require('./vollcrypt-files-node.darwin-arm64.node')
|
|
140
|
+
} else {
|
|
141
|
+
nativeBinding = require('@vollcrypt/files-node-darwin-arm64')
|
|
142
|
+
}
|
|
143
|
+
} catch (e) {
|
|
144
|
+
loadError = e
|
|
145
|
+
}
|
|
146
|
+
break
|
|
147
|
+
default:
|
|
148
|
+
throw new Error(`Unsupported architecture on macOS: ${arch}`)
|
|
149
|
+
}
|
|
150
|
+
break
|
|
151
|
+
case 'freebsd':
|
|
152
|
+
if (arch !== 'x64') {
|
|
153
|
+
throw new Error(`Unsupported architecture on FreeBSD: ${arch}`)
|
|
154
|
+
}
|
|
155
|
+
localFileExisted = existsSync(join(__dirname, 'vollcrypt-files-node.freebsd-x64.node'))
|
|
156
|
+
try {
|
|
157
|
+
if (localFileExisted) {
|
|
158
|
+
nativeBinding = require('./vollcrypt-files-node.freebsd-x64.node')
|
|
159
|
+
} else {
|
|
160
|
+
nativeBinding = require('@vollcrypt/files-node-freebsd-x64')
|
|
161
|
+
}
|
|
162
|
+
} catch (e) {
|
|
163
|
+
loadError = e
|
|
164
|
+
}
|
|
165
|
+
break
|
|
166
|
+
case 'linux':
|
|
167
|
+
switch (arch) {
|
|
168
|
+
case 'x64':
|
|
169
|
+
if (isMusl()) {
|
|
170
|
+
localFileExisted = existsSync(
|
|
171
|
+
join(__dirname, 'vollcrypt-files-node.linux-x64-musl.node')
|
|
172
|
+
)
|
|
173
|
+
try {
|
|
174
|
+
if (localFileExisted) {
|
|
175
|
+
nativeBinding = require('./vollcrypt-files-node.linux-x64-musl.node')
|
|
176
|
+
} else {
|
|
177
|
+
nativeBinding = require('@vollcrypt/files-node-linux-x64-musl')
|
|
178
|
+
}
|
|
179
|
+
} catch (e) {
|
|
180
|
+
loadError = e
|
|
181
|
+
}
|
|
182
|
+
} else {
|
|
183
|
+
localFileExisted = existsSync(
|
|
184
|
+
join(__dirname, 'vollcrypt-files-node.linux-x64-gnu.node')
|
|
185
|
+
)
|
|
186
|
+
try {
|
|
187
|
+
if (localFileExisted) {
|
|
188
|
+
nativeBinding = require('./vollcrypt-files-node.linux-x64-gnu.node')
|
|
189
|
+
} else {
|
|
190
|
+
nativeBinding = require('@vollcrypt/files-node-linux-x64-gnu')
|
|
191
|
+
}
|
|
192
|
+
} catch (e) {
|
|
193
|
+
loadError = e
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
break
|
|
197
|
+
case 'arm64':
|
|
198
|
+
if (isMusl()) {
|
|
199
|
+
localFileExisted = existsSync(
|
|
200
|
+
join(__dirname, 'vollcrypt-files-node.linux-arm64-musl.node')
|
|
201
|
+
)
|
|
202
|
+
try {
|
|
203
|
+
if (localFileExisted) {
|
|
204
|
+
nativeBinding = require('./vollcrypt-files-node.linux-arm64-musl.node')
|
|
205
|
+
} else {
|
|
206
|
+
nativeBinding = require('@vollcrypt/files-node-linux-arm64-musl')
|
|
207
|
+
}
|
|
208
|
+
} catch (e) {
|
|
209
|
+
loadError = e
|
|
210
|
+
}
|
|
211
|
+
} else {
|
|
212
|
+
localFileExisted = existsSync(
|
|
213
|
+
join(__dirname, 'vollcrypt-files-node.linux-arm64-gnu.node')
|
|
214
|
+
)
|
|
215
|
+
try {
|
|
216
|
+
if (localFileExisted) {
|
|
217
|
+
nativeBinding = require('./vollcrypt-files-node.linux-arm64-gnu.node')
|
|
218
|
+
} else {
|
|
219
|
+
nativeBinding = require('@vollcrypt/files-node-linux-arm64-gnu')
|
|
220
|
+
}
|
|
221
|
+
} catch (e) {
|
|
222
|
+
loadError = e
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
break
|
|
226
|
+
case 'arm':
|
|
227
|
+
if (isMusl()) {
|
|
228
|
+
localFileExisted = existsSync(
|
|
229
|
+
join(__dirname, 'vollcrypt-files-node.linux-arm-musleabihf.node')
|
|
230
|
+
)
|
|
231
|
+
try {
|
|
232
|
+
if (localFileExisted) {
|
|
233
|
+
nativeBinding = require('./vollcrypt-files-node.linux-arm-musleabihf.node')
|
|
234
|
+
} else {
|
|
235
|
+
nativeBinding = require('@vollcrypt/files-node-linux-arm-musleabihf')
|
|
236
|
+
}
|
|
237
|
+
} catch (e) {
|
|
238
|
+
loadError = e
|
|
239
|
+
}
|
|
240
|
+
} else {
|
|
241
|
+
localFileExisted = existsSync(
|
|
242
|
+
join(__dirname, 'vollcrypt-files-node.linux-arm-gnueabihf.node')
|
|
243
|
+
)
|
|
244
|
+
try {
|
|
245
|
+
if (localFileExisted) {
|
|
246
|
+
nativeBinding = require('./vollcrypt-files-node.linux-arm-gnueabihf.node')
|
|
247
|
+
} else {
|
|
248
|
+
nativeBinding = require('@vollcrypt/files-node-linux-arm-gnueabihf')
|
|
249
|
+
}
|
|
250
|
+
} catch (e) {
|
|
251
|
+
loadError = e
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
break
|
|
255
|
+
case 'riscv64':
|
|
256
|
+
if (isMusl()) {
|
|
257
|
+
localFileExisted = existsSync(
|
|
258
|
+
join(__dirname, 'vollcrypt-files-node.linux-riscv64-musl.node')
|
|
259
|
+
)
|
|
260
|
+
try {
|
|
261
|
+
if (localFileExisted) {
|
|
262
|
+
nativeBinding = require('./vollcrypt-files-node.linux-riscv64-musl.node')
|
|
263
|
+
} else {
|
|
264
|
+
nativeBinding = require('@vollcrypt/files-node-linux-riscv64-musl')
|
|
265
|
+
}
|
|
266
|
+
} catch (e) {
|
|
267
|
+
loadError = e
|
|
268
|
+
}
|
|
269
|
+
} else {
|
|
270
|
+
localFileExisted = existsSync(
|
|
271
|
+
join(__dirname, 'vollcrypt-files-node.linux-riscv64-gnu.node')
|
|
272
|
+
)
|
|
273
|
+
try {
|
|
274
|
+
if (localFileExisted) {
|
|
275
|
+
nativeBinding = require('./vollcrypt-files-node.linux-riscv64-gnu.node')
|
|
276
|
+
} else {
|
|
277
|
+
nativeBinding = require('@vollcrypt/files-node-linux-riscv64-gnu')
|
|
278
|
+
}
|
|
279
|
+
} catch (e) {
|
|
280
|
+
loadError = e
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
break
|
|
284
|
+
case 's390x':
|
|
285
|
+
localFileExisted = existsSync(
|
|
286
|
+
join(__dirname, 'vollcrypt-files-node.linux-s390x-gnu.node')
|
|
287
|
+
)
|
|
288
|
+
try {
|
|
289
|
+
if (localFileExisted) {
|
|
290
|
+
nativeBinding = require('./vollcrypt-files-node.linux-s390x-gnu.node')
|
|
291
|
+
} else {
|
|
292
|
+
nativeBinding = require('@vollcrypt/files-node-linux-s390x-gnu')
|
|
293
|
+
}
|
|
294
|
+
} catch (e) {
|
|
295
|
+
loadError = e
|
|
296
|
+
}
|
|
297
|
+
break
|
|
298
|
+
default:
|
|
299
|
+
throw new Error(`Unsupported architecture on Linux: ${arch}`)
|
|
300
|
+
}
|
|
301
|
+
break
|
|
302
|
+
default:
|
|
303
|
+
throw new Error(`Unsupported OS: ${platform}, architecture: ${arch}`)
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
if (!nativeBinding) {
|
|
307
|
+
if (loadError) {
|
|
308
|
+
throw loadError
|
|
309
|
+
}
|
|
310
|
+
throw new Error(`Failed to load native binding`)
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
const { generateDek, generateFileId, generateSalt, generateGk, encryptChunk, decryptChunk, chunkLeafHash, merkleRoot, merkleProof, verifyMerkleProof, wrapDekWithPassword, unwrapDekWithPassword, unwrapDekWithPasswordAsync, generateRecipientKeypair, wrapKeyToRecipient, unwrapKeyWithRecipientKey, wrapDekForGroup, unwrapDekWithGroupKey, ed25519KeypairGenerate, ed25519Sign, ed25519Verify, GroupManifest, HeaderClass, rewrapDekInHeader, cryptoShredHeader, signHeaderPlain, signHeaderSealed, verifyHeaderSignaturePlain, verifyHeaderSignatureSealed, KeyLog, resolveSender, encryptFilePipelinedAsync, decryptFilePipelinedAsync } = nativeBinding
|
|
314
|
+
|
|
315
|
+
module.exports.generateDek = generateDek
|
|
316
|
+
module.exports.generateFileId = generateFileId
|
|
317
|
+
module.exports.generateSalt = generateSalt
|
|
318
|
+
module.exports.generateGk = generateGk
|
|
319
|
+
module.exports.encryptChunk = encryptChunk
|
|
320
|
+
module.exports.decryptChunk = decryptChunk
|
|
321
|
+
module.exports.chunkLeafHash = chunkLeafHash
|
|
322
|
+
module.exports.merkleRoot = merkleRoot
|
|
323
|
+
module.exports.merkleProof = merkleProof
|
|
324
|
+
module.exports.verifyMerkleProof = verifyMerkleProof
|
|
325
|
+
module.exports.wrapDekWithPassword = wrapDekWithPassword
|
|
326
|
+
module.exports.unwrapDekWithPassword = unwrapDekWithPassword
|
|
327
|
+
module.exports.unwrapDekWithPasswordAsync = unwrapDekWithPasswordAsync
|
|
328
|
+
module.exports.generateRecipientKeypair = generateRecipientKeypair
|
|
329
|
+
module.exports.wrapKeyToRecipient = wrapKeyToRecipient
|
|
330
|
+
module.exports.unwrapKeyWithRecipientKey = unwrapKeyWithRecipientKey
|
|
331
|
+
module.exports.wrapDekForGroup = wrapDekForGroup
|
|
332
|
+
module.exports.unwrapDekWithGroupKey = unwrapDekWithGroupKey
|
|
333
|
+
module.exports.ed25519KeypairGenerate = ed25519KeypairGenerate
|
|
334
|
+
module.exports.ed25519Sign = ed25519Sign
|
|
335
|
+
module.exports.ed25519Verify = ed25519Verify
|
|
336
|
+
module.exports.GroupManifest = GroupManifest
|
|
337
|
+
module.exports.HeaderClass = HeaderClass
|
|
338
|
+
module.exports.rewrapDekInHeader = rewrapDekInHeader
|
|
339
|
+
module.exports.cryptoShredHeader = cryptoShredHeader
|
|
340
|
+
module.exports.signHeaderPlain = signHeaderPlain
|
|
341
|
+
module.exports.signHeaderSealed = signHeaderSealed
|
|
342
|
+
module.exports.verifyHeaderSignaturePlain = verifyHeaderSignaturePlain
|
|
343
|
+
module.exports.verifyHeaderSignatureSealed = verifyHeaderSignatureSealed
|
|
344
|
+
module.exports.KeyLog = KeyLog
|
|
345
|
+
module.exports.resolveSender = resolveSender
|
|
346
|
+
module.exports.encryptFilePipelinedAsync = encryptFilePipelinedAsync
|
|
347
|
+
module.exports.decryptFilePipelinedAsync = decryptFilePipelinedAsync
|
package/package.json
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@vollcrypt/files-node",
|
|
3
|
+
"version": "0.1.1",
|
|
4
|
+
"description": "Cross-platform, quantum-resistant file encryption engine for Node.js - native binding",
|
|
5
|
+
"main": "index.js",
|
|
6
|
+
"types": "index.d.ts",
|
|
7
|
+
"napi": {
|
|
8
|
+
"name": "vollcrypt-files-node",
|
|
9
|
+
"triples": {
|
|
10
|
+
"defaults": true,
|
|
11
|
+
"additional": [
|
|
12
|
+
"aarch64-apple-darwin",
|
|
13
|
+
"aarch64-unknown-linux-gnu",
|
|
14
|
+
"aarch64-unknown-linux-musl"
|
|
15
|
+
]
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
"scripts": {
|
|
19
|
+
"build": "npx @napi-rs/cli build --platform --release",
|
|
20
|
+
"build:debug": "npx @napi-rs/cli build --platform",
|
|
21
|
+
"test": "node --import tsx --test tests/api.test.ts"
|
|
22
|
+
},
|
|
23
|
+
"publishConfig": {
|
|
24
|
+
"access": "public"
|
|
25
|
+
},
|
|
26
|
+
"repository": {
|
|
27
|
+
"type": "git",
|
|
28
|
+
"url": "git+https://github.com/BeratVural/vollcrypt.git",
|
|
29
|
+
"directory": "vollcrypt-files/node"
|
|
30
|
+
},
|
|
31
|
+
"homepage": "https://github.com/BeratVural/vollcrypt#readme",
|
|
32
|
+
"bugs": {
|
|
33
|
+
"url": "https://github.com/BeratVural/vollcrypt/issues"
|
|
34
|
+
},
|
|
35
|
+
"engines": {
|
|
36
|
+
"node": ">=18"
|
|
37
|
+
},
|
|
38
|
+
"files": [
|
|
39
|
+
"index.d.ts",
|
|
40
|
+
"index.js",
|
|
41
|
+
"vollcrypt-files-node.*.node"
|
|
42
|
+
],
|
|
43
|
+
"keywords": [
|
|
44
|
+
"vollcrypt",
|
|
45
|
+
"cryptography",
|
|
46
|
+
"encryption",
|
|
47
|
+
"file-encryption",
|
|
48
|
+
"aes-gcm",
|
|
49
|
+
"ed25519",
|
|
50
|
+
"x25519",
|
|
51
|
+
"ml-kem",
|
|
52
|
+
"post-quantum",
|
|
53
|
+
"pqc",
|
|
54
|
+
"e2ee",
|
|
55
|
+
"napi"
|
|
56
|
+
],
|
|
57
|
+
"author": "Berat Vural <berat.vural.tr@gmail.com>",
|
|
58
|
+
"license": "GPL-3.0-only OR LicenseRef-Commercial",
|
|
59
|
+
"devDependencies": {
|
|
60
|
+
"@napi-rs/cli": "^2.18.4",
|
|
61
|
+
"@types/node": "^20.11.0",
|
|
62
|
+
"tsx": "^4.7.0",
|
|
63
|
+
"typescript": "^5.3.3"
|
|
64
|
+
}
|
|
65
|
+
}
|
|
Binary file
|