Skip to content

Commit 1fd46c3

Browse files
committed
Adding test vectors for PSK
Fixing unused variables Fixing lakers-c and lakers-python Adding FIXME for error declaration Fixing coap examples Matching in edhoc.rs instead of edhoc/psk.rs
1 parent 0c8e163 commit 1fd46c3

8 files changed

Lines changed: 652 additions & 307 deletions

File tree

crypto/lakers-crypto-psa/src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ impl CryptoTrait for Crypto {
8888
output
8989
}
9090

91+
// added for PSK
9192
fn hkdf_extract_psk(&mut self, salt: &BytesHashLen, ikm: &BytesElemLenPSK) -> BytesHashLen {
9293
// TODO
9394
// TODO generalize if salt is not provided

examples/coap/src/bin/coapclient.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,8 @@ fn client_handshake() -> Result<(), EDHOCError> {
5454
println!("message_2 len = {}", response.message.payload.len());
5555

5656
let message_2 = EdhocBuffer::new_from_slice(&response.message.payload[..]).unwrap();
57-
let (mut initiator, c_r, details) = initiator.parse_message_2(&message_2)?;
58-
let ParsedMessage2Details::StatStat { id_cred_r, ead_2 } = details else {
57+
let (mut initiator, c_r, details, ead_2) = initiator.parse_message_2(&message_2)?;
58+
let ParsedMessage2Details::StatStat { id_cred_r } = details else {
5959
return Err(EDHOCError::UnsupportedMethod);
6060
};
6161
ead_2.processed_critical_items().unwrap();

lakers-c/src/lib.rs

Lines changed: 38 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -106,9 +106,7 @@ pub struct ProcessingM2StatStatC {
106106
}
107107

108108
#[repr(C)]
109-
pub struct ProcessingM2PskC {
110-
pub id_cred_r: IdCred,
111-
}
109+
pub struct ProcessingM2PskC {}
112110

113111
#[repr(C)]
114112
pub union ProcessingM2MethodSpecificsDataC {
@@ -170,12 +168,7 @@ impl ProcessingM2C {
170168
id_cred_r: stat.id_cred_r.clone(),
171169
}
172170
}
173-
ProcessingM2MethodSpecificsKindC::Pm2Psk => {
174-
let psk = unsafe { &self.method_specifics.data.psk };
175-
ProcessingM2MethodSpecifics::Psk {
176-
id_cred_r: psk.id_cred_r.clone(),
177-
}
178-
}
171+
ProcessingM2MethodSpecificsKindC::Pm2Psk => ProcessingM2MethodSpecifics::Psk {},
179172
};
180173

181174
ProcessingM2 {
@@ -218,15 +211,14 @@ impl ProcessingM2C {
218211
},
219212
};
220213
}
221-
ProcessingM2MethodSpecifics::Psk {} => todo!(), // (*processing_m2_c).method_specifics = ProcessingM2MethodSpecificsC {
222-
// kind: ProcessingM2MethodSpecificsKindC::Pm2Psk,
223-
// data: ProcessingM2MethodSpecificsDataC {
224-
// psk: core::mem::ManuallyDrop::new(ProcessingM2PskC) {
225-
// id_cred_r: id_cred_r,
226-
// }),
227-
// },
228-
// };
229-
// }
214+
ProcessingM2MethodSpecifics::Psk {} => {
215+
(*processing_m2_c).method_specifics = ProcessingM2MethodSpecificsC {
216+
kind: ProcessingM2MethodSpecificsKindC::Pm2Psk,
217+
data: ProcessingM2MethodSpecificsDataC {
218+
psk: core::mem::ManuallyDrop::new(ProcessingM2PskC {}),
219+
},
220+
};
221+
}
230222
}
231223
}
232224
}
@@ -264,14 +256,20 @@ impl CredentialC {
264256
#[repr(C)]
265257
pub enum ProcessedM2MethodSpecificsKindC {
266258
Prm2StatStat,
267-
// Pm2Psk,
259+
Pm2Psk,
268260
}
269261
#[repr(C)]
270262
pub struct ProcessedM2StatStatC {}
271263

264+
#[repr(C)]
265+
pub struct ProcessedM2PskC {
266+
cred_r: CredentialC,
267+
}
268+
272269
#[repr(C)]
273270
pub union ProcessedM2MethodSpecificsDataC {
274271
pub statstat: core::mem::ManuallyDrop<ProcessedM2StatStatC>,
272+
pub psk: core::mem::ManuallyDrop<ProcessedM2PskC>,
275273
}
276274

277275
#[repr(C)]
@@ -309,10 +307,16 @@ impl ProcessedM2C {
309307
let method_specifics = match self.method_specifics.kind {
310308
ProcessedM2MethodSpecificsKindC::Prm2StatStat => {
311309
ProcessedM2MethodSpecifics::StatStat {}
312-
} // ProcessedM2MethodSpecificsKindC::Prm2Psk => {
313-
// let psk = unsafe { &self.method_specifics.data.psk };
314-
// ProcessedM2MethodSpecifics::Psk { ...from psk... }
315-
// }
310+
}
311+
ProcessedM2MethodSpecificsKindC::Pm2Psk => {
312+
// SAFETY: Accessing a union field is unsafe. We just matched on
313+
// `self.method_specifics.kind == ProcessedM2MethodSpecificsKindC::Pm2Psk`,
314+
// so `data.psk` is the active variant.
315+
let psk = unsafe { &self.method_specifics.data.psk };
316+
ProcessedM2MethodSpecifics::Psk {
317+
cred_r: psk.cred_r.to_rust(),
318+
}
319+
}
316320
};
317321

318322
ProcessedM2 {
@@ -341,6 +345,17 @@ impl ProcessedM2C {
341345
},
342346
};
343347
}
348+
ProcessedM2MethodSpecifics::Psk { cred_r } => {
349+
let mut cred_r_c = core::mem::MaybeUninit::<CredentialC>::uninit();
350+
CredentialC::copy_into_c(cred_r, cred_r_c.as_mut_ptr());
351+
let cred_r_c = cred_r_c.assume_init();
352+
(*processed_m2_c).method_specifics = ProcessedM2MethodSpecificsC {
353+
kind: ProcessedM2MethodSpecificsKindC::Pm2Psk,
354+
data: ProcessedM2MethodSpecificsDataC {
355+
psk: core::mem::ManuallyDrop::new(ProcessedM2PskC { cred_r: cred_r_c }),
356+
},
357+
};
358+
}
344359
}
345360
}
346361
}

0 commit comments

Comments
 (0)