pr fixes
This commit is contained in:
@@ -110,16 +110,6 @@ impl RPCProcessor {
|
||||
}
|
||||
}?;
|
||||
|
||||
if !matches!(next_private_route.hops, PrivateRouteHops::Empty) {
|
||||
// Sign the operation if this is not our last hop
|
||||
// as the last hop is already signed by the envelope
|
||||
let node_id = self.routing_table.node_id();
|
||||
let node_id_secret = self.routing_table.node_id_secret();
|
||||
let sig = sign(&node_id, &node_id_secret, &routed_operation.data)
|
||||
.map_err(RPCError::internal)?;
|
||||
routed_operation.signatures.push(sig);
|
||||
}
|
||||
|
||||
// Pass along the route
|
||||
let next_hop_route = RPCOperationRoute {
|
||||
safety_route: SafetyRoute {
|
||||
@@ -313,7 +303,7 @@ impl RPCProcessor {
|
||||
};
|
||||
|
||||
// Get the statement
|
||||
let route = match msg.operation.into_kind() {
|
||||
let mut route = match msg.operation.into_kind() {
|
||||
RPCOperationKind::Statement(s) => match s.into_detail() {
|
||||
RPCStatementDetail::Route(s) => s,
|
||||
_ => panic!("not a route statement"),
|
||||
@@ -333,25 +323,24 @@ impl RPCProcessor {
|
||||
match route.safety_route.hops {
|
||||
// There is a safety route hop
|
||||
SafetyRouteHops::Data(ref d) => {
|
||||
// See if this is last hop in safety route, if so, we're decoding a PrivateRoute not a RouteHop
|
||||
let (blob_tag, blob_data) = if let Some(b) = d.blob.last() {
|
||||
(*b, &d.blob[0..d.blob.len() - 1])
|
||||
} else {
|
||||
return Err(RPCError::protocol("no bytes in blob"));
|
||||
};
|
||||
|
||||
// Decrypt the blob with DEC(nonce, DH(the SR's public key, this hop's secret)
|
||||
let node_id_secret = self.routing_table.node_id_secret();
|
||||
let dh_secret = self
|
||||
.crypto
|
||||
.cached_dh(&route.safety_route.public_key, &node_id_secret)
|
||||
.map_err(RPCError::protocol)?;
|
||||
let dec_blob_data = Crypto::decrypt_aead(blob_data, &d.nonce, &dh_secret, None)
|
||||
let mut dec_blob_data = Crypto::decrypt_aead(&d.blob, &d.nonce, &dh_secret, None)
|
||||
.map_err(RPCError::protocol)?;
|
||||
|
||||
// See if this is last hop in safety route, if so, we're decoding a PrivateRoute not a RouteHop
|
||||
let Some(dec_blob_tag) = dec_blob_data.pop() else {
|
||||
return Err(RPCError::protocol("no bytes in blob"));
|
||||
};
|
||||
|
||||
let dec_blob_reader = RPCMessageData::new(dec_blob_data).get_reader()?;
|
||||
|
||||
// Decode the blob appropriately
|
||||
if blob_tag == 1 {
|
||||
if dec_blob_tag == 1 {
|
||||
// PrivateRoute
|
||||
let private_route = {
|
||||
let pr_reader = dec_blob_reader
|
||||
@@ -367,7 +356,7 @@ impl RPCProcessor {
|
||||
&private_route,
|
||||
)
|
||||
.await?;
|
||||
} else if blob_tag == 0 {
|
||||
} else if dec_blob_tag == 0 {
|
||||
// RouteHop
|
||||
let route_hop = {
|
||||
let rh_reader = dec_blob_reader
|
||||
@@ -425,6 +414,16 @@ impl RPCProcessor {
|
||||
return Err(RPCError::protocol("route should not be at the end"));
|
||||
}
|
||||
|
||||
// Sign the operation if this is not our last hop
|
||||
// as the last hop is already signed by the envelope
|
||||
if route_hop.next_hop.is_some() {
|
||||
let node_id = self.routing_table.node_id();
|
||||
let node_id_secret = self.routing_table.node_id_secret();
|
||||
let sig = sign(&node_id, &node_id_secret, &route.operation.data)
|
||||
.map_err(RPCError::internal)?;
|
||||
route.operation.signatures.push(sig);
|
||||
}
|
||||
|
||||
// Make next PrivateRoute and pass it on
|
||||
self.process_route_private_route_hop(
|
||||
route.operation,
|
||||
|
Reference in New Issue
Block a user