+ for i in range (expected_oks):
+ line = passphrase_process.stdout.readline ().decode ("UTF-8")
+ if line != "OK\n":
+ raise Exception ("Couldn't read expected OK.")
+
+ error, prompt, description = "", _ ("Passphrase:"), ""
+
+ while True:
+ batch_passphrase = \
+ "GET_PASSPHRASE --data --repeat=1 --qualitybar X {} {} {}\n" \
+ .format ((error and quoted (error)) or "X",
+ (prompt and quoted (prompt)) or "X",
+ (description and quoted (description)) or "X")
+
+ passphrase_process.stdin.write (batch_passphrase.encode ("UTF-8"))
+
+ line = passphrase_process.stdout.readline ().decode ("UTF-8")
+
+ if line == "OK\n":
+ error = _ ("Empty passphrase")
+ continue
+
+ if line.startswith ("D "):
+ passphrase = line[2:-1]
+
+ if len (passphrase) < 8:
+ error = _ ("Passphrase too short")
+ description = _ ("Passphrase has to have at least 8 characters.")
+ continue
+
+ return passphrase
+
+ if line.startswith ("ERR 83886179"):
+ raise Exception ("Operation cancelled.")
+
+ raise Exception ("Unexpected response.")
+ finally:
+ passphrase_process.stdin.close ()
+ passphrase_process.stdout.close ()
+ passphrase_process.stderr.close ()
+
+ passphrase_process.wait ()