0
0
mirror of https://github.com/signalapp/libsignal.git synced 2024-09-20 20:03:07 +02:00

Convert fingerprints to use proto2 encoding

This commit is contained in:
Jack Lloyd 2020-12-18 13:03:21 -05:00
parent 2e8339e154
commit ad8e40ff7c
2 changed files with 18 additions and 18 deletions

View File

@ -83,26 +83,28 @@ impl ScannableFingerprint {
let fingerprint = proto::fingerprint::CombinedFingerprints::decode(protobuf)?;
Ok(Self {
version: fingerprint.version,
version: fingerprint.version.ok_or(SignalProtocolError::InvalidProtobufEncoding)?,
local_fingerprint: fingerprint
.local_fingerprint
.ok_or(SignalProtocolError::InvalidProtobufEncoding)?
.content,
.content
.ok_or(SignalProtocolError::InvalidProtobufEncoding)?,
remote_fingerprint: fingerprint
.remote_fingerprint
.ok_or(SignalProtocolError::InvalidProtobufEncoding)?
.content,
.content
.ok_or(SignalProtocolError::InvalidProtobufEncoding)?,
})
}
pub fn serialize(&self) -> Result<Vec<u8>> {
let combined_fingerprints = proto::fingerprint::CombinedFingerprints {
version: self.version,
version: Some(self.version),
local_fingerprint: Some(proto::fingerprint::LogicalFingerprint {
content: self.local_fingerprint.to_owned(),
content: Some(self.local_fingerprint.to_owned()),
}),
remote_fingerprint: Some(proto::fingerprint::LogicalFingerprint {
content: self.remote_fingerprint.to_owned(),
content: Some(self.remote_fingerprint.to_owned()),
}),
};
@ -114,7 +116,7 @@ impl ScannableFingerprint {
pub fn compare(&self, combined: &[u8]) -> Result<bool> {
let combined = proto::fingerprint::CombinedFingerprints::decode(combined)?;
if combined.version != self.version {
if combined.version.unwrap_or(0) != self.version {
return Err(SignalProtocolError::FingerprintVersionMismatch);
}
@ -128,12 +130,16 @@ impl ScannableFingerprint {
.as_ref()
.unwrap()
.content
.as_ref()
.ok_or(SignalProtocolError::InvalidProtobufEncoding)?
.ct_eq(&self.remote_fingerprint);
let same2 = combined
.remote_fingerprint
.as_ref()
.unwrap()
.content
.as_ref()
.ok_or(SignalProtocolError::InvalidProtobufEncoding)?
.ct_eq(&self.local_fingerprint);
Ok(same1.into() && same2.into())
@ -227,12 +233,6 @@ mod test {
let l = vec![0x12; 32];
let r = vec![0xBA; 32];
let fprint0 = ScannableFingerprint::new(0, &l, &r);
let proto0 = fprint0.serialize()?;
let expected0_encoding = "12220a20".to_owned() + &"12".repeat(32) + "1a220a20" + &"ba".repeat(32);
assert_eq!(hex::encode(proto0), expected0_encoding);
let fprint2 = ScannableFingerprint::new(2, &l, &r);
let proto2 = fprint2.serialize()?;

View File

@ -1,4 +1,4 @@
syntax = "proto3";
syntax = "proto2";
//
// Copyright 2020 Signal Messenger, LLC.
@ -8,12 +8,12 @@ syntax = "proto3";
package signal.proto.fingerprint;
message LogicalFingerprint {
bytes content = 1;
optional bytes content = 1;
// bytes identifier = 2;
}
message CombinedFingerprints {
uint32 version = 1;
LogicalFingerprint local_fingerprint = 2;
LogicalFingerprint remote_fingerprint = 3;
optional uint32 version = 1;
optional LogicalFingerprint local_fingerprint = 2;
optional LogicalFingerprint remote_fingerprint = 3;
}