return nil
}
var out = Data(repeating: 0, count: Int(WG_KEY_LEN_HEX))
- out.withUnsafeMutableBytes { outBytes in
- self.withUnsafeBytes { inBytes in
+ out.withUnsafeMutableInt8Bytes { outBytes in
+ self.withUnsafeUInt8Bytes { inBytes in
key_to_hex(outBytes, inBytes)
}
}
init?(hexKey hexString: String) {
self.init(repeating: 0, count: Int(WG_KEY_LEN))
- if !self.withUnsafeMutableBytes { key_from_hex($0, hexString) } {
+ if !self.withUnsafeMutableUInt8Bytes { key_from_hex($0, hexString) } {
return nil
}
}
return nil
}
var out = Data(repeating: 0, count: Int(WG_KEY_LEN_BASE64))
- out.withUnsafeMutableBytes { outBytes in
- self.withUnsafeBytes { inBytes in
+ out.withUnsafeMutableInt8Bytes { outBytes in
+ self.withUnsafeUInt8Bytes { inBytes in
key_to_base64(outBytes, inBytes)
}
}
init?(base64Key base64String: String) {
self.init(repeating: 0, count: Int(WG_KEY_LEN))
- if !self.withUnsafeMutableBytes { key_from_base64($0, base64String) } {
+ if !self.withUnsafeMutableUInt8Bytes { key_from_base64($0, base64String) } {
return nil
}
}
}
+
+extension Data {
+ func withUnsafeUInt8Bytes<R>(_ body: (UnsafePointer<UInt8>) -> R) -> R {
+ assert(!isEmpty)
+ return self.withUnsafeBytes { (ptr: UnsafeRawBufferPointer) -> R in
+ let bytes = ptr.bindMemory(to: UInt8.self)
+ return body(bytes.baseAddress!) // might crash if self.count == 0
+ }
+ }
+
+ mutating func withUnsafeMutableUInt8Bytes<R>(_ body: (UnsafeMutablePointer<UInt8>) -> R) -> R {
+ assert(!isEmpty)
+ return self.withUnsafeMutableBytes { (ptr: UnsafeMutableRawBufferPointer) -> R in
+ let bytes = ptr.bindMemory(to: UInt8.self)
+ return body(bytes.baseAddress!) // might crash if self.count == 0
+ }
+ }
+
+ mutating func withUnsafeMutableInt8Bytes<R>(_ body: (UnsafeMutablePointer<Int8>) -> R) -> R {
+ assert(!isEmpty)
+ return self.withUnsafeMutableBytes { (ptr: UnsafeMutableRawBufferPointer) -> R in
+ let bytes = ptr.bindMemory(to: Int8.self)
+ return body(bytes.baseAddress!) // might crash if self.count == 0
+ }
+ }
+}
static func generatePrivateKey() -> Data {
var privateKey = Data(repeating: 0, count: TunnelConfiguration.keyLength)
- privateKey.withUnsafeMutableBytes { bytes in
+ privateKey.withUnsafeMutableUInt8Bytes { bytes in
curve25519_generate_private_key(bytes)
}
assert(privateKey.count == TunnelConfiguration.keyLength)
static func generatePublicKey(fromPrivateKey privateKey: Data) -> Data {
assert(privateKey.count == TunnelConfiguration.keyLength)
var publicKey = Data(repeating: 0, count: TunnelConfiguration.keyLength)
- privateKey.withUnsafeBytes { privateKeyBytes in
- publicKey.withUnsafeMutableBytes { bytes in
+ privateKey.withUnsafeUInt8Bytes { privateKeyBytes in
+ publicKey.withUnsafeMutableUInt8Bytes { bytes in
curve25519_derive_public_key(bytes, privateKeyBytes)
}
}
completionHandler(tunnelConfiguration)
return
}
- guard nil != (try? session.sendProviderMessage(Data(bytes: [ 0 ]), responseHandler: {
+ guard nil != (try? session.sendProviderMessage(Data([ UInt8(0) ]), responseHandler: {
guard self.status != .inactive, let data = $0, let base = self.tunnelConfiguration, let settings = String(data: data, encoding: .utf8) else {
completionHandler(self.tunnelConfiguration)
return
let fileName = input.fileName
let contents = input.contents
zipOpenNewFileInZip(zipFile, fileName.cString(using: .utf8), nil, nil, 0, nil, 0, nil, Z_DEFLATED, Z_DEFAULT_COMPRESSION)
- contents.withUnsafeBytes { (ptr: UnsafePointer<UInt8>) -> Void in
+ contents.withUnsafeUInt8Bytes { ptr -> Void in
zipWriteInFileInZip(zipFile, UnsafeRawPointer(ptr), UInt32(contents.count))
}
zipCloseFileInZip(zipFile)