aboutsummaryrefslogtreecommitdiffstats
path: root/WireGuard/Shared/Model/Data+KeyEncoding.swift
diff options
context:
space:
mode:
Diffstat (limited to 'WireGuard/Shared/Model/Data+KeyEncoding.swift')
-rw-r--r--WireGuard/Shared/Model/Data+KeyEncoding.swift54
1 files changed, 54 insertions, 0 deletions
diff --git a/WireGuard/Shared/Model/Data+KeyEncoding.swift b/WireGuard/Shared/Model/Data+KeyEncoding.swift
new file mode 100644
index 0000000..a1abdd7
--- /dev/null
+++ b/WireGuard/Shared/Model/Data+KeyEncoding.swift
@@ -0,0 +1,54 @@
+// SPDX-License-Identifier: MIT
+// Copyright © 2018-2019 WireGuard LLC. All Rights Reserved.
+
+import Foundation
+
+extension Data {
+ func isKey() -> Bool {
+ return self.count == WG_KEY_LEN
+ }
+
+ func hexKey() -> String? {
+ if self.count != WG_KEY_LEN {
+ return nil
+ }
+ var out = Data(repeating: 0, count: Int(WG_KEY_LEN_HEX))
+ out.withUnsafeMutableBytes { outBytes in
+ self.withUnsafeBytes { inBytes in
+ key_to_hex(outBytes, inBytes)
+ }
+ }
+ out.removeLast()
+ return String(data: out, encoding: .ascii)
+ }
+
+ init?(hexKey hexString: String) {
+ self.init(repeating: 0, count: Int(WG_KEY_LEN))
+
+ if !self.withUnsafeMutableBytes { key_from_hex($0, hexString) } {
+ return nil
+ }
+ }
+
+ func base64Key() -> String? {
+ if self.count != WG_KEY_LEN {
+ return nil
+ }
+ var out = Data(repeating: 0, count: Int(WG_KEY_LEN_BASE64))
+ out.withUnsafeMutableBytes { outBytes in
+ self.withUnsafeBytes { inBytes in
+ key_to_base64(outBytes, inBytes)
+ }
+ }
+ out.removeLast()
+ return String(data: out, encoding: .ascii)
+ }
+
+ init?(base64Key base64String: String) {
+ self.init(repeating: 0, count: Int(WG_KEY_LEN))
+
+ if !self.withUnsafeMutableBytes { key_from_base64($0, base64String) } {
+ return nil
+ }
+ }
+}