Skip to content

Commit af34a23

Browse files
committed
feat: add Coldwire obfsucation protocol support
1 parent c1af592 commit af34a23

File tree

4 files changed

+29
-9
lines changed

4 files changed

+29
-9
lines changed

logic/background_worker.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ def parse_blobs(blobs: list[bytes]) -> dict:
5959
return parsed_messages
6060

6161
def background_worker(user_data, user_data_lock, ui_queue, stop_flag):
62-
# Incase we received a SMP question request last time right before the background worker was about to exit
62+
# Incase we received a SMP question request last time and user did not answer it.
6363
smp_unanswered_questions(user_data, user_data_lock, ui_queue)
6464

6565
while not stop_flag.is_set():

logic/message.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ def generate_and_send_pads(user_data, user_data_lock, contact_id: str, ui_queue)
6666

6767
our_next_strand_nonce = user_data["contacts"][contact_id]["our_next_strand_nonce"]
6868

69+
session_headers = user_data["tmp"]["session_headers"]
6970

7071
kyber_ciphertext_blob , kyber_shared_secrets = generate_shared_secrets(contact_kyber_public_key, ML_KEM_1024_NAME)
7172
mceliece_ciphertext_blob, mceliece_shared_secrets = generate_shared_secrets(contact_mceliece_public_key, CLASSIC_MCELIECE_8_F_NAME)
@@ -90,6 +91,7 @@ def generate_and_send_pads(user_data, user_data_lock, contact_id: str, ui_queue)
9091
"recipient": contact_id
9192
},
9293
blob = ciphertext_blob,
94+
headers = session_headers,
9395
auth_token = auth_token
9496
)
9597
except Exception:
@@ -130,6 +132,8 @@ def send_message_processor(user_data, user_data_lock, contact_id: str, message:
130132
server_url = user_data["server_url"]
131133
auth_token = user_data["token"]
132134

135+
session_headers = user_data["tmp"]["session_headers"]
136+
133137
contact_kyber_public_key = user_data["contacts"][contact_id]["ephemeral_keys"]["contact_public_keys"][ML_KEM_1024_NAME]
134138
contact_mceliece_public_key = user_data["contacts"][contact_id]["ephemeral_keys"]["contact_public_keys"][CLASSIC_MCELIECE_8_F_NAME]
135139

@@ -208,6 +212,7 @@ def send_message_processor(user_data, user_data_lock, contact_id: str, message:
208212
"recipient": contact_id
209213
},
210214
blob = ciphertext_blob,
215+
headers = session_headers,
211216
auth_token = auth_token
212217
)
213218
except:

