bdy 1.23.6-dev → 1.23.7-dev

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.
Files changed (205) hide show
  1. package/distTs/package.json +10 -2
  2. package/distTs/src/agent/linux.js +53 -3
  3. package/distTs/src/agent/manager.js +3 -6
  4. package/distTs/src/agent/osx.js +51 -3
  5. package/distTs/src/agent/system.js +400 -21
  6. package/distTs/src/agent/windows.js +4 -7
  7. package/distTs/src/command/agent/debug.js +2 -2
  8. package/distTs/src/command/agent/install.js +37 -10
  9. package/distTs/src/command/agent/restart.js +2 -2
  10. package/distTs/src/command/agent/run.js +3 -0
  11. package/distTs/src/command/agent/start.js +2 -2
  12. package/distTs/src/command/agent/status.js +19 -0
  13. package/distTs/src/command/agent/stop.js +2 -2
  14. package/distTs/src/command/agent/uninstall.js +5 -8
  15. package/distTs/src/command/agent/update.js +2 -2
  16. package/distTs/src/command/artifact/publish.js +3 -1
  17. package/distTs/src/command/version.js +13 -5
  18. package/distTs/src/logger.js +40 -4
  19. package/distTs/src/texts.js +35 -19
  20. package/distTs/src/utils.js +98 -3
  21. package/node_modules/asn1/Jenkinsfile +65 -0
  22. package/node_modules/asn1/LICENSE +19 -0
  23. package/node_modules/asn1/README.md +50 -0
  24. package/node_modules/asn1/lib/ber/errors.js +13 -0
  25. package/node_modules/asn1/lib/ber/index.js +27 -0
  26. package/node_modules/asn1/lib/ber/reader.js +262 -0
  27. package/node_modules/asn1/lib/ber/types.js +36 -0
  28. package/node_modules/asn1/lib/ber/writer.js +317 -0
  29. package/node_modules/asn1/lib/index.js +20 -0
  30. package/node_modules/asn1/package.json +31 -0
  31. package/node_modules/bcrypt-pbkdf/CONTRIBUTING.md +13 -0
  32. package/node_modules/bcrypt-pbkdf/LICENSE +66 -0
  33. package/node_modules/bcrypt-pbkdf/README.md +45 -0
  34. package/node_modules/bcrypt-pbkdf/index.js +556 -0
  35. package/node_modules/bcrypt-pbkdf/package.json +15 -0
  36. package/node_modules/safer-buffer/LICENSE +21 -0
  37. package/node_modules/safer-buffer/Porting-Buffer.md +268 -0
  38. package/node_modules/safer-buffer/Readme.md +156 -0
  39. package/node_modules/safer-buffer/dangerous.js +58 -0
  40. package/node_modules/safer-buffer/package.json +34 -0
  41. package/node_modules/safer-buffer/safer.js +77 -0
  42. package/node_modules/safer-buffer/tests.js +406 -0
  43. package/node_modules/ssh2/.eslintignore +4 -0
  44. package/node_modules/ssh2/.eslintrc.js +5 -0
  45. package/node_modules/ssh2/.github/workflows/ci.yml +110 -0
  46. package/node_modules/ssh2/.github/workflows/lint.yml +27 -0
  47. package/node_modules/ssh2/LICENSE +19 -0
  48. package/node_modules/ssh2/README.md +1529 -0
  49. package/node_modules/ssh2/SFTP.md +413 -0
  50. package/node_modules/ssh2/examples/server-chat.js +238 -0
  51. package/node_modules/ssh2/examples/sftp-server-download-only.js +134 -0
  52. package/node_modules/ssh2/install.js +27 -0
  53. package/node_modules/ssh2/lib/Channel.js +295 -0
  54. package/node_modules/ssh2/lib/agent.js +1123 -0
  55. package/node_modules/ssh2/lib/client.js +2176 -0
  56. package/node_modules/ssh2/lib/http-agents.js +84 -0
  57. package/node_modules/ssh2/lib/index.js +44 -0
  58. package/node_modules/ssh2/lib/keygen.js +582 -0
  59. package/node_modules/ssh2/lib/protocol/Protocol.js +2136 -0
  60. package/node_modules/ssh2/lib/protocol/SFTP.js +4052 -0
  61. package/node_modules/ssh2/lib/protocol/constants.js +356 -0
  62. package/node_modules/ssh2/lib/protocol/crypto/binding.gyp +23 -0
  63. package/node_modules/ssh2/lib/protocol/crypto/poly1305.js +43 -0
  64. package/node_modules/ssh2/lib/protocol/crypto/src/binding.cc +2300 -0
  65. package/node_modules/ssh2/lib/protocol/crypto.js +1602 -0
  66. package/node_modules/ssh2/lib/protocol/handlers.js +16 -0
  67. package/node_modules/ssh2/lib/protocol/handlers.misc.js +1285 -0
  68. package/node_modules/ssh2/lib/protocol/kex.js +1908 -0
  69. package/node_modules/ssh2/lib/protocol/keyParser.js +1484 -0
  70. package/node_modules/ssh2/lib/protocol/node-fs-compat.js +115 -0
  71. package/node_modules/ssh2/lib/protocol/utils.js +356 -0
  72. package/node_modules/ssh2/lib/protocol/zlib.js +255 -0
  73. package/node_modules/ssh2/lib/server.js +1380 -0
  74. package/node_modules/ssh2/lib/utils.js +336 -0
  75. package/node_modules/ssh2/package.json +49 -0
  76. package/node_modules/ssh2/test/common.js +316 -0
  77. package/node_modules/ssh2/test/fixtures/bad_rsa_private_key +26 -0
  78. package/node_modules/ssh2/test/fixtures/https_cert.pem +33 -0
  79. package/node_modules/ssh2/test/fixtures/https_key.pem +52 -0
  80. package/node_modules/ssh2/test/fixtures/id_dsa +12 -0
  81. package/node_modules/ssh2/test/fixtures/id_ecdsa +5 -0
  82. package/node_modules/ssh2/test/fixtures/id_rsa +15 -0
  83. package/node_modules/ssh2/test/fixtures/id_rsa.ppk +26 -0
  84. package/node_modules/ssh2/test/fixtures/id_rsa_enc +30 -0
  85. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_dsa +21 -0
  86. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_dsa.pub +1 -0
  87. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_dsa.pub.result +7 -0
  88. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_dsa.result +7 -0
  89. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_dsa_enc +22 -0
  90. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_dsa_enc.pub +1 -0
  91. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_dsa_enc.pub.result +7 -0
  92. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_dsa_enc.result +7 -0
  93. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_dsa_enc_gcm +23 -0
  94. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_dsa_enc_gcm.pub +1 -0
  95. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_dsa_enc_gcm.pub.result +7 -0
  96. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_dsa_enc_gcm.result +7 -0
  97. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_ecdsa +9 -0
  98. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_ecdsa.pub +1 -0
  99. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_ecdsa.pub.result +7 -0
  100. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_ecdsa.result +7 -0
  101. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_ecdsa_enc +10 -0
  102. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_ecdsa_enc.pub +1 -0
  103. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_ecdsa_enc.pub.result +8 -0
  104. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_ecdsa_enc.result +7 -0
  105. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_ecdsa_enc_gcm +10 -0
  106. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_ecdsa_enc_gcm.pub +1 -0
  107. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_ecdsa_enc_gcm.pub.result +8 -0
  108. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_ecdsa_enc_gcm.result +7 -0
  109. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_ed25519 +7 -0
  110. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_ed25519.pub +1 -0
  111. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_ed25519.pub.result +7 -0
  112. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_ed25519.result +7 -0
  113. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_rsa +27 -0
  114. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_rsa.pub +1 -0
  115. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_rsa.pub.result +7 -0
  116. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_rsa.result +7 -0
  117. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_rsa_enc +28 -0
  118. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_rsa_enc.pub +1 -0
  119. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_rsa_enc.pub.result +8 -0
  120. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_rsa_enc.result +7 -0
  121. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_rsa_enc_gcm +29 -0
  122. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_rsa_enc_gcm.pub +1 -0
  123. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_rsa_enc_gcm.pub.result +8 -0
  124. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_rsa_enc_gcm.result +7 -0
  125. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_dsa +12 -0
  126. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_dsa.pub +1 -0
  127. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_dsa.pub.result +7 -0
  128. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_dsa.result +7 -0
  129. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_dsa_enc +15 -0
  130. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_dsa_enc.pub +1 -0
  131. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_dsa_enc.pub.result +8 -0
  132. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_dsa_enc.result +7 -0
  133. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_ecdsa +5 -0
  134. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_ecdsa.pub +1 -0
  135. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_ecdsa.pub.result +7 -0
  136. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_ecdsa.result +7 -0
  137. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_ecdsa_enc +8 -0
  138. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_ecdsa_enc.pub +1 -0
  139. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_ecdsa_enc.pub.result +8 -0
  140. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_ecdsa_enc.result +7 -0
  141. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_rsa +27 -0
  142. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_rsa.pub +1 -0
  143. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_rsa.pub.result +7 -0
  144. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_rsa.result +7 -0
  145. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_rsa_enc +30 -0
  146. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_rsa_enc.pub +1 -0
  147. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_rsa_enc.pub.result +8 -0
  148. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_rsa_enc.result +7 -0
  149. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_rsa_enc_aes256 +54 -0
  150. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_rsa_enc_aes256.pub +1 -0
  151. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_rsa_enc_aes256.pub.result +6 -0
  152. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_rsa_enc_aes256.result +6 -0
  153. package/node_modules/ssh2/test/fixtures/keyParser/ppk_dsa_enc +17 -0
  154. package/node_modules/ssh2/test/fixtures/keyParser/ppk_dsa_enc.result +7 -0
  155. package/node_modules/ssh2/test/fixtures/keyParser/ppk_rsa +26 -0
  156. package/node_modules/ssh2/test/fixtures/keyParser/ppk_rsa.result +7 -0
  157. package/node_modules/ssh2/test/fixtures/keyParser/ppk_rsa_enc +18 -0
  158. package/node_modules/ssh2/test/fixtures/keyParser/ppk_rsa_enc.result +7 -0
  159. package/node_modules/ssh2/test/fixtures/keyParser/rfc4716_rsa.pub +9 -0
  160. package/node_modules/ssh2/test/fixtures/keyParser/rfc4716_rsa.pub.result +7 -0
  161. package/node_modules/ssh2/test/fixtures/keyParser/rfc4716_rsa2.pub +10 -0
  162. package/node_modules/ssh2/test/fixtures/keyParser/rfc4716_rsa2.pub.result +7 -0
  163. package/node_modules/ssh2/test/fixtures/keyParser/rfc4716_rsa3.pub +11 -0
  164. package/node_modules/ssh2/test/fixtures/keyParser/rfc4716_rsa3.pub.result +7 -0
  165. package/node_modules/ssh2/test/fixtures/keyParser/rfc4716_rsa4.pub +11 -0
  166. package/node_modules/ssh2/test/fixtures/keyParser/rfc4716_rsa4.pub.result +7 -0
  167. package/node_modules/ssh2/test/fixtures/keyParser/rfc4716_rsa5.pub +8 -0
  168. package/node_modules/ssh2/test/fixtures/keyParser/rfc4716_rsa5.pub.result +7 -0
  169. package/node_modules/ssh2/test/fixtures/keyParser/rfc4716_rsa6.pub +13 -0
  170. package/node_modules/ssh2/test/fixtures/keyParser/rfc4716_rsa6.pub.result +7 -0
  171. package/node_modules/ssh2/test/fixtures/openssh_new_rsa +27 -0
  172. package/node_modules/ssh2/test/fixtures/ssh_host_dsa_key +12 -0
  173. package/node_modules/ssh2/test/fixtures/ssh_host_ecdsa_key +5 -0
  174. package/node_modules/ssh2/test/fixtures/ssh_host_rsa_key +15 -0
  175. package/node_modules/ssh2/test/test-exec.js +578 -0
  176. package/node_modules/ssh2/test/test-integration-openssh.js +486 -0
  177. package/node_modules/ssh2/test/test-keygen.js +60 -0
  178. package/node_modules/ssh2/test/test-misc-client-server.js +1460 -0
  179. package/node_modules/ssh2/test/test-openssh.js +261 -0
  180. package/node_modules/ssh2/test/test-protocol-crypto.js +631 -0
  181. package/node_modules/ssh2/test/test-protocol-keyparser.js +177 -0
  182. package/node_modules/ssh2/test/test-server-hostkeys.js +138 -0
  183. package/node_modules/ssh2/test/test-sftp.js +842 -0
  184. package/node_modules/ssh2/test/test-shell.js +109 -0
  185. package/node_modules/ssh2/test/test-userauth-agent-openssh.js +110 -0
  186. package/node_modules/ssh2/test/test-userauth-agent.js +171 -0
  187. package/node_modules/ssh2/test/test-userauth.js +611 -0
  188. package/node_modules/ssh2/test/test-worker-imports.js +25 -0
  189. package/node_modules/ssh2/test/test.js +20 -0
  190. package/node_modules/ssh2/util/build_pagent.bat +2 -0
  191. package/node_modules/ssh2/util/pagent.c +88 -0
  192. package/node_modules/ssh2/util/pagent.exe +0 -0
  193. package/node_modules/tweetnacl/.npmignore +4 -0
  194. package/node_modules/tweetnacl/AUTHORS.md +28 -0
  195. package/node_modules/tweetnacl/CHANGELOG.md +221 -0
  196. package/node_modules/tweetnacl/LICENSE +24 -0
  197. package/node_modules/tweetnacl/PULL_REQUEST_TEMPLATE.md +20 -0
  198. package/node_modules/tweetnacl/README.md +459 -0
  199. package/node_modules/tweetnacl/nacl-fast.js +2388 -0
  200. package/node_modules/tweetnacl/nacl-fast.min.js +2 -0
  201. package/node_modules/tweetnacl/nacl.d.ts +98 -0
  202. package/node_modules/tweetnacl/nacl.js +1175 -0
  203. package/node_modules/tweetnacl/nacl.min.js +1 -0
  204. package/node_modules/tweetnacl/package.json +58 -0
  205. package/package.json +10 -2
