agentshield/ir/
data_surface.rs1use serde::{Deserialize, Serialize};
2
3use super::SourceLocation;
4
5#[derive(Debug, Clone, Default, Serialize, Deserialize)]
7pub struct DataSurface {
8 pub sources: Vec<TaintSource>,
10 pub sinks: Vec<TaintSink>,
12 pub taint_paths: Vec<TaintPath>,
14}
15
16#[derive(Debug, Clone, Serialize, Deserialize)]
17pub struct TaintSource {
18 pub source_type: TaintSourceType,
19 pub description: String,
20 pub location: SourceLocation,
21}
22
23#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
24#[serde(rename_all = "snake_case")]
25pub enum TaintSourceType {
26 ToolArgument,
28 PromptContent,
30 EnvVariable,
32 SecretStore,
34 HttpResponse,
36 FileContent,
38 DatabaseQuery,
40}
41
42#[derive(Debug, Clone, Serialize, Deserialize)]
43pub struct TaintSink {
44 pub sink_type: TaintSinkType,
45 pub description: String,
46 pub location: SourceLocation,
47}
48
49#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
50#[serde(rename_all = "snake_case")]
51pub enum TaintSinkType {
52 ProcessExec,
54 DynamicEval,
56 HttpRequest,
58 FileWrite,
60 LogOutput,
62 DatabaseWrite,
64 ResponseToLlm,
66}
67
68#[derive(Debug, Clone, Serialize, Deserialize)]
69pub struct TaintPath {
70 pub source: TaintSource,
71 pub sink: TaintSink,
72 pub through: Vec<SourceLocation>,
74 pub confidence: f32,
76}