1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
// Copyright (c) The Diem Core Contributors
// SPDX-License-Identifier: Apache-2.0
//!
//! The security module gathers security-related logs:
//! logs to detect malicious behavior from other validators.
//!
//! TODO: This likely belongs outside of the logging crate
//!
//! ```
//! use diem_logger::{error, SecurityEvent};
//!
//! error!(
//! SecurityEvent::InvalidRetrievedBlock,
//! "some_key" = "some data",
//! );
//! ```
//!
use crate::{Key, Schema, Value, Visitor};
use serde::{Deserialize, Serialize};
#[derive(Clone, Copy, Debug, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum SecurityEvent {
//
// Mempool
//
/// Mempool received a transaction from another peer with an invalid signature
InvalidTransactionMempool,
/// Mempool received an invalid network event
InvalidNetworkEventMempool,
// Consensus
// ---------
/// Consensus received an invalid message (not well-formed, invalid vote data or incorrect signature)
ConsensusInvalidMessage,
/// Consensus received an equivocating vote
ConsensusEquivocatingVote,
/// Consensus received an invalid proposal
InvalidConsensusProposal,
/// Consensus received an invalid new round message
InvalidConsensusRound,
/// Consensus received an invalid sync info message
InvalidSyncInfoMsg,
/// A received block is invalid
InvalidRetrievedBlock,
/// A block being committed or executed is invalid
InvalidBlock,
// State-Sync
// ----------
/// Invalid chunk of transactions received
StateSyncInvalidChunk,
// Health Checker
// --------------
/// HealthChecker received an invalid network event
InvalidNetworkEventHC,
/// HealthChecker received an invalid message
InvalidHealthCheckerMsg,
// Network
// -------
/// Network received an invalid message from a remote peer
InvalidNetworkEvent,
/// A failed noise handshake that's either a clear bug or indicates some
/// security issue.
NoiseHandshake,
}
impl Schema for SecurityEvent {
fn visit(&self, visitor: &mut dyn Visitor) {
visitor.visit_pair(Key::new("security-event"), Value::from_serde(self))
}
}