appium-ios-remotexpc 0.0.5 → 0.1.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/CHANGELOG.md +12 -0
- package/build/src/index.d.ts +1 -1
- package/build/src/index.d.ts.map +1 -1
- package/build/src/lib/apple-tv/srp/crypto-utils.d.ts +53 -0
- package/build/src/lib/apple-tv/srp/crypto-utils.d.ts.map +1 -0
- package/build/src/lib/apple-tv/srp/crypto-utils.js +128 -0
- package/build/src/lib/apple-tv/srp/index.d.ts +3 -0
- package/build/src/lib/apple-tv/srp/index.d.ts.map +1 -0
- package/build/src/lib/apple-tv/srp/index.js +2 -0
- package/build/src/lib/apple-tv/srp/srp-client.d.ts +130 -0
- package/build/src/lib/apple-tv/srp/srp-client.d.ts.map +1 -0
- package/build/src/lib/apple-tv/srp/srp-client.js +288 -0
- package/build/src/lib/remote-xpc/remote-xpc-connection.d.ts +1 -2
- package/build/src/lib/remote-xpc/remote-xpc-connection.d.ts.map +1 -1
- package/build/src/lib/remote-xpc/remote-xpc-connection.js +1 -2
- package/build/src/lib/tunnel/index.d.ts +3 -2
- package/build/src/lib/tunnel/index.d.ts.map +1 -1
- package/build/src/lib/tunnel/index.js +6 -3
- package/build/src/lib/types.d.ts +11 -0
- package/build/src/lib/types.d.ts.map +1 -1
- package/build/src/services/ios/diagnostic-service/index.d.ts.map +1 -1
- package/build/src/services/ios/diagnostic-service/index.js +0 -1
- package/build/src/services.d.ts +3 -3
- package/build/src/services.d.ts.map +1 -1
- package/build/src/services.js +8 -5
- package/package.json +1 -1
- package/src/index.ts +1 -0
- package/src/lib/apple-tv/srp/crypto-utils.ts +166 -0
- package/src/lib/apple-tv/srp/index.ts +8 -0
- package/src/lib/apple-tv/srp/srp-client.ts +387 -0
- package/src/lib/remote-xpc/remote-xpc-connection.ts +1 -2
- package/src/lib/tunnel/index.ts +7 -5
- package/src/lib/types.ts +12 -0
- package/src/services/ios/diagnostic-service/index.ts +0 -1
- package/src/services.ts +10 -7
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { TLSSocket } from 'tls';
|
|
2
2
|
import { type TunnelConnection } from 'tuntap-bridge';
|
|
3
|
+
import { RemoteXpcConnection } from '../remote-xpc/remote-xpc-connection.js';
|
|
3
4
|
/**
|
|
4
5
|
* A wrapper around the tunnel connection that
|
|
5
6
|
* maintains a registry of active tunnels that can be reused.
|
|
@@ -26,7 +27,7 @@ declare class TunnelManagerService {
|
|
|
26
27
|
* @param rsdPort - The RSD port of the tunnel
|
|
27
28
|
* @returns A promise that resolves to the RemoteXPC connection
|
|
28
29
|
*/
|
|
29
|
-
createRemoteXPCConnection(address: string, rsdPort: number): Promise<
|
|
30
|
+
createRemoteXPCConnection(address: string, rsdPort: number): Promise<RemoteXpcConnection>;
|
|
30
31
|
/**
|
|
31
32
|
* Establishes a tunnel connection if not already connected.
|
|
32
33
|
* If a tunnel is already open for the same address, it will be reused.
|
|
@@ -64,6 +65,6 @@ declare class TunnelManagerService {
|
|
|
64
65
|
closeTunnel(): Promise<void>;
|
|
65
66
|
}
|
|
66
67
|
export declare const TunnelManager: TunnelManagerService;
|
|
67
|
-
export { PacketStreamServer } from './packet-stream-server.js';
|
|
68
68
|
export { PacketStreamClient } from './packet-stream-client.js';
|
|
69
|
+
export { PacketStreamServer } from './packet-stream-server.js';
|
|
69
70
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/tunnel/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,KAAK,CAAC;AACrC,OAAO,EAAE,KAAK,gBAAgB,EAA2B,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/tunnel/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,KAAK,CAAC;AACrC,OAAO,EAAE,KAAK,gBAAgB,EAA2B,MAAM,eAAe,CAAC;AAE/E,OAAO,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAC;AAsB7E;;;GAGG;AACH,cAAM,oBAAoB;IAExB,OAAO,CAAC,cAAc,CAA+C;IAErE;;;;;OAKG;IACH,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAKtC;;;;OAIG;IACH,gBAAgB,IAAI,MAAM,EAAE;IAM5B;;;;;;OAMG;IACG,yBAAyB,CAC7B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,mBAAmB,CAAC;IA2C/B;;;;;;OAMG;IACG,SAAS,CAAC,mBAAmB,EAAE,SAAS,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAmD1E;;;;;OAKG;IACH,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI;IAU5D;;;;;OAKG;IACG,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgC1D;;;;OAIG;IACG,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAatC;;;;;OAKG;IACG,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;CAGnC;AAGD,eAAO,MAAM,aAAa,sBAA6B,CAAC;AAExD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { logger } from '@appium/support';
|
|
2
2
|
import { connectToTunnelLockdown } from 'tuntap-bridge';
|
|
3
|
-
import RemoteXpcConnection from '../remote-xpc/remote-xpc-connection.js';
|
|
3
|
+
import { RemoteXpcConnection } from '../remote-xpc/remote-xpc-connection.js';
|
|
4
4
|
const log = logger.getLogger('TunnelManager');
|
|
5
5
|
/**
|
|
6
6
|
* A wrapper around the tunnel connection that
|
|
@@ -38,7 +38,10 @@ class TunnelManagerService {
|
|
|
38
38
|
*/
|
|
39
39
|
async createRemoteXPCConnection(address, rsdPort) {
|
|
40
40
|
try {
|
|
41
|
-
const remoteXPC = new RemoteXpcConnection([
|
|
41
|
+
const remoteXPC = new RemoteXpcConnection([
|
|
42
|
+
address,
|
|
43
|
+
rsdPort,
|
|
44
|
+
]);
|
|
42
45
|
// Connect to RemoteXPC with delay between retries
|
|
43
46
|
let retries = 3;
|
|
44
47
|
let lastError;
|
|
@@ -201,5 +204,5 @@ class TunnelManagerService {
|
|
|
201
204
|
// Create and export the singleton instance
|
|
202
205
|
export const TunnelManager = new TunnelManagerService();
|
|
203
206
|
// Export packet streaming IPC functionality
|
|
204
|
-
export { PacketStreamServer } from './packet-stream-server.js';
|
|
205
207
|
export { PacketStreamClient } from './packet-stream-client.js';
|
|
208
|
+
export { PacketStreamServer } from './packet-stream-server.js';
|
package/build/src/lib/types.d.ts
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
import { EventEmitter } from 'events';
|
|
5
5
|
import type { PacketData } from 'tuntap-bridge';
|
|
6
6
|
import type { BaseService, Service } from '../services/ios/base-service.js';
|
|
7
|
+
import type { RemoteXpcConnection } from './remote-xpc/remote-xpc-connection.js';
|
|
7
8
|
import type { Device } from './usbmux/index.js';
|
|
8
9
|
/**
|
|
9
10
|
* Represents a value that can be stored in a plist
|
|
@@ -152,6 +153,16 @@ export interface DiagnosticsServiceConstructor {
|
|
|
152
153
|
*/
|
|
153
154
|
new (address: [string, number]): DiagnosticsService;
|
|
154
155
|
}
|
|
156
|
+
/**
|
|
157
|
+
* Represents a DiagnosticsService instance with its associated RemoteXPC connection
|
|
158
|
+
* This allows callers to properly manage the connection lifecycle
|
|
159
|
+
*/
|
|
160
|
+
export interface DiagnosticsServiceWithConnection {
|
|
161
|
+
/** The DiagnosticsService instance */
|
|
162
|
+
diagnosticsService: DiagnosticsService;
|
|
163
|
+
/** The RemoteXPC connection that can be used to close the connection */
|
|
164
|
+
remoteXPC: RemoteXpcConnection;
|
|
165
|
+
}
|
|
155
166
|
/**
|
|
156
167
|
* Options for configuring syslog capture
|
|
157
168
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/lib/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/lib/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/services/ios/diagnostic-service/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,kBAAkB,IAAI,2BAA2B,EACjD,eAAe,EAChB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAIjD;;;;;GAKG;AACH,cAAM,kBACJ,SAAQ,WACR,YAAW,2BAA2B;IAEtC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,oDACmB;gBAEvC,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;IAIrC;;;OAGG;IACG,OAAO,IAAI,OAAO,CAAC,eAAe,CAAC;IAazC;;;OAGG;IACG,QAAQ,IAAI,OAAO,CAAC,eAAe,CAAC;IAa1C;;;OAGG;IACG,KAAK,IAAI,OAAO,CAAC,eAAe,CAAC;IAavC;;;;OAIG;IACG,UAAU,CAAC,OAAO,CAAC,EAAE;QACzB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,aAAa,CAAC,EAAE,OAAO,CAAC;QACxB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,GAAG,OAAO,CAAC,eAAe,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IA4CpD,OAAO,CAAC,gBAAgB;YAOV,0BAA0B;YAK1B,WAAW;IAoBzB,OAAO,CAAC,yBAAyB;YA0CnB,iCAAiC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/services/ios/diagnostic-service/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,kBAAkB,IAAI,2BAA2B,EACjD,eAAe,EAChB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAIjD;;;;;GAKG;AACH,cAAM,kBACJ,SAAQ,WACR,YAAW,2BAA2B;IAEtC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,oDACmB;gBAEvC,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;IAIrC;;;OAGG;IACG,OAAO,IAAI,OAAO,CAAC,eAAe,CAAC;IAazC;;;OAGG;IACG,QAAQ,IAAI,OAAO,CAAC,eAAe,CAAC;IAa1C;;;OAGG;IACG,KAAK,IAAI,OAAO,CAAC,eAAe,CAAC;IAavC;;;;OAIG;IACG,UAAU,CAAC,OAAO,CAAC,EAAE;QACzB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,aAAa,CAAC,EAAE,OAAO,CAAC;QACxB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,GAAG,OAAO,CAAC,eAAe,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IA4CpD,OAAO,CAAC,gBAAgB;YAOV,0BAA0B;YAK1B,WAAW;IAoBzB,OAAO,CAAC,yBAAyB;YA0CnB,iCAAiC;CA6BhD;AAED,eAAe,kBAAkB,CAAC"}
|
|
@@ -154,7 +154,6 @@ class DiagnosticsService extends BaseService {
|
|
|
154
154
|
};
|
|
155
155
|
log.debug('Sending follow-up request for additional data');
|
|
156
156
|
const additionalResponse = await conn.sendPlistRequest(emptyRequest, timeout);
|
|
157
|
-
log.debug('Additional response: ', additionalResponse);
|
|
158
157
|
const hasDiagnostics = 'Diagnostics' in additionalResponse &&
|
|
159
158
|
typeof additionalResponse.Diagnostics === 'object' &&
|
|
160
159
|
additionalResponse.Diagnostics !== null &&
|
package/build/src/services.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import RemoteXpcConnection from './lib/remote-xpc/remote-xpc-connection.js';
|
|
2
|
-
import type {
|
|
3
|
-
export declare function startDiagnosticsService(udid: string): Promise<
|
|
1
|
+
import { RemoteXpcConnection } from './lib/remote-xpc/remote-xpc-connection.js';
|
|
2
|
+
import type { DiagnosticsServiceWithConnection, SyslogService as SyslogServiceType } from './lib/types.js';
|
|
3
|
+
export declare function startDiagnosticsService(udid: string): Promise<DiagnosticsServiceWithConnection>;
|
|
4
4
|
export declare function startSyslogService(udid: string): Promise<SyslogServiceType>;
|
|
5
5
|
export declare function createRemoteXPCConnection(udid: string): Promise<{
|
|
6
6
|
remoteXPC: RemoteXpcConnection;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"services.d.ts","sourceRoot":"","sources":["../../src/services.ts"],"names":[],"mappings":"AAEA,OAAO,mBAAmB,MAAM,2CAA2C,CAAC;
|
|
1
|
+
{"version":3,"file":"services.d.ts","sourceRoot":"","sources":["../../src/services.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,2CAA2C,CAAC;AAGhF,OAAO,KAAK,EACV,gCAAgC,EAChC,aAAa,IAAI,iBAAiB,EACnC,MAAM,gBAAgB,CAAC;AAOxB,wBAAsB,uBAAuB,CAC3C,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,gCAAgC,CAAC,CAY3C;AAED,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,iBAAiB,CAAC,CAG5B;AAED,wBAAsB,yBAAyB,CAAC,IAAI,EAAE,MAAM;;;;;;;;GAO3D"}
|
package/build/src/services.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { strongbox } from '@appium/strongbox';
|
|
2
|
-
import RemoteXpcConnection from './lib/remote-xpc/remote-xpc-connection.js';
|
|
2
|
+
import { RemoteXpcConnection } from './lib/remote-xpc/remote-xpc-connection.js';
|
|
3
3
|
import { TunnelManager } from './lib/tunnel/index.js';
|
|
4
4
|
import { TunnelApiClient } from './lib/tunnel/tunnel-api-client.js';
|
|
5
5
|
import DiagnosticsService from './services/ios/diagnostic-service/index.js';
|
|
@@ -9,10 +9,13 @@ const TUNNEL_REGISTRY_PORT = 'tunnelRegistryPort';
|
|
|
9
9
|
export async function startDiagnosticsService(udid) {
|
|
10
10
|
const { remoteXPC, tunnelConnection } = await createRemoteXPCConnection(udid);
|
|
11
11
|
const diagnosticsService = remoteXPC.findService(DiagnosticsService.RSD_SERVICE_NAME);
|
|
12
|
-
return
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
12
|
+
return {
|
|
13
|
+
remoteXPC: remoteXPC,
|
|
14
|
+
diagnosticsService: new DiagnosticsService([
|
|
15
|
+
tunnelConnection.host,
|
|
16
|
+
parseInt(diagnosticsService.port, 10),
|
|
17
|
+
]),
|
|
18
|
+
};
|
|
16
19
|
}
|
|
17
20
|
export async function startSyslogService(udid) {
|
|
18
21
|
const { tunnelConnection } = await createRemoteXPCConnection(udid);
|
package/package.json
CHANGED
package/src/index.ts
CHANGED
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
|
|
3
|
+
import { SRP_HASH_ALGORITHM } from '../constants.js';
|
|
4
|
+
import {
|
|
5
|
+
bigIntToBuffer,
|
|
6
|
+
bigIntToMinimalBuffer,
|
|
7
|
+
bufferToBigInt,
|
|
8
|
+
} from '../utils/buffer-utils.js';
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Computes a cryptographic hash of the provided input buffers.
|
|
12
|
+
*
|
|
13
|
+
* @param inputs - Variable number of Buffer objects to hash
|
|
14
|
+
* @returns The computed hash as a Buffer
|
|
15
|
+
* @throws {Error} If no inputs provided
|
|
16
|
+
*/
|
|
17
|
+
export function hash(...inputs: Buffer[]): Buffer {
|
|
18
|
+
if (inputs.length === 0) {
|
|
19
|
+
throw new Error('At least one input buffer is required for hashing');
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
const hasher = createHash(SRP_HASH_ALGORITHM);
|
|
23
|
+
|
|
24
|
+
for (const input of inputs) {
|
|
25
|
+
if (!Buffer.isBuffer(input)) {
|
|
26
|
+
throw new Error('All inputs must be Buffer objects');
|
|
27
|
+
}
|
|
28
|
+
hasher.update(input);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
return hasher.digest();
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Calculates the SRP multiplier parameter k = H(N, g).
|
|
36
|
+
*
|
|
37
|
+
* @param N - The large safe prime modulus
|
|
38
|
+
* @param g - The generator
|
|
39
|
+
* @param keyLength - The key length in bytes
|
|
40
|
+
* @returns The calculated k value as a bigint
|
|
41
|
+
* @throws {Error} If parameters are invalid
|
|
42
|
+
*/
|
|
43
|
+
export function calculateK(N: bigint, g: bigint, keyLength: number): bigint {
|
|
44
|
+
if (N <= BigInt(0) || g <= BigInt(0)) {
|
|
45
|
+
throw new Error('N and g must be positive');
|
|
46
|
+
}
|
|
47
|
+
if (keyLength <= 0) {
|
|
48
|
+
throw new Error('Key length must be positive');
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
const NBuffer = bigIntToBuffer(N, keyLength);
|
|
52
|
+
const gBuffer = bigIntToBuffer(g, keyLength);
|
|
53
|
+
const kHash = hash(NBuffer, gBuffer);
|
|
54
|
+
|
|
55
|
+
return bufferToBigInt(kHash);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Calculates the private key x = H(salt, H(username:password)).
|
|
60
|
+
*
|
|
61
|
+
* @param salt - The salt buffer
|
|
62
|
+
* @param username - The username string
|
|
63
|
+
* @param password - The password string
|
|
64
|
+
* @returns The calculated x value as a bigint
|
|
65
|
+
* @throws {Error} If parameters are invalid
|
|
66
|
+
*/
|
|
67
|
+
export function calculateX(
|
|
68
|
+
salt: Buffer,
|
|
69
|
+
username: string,
|
|
70
|
+
password: string,
|
|
71
|
+
): bigint {
|
|
72
|
+
if (!Buffer.isBuffer(salt) || salt.length === 0) {
|
|
73
|
+
throw new Error('Salt must be a non-empty Buffer');
|
|
74
|
+
}
|
|
75
|
+
if (!username || !password) {
|
|
76
|
+
throw new Error('Username and password must be non-empty strings');
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
const usernamePasswordHash = hash(
|
|
80
|
+
Buffer.from(`${username}:${password}`, 'utf8'),
|
|
81
|
+
);
|
|
82
|
+
const xHash = hash(salt, usernamePasswordHash);
|
|
83
|
+
|
|
84
|
+
return bufferToBigInt(xHash);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Calculates the random scrambling parameter u = H(A, B).
|
|
89
|
+
*
|
|
90
|
+
* @param A - The client's public key
|
|
91
|
+
* @param B - The server's public key
|
|
92
|
+
* @param keyLength - The key length in bytes
|
|
93
|
+
* @returns The calculated u value as a bigint
|
|
94
|
+
* @throws {Error} If parameters are invalid
|
|
95
|
+
*/
|
|
96
|
+
export function calculateU(A: bigint, B: bigint, keyLength: number): bigint {
|
|
97
|
+
if (A <= BigInt(0) || B <= BigInt(0)) {
|
|
98
|
+
throw new Error('Public keys A and B must be positive');
|
|
99
|
+
}
|
|
100
|
+
if (keyLength <= 0) {
|
|
101
|
+
throw new Error('Key length must be positive');
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
const ABuffer = bigIntToBuffer(A, keyLength);
|
|
105
|
+
const BBuffer = bigIntToBuffer(B, keyLength);
|
|
106
|
+
const uHash = hash(ABuffer, BBuffer);
|
|
107
|
+
|
|
108
|
+
const u = bufferToBigInt(uHash);
|
|
109
|
+
if (u === BigInt(0)) {
|
|
110
|
+
throw new Error('Calculated u value cannot be zero (hash collision)');
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
return u;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Calculates the client evidence M1 = H(H(N) xor H(g), H(username), salt, A, B, K).
|
|
118
|
+
*
|
|
119
|
+
* @param N - The large safe prime modulus
|
|
120
|
+
* @param g - The generator
|
|
121
|
+
* @param username - The username string
|
|
122
|
+
* @param salt - The salt buffer
|
|
123
|
+
* @param A - The client's public key
|
|
124
|
+
* @param B - The server's public key
|
|
125
|
+
* @param K - The session key
|
|
126
|
+
* @returns The calculated M1 evidence as a Buffer
|
|
127
|
+
* @throws {Error} If parameters are invalid
|
|
128
|
+
*/
|
|
129
|
+
export function calculateM1(
|
|
130
|
+
N: bigint,
|
|
131
|
+
g: bigint,
|
|
132
|
+
username: string,
|
|
133
|
+
salt: Buffer,
|
|
134
|
+
A: bigint,
|
|
135
|
+
B: bigint,
|
|
136
|
+
K: Buffer,
|
|
137
|
+
): Buffer {
|
|
138
|
+
if (N <= BigInt(0) || g <= BigInt(0) || A <= BigInt(0) || B <= BigInt(0)) {
|
|
139
|
+
throw new Error('All bigint parameters must be positive');
|
|
140
|
+
}
|
|
141
|
+
if (!username) {
|
|
142
|
+
throw new Error('Username must be non-empty');
|
|
143
|
+
}
|
|
144
|
+
if (!Buffer.isBuffer(salt) || salt.length === 0) {
|
|
145
|
+
throw new Error('Salt must be a non-empty Buffer');
|
|
146
|
+
}
|
|
147
|
+
if (!Buffer.isBuffer(K) || K.length === 0) {
|
|
148
|
+
throw new Error('Session key K must be a non-empty Buffer');
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
const NBytes = bigIntToMinimalBuffer(N);
|
|
152
|
+
const gBytes = bigIntToMinimalBuffer(g);
|
|
153
|
+
const NHash = hash(NBytes);
|
|
154
|
+
const gHash = hash(gBytes);
|
|
155
|
+
|
|
156
|
+
const NgXorBytes = Buffer.alloc(NHash.length);
|
|
157
|
+
for (let i = 0; i < NHash.length; i++) {
|
|
158
|
+
NgXorBytes[i] = NHash[i] ^ gHash[i];
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
const usernameHash = hash(Buffer.from(username, 'utf8'));
|
|
162
|
+
const ABytes = bigIntToMinimalBuffer(A);
|
|
163
|
+
const BBytes = bigIntToMinimalBuffer(B);
|
|
164
|
+
|
|
165
|
+
return hash(NgXorBytes, usernameHash, salt, ABytes, BBytes, K);
|
|
166
|
+
}
|