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
use teaclave_function::{
Echo, FaceDetection, GbdtPredict, GbdtTrain, LogisticRegressionPredict,
LogisticRegressionTrain, OnlineDecrypt, OrderedSetIntersect, OrderedSetJoin, PasswordCheck,
PrincipalComponentsAnalysis, PrivateJoinAndCompute, RsaSign,
};
use teaclave_types::{FunctionArguments, FunctionRuntime, TeaclaveExecutor};
use anyhow::{bail, Result};
#[derive(Default)]
pub struct BuiltinFunctionExecutor;
impl TeaclaveExecutor for BuiltinFunctionExecutor {
fn execute(
&self,
name: String,
arguments: FunctionArguments,
_payload: Vec<u8>,
runtime: FunctionRuntime,
) -> Result<String> {
match name.as_str() {
#[cfg(feature = "builtin_echo")]
Echo::NAME => Echo::new().run(arguments, runtime),
#[cfg(feature = "builtin_gbdt_predict")]
GbdtPredict::NAME => GbdtPredict::new().run(arguments, runtime),
#[cfg(feature = "builtin_gbdt_train")]
GbdtTrain::NAME => GbdtTrain::new().run(arguments, runtime),
#[cfg(feature = "builtin_logistic_regression_train")]
LogisticRegressionTrain::NAME => LogisticRegressionTrain::new().run(arguments, runtime),
#[cfg(feature = "builtin_logistic_regression_predict")]
LogisticRegressionPredict::NAME => {
LogisticRegressionPredict::new().run(arguments, runtime)
}
#[cfg(feature = "builtin_online_decrypt")]
OnlineDecrypt::NAME => OnlineDecrypt::new().run(arguments, runtime),
#[cfg(feature = "builtin_private_join_and_compute")]
PrivateJoinAndCompute::NAME => PrivateJoinAndCompute::new().run(arguments, runtime),
#[cfg(feature = "builtin_ordered_set_join")]
OrderedSetJoin::NAME => OrderedSetJoin::new().run(arguments, runtime),
#[cfg(feature = "builtin_ordered_set_intersect")]
OrderedSetIntersect::NAME => OrderedSetIntersect::new().run(arguments, runtime),
#[cfg(feature = "builtin_rsa_sign")]
RsaSign::NAME => RsaSign::new().run(arguments, runtime),
#[cfg(feature = "builtin_principal_components_analysis")]
PrincipalComponentsAnalysis::NAME => {
PrincipalComponentsAnalysis::new().run(arguments, runtime)
}
#[cfg(feature = "builtin_face_detection")]
FaceDetection::NAME => FaceDetection::new().run(arguments, runtime),
#[cfg(feature = "builtin_password_check")]
PasswordCheck::NAME => PasswordCheck::new().run(arguments, runtime),
_ => bail!("Function not found."),
}
}
}
#[cfg(feature = "enclave_unit_test")]
pub mod tests {
pub fn run_tests() -> bool {
true
}
}