feat: get serial for age
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
package me.hatter.tools.tinyencrypt.config;
|
||||
|
||||
public class TinyEncryptConstant {
|
||||
public static final String VERSION = "0.6.1";
|
||||
public static final String VERSION = "0.6.2";
|
||||
|
||||
public static final String ENC_FILE_EXT = ".tinyenc";
|
||||
}
|
||||
|
||||
@@ -80,7 +80,8 @@ public class EncryptedFileUtil {
|
||||
return false;
|
||||
}
|
||||
final String ageCli = StringUtil.def(config.getAgeCli(), "age");
|
||||
final Optional<byte[]> dataKeyOpt = AgeCliUtil.decryptBytes(ageCli, meta.getAgeRecipient(), meta.getAgeEnvelop());
|
||||
final Optional<String> serialOpt = CardCliUtil.getSerial(config.getCardCli());
|
||||
final Optional<byte[]> dataKeyOpt = AgeCliUtil.decryptBytes(ageCli, meta.getAgeRecipient(), meta.getAgeEnvelop(), serialOpt);
|
||||
if (!dataKeyOpt.isPresent()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -13,11 +13,11 @@ public class AgeCliUtil {
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
System.out.println(
|
||||
decryptBytes("age", "age1yubikey1qtwna67eqmyu7q9s3mpf7lkkrqzdrnqazdfdjftmv2qercy0cdchc7jcpu5", "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHBpdi1wMjU2IHFNWDVVUSBBNGMwMTl3\neXhQSXQ1dnhxSzFUNk4rNlJ6QkJCcnJqazZzTVAzcS9sSktyRQpBOXNQSVFudDBQ\nd2kyMFpySGxIUS8yemVwdkJxdEpoZHl3NTJuUzFaTjJJCi0tLSBwbW45LzUyem9j\nZWpROUFRT2huVDArS2hjaWFBeVd4S0xaTzh5eFo5QlhRCo2zDaVK/7YuOShVT0iw\n43LFOEP3T9v53YKhuUqjmm+6af93U2H/ppZVZluXrYPpR6+WHL4vdxflExP4yH1e\n8C+hFKSSdvxQe7cE8lHG\n-----END AGE ENCRYPTED FILE-----")
|
||||
decryptBytes("age", "age1yubikey1qtwna67eqmyu7q9s3mpf7lkkrqzdrnqazdfdjftmv2qercy0cdchc7jcpu5", "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHBpdi1wMjU2IHFNWDVVUSBBNGMwMTl3\neXhQSXQ1dnhxSzFUNk4rNlJ6QkJCcnJqazZzTVAzcS9sSktyRQpBOXNQSVFudDBQ\nd2kyMFpySGxIUS8yemVwdkJxdEpoZHl3NTJuUzFaTjJJCi0tLSBwbW45LzUyem9j\nZWpROUFRT2huVDArS2hjaWFBeVd4S0xaTzh5eFo5QlhRCo2zDaVK/7YuOShVT0iw\n43LFOEP3T9v53YKhuUqjmm+6af93U2H/ppZVZluXrYPpR6+WHL4vdxflExP4yH1e\n8C+hFKSSdvxQe7cE8lHG\n-----END AGE ENCRYPTED FILE-----", Optional.empty())
|
||||
);
|
||||
}
|
||||
|
||||
public static Optional<byte[]> decryptBytes(String ageCli, String ageRecipient, String ageEnvelop) {
|
||||
public static Optional<byte[]> decryptBytes(String ageCli, String ageRecipient, String ageEnvelop, Optional<String> serialOpt) {
|
||||
AssertUtil.notEmpty(ageCli, "Age-cli cannot be empty");
|
||||
AssertUtil.notEmpty(ageRecipient, "Age-recipient cannot be empty");
|
||||
AssertUtil.isTrue(ageRecipient.matches("^[a-zA-Z0-9]+$"), "Age-recipient illegal");
|
||||
@@ -25,7 +25,12 @@ public class AgeCliUtil {
|
||||
AssertUtil.isFalse(ageEnvelop.contains("'"), "Age-envelop cannot contains `'`");
|
||||
AssertUtil.isTrue(ageEnvelop.matches("^[\\-/+=\\n\\r\\sa-zA-Z0-9]+$"), "Age-envelop illegal");
|
||||
|
||||
final RFile recipientAgeFile = RFile.fromUserHome(".tinyencrypt/" + ageRecipient + ".age");
|
||||
final RFile recipientAgeFileWithoutSerial = RFile.fromUserHome(".tinyencrypt/" + ageRecipient + ".age");
|
||||
final RFile recipientAgeFileWithSerial = serialOpt.map(s -> RFile.fromUserHome(".tinyencrypt/" + ageRecipient + ".age." + s)).orElse(null);
|
||||
|
||||
final RFile recipientAgeFile = (recipientAgeFileWithSerial != null && recipientAgeFileWithSerial.isFile())
|
||||
? recipientAgeFileWithSerial : recipientAgeFileWithoutSerial;
|
||||
|
||||
AssertUtil.isTrue(recipientAgeFile.isFile(), "Age key file required");
|
||||
|
||||
final ProcessBuilder pb = new ProcessBuilder(
|
||||
|
||||
@@ -25,6 +25,25 @@ public class CardCliUtil {
|
||||
return Optional.of(new String(pin));
|
||||
}
|
||||
|
||||
public static Optional<String> getSerial(String cardCli) {
|
||||
if (StringUtil.isEmpty(cardCli)) {
|
||||
throw new JumpOutException("Card-cli is empty!");
|
||||
}
|
||||
final ProcessBuilder pb = new ProcessBuilder(
|
||||
cardCli,
|
||||
"list",
|
||||
"--json");
|
||||
log.info("Start: " + cardCli);
|
||||
|
||||
final Optional<String> outputsOpt = runProcess(pb);
|
||||
|
||||
if ((!outputsOpt.isPresent()) || outputsOpt.get().trim().isEmpty()) {
|
||||
return Optional.empty();
|
||||
}
|
||||
final JSONObject jo = JSON.parseObject(outputsOpt.get());
|
||||
return Optional.of(jo.getString("serial"));
|
||||
}
|
||||
|
||||
public static Optional<byte[]> getChall(String cardCli, String challenge) {
|
||||
if (StringUtil.isEmpty(cardCli)) {
|
||||
throw new JumpOutException("Card-cli is empty!");
|
||||
|
||||
Reference in New Issue
Block a user