| 1253 | |
| 1254 | |
| 1255 | def test_hsmtool_generatehsm(node_factory): |
| 1256 | l1 = node_factory.get_node(start=False) |
| 1257 | hsm_path = os.path.join(l1.daemon.lightning_dir, TEST_NETWORK, |
| 1258 | "hsm_secret") |
| 1259 | |
| 1260 | hsmtool = HsmTool(node_factory.directory, "generatehsm", hsm_path) |
| 1261 | |
| 1262 | # You cannot re-generate an already existing hsm_secret |
| 1263 | master_fd, slave_fd = os.openpty() |
| 1264 | hsmtool.start(stdin=slave_fd) |
| 1265 | assert hsmtool.proc.wait(WAIT_TIMEOUT) == 2 |
| 1266 | os.remove(hsm_path) |
| 1267 | |
| 1268 | # We can generate a valid hsm_secret from a wordlist and a "passphrase" |
| 1269 | master_fd, slave_fd = os.openpty() |
| 1270 | hsmtool.start(stdin=slave_fd) |
| 1271 | hsmtool.wait_for_log(r"Select your language:") |
| 1272 | write_all(master_fd, "0\n".encode("utf-8")) |
| 1273 | hsmtool.wait_for_log(r"Introduce your BIP39 word list") |
| 1274 | write_all(master_fd, "ritual idle hat sunny universe pluck key alpha wing " |
| 1275 | "cake have wedding\n".encode("utf-8")) |
| 1276 | hsmtool.wait_for_log(r"Enter your passphrase:") |
| 1277 | write_all(master_fd, "This is actually not a passphrase\n".encode("utf-8")) |
| 1278 | assert hsmtool.proc.wait(WAIT_TIMEOUT) == 0 |
| 1279 | hsmtool.is_in_log(r"New hsm_secret file created") |
| 1280 | |
| 1281 | # Check should pass. |
| 1282 | hsmtool = HsmTool(node_factory.directory, "checkhsm", hsm_path) |
| 1283 | master_fd, slave_fd = os.openpty() |
| 1284 | hsmtool.start(stdin=slave_fd) |
| 1285 | hsmtool.wait_for_log(r"Enter your passphrase:") |
| 1286 | write_all(master_fd, "This is actually not a passphrase\n".encode("utf-8")) |
| 1287 | hsmtool.wait_for_log(r"Select your language:") |
| 1288 | write_all(master_fd, "0\n".encode("utf-8")) |
| 1289 | hsmtool.wait_for_log(r"Introduce your BIP39 word list") |
| 1290 | write_all(master_fd, "ritual idle hat sunny universe pluck key alpha wing " |
| 1291 | "cake have wedding\n".encode("utf-8")) |
| 1292 | assert hsmtool.proc.wait(WAIT_TIMEOUT) == 0 |
| 1293 | hsmtool.is_in_log(r"OK") |
| 1294 | |
| 1295 | # Wrong mnemonic will fail. |
| 1296 | master_fd, slave_fd = os.openpty() |
| 1297 | hsmtool.start(stdin=slave_fd) |
| 1298 | hsmtool.wait_for_log(r"Enter your passphrase:") |
| 1299 | write_all(master_fd, "This is actually not a passphrase\n".encode("utf-8")) |
| 1300 | hsmtool.wait_for_log(r"Select your language:") |
| 1301 | write_all(master_fd, "0\n".encode("utf-8")) |
| 1302 | hsmtool.wait_for_log(r"Introduce your BIP39 word list") |
| 1303 | write_all(master_fd, "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about\n".encode("utf-8")) |
| 1304 | assert hsmtool.proc.wait(WAIT_TIMEOUT) == 5 |
| 1305 | hsmtool.is_in_log(r"resulting hsm_secret did not match") |
| 1306 | |
| 1307 | # Wrong passphrase will fail. |
| 1308 | master_fd, slave_fd = os.openpty() |
| 1309 | hsmtool.start(stdin=slave_fd) |
| 1310 | hsmtool.wait_for_log(r"Enter your passphrase:") |
| 1311 | write_all(master_fd, "This is actually not a passphrase \n".encode("utf-8")) |
| 1312 | hsmtool.wait_for_log(r"Select your language:") |