Compare commits
3 Commits
e04447a140
...
9beb2e423e
Author | SHA1 | Date | |
---|---|---|---|
|
9beb2e423e | ||
|
efc68ad803 | ||
|
9444917186 |
BIN
Banner.key
Executable file
BIN
Banner.key
Executable file
Binary file not shown.
@ -8,6 +8,9 @@ struct ContentView: View {
|
|||||||
@AppStorage("counter")
|
@AppStorage("counter")
|
||||||
var nextMessageCounter: Int = 0
|
var nextMessageCounter: Int = 0
|
||||||
|
|
||||||
|
@AppStorage("compensate")
|
||||||
|
var isCompensatingDaylightTime: Bool = false
|
||||||
|
|
||||||
@State
|
@State
|
||||||
var keyManager = KeyManagement()
|
var keyManager = KeyManagement()
|
||||||
|
|
||||||
@ -31,6 +34,10 @@ struct ContentView: View {
|
|||||||
@State
|
@State
|
||||||
private var showHistorySheet = false
|
private var showHistorySheet = false
|
||||||
|
|
||||||
|
var compensationTime: UInt32 {
|
||||||
|
isCompensatingDaylightTime ? 3600 : 0
|
||||||
|
}
|
||||||
|
|
||||||
var isPerformingRequests: Bool {
|
var isPerformingRequests: Bool {
|
||||||
hasActiveRequest ||
|
hasActiveRequest ||
|
||||||
state == .waitingForResponse
|
state == .waitingForResponse
|
||||||
@ -109,7 +116,7 @@ struct ContentView: View {
|
|||||||
.frame(width: geo.size.width, height: geo.size.height)
|
.frame(width: geo.size.width, height: geo.size.height)
|
||||||
.animation(.easeInOut, value: state.color)
|
.animation(.easeInOut, value: state.color)
|
||||||
.sheet(isPresented: $showKeySheet) {
|
.sheet(isPresented: $showKeySheet) {
|
||||||
KeyView(keyManager: $keyManager)
|
KeyView(keyManager: $keyManager, isCompensatingDaylightTime: $isCompensatingDaylightTime)
|
||||||
}
|
}
|
||||||
.sheet(isPresented: $showHistorySheet) {
|
.sheet(isPresented: $showHistorySheet) {
|
||||||
HistoryView(manager: history)
|
HistoryView(manager: history)
|
||||||
@ -126,8 +133,9 @@ struct ContentView: View {
|
|||||||
|
|
||||||
let count = UInt32(nextMessageCounter)
|
let count = UInt32(nextMessageCounter)
|
||||||
let sentTime = Date()
|
let sentTime = Date()
|
||||||
|
// Add time to compensate that the device is using daylight savings time
|
||||||
let content = Message.Content(
|
let content = Message.Content(
|
||||||
time: sentTime.timestamp,
|
time: sentTime.timestamp + compensationTime,
|
||||||
id: count)
|
id: count)
|
||||||
let message = content.authenticate(using: key)
|
let message = content.authenticate(using: key)
|
||||||
let historyItem = HistoryItem(sent: message, date: sentTime)
|
let historyItem = HistoryItem(sent: message, date: sentTime)
|
||||||
@ -139,7 +147,6 @@ struct ContentView: View {
|
|||||||
responseTime = receivedTime
|
responseTime = receivedTime
|
||||||
state = newState
|
state = newState
|
||||||
let finishedItem = historyItem.didReceive(response: newState, date: receivedTime, message: message)
|
let finishedItem = historyItem.didReceive(response: newState, date: receivedTime, message: message)
|
||||||
print("Interval: \(receivedTime.timeIntervalSince(sentTime))", "\(finishedItem.roundTripTime ?? -1)")
|
|
||||||
process(item: finishedItem)
|
process(item: finishedItem)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -29,10 +29,10 @@ struct HistoryListItem: View {
|
|||||||
return startText
|
return startText
|
||||||
}
|
}
|
||||||
let diff = Int(rCounter) - Int(sentCounter)
|
let diff = Int(rCounter) - Int(sentCounter)
|
||||||
guard diff != 1 else {
|
guard diff != 1 && diff != 0 else {
|
||||||
return startText
|
return startText
|
||||||
}
|
}
|
||||||
return startText + "→\(rCounter)"
|
return startText + " (\(diff))"
|
||||||
}
|
}
|
||||||
|
|
||||||
var timeOffsetText: String {
|
var timeOffsetText: String {
|
||||||
|
@ -5,21 +5,32 @@ struct KeyView: View {
|
|||||||
@Binding
|
@Binding
|
||||||
var keyManager: KeyManagement
|
var keyManager: KeyManagement
|
||||||
|
|
||||||
|
@Binding
|
||||||
|
var isCompensatingDaylightTime: Bool
|
||||||
|
|
||||||
var body: some View {
|
var body: some View {
|
||||||
GeometryReader { geo in
|
ScrollView {
|
||||||
VStack(alignment: .leading, spacing: 16) {
|
VStack(alignment: .leading, spacing: 8) {
|
||||||
ForEach(KeyManagement.KeyType.allCases) { keyType in
|
ForEach(KeyManagement.KeyType.allCases) { keyType in
|
||||||
SingleKeyView(
|
SingleKeyView(
|
||||||
keyManager: $keyManager,
|
keyManager: $keyManager,
|
||||||
type: keyType)
|
type: keyType)
|
||||||
}
|
}
|
||||||
}.padding()
|
Toggle(isOn: $isCompensatingDaylightTime) {
|
||||||
}
|
Text("Compensate daylight savings time")
|
||||||
|
}
|
||||||
|
Text("If the remote has daylight savings time wrongly set, then the time validation will fail. Use this option to send messages with adjusted timestamps. Warning: Incorrect use of this option will allow replay attacks.")
|
||||||
|
.font(.caption)
|
||||||
|
.foregroundColor(.secondary)
|
||||||
|
}.padding()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
struct KeyView_Previews: PreviewProvider {
|
struct KeyView_Previews: PreviewProvider {
|
||||||
static var previews: some View {
|
static var previews: some View {
|
||||||
KeyView(keyManager: .constant(KeyManagement()))
|
KeyView(
|
||||||
|
keyManager: .constant(KeyManagement()),
|
||||||
|
isCompensatingDaylightTime: .constant(true))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -45,13 +45,15 @@ struct SingleKeyView: View {
|
|||||||
keyManager.generate(type)
|
keyManager.generate(type)
|
||||||
needRefresh.toggle()
|
needRefresh.toggle()
|
||||||
}
|
}
|
||||||
.padding()
|
.padding([.horizontal, .bottom])
|
||||||
|
.padding(.top, 4)
|
||||||
|
|
||||||
Button(type.usesHashing ? "Copy hash" : "Copy") {
|
Button(type.usesHashing ? "Copy hash" : "Copy") {
|
||||||
UIPasteboard.general.string = copyText
|
UIPasteboard.general.string = copyText
|
||||||
}
|
}
|
||||||
.disabled(!hasKey)
|
.disabled(!hasKey)
|
||||||
.padding()
|
.padding([.horizontal, .bottom])
|
||||||
|
.padding(.top, 4)
|
||||||
Spacer()
|
Spacer()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user