Merged multi-admin

This commit is contained in:
Marcel 2023-01-11 13:35:25 +01:00
parent 31034f6e89
commit 2b4919bb56
7 changed files with 31 additions and 37 deletions

View file

@ -39,7 +39,7 @@ fn main() {
};
let dev_att = Box::new(dev_att::HardCodedDevAtt::new());
let mut matter = core::Matter::new(&dev_info, dev_att, &comm_data).unwrap();
let mut matter = core::Matter::new(&dev_info, dev_att, comm_data).unwrap();
let dm = matter.get_data_model();
{
let mut node = dm.node.write().unwrap();

View file

@ -26,7 +26,7 @@ use crate::{
interaction_model::InteractionModel,
mdns::Mdns,
pairing::print_pairing_code_and_qr,
secure_channel::core::SecureChannel,
secure_channel::{core::SecureChannel, pake::PaseMgr, spake2p::VerifierData},
transport,
};
use std::sync::Arc;
@ -56,17 +56,12 @@ impl Matter {
pub fn new(
dev_det: &BasicInfoConfig,
dev_att: Box<dyn DevAttDataFetcher>,
dev_comm: &CommissioningData,
dev_comm: CommissioningData,
) -> Result<Box<Matter>, Error> {
let mdns = Mdns::get()?;
mdns.set_values(
dev_det.vid,
dev_det.pid,
dev_comm.discriminator,
&dev_det.device_name,
);
mdns.set_values(dev_det.vid, dev_det.pid, &dev_det.device_name);
print_pairing_code_and_qr(dev_det, dev_comm);
print_pairing_code_and_qr(dev_det, &dev_comm);
let fabric_mgr = Arc::new(FabricMgr::new()?);
let acl_mgr = Arc::new(AclMgr::new()?);

View file

@ -381,7 +381,7 @@ impl FabricMgr {
pub fn set_label(&self, index: u8, label: String) -> Result<(), Error> {
let index = index as usize;
let mut mgr = self.inner.write()?;
if label != "" {
if !label.is_empty() {
for i in 1..MAX_SUPPORTED_FABRICS {
if let Some(fabric) = &mgr.fabrics[i] {
if fabric.label == label {

View file

@ -30,8 +30,6 @@ pub struct MdnsInner {
vid: u16,
/// Product ID
pid: u16,
/// Discriminator
discriminator: u16,
/// Device name
device_name: String,
}
@ -75,11 +73,10 @@ impl Mdns {
/// Set mDNS service specific values
/// Values like vid, pid, discriminator etc
// TODO: More things like device-type etc can be added here
pub fn set_values(&self, vid: u16, pid: u16, discriminator: u16, device_name: &str) {
pub fn set_values(&self, vid: u16, pid: u16, device_name: &str) {
let mut inner = self.inner.lock().unwrap();
inner.vid = vid;
inner.pid = pid;
inner.discriminator = discriminator;
inner.device_name = device_name.chars().take(32).collect();
}
@ -92,12 +89,12 @@ impl Mdns {
ServiceMode::Commissioned => {
sys_publish_service(name, "_matter._tcp", MATTER_PORT, &[])
}
ServiceMode::Commissionable => {
ServiceMode::Commissionable(discriminator) => {
let inner = self.inner.lock().unwrap();
let short = compute_short_discriminator(inner.discriminator);
let serv_type = format!("_matterc._udp,_S{},_L{}", short, inner.discriminator);
let short = compute_short_discriminator(discriminator);
let serv_type = format!("_matterc._udp,_S{},_L{}", short, discriminator);
let str_discriminator = format!("{}", inner.discriminator);
let str_discriminator = format!("{}", discriminator);
let txt_kvs = [
["D", &str_discriminator],
["CM", "1"],

View file

@ -23,7 +23,7 @@ use verhoeff::Verhoeff;
use crate::{
codec::base38, data_model::cluster_basic_information::BasicInfoConfig, error::Error,
CommissioningData,
secure_channel::spake2p::VerifierOption, CommissioningData,
};
const LONG_BITS: usize = 12;
@ -130,10 +130,15 @@ fn compute_pairing_code(comm_data: &CommissioningData) -> String {
let CommissioningData {
discriminator,
passwd,
verifier,
..
} = comm_data;
let passwd = match verifier.data {
VerifierOption::Password(pwd) => pwd,
VerifierOption::Verifier(_) => todo!(),
};
let mut digits = String::new();
digits.push_str(&((VID_PID_PRESENT << 2) | (discriminator >> 10) as u8).to_string());
digits.push_str(&format!(
@ -233,6 +238,11 @@ fn generate_bit_set(
return Err(Error::BufferTooSmall);
};
let passwd = match payload.comm_data.verifier.data {
VerifierOption::Password(pwd) => pwd,
VerifierOption::Verifier(_) => todo!(),
};
const VERSION: u64 = 0;
populate_bits(
bits,
@ -285,7 +295,7 @@ fn generate_bit_set(
populate_bits(
bits,
&mut offset,
payload.comm_data.passwd as u64,
passwd as u64,
SETUP_PINCODE_FIELD_LENGTH_IN_BITS,
total_payload_size_in_bits,
)?;
@ -306,22 +316,22 @@ fn generate_bit_set(
#[cfg(test)]
mod tests {
use crate::secure_channel::spake2p::VerifierData;
use super::*;
#[test]
fn can_compute_pairing_code() {
let comm_data = CommissioningData {
passwd: 123456,
verifier: VerifierData::new_with_pw(123456),
discriminator: 250,
..Default::default()
};
let pairing_code = compute_pairing_code(&comm_data);
assert_eq!(pairing_code, "00876800071");
let comm_data = CommissioningData {
passwd: 34567890,
verifier: VerifierData::new_with_pw(34567890),
discriminator: 2976,
..Default::default()
};
let pairing_code = compute_pairing_code(&comm_data);
assert_eq!(pairing_code, "26318621095");
@ -332,9 +342,8 @@ mod tests {
const QR_CODE: &str = "MT:YNJV7VSC00CMVH7SR00";
let comm_data = CommissioningData {
passwd: 34567890,
verifier: VerifierData::new_with_pw(34567890),
discriminator: 2976,
..Default::default()
};
let dev_det = BasicInfoConfig {
vid: 9050,

View file

@ -115,7 +115,7 @@ impl CryptoSpake2 for CryptoMbedTLS {
}
fn set_L(&mut self, l: &[u8]) -> Result<(), Error> {
self.L = EcPoint::from_binary(&mut self.group, l)?;
self.L = EcPoint::from_binary(&self.group, l)?;
Ok(())
}

View file

@ -106,14 +106,7 @@ impl ImEngine {
// Only allow the standard peer node id of the IM Engine
default_acl.add_subject(IM_ENGINE_PEER_ID).unwrap();
acl_mgr.add(default_acl).unwrap();
let dm = DataModel::new(
dev_det,
dev_att,
fabric_mgr.clone(),
acl_mgr.clone(),
pase_mgr,
)
.unwrap();
let dm = DataModel::new(&dev_det, dev_att, fabric_mgr, acl_mgr.clone(), pase_mgr).unwrap();
{
let mut d = dm.node.write().unwrap();