node-firebird 2.3.2 → 2.3.3
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 +163 -31
- package/lib/index.d.ts +12 -0
- package/lib/pool.js +10 -1
- package/lib/srp.js +12 -1
- package/lib/wire/connection.js +39 -7
- package/lib/wire/socket.js +13 -1
- package/lib/wire/xsqlvar.js +69 -6
- package/package.json +1 -1
- package/poc/node_modules/.package-lock.json +14 -0
- package/poc/node_modules/node-firebird/.eslintrc.json +12 -0
- package/poc/node_modules/node-firebird/.github/workflows/codeql.yml +76 -0
- package/poc/node_modules/node-firebird/.github/workflows/node.js.yml +95 -0
- package/poc/node_modules/node-firebird/BIGINT_MIGRATION.md +374 -0
- package/poc/node_modules/node-firebird/CI_DEBUGGING_GUIDE.md +148 -0
- package/poc/node_modules/node-firebird/ENCRYPTION_CALLBACK.md +152 -0
- package/poc/node_modules/node-firebird/FIREBIRD_LOG_FEATURE.md +145 -0
- package/poc/node_modules/node-firebird/LICENSE +373 -0
- package/poc/node_modules/node-firebird/MINIMAL_CHANGES_SUMMARY.md +136 -0
- package/poc/node_modules/node-firebird/PR_SUMMARY.md +96 -0
- package/poc/node_modules/node-firebird/README.md +794 -0
- package/poc/node_modules/node-firebird/ROADMAP.md +223 -0
- package/poc/node_modules/node-firebird/SRP_PROTOCOL.md +482 -0
- package/poc/node_modules/node-firebird/lib/callback.js +38 -0
- package/poc/node_modules/node-firebird/lib/firebird.msg +0 -0
- package/poc/node_modules/node-firebird/lib/firebird.msg.json +1371 -0
- package/poc/node_modules/node-firebird/lib/gdscodes.d.ts +1524 -0
- package/poc/node_modules/node-firebird/lib/gdscodes.js +1531 -0
- package/poc/node_modules/node-firebird/lib/ieee754-decimal.js +500 -0
- package/poc/node_modules/node-firebird/lib/index.d.ts +316 -0
- package/poc/node_modules/node-firebird/lib/index.js +128 -0
- package/poc/node_modules/node-firebird/lib/messages.js +162 -0
- package/poc/node_modules/node-firebird/lib/pool.js +108 -0
- package/poc/node_modules/node-firebird/lib/srp.js +299 -0
- package/poc/node_modules/node-firebird/lib/unix-crypt.js +343 -0
- package/poc/node_modules/node-firebird/lib/utils.js +164 -0
- package/poc/node_modules/node-firebird/lib/wire/connection.js +2510 -0
- package/poc/node_modules/node-firebird/lib/wire/const.js +807 -0
- package/poc/node_modules/node-firebird/lib/wire/database.js +378 -0
- package/poc/node_modules/node-firebird/lib/wire/eventConnection.js +118 -0
- package/poc/node_modules/node-firebird/lib/wire/fbEventManager.js +326 -0
- package/poc/node_modules/node-firebird/lib/wire/serialize.js +588 -0
- package/poc/node_modules/node-firebird/lib/wire/service.js +1058 -0
- package/poc/node_modules/node-firebird/lib/wire/socket.js +175 -0
- package/poc/node_modules/node-firebird/lib/wire/statement.js +48 -0
- package/poc/node_modules/node-firebird/lib/wire/transaction.js +206 -0
- package/poc/node_modules/node-firebird/lib/wire/xsqlvar.js +703 -0
- package/poc/node_modules/node-firebird/package.json +38 -0
- package/poc/node_modules/node-firebird/vitest.config.js +24 -0
- package/vitest.config.js +3 -1
|
@@ -0,0 +1,343 @@
|
|
|
1
|
+
/*
|
|
2
|
+
Licensed to the Apache Software Foundation (ASF) under one or more
|
|
3
|
+
contributor license agreements. See the NOTICE file distributed with
|
|
4
|
+
this work for additional information regarding copyright ownership.
|
|
5
|
+
The ASF licenses this file to You under the Apache License, Version 2.0
|
|
6
|
+
(the "License"); you may not use this file except in compliance with
|
|
7
|
+
the License. You may obtain a copy of the License at
|
|
8
|
+
|
|
9
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
|
|
11
|
+
Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
See the License for the specific language governing permissions and
|
|
15
|
+
limitations under the License.
|
|
16
|
+
|
|
17
|
+
This code was originally made available in the Apache Codec API.
|
|
18
|
+
|
|
19
|
+
http://commons.apache.org/proper/commons-codec/
|
|
20
|
+
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
var CON_SALT = [
|
|
24
|
+
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
25
|
+
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 5, 6,
|
|
26
|
+
7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33,
|
|
27
|
+
34, 35, 36, 37, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53,
|
|
28
|
+
54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 0, 0, 0, 0, 0
|
|
29
|
+
];
|
|
30
|
+
|
|
31
|
+
var COV2CHAR = [ 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 65, 66, 67, 68, 69, 70,
|
|
32
|
+
71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 97, 98, 99, 100, 101, 102,
|
|
33
|
+
103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122
|
|
34
|
+
];
|
|
35
|
+
|
|
36
|
+
var SHIFT2 = [ false, false, true, true, true, true, true, true, false, true, true, true, true, true, true, false ];
|
|
37
|
+
|
|
38
|
+
var SKB = [
|
|
39
|
+
[ 0, 16, 0x20000000, 0x20000010, 0x10000, 0x10010, 0x20010000, 0x20010010, 2048, 2064, 0x20000800,
|
|
40
|
+
0x20000810, 0x10800, 0x10810, 0x20010800, 0x20010810, 32, 48, 0x20000020, 0x20000030, 0x10020,
|
|
41
|
+
0x10030, 0x20010020, 0x20010030, 2080, 2096, 0x20000820, 0x20000830, 0x10820, 0x10830, 0x20010820,
|
|
42
|
+
0x20010830, 0x80000, 0x80010, 0x20080000, 0x20080010, 0x90000, 0x90010, 0x20090000, 0x20090010,
|
|
43
|
+
0x80800, 0x80810, 0x20080800, 0x20080810, 0x90800, 0x90810, 0x20090800, 0x20090810, 0x80020,
|
|
44
|
+
0x80030, 0x20080020, 0x20080030, 0x90020, 0x90030, 0x20090020, 0x20090030, 0x80820, 0x80830,
|
|
45
|
+
0x20080820, 0x20080830, 0x90820, 0x90830, 0x20090820, 0x20090830 ],
|
|
46
|
+
[ 0, 0x2000000, 8192, 0x2002000, 0x200000, 0x2200000, 0x202000, 0x2202000, 4, 0x2000004, 8196, 0x2002004,
|
|
47
|
+
0x200004, 0x2200004, 0x202004, 0x2202004, 1024, 0x2000400, 9216, 0x2002400, 0x200400, 0x2200400,
|
|
48
|
+
0x202400, 0x2202400, 1028, 0x2000404, 9220, 0x2002404, 0x200404, 0x2200404, 0x202404, 0x2202404,
|
|
49
|
+
0x10000000, 0x12000000, 0x10002000, 0x12002000, 0x10200000, 0x12200000, 0x10202000, 0x12202000,
|
|
50
|
+
0x10000004, 0x12000004, 0x10002004, 0x12002004, 0x10200004, 0x12200004, 0x10202004, 0x12202004,
|
|
51
|
+
0x10000400, 0x12000400, 0x10002400, 0x12002400, 0x10200400, 0x12200400, 0x10202400, 0x12202400,
|
|
52
|
+
0x10000404, 0x12000404, 0x10002404, 0x12002404, 0x10200404, 0x12200404, 0x10202404, 0x12202404 ],
|
|
53
|
+
[ 0, 1, 0x40000, 0x40001, 0x1000000, 0x1000001, 0x1040000, 0x1040001, 2, 3, 0x40002, 0x40003, 0x1000002,
|
|
54
|
+
0x1000003, 0x1040002, 0x1040003, 512, 513, 0x40200, 0x40201, 0x1000200, 0x1000201, 0x1040200,
|
|
55
|
+
0x1040201, 514, 515, 0x40202, 0x40203, 0x1000202, 0x1000203, 0x1040202, 0x1040203, 0x8000000,
|
|
56
|
+
0x8000001, 0x8040000, 0x8040001, 0x9000000, 0x9000001, 0x9040000, 0x9040001, 0x8000002, 0x8000003,
|
|
57
|
+
0x8040002, 0x8040003, 0x9000002, 0x9000003, 0x9040002, 0x9040003, 0x8000200, 0x8000201, 0x8040200,
|
|
58
|
+
0x8040201, 0x9000200, 0x9000201, 0x9040200, 0x9040201, 0x8000202, 0x8000203, 0x8040202, 0x8040203,
|
|
59
|
+
0x9000202, 0x9000203, 0x9040202, 0x9040203 ],
|
|
60
|
+
[ 0, 0x100000, 256, 0x100100, 8, 0x100008, 264, 0x100108, 4096, 0x101000, 4352, 0x101100, 4104, 0x101008,
|
|
61
|
+
4360, 0x101108, 0x4000000, 0x4100000, 0x4000100, 0x4100100, 0x4000008, 0x4100008, 0x4000108,
|
|
62
|
+
0x4100108, 0x4001000, 0x4101000, 0x4001100, 0x4101100, 0x4001008, 0x4101008, 0x4001108, 0x4101108,
|
|
63
|
+
0x20000, 0x120000, 0x20100, 0x120100, 0x20008, 0x120008, 0x20108, 0x120108, 0x21000, 0x121000,
|
|
64
|
+
0x21100, 0x121100, 0x21008, 0x121008, 0x21108, 0x121108, 0x4020000, 0x4120000, 0x4020100,
|
|
65
|
+
0x4120100, 0x4020008, 0x4120008, 0x4020108, 0x4120108, 0x4021000, 0x4121000, 0x4021100, 0x4121100,
|
|
66
|
+
0x4021008, 0x4121008, 0x4021108, 0x4121108 ],
|
|
67
|
+
[ 0, 0x10000000, 0x10000, 0x10010000, 4, 0x10000004, 0x10004, 0x10010004, 0x20000000, 0x30000000,
|
|
68
|
+
0x20010000, 0x30010000, 0x20000004, 0x30000004, 0x20010004, 0x30010004, 0x100000, 0x10100000,
|
|
69
|
+
0x110000, 0x10110000, 0x100004, 0x10100004, 0x110004, 0x10110004, 0x20100000, 0x30100000,
|
|
70
|
+
0x20110000, 0x30110000, 0x20100004, 0x30100004, 0x20110004, 0x30110004, 4096, 0x10001000, 0x11000,
|
|
71
|
+
0x10011000, 4100, 0x10001004, 0x11004, 0x10011004, 0x20001000, 0x30001000, 0x20011000, 0x30011000,
|
|
72
|
+
0x20001004, 0x30001004, 0x20011004, 0x30011004, 0x101000, 0x10101000, 0x111000, 0x10111000,
|
|
73
|
+
0x101004, 0x10101004, 0x111004, 0x10111004, 0x20101000, 0x30101000, 0x20111000, 0x30111000,
|
|
74
|
+
0x20101004, 0x30101004, 0x20111004, 0x30111004 ],
|
|
75
|
+
[ 0, 0x8000000, 8, 0x8000008, 1024, 0x8000400, 1032, 0x8000408, 0x20000, 0x8020000, 0x20008, 0x8020008,
|
|
76
|
+
0x20400, 0x8020400, 0x20408, 0x8020408, 1, 0x8000001, 9, 0x8000009, 1025, 0x8000401, 1033,
|
|
77
|
+
0x8000409, 0x20001, 0x8020001, 0x20009, 0x8020009, 0x20401, 0x8020401, 0x20409, 0x8020409,
|
|
78
|
+
0x2000000, 0xa000000, 0x2000008, 0xa000008, 0x2000400, 0xa000400, 0x2000408, 0xa000408, 0x2020000,
|
|
79
|
+
0xa020000, 0x2020008, 0xa020008, 0x2020400, 0xa020400, 0x2020408, 0xa020408, 0x2000001, 0xa000001,
|
|
80
|
+
0x2000009, 0xa000009, 0x2000401, 0xa000401, 0x2000409, 0xa000409, 0x2020001, 0xa020001, 0x2020009,
|
|
81
|
+
0xa020009, 0x2020401, 0xa020401, 0x2020409, 0xa020409 ],
|
|
82
|
+
[ 0, 256, 0x80000, 0x80100, 0x1000000, 0x1000100, 0x1080000, 0x1080100, 16, 272, 0x80010, 0x80110,
|
|
83
|
+
0x1000010, 0x1000110, 0x1080010, 0x1080110, 0x200000, 0x200100, 0x280000, 0x280100, 0x1200000,
|
|
84
|
+
0x1200100, 0x1280000, 0x1280100, 0x200010, 0x200110, 0x280010, 0x280110, 0x1200010, 0x1200110,
|
|
85
|
+
0x1280010, 0x1280110, 512, 768, 0x80200, 0x80300, 0x1000200, 0x1000300, 0x1080200, 0x1080300, 528,
|
|
86
|
+
784, 0x80210, 0x80310, 0x1000210, 0x1000310, 0x1080210, 0x1080310, 0x200200, 0x200300, 0x280200,
|
|
87
|
+
0x280300, 0x1200200, 0x1200300, 0x1280200, 0x1280300, 0x200210, 0x200310, 0x280210, 0x280310,
|
|
88
|
+
0x1200210, 0x1200310, 0x1280210, 0x1280310 ],
|
|
89
|
+
[ 0, 0x4000000, 0x40000, 0x4040000, 2, 0x4000002, 0x40002, 0x4040002, 8192, 0x4002000, 0x42000, 0x4042000,
|
|
90
|
+
8194, 0x4002002, 0x42002, 0x4042002, 32, 0x4000020, 0x40020, 0x4040020, 34, 0x4000022, 0x40022,
|
|
91
|
+
0x4040022, 8224, 0x4002020, 0x42020, 0x4042020, 8226, 0x4002022, 0x42022, 0x4042022, 2048,
|
|
92
|
+
0x4000800, 0x40800, 0x4040800, 2050, 0x4000802, 0x40802, 0x4040802, 10240, 0x4002800, 0x42800,
|
|
93
|
+
0x4042800, 10242, 0x4002802, 0x42802, 0x4042802, 2080, 0x4000820, 0x40820, 0x4040820, 2082,
|
|
94
|
+
0x4000822, 0x40822, 0x4040822, 10272, 0x4002820, 0x42820, 0x4042820, 10274, 0x4002822, 0x42822,
|
|
95
|
+
0x4042822 ]
|
|
96
|
+
];
|
|
97
|
+
|
|
98
|
+
var SPTRANS=
|
|
99
|
+
[
|
|
100
|
+
[ 0x820200, 0x20000, 0x80800000, 0x80820200, 0x800000, 0x80020200, 0x80020000, 0x80800000, 0x80020200,
|
|
101
|
+
0x820200, 0x820000, 0x80000200, 0x80800200, 0x800000, 0, 0x80020000, 0x20000, 0x80000000,
|
|
102
|
+
0x800200, 0x20200, 0x80820200, 0x820000, 0x80000200, 0x800200, 0x80000000, 512, 0x20200,
|
|
103
|
+
0x80820000, 512, 0x80800200, 0x80820000, 0, 0, 0x80820200, 0x800200, 0x80020000, 0x820200,
|
|
104
|
+
0x20000, 0x80000200, 0x800200, 0x80820000, 512, 0x20200, 0x80800000, 0x80020200, 0x80000000,
|
|
105
|
+
0x80800000, 0x820000, 0x80820200, 0x20200, 0x820000, 0x80800200, 0x800000, 0x80000200, 0x80020000,
|
|
106
|
+
0, 0x20000, 0x800000, 0x80800200, 0x820200, 0x80000000, 0x80820000, 512, 0x80020200 ],
|
|
107
|
+
[ 0x10042004, 0, 0x42000, 0x10040000, 0x10000004, 8196, 0x10002000, 0x42000, 8192, 0x10040004, 4,
|
|
108
|
+
0x10002000, 0x40004, 0x10042000, 0x10040000, 4, 0x40000, 0x10002004, 0x10040004, 8192, 0x42004,
|
|
109
|
+
0x10000000, 0, 0x40004, 0x10002004, 0x42004, 0x10042000, 0x10000004, 0x10000000, 0x40000, 8196,
|
|
110
|
+
0x10042004, 0x40004, 0x10042000, 0x10002000, 0x42004, 0x10042004, 0x40004, 0x10000004, 0,
|
|
111
|
+
0x10000000, 8196, 0x40000, 0x10040004, 8192, 0x10000000, 0x42004, 0x10002004, 0x10042000, 8192, 0,
|
|
112
|
+
0x10000004, 4, 0x10042004, 0x42000, 0x10040000, 0x10040004, 0x40000, 8196, 0x10002000, 0x10002004,
|
|
113
|
+
4, 0x10040000, 0x42000 ],
|
|
114
|
+
[ 0x41000000, 0x1010040, 64, 0x41000040, 0x40010000, 0x1000000, 0x41000040, 0x10040, 0x1000040, 0x10000,
|
|
115
|
+
0x1010000, 0x40000000, 0x41010040, 0x40000040, 0x40000000, 0x41010000, 0, 0x40010000, 0x1010040,
|
|
116
|
+
64, 0x40000040, 0x41010040, 0x10000, 0x41000000, 0x41010000, 0x1000040, 0x40010040, 0x1010000,
|
|
117
|
+
0x10040, 0, 0x1000000, 0x40010040, 0x1010040, 64, 0x40000000, 0x10000, 0x40000040, 0x40010000,
|
|
118
|
+
0x1010000, 0x41000040, 0, 0x1010040, 0x10040, 0x41010000, 0x40010000, 0x1000000, 0x41010040,
|
|
119
|
+
0x40000000, 0x40010040, 0x41000000, 0x1000000, 0x41010040, 0x10000, 0x1000040, 0x41000040,
|
|
120
|
+
0x10040, 0x1000040, 0, 0x41010000, 0x40000040, 0x41000000, 0x40010040, 64, 0x1010000 ],
|
|
121
|
+
[ 0x100402, 0x4000400, 2, 0x4100402, 0, 0x4100000, 0x4000402, 0x100002, 0x4100400, 0x4000002, 0x4000000,
|
|
122
|
+
1026, 0x4000002, 0x100402, 0x100000, 0x4000000, 0x4100002, 0x100400, 1024, 2, 0x100400, 0x4000402,
|
|
123
|
+
0x4100000, 1024, 1026, 0, 0x100002, 0x4100400, 0x4000400, 0x4100002, 0x4100402, 0x100000,
|
|
124
|
+
0x4100002, 1026, 0x100000, 0x4000002, 0x100400, 0x4000400, 2, 0x4100000, 0x4000402, 0, 1024,
|
|
125
|
+
0x100002, 0, 0x4100002, 0x4100400, 1024, 0x4000000, 0x4100402, 0x100402, 0x100000, 0x4100402, 2,
|
|
126
|
+
0x4000400, 0x100402, 0x100002, 0x100400, 0x4100000, 0x4000402, 1026, 0x4000000, 0x4000002,
|
|
127
|
+
0x4100400 ],
|
|
128
|
+
[ 0x2000000, 16384, 256, 0x2004108, 0x2004008, 0x2000100, 16648, 0x2004000, 16384, 8, 0x2000008, 16640,
|
|
129
|
+
0x2000108, 0x2004008, 0x2004100, 0, 16640, 0x2000000, 16392, 264, 0x2000100, 16648, 0, 0x2000008,
|
|
130
|
+
8, 0x2000108, 0x2004108, 16392, 0x2004000, 256, 264, 0x2004100, 0x2004100, 0x2000108, 16392,
|
|
131
|
+
0x2004000, 16384, 8, 0x2000008, 0x2000100, 0x2000000, 16640, 0x2004108, 0, 16648, 0x2000000, 256,
|
|
132
|
+
16392, 0x2000108, 256, 0, 0x2004108, 0x2004008, 0x2004100, 264, 16384, 16640, 0x2004008,
|
|
133
|
+
0x2000100, 264, 8, 16648, 0x2004000, 0x2000008 ],
|
|
134
|
+
[ 0x20000010, 0x80010, 0, 0x20080800, 0x80010, 2048, 0x20000810, 0x80000, 2064, 0x20080810, 0x80800,
|
|
135
|
+
0x20000000, 0x20000800, 0x20000010, 0x20080000, 0x80810, 0x80000, 0x20000810, 0x20080010, 0, 2048,
|
|
136
|
+
16, 0x20080800, 0x20080010, 0x20080810, 0x20080000, 0x20000000, 2064, 16, 0x80800, 0x80810,
|
|
137
|
+
0x20000800, 2064, 0x20000000, 0x20000800, 0x80810, 0x20080800, 0x80010, 0, 0x20000800, 0x20000000,
|
|
138
|
+
2048, 0x20080010, 0x80000, 0x80010, 0x20080810, 0x80800, 16, 0x20080810, 0x80800, 0x80000,
|
|
139
|
+
0x20000810, 0x20000010, 0x20080000, 0x80810, 0, 2048, 0x20000010, 0x20000810, 0x20080800,
|
|
140
|
+
0x20080000, 2064, 16, 0x20080010 ],
|
|
141
|
+
[ 4096, 128, 0x400080, 0x400001, 0x401081, 4097, 4224, 0, 0x400000, 0x400081, 129, 0x401000, 1, 0x401080,
|
|
142
|
+
0x401000, 129, 0x400081, 4096, 4097, 0x401081, 0, 0x400080, 0x400001, 4224, 0x401001, 4225,
|
|
143
|
+
0x401080, 1, 4225, 0x401001, 128, 0x400000, 4225, 0x401000, 0x401001, 129, 4096, 128, 0x400000,
|
|
144
|
+
0x401001, 0x400081, 4225, 4224, 0, 128, 0x400001, 1, 0x400080, 0, 0x400081, 0x400080, 4224, 129,
|
|
145
|
+
4096, 0x401081, 0x400000, 0x401080, 1, 4097, 0x401081, 0x400001, 0x401080, 0x401000, 4097 ],
|
|
146
|
+
[ 0x8200020, 0x8208000, 32800, 0, 0x8008000, 0x200020, 0x8200000, 0x8208020, 32, 0x8000000, 0x208000,
|
|
147
|
+
32800, 0x208020, 0x8008020, 0x8000020, 0x8200000, 32768, 0x208020, 0x200020, 0x8008000, 0x8208020,
|
|
148
|
+
0x8000020, 0, 0x208000, 0x8000000, 0x200000, 0x8008020, 0x8200020, 0x200000, 32768, 0x8208000, 32,
|
|
149
|
+
0x200000, 32768, 0x8000020, 0x8208020, 32800, 0x8000000, 0, 0x208000, 0x8200020, 0x8008020,
|
|
150
|
+
0x8008000, 0x200020, 0x8208000, 32, 0x200020, 0x8008000, 0x8208020, 0x200000, 0x8200000,
|
|
151
|
+
0x8000020, 0x208000, 32800, 0x8008020, 0x8200000, 32, 0x8208000, 0x208020, 0, 0x8000000,
|
|
152
|
+
0x8200020, 32768, 0x208020 ]
|
|
153
|
+
];
|
|
154
|
+
|
|
155
|
+
function hPermOp(a, n, m) {
|
|
156
|
+
var t = (a << 16 - n ^ a) & m;
|
|
157
|
+
a = a ^ t ^ t >>> 16 - n;
|
|
158
|
+
return a;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
function intToFourBytes(iValue, b, offset) {
|
|
162
|
+
b[offset++] = iValue & 0xff;
|
|
163
|
+
b[offset++] = iValue >>> 8 & 0xff;
|
|
164
|
+
b[offset++] = iValue >>> 16 & 0xff;
|
|
165
|
+
b[offset++] = iValue >>> 24 & 0xff;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
function byteToUnsigned(b) {
|
|
169
|
+
var value = b;
|
|
170
|
+
return value < 0 ? value + 256 : value;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
function fourBytesToInt(b, offset) {
|
|
174
|
+
var value = byteToUnsigned(b[offset++]);
|
|
175
|
+
value |= byteToUnsigned(b[offset++]) << 8;
|
|
176
|
+
value |= byteToUnsigned(b[offset++]) << 16;
|
|
177
|
+
value |= byteToUnsigned(b[offset++]) << 24;
|
|
178
|
+
return value;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
function permOp(a, b, n, m, results) {
|
|
182
|
+
var t = (a >>> n ^ b) & m;
|
|
183
|
+
a ^= t << n;
|
|
184
|
+
b ^= t;
|
|
185
|
+
results[0] = a;
|
|
186
|
+
results[1] = b;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
function desSetKey(key) {
|
|
190
|
+
var schedule = [];
|
|
191
|
+
var c = fourBytesToInt(key, 0);
|
|
192
|
+
var d = fourBytesToInt(key, 4);
|
|
193
|
+
var results = [0, 0];
|
|
194
|
+
permOp(d, c, 4, 0xf0f0f0f, results);
|
|
195
|
+
d = results[0];
|
|
196
|
+
c = results[1];
|
|
197
|
+
c = hPermOp(c, -2, 0xcccc0000);
|
|
198
|
+
d = hPermOp(d, -2, 0xcccc0000);
|
|
199
|
+
permOp(d, c, 1, 0x55555555, results);
|
|
200
|
+
d = results[0];
|
|
201
|
+
c = results[1];
|
|
202
|
+
permOp(c, d, 8, 0xff00ff, results);
|
|
203
|
+
c = results[0];
|
|
204
|
+
d = results[1];
|
|
205
|
+
permOp(d, c, 1, 0x55555555, results);
|
|
206
|
+
d = results[0];
|
|
207
|
+
c = results[1];
|
|
208
|
+
d = (d & 0xff) << 16 | d & 0xff00 | (d & 0xff0000) >>> 16 | (c & 0xf0000000) >>> 4;
|
|
209
|
+
c &= 0xfffffff;
|
|
210
|
+
var j = 0;
|
|
211
|
+
for (var i = 0; i < 16; i++) {
|
|
212
|
+
if (SHIFT2[i]) {
|
|
213
|
+
c = c >>> 2 | c << 26;
|
|
214
|
+
d = d >>> 2 | d << 26;
|
|
215
|
+
} else {
|
|
216
|
+
c = c >>> 1 | c << 27;
|
|
217
|
+
d = d >>> 1 | d << 27;
|
|
218
|
+
}
|
|
219
|
+
c &= 0xfffffff;
|
|
220
|
+
d &= 0xfffffff;
|
|
221
|
+
var s = SKB[0][c & 0x3f] | SKB[1][c >>> 6 & 0x3 | c >>> 7 & 0x3c] |
|
|
222
|
+
SKB[2][c >>> 13 & 0xf | c >>> 14 & 0x30] |
|
|
223
|
+
SKB[3][c >>> 20 & 0x1 | c >>> 21 & 0x6 | c >>> 22 & 0x38];
|
|
224
|
+
var t = SKB[4][d & 0x3f] | SKB[5][d >>> 7 & 0x3 | d >>> 8 & 0x3c] | SKB[6][d >>> 15 & 0x3f] |
|
|
225
|
+
SKB[7][d >>> 21 & 0xf | d >>> 22 & 0x30];
|
|
226
|
+
schedule[j++] = (t << 16 | s & 0xffff);
|
|
227
|
+
s = s >>> 16 | t & 0xffff0000;
|
|
228
|
+
s = s << 4 | s >>> 28;
|
|
229
|
+
schedule[j++] = s;
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
return schedule;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
function dEncrypt(el, r, s, e0, e1, sArr) {
|
|
236
|
+
var v = r ^ r >>> 16;
|
|
237
|
+
var u = v & e0;
|
|
238
|
+
v &= e1;
|
|
239
|
+
u = u ^ u << 16 ^ r ^ sArr[s];
|
|
240
|
+
var t = v ^ v << 16 ^ r ^ sArr[s + 1];
|
|
241
|
+
t = t >>> 4 | t << 28;
|
|
242
|
+
el ^= SPTRANS[1][t & 0x3f] | SPTRANS[3][t >>> 8 & 0x3f] | SPTRANS[5][t >>> 16 & 0x3f] |
|
|
243
|
+
SPTRANS[7][t >>> 24 & 0x3f] | SPTRANS[0][u & 0x3f] | SPTRANS[2][u >>> 8 & 0x3f] |
|
|
244
|
+
SPTRANS[4][u >>> 16 & 0x3f] | SPTRANS[6][u >>> 24 & 0x3f];
|
|
245
|
+
return el;
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
function body(schedule, eSwap0, eSwap1) {
|
|
249
|
+
var left = 0;
|
|
250
|
+
var right = 0;
|
|
251
|
+
var t = 0;
|
|
252
|
+
for (var j = 0; j < 25; j++) {
|
|
253
|
+
for (var i = 0; i < 32; i += 4) {
|
|
254
|
+
left = dEncrypt(left, right, i, eSwap0, eSwap1, schedule);
|
|
255
|
+
right = dEncrypt(right, left, i + 2, eSwap0, eSwap1, schedule);
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
t = left;
|
|
259
|
+
left = right;
|
|
260
|
+
right = t;
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
t = right;
|
|
264
|
+
right = left >>> 1 | left << 31;
|
|
265
|
+
left = t >>> 1 | t << 31;
|
|
266
|
+
var results = [0, 0];
|
|
267
|
+
permOp(right, left, 1, 0x55555555, results);
|
|
268
|
+
right = results[0];
|
|
269
|
+
left = results[1];
|
|
270
|
+
permOp(left, right, 8, 0xff00ff, results);
|
|
271
|
+
left = results[0];
|
|
272
|
+
right = results[1];
|
|
273
|
+
permOp(right, left, 2, 0x33333333, results);
|
|
274
|
+
right = results[0];
|
|
275
|
+
left = results[1];
|
|
276
|
+
permOp(left, right, 16, 65535, results);
|
|
277
|
+
left = results[0];
|
|
278
|
+
right = results[1];
|
|
279
|
+
permOp(right, left, 4, 0xf0f0f0f, results);
|
|
280
|
+
right = results[0];
|
|
281
|
+
left = results[1];
|
|
282
|
+
var out = [0, 0];
|
|
283
|
+
out[0] = left;
|
|
284
|
+
out[1] = right;
|
|
285
|
+
return out;
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
function crypt(original, salt) {
|
|
289
|
+
if (!(original instanceof Buffer)) {
|
|
290
|
+
original = Buffer.from(original);
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
if (!salt) {
|
|
294
|
+
throw new Error("Invalid salt value: " + salt);
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
var buffer = Buffer.alloc(13);
|
|
298
|
+
var charZero = salt[0].charCodeAt();
|
|
299
|
+
var charOne = salt[1].charCodeAt();
|
|
300
|
+
buffer[0] = charZero;
|
|
301
|
+
buffer[1] = charOne;
|
|
302
|
+
var eSwap0 = CON_SALT[charZero];
|
|
303
|
+
var eSwap1 = CON_SALT[charOne] << 4;
|
|
304
|
+
|
|
305
|
+
var key = Buffer.alloc(8);
|
|
306
|
+
for (var i = 0; i < key.length && i < original.length; i++) {
|
|
307
|
+
var iChar = original[i];
|
|
308
|
+
key[i] = iChar << 1;
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
var schedule = desSetKey(key);
|
|
312
|
+
var out = body(schedule, eSwap0, eSwap1);
|
|
313
|
+
var b = Buffer.alloc(9);
|
|
314
|
+
intToFourBytes(out[0], b, 0);
|
|
315
|
+
intToFourBytes(out[1], b, 4);
|
|
316
|
+
|
|
317
|
+
b[8] = 0;
|
|
318
|
+
var i = 2;
|
|
319
|
+
var y = 0;
|
|
320
|
+
var u = 128;
|
|
321
|
+
for (; i < 13; i++) {
|
|
322
|
+
var j = 0;
|
|
323
|
+
var c = 0;
|
|
324
|
+
for (; j < 6; j++) {
|
|
325
|
+
c <<= 1;
|
|
326
|
+
if ((b[y] & u) != 0) {
|
|
327
|
+
c |= 0x1;
|
|
328
|
+
}
|
|
329
|
+
u >>>= 1;
|
|
330
|
+
if (u == 0) {
|
|
331
|
+
y++;
|
|
332
|
+
u = 128;
|
|
333
|
+
}
|
|
334
|
+
buffer[i] = COV2CHAR[c];
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
return buffer.toString('ascii');
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
module.exports = {
|
|
342
|
+
crypt : crypt
|
|
343
|
+
}
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
const MessagesError = require('./firebird.msg.json');
|
|
2
|
+
const Const = require('./wire/const');
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Parse date from string
|
|
6
|
+
* @param {String} str
|
|
7
|
+
* @return {Date}
|
|
8
|
+
*/
|
|
9
|
+
const parseDate = (str) => {
|
|
10
|
+
const self = str.trim();
|
|
11
|
+
const arr = self.indexOf(' ') === -1 ? self.split('T') : self.split(' ');
|
|
12
|
+
let index = arr[0].indexOf(':');
|
|
13
|
+
const length = arr[0].length;
|
|
14
|
+
|
|
15
|
+
if (index !== -1) {
|
|
16
|
+
const tmp = arr[1];
|
|
17
|
+
arr[1] = arr[0];
|
|
18
|
+
arr[0] = tmp;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
if (arr[0] === undefined) {
|
|
22
|
+
arr[0] = '';
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
const noTime = arr[1] === undefined || arr[1].length === 0;
|
|
26
|
+
|
|
27
|
+
for (let i = 0; i < length; i++) {
|
|
28
|
+
const c = arr[0].charCodeAt(i);
|
|
29
|
+
if (c > 47 && c < 58) {
|
|
30
|
+
continue;
|
|
31
|
+
}
|
|
32
|
+
if (c === 45 || c === 46) {
|
|
33
|
+
continue;
|
|
34
|
+
}
|
|
35
|
+
if (noTime) {
|
|
36
|
+
return new Date(self);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
if (arr[1] === undefined) {
|
|
41
|
+
arr[1] = '00:00:00';
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
const firstDay = arr[0].indexOf('-') === -1;
|
|
45
|
+
|
|
46
|
+
const date = (arr[0] || '').split(firstDay ? '.' : '-');
|
|
47
|
+
const time = (arr[1] || '').split(':');
|
|
48
|
+
|
|
49
|
+
if (date.length < 4 && time.length < 2) {
|
|
50
|
+
return new Date(self);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
index = (time[2] || '').indexOf('.');
|
|
54
|
+
|
|
55
|
+
// milliseconds
|
|
56
|
+
if (index !== -1) {
|
|
57
|
+
time[3] = time[2].substring(index + 1);
|
|
58
|
+
time[2] = time[2].substring(0, index);
|
|
59
|
+
} else {
|
|
60
|
+
time[3] = '0';
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
const parsed = [
|
|
64
|
+
parseInt(date[firstDay ? 2 : 0], 10), // year
|
|
65
|
+
parseInt(date[1], 10), // month
|
|
66
|
+
parseInt(date[firstDay ? 0 : 2], 10), // day
|
|
67
|
+
parseInt(time[0], 10), // hours
|
|
68
|
+
parseInt(time[1], 10), // minutes
|
|
69
|
+
parseInt(time[2], 10), // seconds
|
|
70
|
+
parseInt(time[3], 10) // miliseconds
|
|
71
|
+
];
|
|
72
|
+
|
|
73
|
+
const def = new Date();
|
|
74
|
+
|
|
75
|
+
for (let i = 0; i < parsed.length; i++) {
|
|
76
|
+
if (isNaN(parsed[i])) {
|
|
77
|
+
parsed[i] = 0;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
const value = parsed[i];
|
|
81
|
+
if (value !== 0) {
|
|
82
|
+
continue;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
switch (i) {
|
|
86
|
+
case 0:
|
|
87
|
+
if (value <= 0) {
|
|
88
|
+
parsed[i] = def.getFullYear();
|
|
89
|
+
}
|
|
90
|
+
break;
|
|
91
|
+
case 1:
|
|
92
|
+
if (value <= 0) {
|
|
93
|
+
parsed[i] = def.getMonth() + 1;
|
|
94
|
+
}
|
|
95
|
+
break;
|
|
96
|
+
case 2:
|
|
97
|
+
if (value <= 0) {
|
|
98
|
+
parsed[i] = def.getDate();
|
|
99
|
+
}
|
|
100
|
+
break;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
return new Date(parsed[0], parsed[1] - 1, parsed[2], parsed[3], parsed[4], parsed[5]);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Get Error Message per gdscode
|
|
109
|
+
* @param {{gdscode: Number, params: Any[]}[]} status
|
|
110
|
+
* @returns {String} - Error message
|
|
111
|
+
*/
|
|
112
|
+
const lookupMessages = (status) => {
|
|
113
|
+
const messages = status.map((item) => {
|
|
114
|
+
let text = MessagesError[item.gdscode];
|
|
115
|
+
if (text === undefined) {
|
|
116
|
+
return 'Unknow error';
|
|
117
|
+
}
|
|
118
|
+
if (item.params !== undefined) {
|
|
119
|
+
item.params.forEach((param, i) => {
|
|
120
|
+
text = text.replace('@' + (i + 1), param);
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
return text;
|
|
124
|
+
});
|
|
125
|
+
return messages.join(', ');
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* Escape value
|
|
130
|
+
* @param {Object} value
|
|
131
|
+
* @param {Number} protocolVersion (optional, default: PROTOCOL_VERSION13)
|
|
132
|
+
* @return {String}
|
|
133
|
+
*/
|
|
134
|
+
const escape = function(value, protocolVersion) {
|
|
135
|
+
|
|
136
|
+
if (value === null || value === undefined)
|
|
137
|
+
return 'NULL';
|
|
138
|
+
|
|
139
|
+
switch (typeof(value)) {
|
|
140
|
+
case 'boolean':
|
|
141
|
+
if ((protocolVersion || Const.PROTOCOL_VERSION13) >= Const.PROTOCOL_VERSION13)
|
|
142
|
+
return value ? 'true' : 'false';
|
|
143
|
+
else
|
|
144
|
+
return value ? '1' : '0';
|
|
145
|
+
case 'number':
|
|
146
|
+
return value.toString();
|
|
147
|
+
case 'string':
|
|
148
|
+
return "'" + value.replace(/'/g, "''").replace(/\\/g, '\\\\') + "'";
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
if (value instanceof Date)
|
|
152
|
+
return "'" + value.getFullYear() + '-' + (value.getMonth()+1).toString().padStart(2, '0') + '-' + value.getDate().toString().padStart(2, '0') + ' ' + value.getHours().toString().padStart(2, '0') + ':' + value.getMinutes().toString().padStart(2, '0') + ':' + value.getSeconds().toString().padStart(2, '0') + '.' + value.getMilliseconds().toString().padStart(3, '0') + "'";
|
|
153
|
+
|
|
154
|
+
throw new Error('Escape supports only primitive values.');
|
|
155
|
+
};
|
|
156
|
+
|
|
157
|
+
function noop() {}
|
|
158
|
+
|
|
159
|
+
module.exports = {
|
|
160
|
+
escape,
|
|
161
|
+
lookupMessages,
|
|
162
|
+
noop,
|
|
163
|
+
parseDate,
|
|
164
|
+
};
|