aboutsummaryrefslogtreecommitdiff
path: root/app/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/java')
-rw-r--r--app/src/main/java/invalid/lena/rsend/Keys.kt13
-rw-r--r--app/src/main/java/invalid/lena/rsend/MainActivity.kt21
2 files changed, 23 insertions, 11 deletions
diff --git a/app/src/main/java/invalid/lena/rsend/Keys.kt b/app/src/main/java/invalid/lena/rsend/Keys.kt
index 0a5384d..fa233f7 100644
--- a/app/src/main/java/invalid/lena/rsend/Keys.kt
+++ b/app/src/main/java/invalid/lena/rsend/Keys.kt
@@ -15,14 +15,13 @@ object Keys {
fun exists(ctx: Context): Boolean = keyEnc(ctx).exists()
- // generate creates the key pair, stores the private key encrypted, and
- // returns the public key in authorized_keys format.
+ // generate creates a key pair via rsh -keygen (the plaintext key never
+ // touches disk), stores it encrypted, and returns the public key in
+ // authorized_keys format. Storage and validation reuse importKey.
fun generate(ctx: Context): String {
- val tmp = File(ctx.cacheDir, "keygen").apply { mkdirs() }
- Native.run(Native.rsh(ctx), listOf("-keygen", tmp.absolutePath))
- keyEnc(ctx).writeBytes(KeyVault.encrypt(File(tmp, "id_ed25519").readBytes()))
- File(tmp, "id_ed25519.pub").copyTo(publicKey(ctx), overwrite = true)
- tmp.deleteRecursively()
+ val r = Native.run(Native.rsh(ctx), listOf("-keygen"))
+ if (r.code != 0) throw IllegalStateException(r.output.trim().ifEmpty { "keygen failed" })
+ importKey(ctx, r.output.toByteArray())
return publicKeyText(ctx)
}
diff --git a/app/src/main/java/invalid/lena/rsend/MainActivity.kt b/app/src/main/java/invalid/lena/rsend/MainActivity.kt
index 6b51252..ce65c2e 100644
--- a/app/src/main/java/invalid/lena/rsend/MainActivity.kt
+++ b/app/src/main/java/invalid/lena/rsend/MainActivity.kt
@@ -295,11 +295,24 @@ class MainActivity : AppCompatActivity() {
.setMessage(msg)
.setPositiveButton("Generate") { _, _ ->
thread {
- Keys.generate(this)
+ val error = try {
+ Keys.generate(this)
+ null
+ } catch (e: Exception) {
+ e.message ?: "keygen failed"
+ }
runOnUiThread {
- refresh()
- Toast.makeText(this, "New key generated.", Toast.LENGTH_SHORT).show()
- showKey()
+ if (error == null) {
+ refresh()
+ Toast.makeText(this, "New key generated.", Toast.LENGTH_SHORT).show()
+ showKey()
+ } else {
+ AlertDialog.Builder(this)
+ .setTitle("Keygen failed")
+ .setMessage(error)
+ .setPositiveButton("OK", null)
+ .show()
+ }
}
}
}