diff --git a/core/conversations/src/conversation/group_v2.rs b/core/conversations/src/conversation/group_v2.rs index dde0723..fb00d0d 100644 --- a/core/conversations/src/conversation/group_v2.rs +++ b/core/conversations/src/conversation/group_v2.rs @@ -465,7 +465,6 @@ impl GroupV2Convo { convo_id: self.convo_id.clone(), content: Some(Content { bytes: cm.message.clone(), - // D encoded_credential: cred, }), }) diff --git a/core/conversations/src/conversation/privatev1.rs b/core/conversations/src/conversation/privatev1.rs index 62d1e1f..a8a9054 100644 --- a/core/conversations/src/conversation/privatev1.rs +++ b/core/conversations/src/conversation/privatev1.rs @@ -197,7 +197,7 @@ impl PrivateV1Convo { fn handle_content(&self, bytes: Bytes) -> Content { Content { bytes: bytes.into(), - encoded_credential: vec![114, 114], + encoded_credential: vec![], } } diff --git a/crates/client/src/client.rs b/crates/client/src/client.rs index 95b99aa..e0bc0db 100644 --- a/crates/client/src/client.rs +++ b/crates/client/src/client.rs @@ -313,9 +313,12 @@ fn convo_events(outcome: ConvoOutcome) -> Vec { let ConvoOutcome { convo_id, content } = outcome; content .map(|c| { - let data = hex::decode(c.encoded_credential).unwrap(); - let delegate_cred = DelegateCredential::from(data); - println!("{:?}", delegate_cred); + if let Ok(data) = hex::decode(c.encoded_credential) { + if let Ok(delegate_cred) = DelegateCredential::try_from(data) { + println!("{:?}", delegate_cred); + // TODO: Integration Point + } + } Event::MessageReceived { convo_id: Arc::from(convo_id), diff --git a/crates/client/src/delegate.rs b/crates/client/src/delegate.rs index 5b2ae3c..fd676f5 100644 --- a/crates/client/src/delegate.rs +++ b/crates/client/src/delegate.rs @@ -100,9 +100,13 @@ impl From for Vec { } } -impl From> for DelegateCredential { - fn from(value: Vec) -> Self { - assert_eq!(&value[..2], &[0x23, 0x23], "invalid magic bytes"); +impl TryFrom> for DelegateCredential { + type Error = ClientError; + + fn try_from(value: Vec) -> Result { + if value.get(..2) != Some(&[0x23, 0x23]) { + return Err(ClientError::BadlyFormedCredential); + } let mut delegate_id = None; let mut account_addr = None; let mut i = 2; @@ -110,26 +114,33 @@ impl From> for DelegateCredential { let tag = value[i]; let len = value[i + 1] as usize; i += 2; - let v = &value[i..i + len]; + let v = value + .get(i..i + len) + .ok_or(ClientError::BadlyFormedCredential)?; i += len; match tag { DelegateCredential::TAG_DELEGATE_ID => { - let bytes: &[u8; 32] = v.try_into().expect("invalid delegate_id length"); + let bytes: &[u8; 32] = v + .try_into() + .map_err(|_| ClientError::BadlyFormedCredential)?; delegate_id = Some( - Ed25519VerifyingKey::from_bytes(bytes).expect("invalid verifying key"), + Ed25519VerifyingKey::from_bytes(bytes) + .map_err(|_| ClientError::BadlyFormedCredential)?, ); } DelegateCredential::TAG_ACCOUNT_ADDR => { - account_addr = - Some(String::from_utf8(v.to_vec()).expect("invalid account_addr utf8")); + account_addr = Some( + String::from_utf8(v.to_vec()) + .map_err(|_| ClientError::BadlyFormedCredential)?, + ); } _ => {} } } - Self { - delegate_id: delegate_id.expect("missing delegate_id TLV field"), + Ok(Self { + delegate_id: delegate_id.ok_or(ClientError::BadlyFormedCredential)?, account_addr, - } + }) } } @@ -143,8 +154,8 @@ impl TryFrom for DelegateCredential { type Error = ClientError; fn try_from(value: IdentId) -> Result { - Ok(hex::decode(value.as_str()) - .map_err(|e| ClientError::BadlyFormedCredential)? - .into()) + hex::decode(value.as_str()) + .map_err(|_| ClientError::BadlyFormedCredential)? + .try_into() } }