@@ -0,0 +1,177 @@
1
+ 'use strict';
2
+
3
+ const assert = require('assert');
4
+ const { readdirSync, readFileSync } = require('fs');
5
+ const { inspect } = require('util');
6
+
7
+ const { parseKey } = require('../lib/protocol/keyParser.js');
8
+
9
+ const { EDDSA_SUPPORTED } = require('../lib/protocol/constants.js');
10
+
11
+ const BASE_PATH = `${__dirname}/fixtures/keyParser`;
12
+
13
+ function failMsg(name, message, exit) {
14
+ const msg = `[${name}] ${message}`;
15
+ if (!exit)
16
+ return msg;
17
+ console.error(msg);
18
+ process.exit(1);
19
+ }
20
+
21
+ readdirSync(BASE_PATH).forEach((name) => {
22
+ if (/\.result$/i.test(name))
23
+ return;
24
+ if (/ed25519/i.test(name) && !EDDSA_SUPPORTED)
25
+ return;
26
+
27
+ const isPublic = /\.pub$/i.test(name);
28
+ const isEncrypted = /_enc/i.test(name);
29
+ const isPPK = /^ppk_/i.test(name);
30
+ const key = readFileSync(`${BASE_PATH}/${name}`);
31
+ let res;
32
+ if (isEncrypted)
33
+ res = parseKey(key, (isPPK ? 'node.js' : 'password'));
34
+ else
35
+ res = parseKey(key);
36
+ let expected = JSON.parse(
37
+ readFileSync(`${BASE_PATH}/${name}.result`, 'utf8')
38
+ );
39
+ if (typeof expected === 'string') {
40
+ if (!(res instanceof Error))
41
+ failMsg(name, `Expected error: ${expected}`, true);
42
+ assert.strictEqual(
43
+ expected,
44
+ res.message,
45
+ failMsg(name,
46
+ 'Error message mismatch.\n'
47
+ + `Expected: ${inspect(expected)}\n`
48
+ + `Received: ${inspect(res.message)}`)
49
+ );
50
+ } else if (res instanceof Error) {
51
+ failMsg(name, `Unexpected error: ${res.stack}`, true);
52
+ } else {
53
+ if (Array.isArray(expected) && !Array.isArray(res))
54
+ failMsg(name, 'Expected array but did not receive one', true);
55
+ if (!Array.isArray(expected) && Array.isArray(res))
56
+ failMsg(name, 'Received array but did not expect one', true);
57
+
58
+ if (!Array.isArray(res)) {
59
+ res = [res];
60
+ expected = [expected];
61
+ } else if (res.length !== expected.length) {
62
+ failMsg(name,
63
+ `Expected ${expected.length} keys, but received ${res.length}`,
64
+ true);
65
+ }
66
+
67
+ res.forEach((curKey, i) => {
68
+ const details = {
69
+ type: curKey.type,
70
+ comment: curKey.comment,
71
+ public: curKey.getPublicPEM(),
72
+ publicSSH: curKey.getPublicSSH()
73
+ && curKey.getPublicSSH().toString('base64'),
74
+ private: curKey.getPrivatePEM()
75
+ };
76
+ assert.deepStrictEqual(
77
+ details,
78
+ expected[i],
79
+ failMsg(name,
80
+ 'Parser output mismatch.\n'
81
+ + `Expected: ${inspect(expected[i])}\n\n`
82
+ + `Received: ${inspect(details)}`)
83
+ );
84
+ });
85
+
86
+ // Test `equals()`
87
+ let copy;
88
+ if (isEncrypted)
89
+ copy = parseKey(key, (isPPK ? 'node.js' : 'password'));
90
+ else
91
+ copy = parseKey(key);
92
+ if (!Array.isArray(copy))
93
+ copy = [copy];
94
+ for (let i = 0; i < res.length; ++i) {
95
+ assert.strictEqual(
96
+ res[i].equals(copy[i]),
97
+ true,
98
+ failMsg(name, 'equals() failed with copy')
99
+ );
100
+ }
101
+ }
102
+
103
+ if (isEncrypted && !isPublic) {
104
+ // Make sure parsing encrypted keys without a passphrase results in an
105
+ // appropriate error
106
+ const err = parseKey(key);
107
+ if (!(err instanceof Error))
108
+ failMsg(name, 'Expected error during parse without passphrase', true);
109
+ if (!/no passphrase/i.test(err.message)) {
110
+ failMsg(name,
111
+ `Error during parse without passphrase: ${err.message}`,
112
+ true);
113
+ }
114
+
115
+ // Make sure parsing encrypted keys with an incorrect passphrase results in
116
+ // an appropriate error
117
+ const errIncPass = parseKey(key, 'incorrectPassphrase');
118
+ if (!(errIncPass instanceof Error)) {
119
+ failMsg(name,
120
+ 'Expected error during parse with an incorrect passphrase',
121
+ true);
122
+ }
123
+ if (!/bad passphrase\?|unable to authenticate data/i
124
+ .test(errIncPass.message)) {
125
+ failMsg(name,
126
+ 'Error during parse with an incorrect passphrase: '
127
+ + errIncPass.message,
128
+ true);
129
+ }
130
+ }
131
+
132
+ if (!isPublic) {
133
+ // Try signing and verifying to make sure the private/public key PEMs are
134
+ // correct
135
+ const data = Buffer.from('hello world');
136
+ res.forEach((curKey) => {
137
+ let result = curKey.sign(data);
138
+ if (result instanceof Error) {
139
+ failMsg(name,
140
+ `Error while signing data with key: ${result.message}`,
141
+ true);
142
+ }
143
+ result = curKey.verify(data, result);
144
+ if (result instanceof Error) {
145
+ failMsg(name,
146
+ `Error while verifying signed data with key: ${result.message}`,
147
+ true);
148
+ }
149
+ if (!result)
150
+ failMsg(name, 'Failed to verify signed data with key', true);
151
+ });
152
+ if (res.length === 1 && !isPPK) {
153
+ const pubFile = readFileSync(`${BASE_PATH}/${name}.pub`);
154
+ const pubParsed = parseKey(pubFile);
155
+ if (!(pubParsed instanceof Error)) {
156
+ let result = res[0].sign(data);
157
+ if (result instanceof Error) {
158
+ failMsg(name,
159
+ `Error while signing data with key: ${result.message}`,
160
+ true);
161
+ }
162
+ result = pubParsed.verify(data, result);
163
+ if (result instanceof Error) {
164
+ failMsg(name,
165
+ 'Error while verifying signed data with separate public key: '
166
+ + result.message,
167
+ true);
168
+ }
169
+ if (!result) {
170
+ failMsg(name,
171
+ 'Failed to verify signed data with separate public key',
172
+ true);
173
+ }
174
+ }
175
+ }
176
+ }
177
+ });
@@ -0,0 +1,138 @@
1
+ 'use strict';
2
+
3
+ const assert = require('assert');
4
+
5
+ const {
6
+ fixtureKey,
7
+ mustCall,
8
+ setup,
9
+ } = require('./common.js');
10
+
11
+ const debug = false;
12
+
13
+ [
14
+ { desc: 'RSA user key (old OpenSSH)',
15
+ hostKey: fixtureKey('id_rsa') },
16
+ { desc: 'RSA user key (new OpenSSH)',
17
+ hostKey: fixtureKey('openssh_new_rsa') },
18
+ { desc: 'DSA host key',
19
+ hostKey: fixtureKey('ssh_host_dsa_key') },
20
+ { desc: 'ECDSA host key',
21
+ hostKey: fixtureKey('ssh_host_ecdsa_key') },
22
+ { desc: 'PPK',
23
+ hostKey: fixtureKey('id_rsa.ppk') },
24
+ ].forEach((test) => {
25
+ const { desc, hostKey } = test;
26
+ const clientKey = fixtureKey('openssh_new_rsa');
27
+ const username = 'KeyUser';
28
+ const { server } = setup(
29
+ desc,
30
+ {
31
+ client: {
32
+ username,
33
+ privateKey: clientKey.raw,
34
+ algorithms: {
35
+ serverHostKey: [ hostKey.key.type ],
36
+ }
37
+ },
38
+ server: { hostKeys: [ hostKey.raw ] },
39
+ debug,
40
+ }
41
+ );
42
+
43
+ server.on('connection', mustCall((conn) => {
44
+ let authAttempt = 0;
45
+ conn.on('authentication', mustCall((ctx) => {
46
+ assert(ctx.username === username,
47
+ `Wrong username: ${ctx.username}`);
48
+ switch (++authAttempt) {
49
+ case 1:
50
+ assert(ctx.method === 'none',
51
+ `Wrong auth method: ${ctx.method}`);
52
+ return ctx.reject();
53
+ case 3:
54
+ assert(ctx.signature, 'Missing publickey signature');
55
+ // FALLTHROUGH
56
+ case 2:
57
+ assert(ctx.method === 'publickey',
58
+ `Wrong auth method: ${ctx.method}`);
59
+ assert(ctx.key.algo === clientKey.key.type,
60
+ `Wrong key algo: ${ctx.key.algo}`);
61
+ assert.deepStrictEqual(clientKey.key.getPublicSSH(),
62
+ ctx.key.data,
63
+ 'Public key mismatch');
64
+ break;
65
+ }
66
+ if (ctx.signature) {
67
+ const result =
68
+ clientKey.key.verify(ctx.blob, ctx.signature, ctx.hashAlgo);
69
+ assert(result === true, 'Could not verify publickey signature');
70
+ }
71
+ ctx.accept();
72
+ }, 3)).on('ready', mustCall(() => {
73
+ conn.end();
74
+ }));
75
+ }));
76
+ });
77
+
78
+
79
+ {
80
+ const RSA_KEY = fixtureKey('ssh_host_rsa_key');
81
+ const ECDSA_KEY = fixtureKey('ssh_host_ecdsa_key');
82
+ [ RSA_KEY, ECDSA_KEY ].forEach((key) => {
83
+ const selKeyType = key.key.type;
84
+ const clientKey = fixtureKey('openssh_new_rsa');
85
+ const username = 'KeyUser';
86
+ const { client, server } = setup(
87
+ `Multiple host key types (${key.type} selected)`,
88
+ {
89
+ client: {
90
+ username,
91
+ privateKey: clientKey.raw,
92
+ algorithms: {
93
+ serverHostKey: [ selKeyType ],
94
+ }
95
+ },
96
+ server: { hostKeys: [ RSA_KEY.raw, ECDSA_KEY.raw ] },
97
+ debug,
98
+ }
99
+ );
100
+
101
+ server.on('connection', mustCall((conn) => {
102
+ let authAttempt = 0;
103
+ conn.on('authentication', mustCall((ctx) => {
104
+ assert(ctx.username === username,
105
+ `Wrong username: ${ctx.username}`);
106
+ switch (++authAttempt) {
107
+ case 1:
108
+ assert(ctx.method === 'none',
109
+ `Wrong auth method: ${ctx.method}`);
110
+ return ctx.reject();
111
+ case 3:
112
+ assert(ctx.signature, 'Missing publickey signature');
113
+ // FALLTHROUGH
114
+ case 2:
115
+ assert(ctx.method === 'publickey',
116
+ `Wrong auth method: ${ctx.method}`);
117
+ assert(ctx.key.algo === clientKey.key.type,
118
+ `Wrong key algo: ${ctx.key.algo}`);
119
+ assert.deepStrictEqual(clientKey.key.getPublicSSH(),
120
+ ctx.key.data,
121
+ 'Public key mismatch');
122
+ break;
123
+ }
124
+ if (ctx.signature) {
125
+ const result =
126
+ clientKey.key.verify(ctx.blob, ctx.signature, ctx.hashAlgo);
127
+ assert(result === true, 'Could not verify publickey signature');
128
+ }
129
+ ctx.accept();
130
+ }, 3)).on('ready', mustCall(() => {
131
+ conn.end();
132
+ }));
133
+ }));
134
+ client.on('handshake', mustCall((info) => {
135
+ assert(info.serverHostKey === selKeyType, 'Wrong host key selected');
136
+ }));
137
+ });
138
+ }