logic/pfs.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,8 +73,9 @@ def send_new_ephemeral_keys(user_data: dict, user_data_lock: threading.Lock, con
7373

7474
server_url = user_data_copied["server_url"]
7575
auth_token = user_data_copied["token"]
76+
session_headers = user_data_copied["tmp"]["session_headers"]
7677

77-
our_strand_key = user_data_copied["contacts"][contact_id]["our_strand_key"]
78+
our_strand_key = user_data_copied["contacts"][contact_id]["our_strand_key"]
7879

7980
rotation_counter = user_data_copied["contacts"][contact_id]["ephemeral_keys"]["our_keys"][CLASSIC_MCELIECE_8_F_NAME]["rotation_counter"]
8081
rotate_at = user_data_copied["contacts"][contact_id]["ephemeral_keys"]["our_keys"][CLASSIC_MCELIECE_8_F_NAME]["rotate_at"]
@@ -119,7 +120,8 @@ def send_new_ephemeral_keys(user_data: dict, user_data_lock: threading.Lock, con
119120
http_request(f"{server_url}/data/send", "POST", metadata = {
120121
"recipient": contact_id
121122
},
122-
blob = ciphertext_blob,
123+
blob = ciphertext_blob,
124+
headers = session_headers,
123125
auth_token = auth_token
124126
)
125127
except Exception:

logic/smp.py

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -66,13 +66,18 @@ def initiate_smp(user_data: dict, user_data_lock: threading.Lock, contact_id: st
6666
with user_data_lock:
6767
server_url = user_data["server_url"]
6868
auth_token = user_data["token"]
69+
session_headers = user_data["tmp"]["session_headers"]
6970

7071
kem_private_key, kem_public_key = generate_kem_keys(ML_KEM_1024_NAME)
7172

7273
try:
7374
response = http_request(f"{server_url}/data/send", "POST", metadata = {
74-
"recipient": contact_id
75-
}, blob = SMP_TYPE + kem_public_key, auth_token = auth_token)
75+
"recipient": contact_id
76+
},
77+
headers = session_headers,
78+
blob = SMP_TYPE + kem_public_key,
79+
auth_token = auth_token
80+
)
7681
except Exception as e:
7782
raise ValueError("Could not connect to server: " + str(e))
7883

@@ -106,6 +111,7 @@ def smp_step_2(user_data: dict, user_data_lock, contact_id: str, blob: bytes, ui
106111
server_url = user_data["server_url"]
107112
auth_token = user_data["token"]
108113
our_id = user_data["user_id"]
114+
session_headers = user_data["tmp"]["session_headers"]
109115

110116
contact_kem_public_key = blob
111117

@@ -131,6 +137,7 @@ def smp_step_2(user_data: dict, user_data_lock, contact_id: str, blob: bytes, ui
131137
"recipient": contact_id
132138
},
133139
blob = SMP_TYPE + key_ciphertext + ciphertext_nonce + ciphertext_blob,
140+
headers = session_headers,
134141
auth_token = auth_token
135142
)
136143

@@ -163,7 +170,8 @@ def smp_step_3(user_data: dict, user_data_lock: threading.Lock, contact_id: str,
163170
server_url = user_data["server_url"]
164171
auth_token = user_data["token"]
165172
our_id = user_data["user_id"]
166-
173+
session_headers = user_data["tmp"]["session_headers"]
174+
167175
question = user_data["contacts"][contact_id]["lt_sign_key_smp"]["question"]
168176
answer = user_data["contacts"][contact_id]["lt_sign_key_smp"]["answer"]
169177

@@ -216,7 +224,8 @@ def smp_step_3(user_data: dict, user_data_lock: threading.Lock, contact_id: str,
216224
http_request(f"{server_url}/data/send", "POST", metadata = {
217225
"recipient": contact_id
218226
},
219-
blob = ciphertext_blob,
227+
blob = ciphertext_blob,
228+
headers = session_headers,
220229
auth_token = auth_token
221230
)
222231
except Exception:
@@ -287,6 +296,7 @@ def smp_step_4_answer_provided(user_data, user_data_lock, contact_id, answer, ui
287296
with user_data_lock:
288297
server_url = user_data["server_url"]
289298
auth_token = user_data["token"]
299+
session_headers = user_data["tmp"]["session_headers"]
290300

291301
contact_signing_public_key = user_data["contacts"][contact_id]["lt_sign_keys"]["contact_public_key"]
292302
contact_kem_public_key = b64decode(user_data["contacts"][contact_id]["lt_sign_key_smp"]["contact_kem_public_key"], validate = True)
@@ -347,7 +357,8 @@ def smp_step_4_answer_provided(user_data, user_data_lock, contact_id, answer, ui
347357
http_request(f"{server_url}/data/send", "POST", metadata = {
348358
"recipient": contact_id
349359
},
350-
blob = ciphertext_blob,
360+
blob = ciphertext_blob,
361+
headers = session_headers,
351362
auth_token = auth_token
352363
)
353364
except Exception:
@@ -493,6 +504,7 @@ def smp_failure_notify_contact(user_data, user_data_lock, contact_id, ui_queue)
493504
with user_data_lock:
494505
server_url = user_data["server_url"]
495506
auth_token = user_data["token"]
507+
session_headers = user_data["tmp"]["session_headers"]
496508

497509
tmp_key = b64decode(user_data["contacts"][contact_id]["lt_sign_key_smp"]["tmp_key"])
498510

@@ -508,7 +520,8 @@ def smp_failure_notify_contact(user_data, user_data_lock, contact_id, ui_queue)
508520
http_request(f"{server_url}/data/send", "POST", metadata = {
509521
"recipient": contact_id
510522
},
511-
blob = ciphertext_nonce + ciphertext_blob,
523+
blob = ciphertext_nonce + ciphertext_blob,
524+
headers = session_headers,
512525
auth_token = auth_token
513526
)
514527
except Exception as e:

0 commit comments

Comments
 (0)