@jsonjoy.com/json-pack 1.19.0 → 1.20.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/lib/JsonPackMpint.d.ts +8 -0
- package/lib/JsonPackMpint.js +74 -0
- package/lib/JsonPackMpint.js.map +1 -0
- package/lib/ssh/SshDecoder.d.ts +20 -0
- package/lib/ssh/SshDecoder.js +87 -0
- package/lib/ssh/SshDecoder.js.map +1 -0
- package/lib/ssh/SshEncoder.d.ts +27 -0
- package/lib/ssh/SshEncoder.js +144 -0
- package/lib/ssh/SshEncoder.js.map +1 -0
- package/lib/ssh/index.d.ts +2 -0
- package/lib/ssh/index.js +6 -0
- package/lib/ssh/index.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.JsonPackMpint = void 0;
|
|
4
|
+
class JsonPackMpint {
|
|
5
|
+
constructor(data) {
|
|
6
|
+
this.data = data;
|
|
7
|
+
}
|
|
8
|
+
static fromBigInt(value) {
|
|
9
|
+
if (value === BigInt(0)) {
|
|
10
|
+
return new JsonPackMpint(new Uint8Array(0));
|
|
11
|
+
}
|
|
12
|
+
const negative = value < BigInt(0);
|
|
13
|
+
const bytes = [];
|
|
14
|
+
if (negative) {
|
|
15
|
+
const absValue = -value;
|
|
16
|
+
const bitLength = absValue.toString(2).length;
|
|
17
|
+
const byteLength = Math.ceil((bitLength + 1) / 8);
|
|
18
|
+
const twoComplement = (BigInt(1) << BigInt(byteLength * 8)) + value;
|
|
19
|
+
for (let i = byteLength - 1; i >= 0; i--) {
|
|
20
|
+
bytes.push(Number((twoComplement >> BigInt(i * 8)) & BigInt(0xff)));
|
|
21
|
+
}
|
|
22
|
+
while (bytes.length > 0 && bytes[0] === 0xff && bytes.length > 1 && (bytes[1] & 0x80) !== 0) {
|
|
23
|
+
bytes.shift();
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
let tempValue = value;
|
|
28
|
+
while (tempValue > BigInt(0)) {
|
|
29
|
+
bytes.unshift(Number(tempValue & BigInt(0xff)));
|
|
30
|
+
tempValue >>= BigInt(8);
|
|
31
|
+
}
|
|
32
|
+
if (bytes[0] & 0x80) {
|
|
33
|
+
bytes.unshift(0);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return new JsonPackMpint(new Uint8Array(bytes));
|
|
37
|
+
}
|
|
38
|
+
toBigInt() {
|
|
39
|
+
if (this.data.length === 0) {
|
|
40
|
+
return BigInt(0);
|
|
41
|
+
}
|
|
42
|
+
const negative = (this.data[0] & 0x80) !== 0;
|
|
43
|
+
if (negative) {
|
|
44
|
+
let value = BigInt(0);
|
|
45
|
+
for (let i = 0; i < this.data.length; i++) {
|
|
46
|
+
value = (value << BigInt(8)) | BigInt(this.data[i]);
|
|
47
|
+
}
|
|
48
|
+
const bitLength = this.data.length * 8;
|
|
49
|
+
return value - (BigInt(1) << BigInt(bitLength));
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
let value = BigInt(0);
|
|
53
|
+
for (let i = 0; i < this.data.length; i++) {
|
|
54
|
+
value = (value << BigInt(8)) | BigInt(this.data[i]);
|
|
55
|
+
}
|
|
56
|
+
return value;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
static fromNumber(value) {
|
|
60
|
+
if (!Number.isInteger(value)) {
|
|
61
|
+
throw new Error('Value must be an integer');
|
|
62
|
+
}
|
|
63
|
+
return JsonPackMpint.fromBigInt(BigInt(value));
|
|
64
|
+
}
|
|
65
|
+
toNumber() {
|
|
66
|
+
const bigIntValue = this.toBigInt();
|
|
67
|
+
if (bigIntValue > BigInt(Number.MAX_SAFE_INTEGER) || bigIntValue < BigInt(Number.MIN_SAFE_INTEGER)) {
|
|
68
|
+
throw new Error('Value is outside safe integer range');
|
|
69
|
+
}
|
|
70
|
+
return Number(bigIntValue);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
exports.JsonPackMpint = JsonPackMpint;
|
|
74
|
+
//# sourceMappingURL=JsonPackMpint.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"JsonPackMpint.js","sourceRoot":"","sources":["../src/JsonPackMpint.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { IReader, IReaderResettable } from '@jsonjoy.com/buffers/lib';
|
|
2
|
+
import type { BinaryJsonDecoder } from '../types';
|
|
3
|
+
import { JsonPackMpint } from '../JsonPackMpint';
|
|
4
|
+
export declare class SshDecoder<R extends IReader & IReaderResettable = IReader & IReaderResettable> implements BinaryJsonDecoder {
|
|
5
|
+
reader: R;
|
|
6
|
+
constructor(reader?: R);
|
|
7
|
+
read(uint8: Uint8Array): unknown;
|
|
8
|
+
decode(uint8: Uint8Array): unknown;
|
|
9
|
+
readAny(): unknown;
|
|
10
|
+
readBoolean(): boolean;
|
|
11
|
+
readByte(): number;
|
|
12
|
+
readUint32(): number;
|
|
13
|
+
readUint64(): bigint;
|
|
14
|
+
readBinStr(): Uint8Array;
|
|
15
|
+
readStr(): string;
|
|
16
|
+
readAsciiStr(): string;
|
|
17
|
+
readMpint(): JsonPackMpint;
|
|
18
|
+
readNameList(): string[];
|
|
19
|
+
readBin(): Uint8Array;
|
|
20
|
+
}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SshDecoder = void 0;
|
|
4
|
+
const Reader_1 = require("@jsonjoy.com/buffers/lib/Reader");
|
|
5
|
+
const JsonPackMpint_1 = require("../JsonPackMpint");
|
|
6
|
+
class SshDecoder {
|
|
7
|
+
constructor(reader = new Reader_1.Reader()) {
|
|
8
|
+
this.reader = reader;
|
|
9
|
+
}
|
|
10
|
+
read(uint8) {
|
|
11
|
+
this.reader.reset(uint8);
|
|
12
|
+
return this.readAny();
|
|
13
|
+
}
|
|
14
|
+
decode(uint8) {
|
|
15
|
+
this.reader.reset(uint8);
|
|
16
|
+
return this.readAny();
|
|
17
|
+
}
|
|
18
|
+
readAny() {
|
|
19
|
+
throw new Error('SshDecoder.readAny() requires explicit type methods');
|
|
20
|
+
}
|
|
21
|
+
readBoolean() {
|
|
22
|
+
return this.reader.u8() !== 0;
|
|
23
|
+
}
|
|
24
|
+
readByte() {
|
|
25
|
+
return this.reader.u8();
|
|
26
|
+
}
|
|
27
|
+
readUint32() {
|
|
28
|
+
const reader = this.reader;
|
|
29
|
+
const value = reader.view.getUint32(reader.x, false);
|
|
30
|
+
reader.x += 4;
|
|
31
|
+
return value;
|
|
32
|
+
}
|
|
33
|
+
readUint64() {
|
|
34
|
+
const reader = this.reader;
|
|
35
|
+
const value = reader.view.getBigUint64(reader.x, false);
|
|
36
|
+
reader.x += 8;
|
|
37
|
+
return value;
|
|
38
|
+
}
|
|
39
|
+
readBinStr() {
|
|
40
|
+
const length = this.readUint32();
|
|
41
|
+
const reader = this.reader;
|
|
42
|
+
const data = new Uint8Array(length);
|
|
43
|
+
for (let i = 0; i < length; i++) {
|
|
44
|
+
data[i] = reader.u8();
|
|
45
|
+
}
|
|
46
|
+
return data;
|
|
47
|
+
}
|
|
48
|
+
readStr() {
|
|
49
|
+
const length = this.readUint32();
|
|
50
|
+
const reader = this.reader;
|
|
51
|
+
const utf8Bytes = new Uint8Array(length);
|
|
52
|
+
for (let i = 0; i < length; i++) {
|
|
53
|
+
utf8Bytes[i] = reader.u8();
|
|
54
|
+
}
|
|
55
|
+
return new TextDecoder('utf-8').decode(utf8Bytes);
|
|
56
|
+
}
|
|
57
|
+
readAsciiStr() {
|
|
58
|
+
const length = this.readUint32();
|
|
59
|
+
const reader = this.reader;
|
|
60
|
+
let str = '';
|
|
61
|
+
for (let i = 0; i < length; i++) {
|
|
62
|
+
str += String.fromCharCode(reader.u8());
|
|
63
|
+
}
|
|
64
|
+
return str;
|
|
65
|
+
}
|
|
66
|
+
readMpint() {
|
|
67
|
+
const length = this.readUint32();
|
|
68
|
+
const reader = this.reader;
|
|
69
|
+
const data = new Uint8Array(length);
|
|
70
|
+
for (let i = 0; i < length; i++) {
|
|
71
|
+
data[i] = reader.u8();
|
|
72
|
+
}
|
|
73
|
+
return new JsonPackMpint_1.JsonPackMpint(data);
|
|
74
|
+
}
|
|
75
|
+
readNameList() {
|
|
76
|
+
const nameListStr = this.readAsciiStr();
|
|
77
|
+
if (nameListStr === '') {
|
|
78
|
+
return [];
|
|
79
|
+
}
|
|
80
|
+
return nameListStr.split(',');
|
|
81
|
+
}
|
|
82
|
+
readBin() {
|
|
83
|
+
return this.readBinStr();
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
exports.SshDecoder = SshDecoder;
|
|
87
|
+
//# sourceMappingURL=SshDecoder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SshDecoder.js","sourceRoot":"","sources":["../../src/ssh/SshDecoder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { IWriter, IWriterGrowable } from '@jsonjoy.com/buffers/lib';
|
|
2
|
+
import type { BinaryJsonEncoder } from '../types';
|
|
3
|
+
import { JsonPackMpint } from '../JsonPackMpint';
|
|
4
|
+
export declare class SshEncoder implements BinaryJsonEncoder {
|
|
5
|
+
readonly writer: IWriter & IWriterGrowable;
|
|
6
|
+
constructor(writer: IWriter & IWriterGrowable);
|
|
7
|
+
encode(value: unknown): Uint8Array;
|
|
8
|
+
writeUnknown(value: unknown): void;
|
|
9
|
+
writeAny(value: unknown): void;
|
|
10
|
+
writeNull(): void;
|
|
11
|
+
writeBoolean(bool: boolean): void;
|
|
12
|
+
writeByte(byte: number): void;
|
|
13
|
+
writeUint32(uint: number): void;
|
|
14
|
+
writeUint64(uint: number | bigint): void;
|
|
15
|
+
writeBinStr(data: Uint8Array): void;
|
|
16
|
+
writeStr(str: string): void;
|
|
17
|
+
writeAsciiStr(str: string): void;
|
|
18
|
+
writeMpint(mpint: JsonPackMpint): void;
|
|
19
|
+
writeNameList(names: string[]): void;
|
|
20
|
+
writeNumber(num: number): void;
|
|
21
|
+
writeInteger(int: number): void;
|
|
22
|
+
writeUInteger(uint: number): void;
|
|
23
|
+
writeFloat(float: number): void;
|
|
24
|
+
writeBin(buf: Uint8Array): void;
|
|
25
|
+
writeArr(arr: unknown[]): void;
|
|
26
|
+
writeObj(obj: Record<string, unknown>): void;
|
|
27
|
+
}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SshEncoder = void 0;
|
|
4
|
+
const JsonPackMpint_1 = require("../JsonPackMpint");
|
|
5
|
+
class SshEncoder {
|
|
6
|
+
constructor(writer) {
|
|
7
|
+
this.writer = writer;
|
|
8
|
+
}
|
|
9
|
+
encode(value) {
|
|
10
|
+
const writer = this.writer;
|
|
11
|
+
writer.reset();
|
|
12
|
+
this.writeAny(value);
|
|
13
|
+
return writer.flush();
|
|
14
|
+
}
|
|
15
|
+
writeUnknown(value) {
|
|
16
|
+
throw new Error('SSH encoder does not support unknown types');
|
|
17
|
+
}
|
|
18
|
+
writeAny(value) {
|
|
19
|
+
switch (typeof value) {
|
|
20
|
+
case 'boolean':
|
|
21
|
+
return this.writeBoolean(value);
|
|
22
|
+
case 'number':
|
|
23
|
+
return this.writeNumber(value);
|
|
24
|
+
case 'string':
|
|
25
|
+
return this.writeStr(value);
|
|
26
|
+
case 'object': {
|
|
27
|
+
if (value === null)
|
|
28
|
+
return this.writeNull();
|
|
29
|
+
const constructor = value.constructor;
|
|
30
|
+
switch (constructor) {
|
|
31
|
+
case Uint8Array:
|
|
32
|
+
return this.writeBin(value);
|
|
33
|
+
case Array:
|
|
34
|
+
return this.writeNameList(value);
|
|
35
|
+
case JsonPackMpint_1.JsonPackMpint:
|
|
36
|
+
return this.writeMpint(value);
|
|
37
|
+
default:
|
|
38
|
+
return this.writeUnknown(value);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
case 'bigint':
|
|
42
|
+
return this.writeUint64(value);
|
|
43
|
+
case 'undefined':
|
|
44
|
+
return this.writeNull();
|
|
45
|
+
default:
|
|
46
|
+
return this.writeUnknown(value);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
writeNull() {
|
|
50
|
+
throw new Error('SSH protocol does not have a null type');
|
|
51
|
+
}
|
|
52
|
+
writeBoolean(bool) {
|
|
53
|
+
this.writer.u8(bool ? 1 : 0);
|
|
54
|
+
}
|
|
55
|
+
writeByte(byte) {
|
|
56
|
+
this.writer.u8(byte & 0xff);
|
|
57
|
+
}
|
|
58
|
+
writeUint32(uint) {
|
|
59
|
+
const writer = this.writer;
|
|
60
|
+
writer.ensureCapacity(4);
|
|
61
|
+
writer.view.setUint32(writer.x, Math.trunc(uint) >>> 0, false);
|
|
62
|
+
writer.move(4);
|
|
63
|
+
}
|
|
64
|
+
writeUint64(uint) {
|
|
65
|
+
const writer = this.writer;
|
|
66
|
+
writer.ensureCapacity(8);
|
|
67
|
+
if (typeof uint === 'bigint') {
|
|
68
|
+
writer.view.setBigUint64(writer.x, uint, false);
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
const truncated = Math.trunc(Math.abs(uint));
|
|
72
|
+
const high = Math.floor(truncated / 0x100000000);
|
|
73
|
+
const low = truncated >>> 0;
|
|
74
|
+
writer.view.setUint32(writer.x, high, false);
|
|
75
|
+
writer.view.setUint32(writer.x + 4, low, false);
|
|
76
|
+
}
|
|
77
|
+
writer.move(8);
|
|
78
|
+
}
|
|
79
|
+
writeBinStr(data) {
|
|
80
|
+
this.writeUint32(data.length);
|
|
81
|
+
this.writer.buf(data, data.length);
|
|
82
|
+
}
|
|
83
|
+
writeStr(str) {
|
|
84
|
+
const writer = this.writer;
|
|
85
|
+
const maxSize = str.length * 4;
|
|
86
|
+
writer.ensureCapacity(4 + maxSize);
|
|
87
|
+
const lengthOffset = writer.x;
|
|
88
|
+
writer.x += 4;
|
|
89
|
+
const bytesWritten = writer.utf8(str);
|
|
90
|
+
const endPos = writer.x;
|
|
91
|
+
writer.x = lengthOffset;
|
|
92
|
+
this.writeUint32(bytesWritten);
|
|
93
|
+
writer.x = endPos;
|
|
94
|
+
}
|
|
95
|
+
writeAsciiStr(str) {
|
|
96
|
+
const writer = this.writer;
|
|
97
|
+
writer.ensureCapacity(4 + str.length);
|
|
98
|
+
this.writeUint32(str.length);
|
|
99
|
+
for (let i = 0; i < str.length; i++) {
|
|
100
|
+
writer.u8(str.charCodeAt(i) & 0x7f);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
writeMpint(mpint) {
|
|
104
|
+
this.writeUint32(mpint.data.length);
|
|
105
|
+
this.writer.buf(mpint.data, mpint.data.length);
|
|
106
|
+
}
|
|
107
|
+
writeNameList(names) {
|
|
108
|
+
const nameListStr = names.join(',');
|
|
109
|
+
this.writeAsciiStr(nameListStr);
|
|
110
|
+
}
|
|
111
|
+
writeNumber(num) {
|
|
112
|
+
if (Number.isInteger(num)) {
|
|
113
|
+
if (num >= 0 && num <= 0xffffffff) {
|
|
114
|
+
this.writeUint32(num);
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
this.writeUint64(num);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
throw new Error('SSH protocol does not support floating point numbers');
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
writeInteger(int) {
|
|
125
|
+
this.writeUint32(int);
|
|
126
|
+
}
|
|
127
|
+
writeUInteger(uint) {
|
|
128
|
+
this.writeUint32(uint);
|
|
129
|
+
}
|
|
130
|
+
writeFloat(float) {
|
|
131
|
+
throw new Error('SSH protocol does not support floating point numbers');
|
|
132
|
+
}
|
|
133
|
+
writeBin(buf) {
|
|
134
|
+
this.writeBinStr(buf);
|
|
135
|
+
}
|
|
136
|
+
writeArr(arr) {
|
|
137
|
+
throw new Error('SSH protocol does not have a generic array type. Use writeNameList for name-list type.');
|
|
138
|
+
}
|
|
139
|
+
writeObj(obj) {
|
|
140
|
+
throw new Error('SSH protocol does not have an object type');
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
exports.SshEncoder = SshEncoder;
|
|
144
|
+
//# sourceMappingURL=SshEncoder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SshEncoder.js","sourceRoot":"","sources":["../../src/ssh/SshEncoder.ts"],"names":[],"mappings":"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"}
|
package/lib/ssh/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ssh/index.ts"],"names":[],"mappings":";;;AAOA,uDAA6B;AAC7B,uDAA6B"}
|