bdy 1.23.7-dev-target-commands → 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 (252) hide show
  1. package/distTs/README.md +181 -0
  2. package/distTs/package.json +10 -4
  3. package/distTs/src/agent/linux.js +53 -3
  4. package/distTs/src/agent/manager.js +3 -6
  5. package/distTs/src/agent/osx.js +51 -3
  6. package/distTs/src/agent/system.js +400 -21
  7. package/distTs/src/agent/windows.js +4 -7
  8. package/distTs/src/api/client.js +0 -156
  9. package/distTs/src/cliIndex.js +0 -4
  10. package/distTs/src/command/agent/debug.js +2 -2
  11. package/distTs/src/command/agent/install.js +37 -10
  12. package/distTs/src/command/agent/restart.js +2 -2
  13. package/distTs/src/command/agent/run.js +3 -0
  14. package/distTs/src/command/agent/start.js +2 -2
  15. package/distTs/src/command/agent/status.js +19 -0
  16. package/distTs/src/command/agent/stop.js +2 -2
  17. package/distTs/src/command/agent/uninstall.js +5 -8
  18. package/distTs/src/command/agent/update.js +2 -2
  19. package/distTs/src/command/artifact/list.js +6 -1
  20. package/distTs/src/command/artifact/publish.js +3 -1
  21. package/distTs/src/command/distro/route/update.js +1 -1
  22. package/distTs/src/command/distro/update.js +9 -9
  23. package/distTs/src/command/project/get.js +18 -0
  24. package/distTs/src/command/project/set.js +31 -0
  25. package/distTs/src/command/sandbox/get/yaml.js +30 -0
  26. package/distTs/src/command/version.js +13 -5
  27. package/distTs/src/command/vt/scrape.js +193 -0
  28. package/distTs/src/input.js +0 -54
  29. package/distTs/src/logger.js +40 -4
  30. package/distTs/src/texts.js +36 -210
  31. package/distTs/src/utils.js +99 -18
  32. package/node_modules/asn1/Jenkinsfile +65 -0
  33. package/node_modules/asn1/LICENSE +19 -0
  34. package/node_modules/asn1/README.md +50 -0
  35. package/node_modules/asn1/lib/ber/errors.js +13 -0
  36. package/node_modules/asn1/lib/ber/index.js +27 -0
  37. package/node_modules/asn1/lib/ber/reader.js +262 -0
  38. package/node_modules/asn1/lib/ber/types.js +36 -0
  39. package/node_modules/asn1/lib/ber/writer.js +317 -0
  40. package/node_modules/asn1/lib/index.js +20 -0
  41. package/node_modules/asn1/package.json +31 -0
  42. package/node_modules/bcrypt-pbkdf/CONTRIBUTING.md +13 -0
  43. package/node_modules/bcrypt-pbkdf/LICENSE +66 -0
  44. package/node_modules/bcrypt-pbkdf/README.md +45 -0
  45. package/node_modules/bcrypt-pbkdf/index.js +556 -0
  46. package/node_modules/bcrypt-pbkdf/package.json +15 -0
  47. package/node_modules/safer-buffer/LICENSE +21 -0
  48. package/node_modules/safer-buffer/Porting-Buffer.md +268 -0
  49. package/node_modules/safer-buffer/Readme.md +156 -0
  50. package/node_modules/safer-buffer/dangerous.js +58 -0
  51. package/node_modules/safer-buffer/package.json +34 -0
  52. package/node_modules/safer-buffer/safer.js +77 -0
  53. package/node_modules/safer-buffer/tests.js +406 -0
  54. package/node_modules/ssh2/.eslintignore +4 -0
  55. package/node_modules/ssh2/.eslintrc.js +5 -0
  56. package/node_modules/ssh2/.github/workflows/ci.yml +110 -0
  57. package/node_modules/ssh2/.github/workflows/lint.yml +27 -0
  58. package/node_modules/ssh2/LICENSE +19 -0
  59. package/node_modules/ssh2/README.md +1529 -0
  60. package/node_modules/ssh2/SFTP.md +413 -0
  61. package/node_modules/ssh2/examples/server-chat.js +238 -0
  62. package/node_modules/ssh2/examples/sftp-server-download-only.js +134 -0
  63. package/node_modules/ssh2/install.js +27 -0
  64. package/node_modules/ssh2/lib/Channel.js +295 -0
  65. package/node_modules/ssh2/lib/agent.js +1123 -0
  66. package/node_modules/ssh2/lib/client.js +2176 -0
  67. package/node_modules/ssh2/lib/http-agents.js +84 -0
  68. package/node_modules/ssh2/lib/index.js +44 -0
  69. package/node_modules/ssh2/lib/keygen.js +582 -0
  70. package/node_modules/ssh2/lib/protocol/Protocol.js +2136 -0
  71. package/node_modules/ssh2/lib/protocol/SFTP.js +4052 -0
  72. package/node_modules/ssh2/lib/protocol/constants.js +356 -0
  73. package/node_modules/ssh2/lib/protocol/crypto/binding.gyp +23 -0
  74. package/node_modules/ssh2/lib/protocol/crypto/poly1305.js +43 -0
  75. package/node_modules/ssh2/lib/protocol/crypto/src/binding.cc +2300 -0
  76. package/node_modules/ssh2/lib/protocol/crypto.js +1602 -0
  77. package/node_modules/ssh2/lib/protocol/handlers.js +16 -0
  78. package/node_modules/ssh2/lib/protocol/handlers.misc.js +1285 -0
  79. package/node_modules/ssh2/lib/protocol/kex.js +1908 -0
  80. package/node_modules/ssh2/lib/protocol/keyParser.js +1484 -0
  81. package/node_modules/ssh2/lib/protocol/node-fs-compat.js +115 -0
  82. package/node_modules/ssh2/lib/protocol/utils.js +356 -0
  83. package/node_modules/ssh2/lib/protocol/zlib.js +255 -0
  84. package/node_modules/ssh2/lib/server.js +1380 -0
  85. package/node_modules/ssh2/lib/utils.js +336 -0
  86. package/node_modules/ssh2/package.json +49 -0
  87. package/node_modules/ssh2/test/common.js +316 -0
  88. package/node_modules/ssh2/test/fixtures/bad_rsa_private_key +26 -0
  89. package/node_modules/ssh2/test/fixtures/https_cert.pem +33 -0
  90. package/node_modules/ssh2/test/fixtures/https_key.pem +52 -0
  91. package/node_modules/ssh2/test/fixtures/id_dsa +12 -0
  92. package/node_modules/ssh2/test/fixtures/id_ecdsa +5 -0
  93. package/node_modules/ssh2/test/fixtures/id_rsa +15 -0
  94. package/node_modules/ssh2/test/fixtures/id_rsa.ppk +26 -0
  95. package/node_modules/ssh2/test/fixtures/id_rsa_enc +30 -0
  96. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_dsa +21 -0
  97. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_dsa.pub +1 -0
  98. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_dsa.pub.result +7 -0
  99. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_dsa.result +7 -0
  100. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_dsa_enc +22 -0
  101. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_dsa_enc.pub +1 -0
  102. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_dsa_enc.pub.result +7 -0
  103. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_dsa_enc.result +7 -0
  104. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_dsa_enc_gcm +23 -0
  105. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_dsa_enc_gcm.pub +1 -0
  106. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_dsa_enc_gcm.pub.result +7 -0
  107. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_dsa_enc_gcm.result +7 -0
  108. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_ecdsa +9 -0
  109. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_ecdsa.pub +1 -0
  110. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_ecdsa.pub.result +7 -0
  111. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_ecdsa.result +7 -0
  112. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_ecdsa_enc +10 -0
  113. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_ecdsa_enc.pub +1 -0
  114. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_ecdsa_enc.pub.result +8 -0
  115. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_ecdsa_enc.result +7 -0
  116. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_ecdsa_enc_gcm +10 -0
  117. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_ecdsa_enc_gcm.pub +1 -0
  118. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_ecdsa_enc_gcm.pub.result +8 -0
  119. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_ecdsa_enc_gcm.result +7 -0
  120. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_ed25519 +7 -0
  121. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_ed25519.pub +1 -0
  122. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_ed25519.pub.result +7 -0
  123. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_ed25519.result +7 -0
  124. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_rsa +27 -0
  125. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_rsa.pub +1 -0
  126. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_rsa.pub.result +7 -0
  127. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_rsa.result +7 -0
  128. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_rsa_enc +28 -0
  129. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_rsa_enc.pub +1 -0
  130. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_rsa_enc.pub.result +8 -0
  131. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_rsa_enc.result +7 -0
  132. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_rsa_enc_gcm +29 -0
  133. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_rsa_enc_gcm.pub +1 -0
  134. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_rsa_enc_gcm.pub.result +8 -0
  135. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_rsa_enc_gcm.result +7 -0
  136. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_dsa +12 -0
  137. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_dsa.pub +1 -0
  138. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_dsa.pub.result +7 -0
  139. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_dsa.result +7 -0
  140. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_dsa_enc +15 -0
  141. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_dsa_enc.pub +1 -0
  142. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_dsa_enc.pub.result +8 -0
  143. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_dsa_enc.result +7 -0
  144. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_ecdsa +5 -0
  145. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_ecdsa.pub +1 -0
  146. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_ecdsa.pub.result +7 -0
  147. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_ecdsa.result +7 -0
  148. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_ecdsa_enc +8 -0
  149. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_ecdsa_enc.pub +1 -0
  150. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_ecdsa_enc.pub.result +8 -0
  151. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_ecdsa_enc.result +7 -0
  152. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_rsa +27 -0
  153. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_rsa.pub +1 -0
  154. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_rsa.pub.result +7 -0
  155. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_rsa.result +7 -0
  156. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_rsa_enc +30 -0
  157. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_rsa_enc.pub +1 -0
  158. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_rsa_enc.pub.result +8 -0
  159. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_rsa_enc.result +7 -0
  160. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_rsa_enc_aes256 +54 -0
  161. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_rsa_enc_aes256.pub +1 -0
  162. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_rsa_enc_aes256.pub.result +6 -0
  163. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_rsa_enc_aes256.result +6 -0
  164. package/node_modules/ssh2/test/fixtures/keyParser/ppk_dsa_enc +17 -0
  165. package/node_modules/ssh2/test/fixtures/keyParser/ppk_dsa_enc.result +7 -0
  166. package/node_modules/ssh2/test/fixtures/keyParser/ppk_rsa +26 -0
  167. package/node_modules/ssh2/test/fixtures/keyParser/ppk_rsa.result +7 -0
  168. package/node_modules/ssh2/test/fixtures/keyParser/ppk_rsa_enc +18 -0
  169. package/node_modules/ssh2/test/fixtures/keyParser/ppk_rsa_enc.result +7 -0
  170. package/node_modules/ssh2/test/fixtures/keyParser/rfc4716_rsa.pub +9 -0
  171. package/node_modules/ssh2/test/fixtures/keyParser/rfc4716_rsa.pub.result +7 -0
  172. package/node_modules/ssh2/test/fixtures/keyParser/rfc4716_rsa2.pub +10 -0
  173. package/node_modules/ssh2/test/fixtures/keyParser/rfc4716_rsa2.pub.result +7 -0
  174. package/node_modules/ssh2/test/fixtures/keyParser/rfc4716_rsa3.pub +11 -0
  175. package/node_modules/ssh2/test/fixtures/keyParser/rfc4716_rsa3.pub.result +7 -0
  176. package/node_modules/ssh2/test/fixtures/keyParser/rfc4716_rsa4.pub +11 -0
  177. package/node_modules/ssh2/test/fixtures/keyParser/rfc4716_rsa4.pub.result +7 -0
  178. package/node_modules/ssh2/test/fixtures/keyParser/rfc4716_rsa5.pub +8 -0
  179. package/node_modules/ssh2/test/fixtures/keyParser/rfc4716_rsa5.pub.result +7 -0
  180. package/node_modules/ssh2/test/fixtures/keyParser/rfc4716_rsa6.pub +13 -0
  181. package/node_modules/ssh2/test/fixtures/keyParser/rfc4716_rsa6.pub.result +7 -0
  182. package/node_modules/ssh2/test/fixtures/openssh_new_rsa +27 -0
  183. package/node_modules/ssh2/test/fixtures/ssh_host_dsa_key +12 -0
  184. package/node_modules/ssh2/test/fixtures/ssh_host_ecdsa_key +5 -0
  185. package/node_modules/ssh2/test/fixtures/ssh_host_rsa_key +15 -0
  186. package/node_modules/ssh2/test/test-exec.js +578 -0
  187. package/node_modules/ssh2/test/test-integration-openssh.js +486 -0
  188. package/node_modules/ssh2/test/test-keygen.js +60 -0
  189. package/node_modules/ssh2/test/test-misc-client-server.js +1460 -0
  190. package/node_modules/ssh2/test/test-openssh.js +261 -0
  191. package/node_modules/ssh2/test/test-protocol-crypto.js +631 -0
  192. package/node_modules/ssh2/test/test-protocol-keyparser.js +177 -0
  193. package/node_modules/ssh2/test/test-server-hostkeys.js +138 -0
  194. package/node_modules/ssh2/test/test-sftp.js +842 -0
  195. package/node_modules/ssh2/test/test-shell.js +109 -0
  196. package/node_modules/ssh2/test/test-userauth-agent-openssh.js +110 -0
  197. package/node_modules/ssh2/test/test-userauth-agent.js +171 -0
  198. package/node_modules/ssh2/test/test-userauth.js +611 -0
  199. package/node_modules/ssh2/test/test-worker-imports.js +25 -0
  200. package/node_modules/ssh2/test/test.js +20 -0
  201. package/node_modules/ssh2/util/build_pagent.bat +2 -0
  202. package/node_modules/ssh2/util/pagent.c +88 -0
  203. package/node_modules/ssh2/util/pagent.exe +0 -0
  204. package/node_modules/tweetnacl/.npmignore +4 -0
  205. package/node_modules/tweetnacl/AUTHORS.md +28 -0
  206. package/node_modules/tweetnacl/CHANGELOG.md +221 -0
  207. package/node_modules/tweetnacl/LICENSE +24 -0
  208. package/node_modules/tweetnacl/PULL_REQUEST_TEMPLATE.md +20 -0
  209. package/node_modules/tweetnacl/README.md +459 -0
  210. package/node_modules/tweetnacl/nacl-fast.js +2388 -0
  211. package/node_modules/tweetnacl/nacl-fast.min.js +2 -0
  212. package/node_modules/tweetnacl/nacl.d.ts +98 -0
  213. package/node_modules/tweetnacl/nacl.js +1175 -0
  214. package/node_modules/tweetnacl/nacl.min.js +1 -0
  215. package/node_modules/tweetnacl/package.json +58 -0
  216. package/package.json +10 -4
  217. package/distTs/detect-rules.json +0 -351
  218. package/distTs/src/command/environment/create.js +0 -70
  219. package/distTs/src/command/environment/delete.js +0 -29
  220. package/distTs/src/command/environment/get.js +0 -48
  221. package/distTs/src/command/environment/list.js +0 -44
  222. package/distTs/src/command/environment/resolve.js +0 -22
  223. package/distTs/src/command/environment/update.js +0 -59
  224. package/distTs/src/command/environment.js +0 -20
  225. package/distTs/src/command/pipeline/run/apply.js +0 -62
  226. package/distTs/src/command/target/create.js +0 -33
  227. package/distTs/src/command/target/delete.js +0 -30
  228. package/distTs/src/command/target/exec/command.js +0 -65
  229. package/distTs/src/command/target/exec/kill.js +0 -25
  230. package/distTs/src/command/target/exec/list.js +0 -54
  231. package/distTs/src/command/target/exec/logs.js +0 -25
  232. package/distTs/src/command/target/exec/status.js +0 -41
  233. package/distTs/src/command/target/exec.js +0 -24
  234. package/distTs/src/command/target/get.js +0 -62
  235. package/distTs/src/command/target/list.js +0 -48
  236. package/distTs/src/command/target/scope.js +0 -60
  237. package/distTs/src/command/target/update.js +0 -31
  238. package/distTs/src/command/target.js +0 -22
  239. package/distTs/src/command/yaml/actions/detect.js +0 -268
  240. package/distTs/src/command/yaml/actions/info.js +0 -56
  241. package/distTs/src/command/yaml/actions/list.js +0 -70
  242. package/distTs/src/command/yaml/actions/schema.js +0 -104
  243. package/distTs/src/command/yaml/actions.js +0 -13
  244. package/distTs/src/command/yaml/agents.js +0 -88
  245. package/distTs/src/command/yaml/cache.js +0 -98
  246. package/distTs/src/command/yaml/init.js +0 -110
  247. package/distTs/src/command/yaml/pipeline.js +0 -42
  248. package/distTs/src/command/yaml/render.js +0 -83
  249. package/distTs/src/command/yaml/schemaUtils.js +0 -139
  250. package/distTs/src/command/yaml/validate.js +0 -259
  251. package/distTs/src/command/yaml.js +0 -18
  252. package/distTs/src/diskCache.js +0 -82
@@ -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
+ }