@vollcrypt/messages-node 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/README.md +57 -0
- package/index.d.ts +70 -0
- package/index.js +366 -0
- package/package.json +59 -0
- package/vollcrypt.win32-x64-msvc.node +0 -0
package/README.md
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# @vollcrypt/node
|
|
2
|
+
|
|
3
|
+
**Cross-platform, quantum-resistant cryptography engine for Node.js - Native Binding**
|
|
4
|
+
|
|
5
|
+
[](https://www.npmjs.com/package/@vollcrypt/node)
|
|
6
|
+
[](https://github.com/BeratVural/vollcrypt/blob/main/LICENSE)
|
|
7
|
+
|
|
8
|
+
This package provides the high-performance **native Node.js bindings** for the Vollcrypt cryptography engine. It is compiled directly from Rust using NAPI-RS, offering maximum performance and utilizing hardware-accelerated instructions (such as AES-NI) where available.
|
|
9
|
+
|
|
10
|
+
## Features
|
|
11
|
+
|
|
12
|
+
- **Blazing Fast:** Directly executes native machine code without the overhead of WebAssembly.
|
|
13
|
+
- **Quantum-Resistant:** Implements the NIST FIPS 203 (ML-KEM-768) standard combined with X25519 for hybrid key exchange.
|
|
14
|
+
- **Secure Defaults:** Provides AES-256-GCM, Ed25519, HKDF-SHA256, and post-compromise security ratchets out of the box.
|
|
15
|
+
- **Cross-Platform:** Pre-built native binaries are provided for Windows, macOS (Intel & Apple Silicon), and Linux (glibc & musl).
|
|
16
|
+
|
|
17
|
+
## Installation
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
npm install @vollcrypt/node
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
*Note: When you install this package, npm will automatically download the correct pre-compiled native binary for your operating system and CPU architecture.*
|
|
24
|
+
|
|
25
|
+
## Quick Start
|
|
26
|
+
|
|
27
|
+
```javascript
|
|
28
|
+
const vollcrypt = require('@vollcrypt/node');
|
|
29
|
+
|
|
30
|
+
// Generate an Ed25519 Identity Keypair
|
|
31
|
+
const identity = vollcrypt.generateEd25519Keypair();
|
|
32
|
+
console.log("Public Key:", Buffer.from(identity[1]).toString('hex'));
|
|
33
|
+
|
|
34
|
+
// Sign and Verify
|
|
35
|
+
const message = Buffer.from("Hello from Vollcrypt Native!");
|
|
36
|
+
const signature = vollcrypt.signMessage(identity[0], message);
|
|
37
|
+
const isValid = vollcrypt.verifySignature(identity[1], message, signature);
|
|
38
|
+
|
|
39
|
+
console.log("Signature Valid:", isValid); // true
|
|
40
|
+
|
|
41
|
+
// Hybrid Key Exchange (X25519)
|
|
42
|
+
const alice = vollcrypt.generateX25519Keypair();
|
|
43
|
+
const bob = vollcrypt.generateX25519Keypair();
|
|
44
|
+
const sharedSecret = vollcrypt.ecdhSharedSecret(alice[0], bob[1]);
|
|
45
|
+
|
|
46
|
+
console.log("Shared Secret Derived successfully.");
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## Documentation
|
|
50
|
+
|
|
51
|
+
For full API documentation, architecture details, and the WebAssembly equivalent, please refer to the [Vollcrypt Main Repository](https://github.com/BeratVural/vollcrypt).
|
|
52
|
+
|
|
53
|
+
## License
|
|
54
|
+
|
|
55
|
+
This project is licensed under the **GNU General Public License v3.0**.
|
|
56
|
+
|
|
57
|
+
For commercial use without the GPL copyleft requirement, please contact Berat Vural at [berat.vural.tr@gmail.com](mailto:berat.vural.tr@gmail.com).
|
package/index.d.ts
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/* tslint:disable */
|
|
2
|
+
/* eslint-disable */
|
|
3
|
+
|
|
4
|
+
/* auto-generated by NAPI-RS */
|
|
5
|
+
|
|
6
|
+
export declare function generateMnemonic(): string
|
|
7
|
+
export declare function mnemonicToSeed(phrase: string, password?: string | undefined | null): Buffer
|
|
8
|
+
export declare function generateEd25519Keypair(): Array<Buffer>
|
|
9
|
+
export declare function generateX25519Keypair(): Array<Buffer>
|
|
10
|
+
export declare function ecdhSharedSecret(ourSecret: Uint8Array, theirPublic: Uint8Array): Buffer
|
|
11
|
+
export declare function signMessage(secretKey: Uint8Array, message: Uint8Array): Buffer
|
|
12
|
+
export declare function verifySignature(publicKey: Uint8Array, message: Uint8Array, signature: Uint8Array): boolean
|
|
13
|
+
export declare function encryptAesGcm(key: Uint8Array, plaintext: Uint8Array, aad?: Uint8Array | undefined | null): Buffer
|
|
14
|
+
export declare function decryptAesGcm(key: Uint8Array, ciphertext: Uint8Array, aad?: Uint8Array | undefined | null): Buffer
|
|
15
|
+
export declare function encryptAesGcmPadded(key: Uint8Array, plaintext: Uint8Array, aad?: Uint8Array | undefined | null): Buffer
|
|
16
|
+
export declare function decryptAesGcmPadded(key: Uint8Array, ciphertext: Uint8Array, aad?: Uint8Array | undefined | null): Buffer
|
|
17
|
+
export declare function encryptAesGcmChunked(key: Uint8Array, plaintext: Uint8Array, aad: Uint8Array | undefined | null, chunkSize: number): Buffer
|
|
18
|
+
export declare function decryptAesGcmChunked(key: Uint8Array, ciphertext: Uint8Array, aad?: Uint8Array | undefined | null): Buffer
|
|
19
|
+
export declare function encryptAesGcmChunkedPadded(key: Uint8Array, plaintext: Uint8Array, aad: Uint8Array | undefined | null, chunkSize: number): Buffer
|
|
20
|
+
export declare function decryptAesGcmChunkedPadded(key: Uint8Array, ciphertext: Uint8Array, aad?: Uint8Array | undefined | null): Buffer
|
|
21
|
+
export declare function derivePbkdf2(password: Uint8Array, salt: Uint8Array, iterations: number, keyLen: number): Buffer
|
|
22
|
+
export declare function deriveHkdf(ikm: Uint8Array, salt: Uint8Array | undefined | null, info: Uint8Array | undefined | null, keyLen: number): Buffer
|
|
23
|
+
export declare function deriveSrk(dek: Uint8Array, chatId: Uint8Array): Buffer
|
|
24
|
+
export declare function deriveWindowKey(srk: Uint8Array, windowIndex: number): Buffer
|
|
25
|
+
export declare function generateVerificationCode(keyA: Uint8Array, keyB: Uint8Array, conversationId: Uint8Array): string
|
|
26
|
+
export declare function computeFingerprint(keyA: Uint8Array, keyB: Uint8Array, conversationId: Uint8Array): Buffer
|
|
27
|
+
export declare function verifyFingerprintsMatch(fingerprintA: Uint8Array, fingerprintB: Uint8Array): boolean
|
|
28
|
+
export declare function wrapKey(kek: Uint8Array, keyToWrap: Uint8Array): Buffer
|
|
29
|
+
export declare function unwrapKey(kek: Uint8Array, wrappedKey: Uint8Array): Buffer
|
|
30
|
+
export declare function padMessage(content: Uint8Array): Buffer
|
|
31
|
+
export declare function packEnvelope(windowIndex: number, aadHash: Uint8Array, encryptedBlob: Uint8Array): Buffer
|
|
32
|
+
export interface UnpackedEnvelope {
|
|
33
|
+
windowIndex: number
|
|
34
|
+
aadHash: Buffer
|
|
35
|
+
encryptedBlob: Buffer
|
|
36
|
+
}
|
|
37
|
+
export declare function unpackEnvelope(envelope: Uint8Array): UnpackedEnvelope
|
|
38
|
+
export declare function mlKemKeygen(): Array<Buffer>
|
|
39
|
+
export interface MlKemEncapsulationResult {
|
|
40
|
+
ciphertext: Buffer
|
|
41
|
+
sharedSecret: Buffer
|
|
42
|
+
}
|
|
43
|
+
export declare function mlKemEncapsulate(encapsulationKey: Uint8Array): MlKemEncapsulationResult
|
|
44
|
+
export declare function mlKemDecapsulate(decapsulationKey: Uint8Array, ciphertext: Uint8Array): Buffer
|
|
45
|
+
export interface HybridKemResult {
|
|
46
|
+
sharedKey: Buffer
|
|
47
|
+
mlKemCiphertext: Buffer
|
|
48
|
+
}
|
|
49
|
+
export declare function hybridKemEncapsulate(x25519OurSecret: Uint8Array, x25519TheirPublic: Uint8Array, mlKemEk: Uint8Array): HybridKemResult
|
|
50
|
+
export declare function hybridKemDecapsulate(x25519OurSecret: Uint8Array, x25519TheirPublic: Uint8Array, mlKemDk: Uint8Array, mlKemCt: Uint8Array): Buffer
|
|
51
|
+
export declare function authenticatedKemEncapsulate(ourX25519Sk: Uint8Array, recipientX25519Pub: Uint8Array, recipientMlkemEk: Uint8Array, senderIdentitySk: Uint8Array): Array<Buffer>
|
|
52
|
+
export declare function authenticatedKemDecapsulate(ourX25519Sk: Uint8Array, senderX25519Pub: Uint8Array, ourMlkemDk: Uint8Array, authenticatedCiphertext: Uint8Array, senderIdentityPk: Uint8Array): Buffer
|
|
53
|
+
export declare function registryEmpty(): string
|
|
54
|
+
export declare function registryAddDevice(registryJson: string, deviceId: string, name: string, addedAt: number, publicKey: string): string
|
|
55
|
+
export declare function registryRevokeDevice(registryJson: string, deviceId: string): string
|
|
56
|
+
export declare function registryGetActiveDevices(registryJson: string): string
|
|
57
|
+
export declare function generateRatchetKeypair(): Array<Buffer>
|
|
58
|
+
export declare function ratchetSrk(currentSrk: Uint8Array, ourRatchetSecret: Uint8Array, theirRatchetPub: Uint8Array, chatId: Uint8Array, ratchetStep: number, isSender: boolean): Buffer
|
|
59
|
+
export declare function shouldRatchet(messageCount: number, windowChanged: boolean, messagesPerRatchet: number, ratchetOnNewWindow: boolean): boolean
|
|
60
|
+
export declare function transcriptNew(sessionId: Uint8Array): Buffer
|
|
61
|
+
export declare function transcriptUpdate(chainState: Uint8Array, messageHash: Uint8Array): Buffer
|
|
62
|
+
export declare function transcriptComputeMessageHash(messageId: Uint8Array, senderId: Uint8Array, timestamp: number, ciphertext: Uint8Array): Buffer
|
|
63
|
+
export declare function transcriptVerifySync(hashA: Uint8Array, hashB: Uint8Array): boolean
|
|
64
|
+
export declare function sealMessage(recipientX25519Pub: Uint8Array, senderId: Uint8Array, content: Uint8Array): Buffer
|
|
65
|
+
export declare function unsealMessage(sealedPacket: Uint8Array, ourX25519Sk: Uint8Array): Array<Buffer>
|
|
66
|
+
export declare function keyLogCreateEntry(userId: Uint8Array, publicKey: Uint8Array, timestamp: number, prevEntryHash: Uint8Array, action: number, signingKey: Uint8Array): string
|
|
67
|
+
export declare function keyLogVerifyChain(entriesJson: string): boolean
|
|
68
|
+
export declare function keyLogCurrentKey(entriesJson: string, userId: Uint8Array): Buffer | null
|
|
69
|
+
export declare function keyLogKeyAtTimestamp(entriesJson: string, userId: Uint8Array, timestamp: number): Buffer | null
|
|
70
|
+
export declare function keyLogComputeEntryHash(entryJson: string): Buffer
|
package/index.js
ADDED
|
@@ -0,0 +1,366 @@
|
|
|
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.android-arm64.node'))
|
|
36
|
+
try {
|
|
37
|
+
if (localFileExisted) {
|
|
38
|
+
nativeBinding = require('./vollcrypt.android-arm64.node')
|
|
39
|
+
} else {
|
|
40
|
+
nativeBinding = require('@vollcrypt/messages-node-android-arm64')
|
|
41
|
+
}
|
|
42
|
+
} catch (e) {
|
|
43
|
+
loadError = e
|
|
44
|
+
}
|
|
45
|
+
break
|
|
46
|
+
case 'arm':
|
|
47
|
+
localFileExisted = existsSync(join(__dirname, 'vollcrypt.android-arm-eabi.node'))
|
|
48
|
+
try {
|
|
49
|
+
if (localFileExisted) {
|
|
50
|
+
nativeBinding = require('./vollcrypt.android-arm-eabi.node')
|
|
51
|
+
} else {
|
|
52
|
+
nativeBinding = require('@vollcrypt/messages-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.win32-x64-msvc.node')
|
|
67
|
+
)
|
|
68
|
+
try {
|
|
69
|
+
if (localFileExisted) {
|
|
70
|
+
nativeBinding = require('./vollcrypt.win32-x64-msvc.node')
|
|
71
|
+
} else {
|
|
72
|
+
nativeBinding = require('@vollcrypt/messages-node-win32-x64-msvc')
|
|
73
|
+
}
|
|
74
|
+
} catch (e) {
|
|
75
|
+
loadError = e
|
|
76
|
+
}
|
|
77
|
+
break
|
|
78
|
+
case 'ia32':
|
|
79
|
+
localFileExisted = existsSync(
|
|
80
|
+
join(__dirname, 'vollcrypt.win32-ia32-msvc.node')
|
|
81
|
+
)
|
|
82
|
+
try {
|
|
83
|
+
if (localFileExisted) {
|
|
84
|
+
nativeBinding = require('./vollcrypt.win32-ia32-msvc.node')
|
|
85
|
+
} else {
|
|
86
|
+
nativeBinding = require('@vollcrypt/messages-node-win32-ia32-msvc')
|
|
87
|
+
}
|
|
88
|
+
} catch (e) {
|
|
89
|
+
loadError = e
|
|
90
|
+
}
|
|
91
|
+
break
|
|
92
|
+
case 'arm64':
|
|
93
|
+
localFileExisted = existsSync(
|
|
94
|
+
join(__dirname, 'vollcrypt.win32-arm64-msvc.node')
|
|
95
|
+
)
|
|
96
|
+
try {
|
|
97
|
+
if (localFileExisted) {
|
|
98
|
+
nativeBinding = require('./vollcrypt.win32-arm64-msvc.node')
|
|
99
|
+
} else {
|
|
100
|
+
nativeBinding = require('@vollcrypt/messages-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.darwin-universal.node'))
|
|
112
|
+
try {
|
|
113
|
+
if (localFileExisted) {
|
|
114
|
+
nativeBinding = require('./vollcrypt.darwin-universal.node')
|
|
115
|
+
} else {
|
|
116
|
+
nativeBinding = require('@vollcrypt/messages-node-darwin-universal')
|
|
117
|
+
}
|
|
118
|
+
break
|
|
119
|
+
} catch {}
|
|
120
|
+
switch (arch) {
|
|
121
|
+
case 'x64':
|
|
122
|
+
localFileExisted = existsSync(join(__dirname, 'vollcrypt.darwin-x64.node'))
|
|
123
|
+
try {
|
|
124
|
+
if (localFileExisted) {
|
|
125
|
+
nativeBinding = require('./vollcrypt.darwin-x64.node')
|
|
126
|
+
} else {
|
|
127
|
+
nativeBinding = require('@vollcrypt/messages-node-darwin-x64')
|
|
128
|
+
}
|
|
129
|
+
} catch (e) {
|
|
130
|
+
loadError = e
|
|
131
|
+
}
|
|
132
|
+
break
|
|
133
|
+
case 'arm64':
|
|
134
|
+
localFileExisted = existsSync(
|
|
135
|
+
join(__dirname, 'vollcrypt.darwin-arm64.node')
|
|
136
|
+
)
|
|
137
|
+
try {
|
|
138
|
+
if (localFileExisted) {
|
|
139
|
+
nativeBinding = require('./vollcrypt.darwin-arm64.node')
|
|
140
|
+
} else {
|
|
141
|
+
nativeBinding = require('@vollcrypt/messages-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.freebsd-x64.node'))
|
|
156
|
+
try {
|
|
157
|
+
if (localFileExisted) {
|
|
158
|
+
nativeBinding = require('./vollcrypt.freebsd-x64.node')
|
|
159
|
+
} else {
|
|
160
|
+
nativeBinding = require('@vollcrypt/messages-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.linux-x64-musl.node')
|
|
172
|
+
)
|
|
173
|
+
try {
|
|
174
|
+
if (localFileExisted) {
|
|
175
|
+
nativeBinding = require('./vollcrypt.linux-x64-musl.node')
|
|
176
|
+
} else {
|
|
177
|
+
nativeBinding = require('@vollcrypt/messages-node-linux-x64-musl')
|
|
178
|
+
}
|
|
179
|
+
} catch (e) {
|
|
180
|
+
loadError = e
|
|
181
|
+
}
|
|
182
|
+
} else {
|
|
183
|
+
localFileExisted = existsSync(
|
|
184
|
+
join(__dirname, 'vollcrypt.linux-x64-gnu.node')
|
|
185
|
+
)
|
|
186
|
+
try {
|
|
187
|
+
if (localFileExisted) {
|
|
188
|
+
nativeBinding = require('./vollcrypt.linux-x64-gnu.node')
|
|
189
|
+
} else {
|
|
190
|
+
nativeBinding = require('@vollcrypt/messages-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.linux-arm64-musl.node')
|
|
201
|
+
)
|
|
202
|
+
try {
|
|
203
|
+
if (localFileExisted) {
|
|
204
|
+
nativeBinding = require('./vollcrypt.linux-arm64-musl.node')
|
|
205
|
+
} else {
|
|
206
|
+
nativeBinding = require('@vollcrypt/messages-node-linux-arm64-musl')
|
|
207
|
+
}
|
|
208
|
+
} catch (e) {
|
|
209
|
+
loadError = e
|
|
210
|
+
}
|
|
211
|
+
} else {
|
|
212
|
+
localFileExisted = existsSync(
|
|
213
|
+
join(__dirname, 'vollcrypt.linux-arm64-gnu.node')
|
|
214
|
+
)
|
|
215
|
+
try {
|
|
216
|
+
if (localFileExisted) {
|
|
217
|
+
nativeBinding = require('./vollcrypt.linux-arm64-gnu.node')
|
|
218
|
+
} else {
|
|
219
|
+
nativeBinding = require('@vollcrypt/messages-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.linux-arm-musleabihf.node')
|
|
230
|
+
)
|
|
231
|
+
try {
|
|
232
|
+
if (localFileExisted) {
|
|
233
|
+
nativeBinding = require('./vollcrypt.linux-arm-musleabihf.node')
|
|
234
|
+
} else {
|
|
235
|
+
nativeBinding = require('@vollcrypt/messages-node-linux-arm-musleabihf')
|
|
236
|
+
}
|
|
237
|
+
} catch (e) {
|
|
238
|
+
loadError = e
|
|
239
|
+
}
|
|
240
|
+
} else {
|
|
241
|
+
localFileExisted = existsSync(
|
|
242
|
+
join(__dirname, 'vollcrypt.linux-arm-gnueabihf.node')
|
|
243
|
+
)
|
|
244
|
+
try {
|
|
245
|
+
if (localFileExisted) {
|
|
246
|
+
nativeBinding = require('./vollcrypt.linux-arm-gnueabihf.node')
|
|
247
|
+
} else {
|
|
248
|
+
nativeBinding = require('@vollcrypt/messages-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.linux-riscv64-musl.node')
|
|
259
|
+
)
|
|
260
|
+
try {
|
|
261
|
+
if (localFileExisted) {
|
|
262
|
+
nativeBinding = require('./vollcrypt.linux-riscv64-musl.node')
|
|
263
|
+
} else {
|
|
264
|
+
nativeBinding = require('@vollcrypt/messages-node-linux-riscv64-musl')
|
|
265
|
+
}
|
|
266
|
+
} catch (e) {
|
|
267
|
+
loadError = e
|
|
268
|
+
}
|
|
269
|
+
} else {
|
|
270
|
+
localFileExisted = existsSync(
|
|
271
|
+
join(__dirname, 'vollcrypt.linux-riscv64-gnu.node')
|
|
272
|
+
)
|
|
273
|
+
try {
|
|
274
|
+
if (localFileExisted) {
|
|
275
|
+
nativeBinding = require('./vollcrypt.linux-riscv64-gnu.node')
|
|
276
|
+
} else {
|
|
277
|
+
nativeBinding = require('@vollcrypt/messages-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.linux-s390x-gnu.node')
|
|
287
|
+
)
|
|
288
|
+
try {
|
|
289
|
+
if (localFileExisted) {
|
|
290
|
+
nativeBinding = require('./vollcrypt.linux-s390x-gnu.node')
|
|
291
|
+
} else {
|
|
292
|
+
nativeBinding = require('@vollcrypt/messages-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 { generateMnemonic, mnemonicToSeed, generateEd25519Keypair, generateX25519Keypair, ecdhSharedSecret, signMessage, verifySignature, encryptAesGcm, decryptAesGcm, encryptAesGcmPadded, decryptAesGcmPadded, encryptAesGcmChunked, decryptAesGcmChunked, encryptAesGcmChunkedPadded, decryptAesGcmChunkedPadded, derivePbkdf2, deriveHkdf, deriveSrk, deriveWindowKey, generateVerificationCode, computeFingerprint, verifyFingerprintsMatch, wrapKey, unwrapKey, padMessage, packEnvelope, unpackEnvelope, mlKemKeygen, mlKemEncapsulate, mlKemDecapsulate, hybridKemEncapsulate, hybridKemDecapsulate, authenticatedKemEncapsulate, authenticatedKemDecapsulate, registryEmpty, registryAddDevice, registryRevokeDevice, registryGetActiveDevices, generateRatchetKeypair, ratchetSrk, shouldRatchet, transcriptNew, transcriptUpdate, transcriptComputeMessageHash, transcriptVerifySync, sealMessage, unsealMessage, keyLogCreateEntry, keyLogVerifyChain, keyLogCurrentKey, keyLogKeyAtTimestamp, keyLogComputeEntryHash } = nativeBinding
|
|
314
|
+
|
|
315
|
+
module.exports.generateMnemonic = generateMnemonic
|
|
316
|
+
module.exports.mnemonicToSeed = mnemonicToSeed
|
|
317
|
+
module.exports.generateEd25519Keypair = generateEd25519Keypair
|
|
318
|
+
module.exports.generateX25519Keypair = generateX25519Keypair
|
|
319
|
+
module.exports.ecdhSharedSecret = ecdhSharedSecret
|
|
320
|
+
module.exports.signMessage = signMessage
|
|
321
|
+
module.exports.verifySignature = verifySignature
|
|
322
|
+
module.exports.encryptAesGcm = encryptAesGcm
|
|
323
|
+
module.exports.decryptAesGcm = decryptAesGcm
|
|
324
|
+
module.exports.encryptAesGcmPadded = encryptAesGcmPadded
|
|
325
|
+
module.exports.decryptAesGcmPadded = decryptAesGcmPadded
|
|
326
|
+
module.exports.encryptAesGcmChunked = encryptAesGcmChunked
|
|
327
|
+
module.exports.decryptAesGcmChunked = decryptAesGcmChunked
|
|
328
|
+
module.exports.encryptAesGcmChunkedPadded = encryptAesGcmChunkedPadded
|
|
329
|
+
module.exports.decryptAesGcmChunkedPadded = decryptAesGcmChunkedPadded
|
|
330
|
+
module.exports.derivePbkdf2 = derivePbkdf2
|
|
331
|
+
module.exports.deriveHkdf = deriveHkdf
|
|
332
|
+
module.exports.deriveSrk = deriveSrk
|
|
333
|
+
module.exports.deriveWindowKey = deriveWindowKey
|
|
334
|
+
module.exports.generateVerificationCode = generateVerificationCode
|
|
335
|
+
module.exports.computeFingerprint = computeFingerprint
|
|
336
|
+
module.exports.verifyFingerprintsMatch = verifyFingerprintsMatch
|
|
337
|
+
module.exports.wrapKey = wrapKey
|
|
338
|
+
module.exports.unwrapKey = unwrapKey
|
|
339
|
+
module.exports.padMessage = padMessage
|
|
340
|
+
module.exports.packEnvelope = packEnvelope
|
|
341
|
+
module.exports.unpackEnvelope = unpackEnvelope
|
|
342
|
+
module.exports.mlKemKeygen = mlKemKeygen
|
|
343
|
+
module.exports.mlKemEncapsulate = mlKemEncapsulate
|
|
344
|
+
module.exports.mlKemDecapsulate = mlKemDecapsulate
|
|
345
|
+
module.exports.hybridKemEncapsulate = hybridKemEncapsulate
|
|
346
|
+
module.exports.hybridKemDecapsulate = hybridKemDecapsulate
|
|
347
|
+
module.exports.authenticatedKemEncapsulate = authenticatedKemEncapsulate
|
|
348
|
+
module.exports.authenticatedKemDecapsulate = authenticatedKemDecapsulate
|
|
349
|
+
module.exports.registryEmpty = registryEmpty
|
|
350
|
+
module.exports.registryAddDevice = registryAddDevice
|
|
351
|
+
module.exports.registryRevokeDevice = registryRevokeDevice
|
|
352
|
+
module.exports.registryGetActiveDevices = registryGetActiveDevices
|
|
353
|
+
module.exports.generateRatchetKeypair = generateRatchetKeypair
|
|
354
|
+
module.exports.ratchetSrk = ratchetSrk
|
|
355
|
+
module.exports.shouldRatchet = shouldRatchet
|
|
356
|
+
module.exports.transcriptNew = transcriptNew
|
|
357
|
+
module.exports.transcriptUpdate = transcriptUpdate
|
|
358
|
+
module.exports.transcriptComputeMessageHash = transcriptComputeMessageHash
|
|
359
|
+
module.exports.transcriptVerifySync = transcriptVerifySync
|
|
360
|
+
module.exports.sealMessage = sealMessage
|
|
361
|
+
module.exports.unsealMessage = unsealMessage
|
|
362
|
+
module.exports.keyLogCreateEntry = keyLogCreateEntry
|
|
363
|
+
module.exports.keyLogVerifyChain = keyLogVerifyChain
|
|
364
|
+
module.exports.keyLogCurrentKey = keyLogCurrentKey
|
|
365
|
+
module.exports.keyLogKeyAtTimestamp = keyLogKeyAtTimestamp
|
|
366
|
+
module.exports.keyLogComputeEntryHash = keyLogComputeEntryHash
|
package/package.json
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@vollcrypt/messages-node",
|
|
3
|
+
"version": "0.2.0",
|
|
4
|
+
"description": "Cross-platform, quantum-resistant cryptography engine for Node.js - native binding",
|
|
5
|
+
"main": "index.js",
|
|
6
|
+
"types": "index.d.ts",
|
|
7
|
+
"scripts": {
|
|
8
|
+
"build": "npx @napi-rs/cli build --platform --release"
|
|
9
|
+
},
|
|
10
|
+
"publishConfig": {
|
|
11
|
+
"access": "public"
|
|
12
|
+
},
|
|
13
|
+
"devDependencies": {
|
|
14
|
+
"@napi-rs/cli": "^2.18.4"
|
|
15
|
+
},
|
|
16
|
+
"repository": {
|
|
17
|
+
"type": "git",
|
|
18
|
+
"url": "git+https://github.com/BeratVural/vollcrypt.git",
|
|
19
|
+
"directory": "node"
|
|
20
|
+
},
|
|
21
|
+
"homepage": "https://github.com/BeratVural/vollcrypt#readme",
|
|
22
|
+
"bugs": {
|
|
23
|
+
"url": "https://github.com/BeratVural/vollcrypt/issues"
|
|
24
|
+
},
|
|
25
|
+
"engines": {
|
|
26
|
+
"node": ">=18"
|
|
27
|
+
},
|
|
28
|
+
"files": [
|
|
29
|
+
"index.d.ts",
|
|
30
|
+
"index.js",
|
|
31
|
+
"vollcrypt.*.node"
|
|
32
|
+
],
|
|
33
|
+
"keywords": [
|
|
34
|
+
"vollcrypt",
|
|
35
|
+
"cryptography",
|
|
36
|
+
"encryption",
|
|
37
|
+
"aes-gcm",
|
|
38
|
+
"ed25519",
|
|
39
|
+
"x25519",
|
|
40
|
+
"ml-kem",
|
|
41
|
+
"post-quantum",
|
|
42
|
+
"pqc",
|
|
43
|
+
"e2ee",
|
|
44
|
+
"napi"
|
|
45
|
+
],
|
|
46
|
+
"author": "Berat Vural <berat.vural.tr@gmail.com>",
|
|
47
|
+
"license": "GPL-3.0-only",
|
|
48
|
+
"napi": {
|
|
49
|
+
"name": "vollcrypt",
|
|
50
|
+
"triples": {
|
|
51
|
+
"defaults": true,
|
|
52
|
+
"additional": [
|
|
53
|
+
"aarch64-apple-darwin",
|
|
54
|
+
"aarch64-unknown-linux-gnu",
|
|
55
|
+
"aarch64-unknown-linux-musl"
|
|
56
|
+
]
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
Binary file
|