summaryrefslogtreecommitdiffstats
path: root/config-provisioning/src/main/java/com/yahoo/config/provision/WireguardKey.java
diff options
context:
space:
mode:
Diffstat (limited to 'config-provisioning/src/main/java/com/yahoo/config/provision/WireguardKey.java')
-rw-r--r--config-provisioning/src/main/java/com/yahoo/config/provision/WireguardKey.java30
1 files changed, 30 insertions, 0 deletions
diff --git a/config-provisioning/src/main/java/com/yahoo/config/provision/WireguardKey.java b/config-provisioning/src/main/java/com/yahoo/config/provision/WireguardKey.java
new file mode 100644
index 00000000000..4df6d402ce3
--- /dev/null
+++ b/config-provisioning/src/main/java/com/yahoo/config/provision/WireguardKey.java
@@ -0,0 +1,30 @@
+package com.yahoo.config.provision;
+
+import ai.vespa.validation.PatternedStringWrapper;
+
+import java.util.regex.Pattern;
+
+/**
+ * Wraps a Wireguard key.
+ * For security reasons, this should only be used for public keys, although private keys use the same format.
+ *
+ * @author gjoranv
+ */
+public class WireguardKey extends PatternedStringWrapper<WireguardKey> {
+
+ // See https://lists.zx2c4.com/pipermail/wireguard/2020-December/006222.html
+ private static final Pattern pattern = Pattern.compile("^[A-Za-z0-9+/]{42}[A|E|I|M|Q|U|Y|c|g|k|o|s|w|4|8|0]=$");
+
+ public WireguardKey(String value) {
+ super(value, pattern, "Wireguard key");
+ }
+
+ public static WireguardKey from(String value) {
+ return new WireguardKey(value);
+ }
+
+ @Override
+ public String toString() {
+ return "Wireguard key '" + value() + "'";
+ }
+}