Skip to content
This repository was archived by the owner on May 9, 2022. It is now read-only.

Commit 10a3d51

Browse files
longtomjrPiDelport
authored andcommitted
feat(data_service): add test for auth_enclave token issuance
1 parent 1faeee2 commit 10a3d51

File tree

4 files changed

+98
-2
lines changed

4 files changed

+98
-2
lines changed
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
use std::convert::TryInto;
2+
use std::str::FromStr;
3+
4+
use rtc_types::ExecReqMetadata;
5+
use serde::{Deserialize, Serialize};
6+
use sgx_types::sgx_target_info_t;
7+
8+
use crate::{helpers, CRYPTO_BOX_BOXZEROBYTES, CRYPTO_BOX_ZEROBYTES};
9+
10+
#[derive(Serialize, Deserialize)]
11+
pub struct ExecReqData {
12+
dataset_uuid: [u8; 16],
13+
dataset_access_key: [u8; 24],
14+
exec_module_hash: [u8; 32],
15+
number_of_uses: u32,
16+
}
17+
18+
#[test]
19+
fn test_issue_execution_token_success() {
20+
let enclave = helpers::init_auth_enclave();
21+
22+
let enclave_pubkey = enclave
23+
.create_report(&sgx_target_info_t::default())
24+
.unwrap()
25+
.enclave_held_data;
26+
27+
let mut pubkey = [0_u8; 32];
28+
let mut privkey = [0_u8; 32];
29+
30+
sodalite::box_keypair_seed(&mut pubkey, &mut privkey, &[2_u8; 32]);
31+
32+
let uuid = uuid::Uuid::from_str("dd12012195c04ae8990ebd2512ae03ab").unwrap();
33+
let exec_module_hash: Vec<u8> = (0u8..32).collect();
34+
35+
let req_json = serde_json::to_vec(&ExecReqData {
36+
dataset_uuid: *uuid.as_bytes(),
37+
dataset_access_key: [1; 24],
38+
exec_module_hash: exec_module_hash.try_into().unwrap(),
39+
number_of_uses: 10,
40+
})
41+
.unwrap();
42+
43+
let plaintext = [vec![0_u8; 32], req_json].concat();
44+
let mut ciphertext = vec![0_u8; plaintext.len()];
45+
let nonce = [8_u8; 24];
46+
47+
sodalite::box_(
48+
&mut ciphertext,
49+
&plaintext,
50+
&nonce,
51+
&enclave_pubkey,
52+
&privkey,
53+
)
54+
.unwrap();
55+
56+
let result = enclave
57+
.issue_execution_token(
58+
&ciphertext[CRYPTO_BOX_BOXZEROBYTES..],
59+
ExecReqMetadata {
60+
uploader_pub_key: pubkey,
61+
nonce,
62+
},
63+
)
64+
.unwrap();
65+
66+
let mut m = vec![0_u8; result.ciphertext.len() + CRYPTO_BOX_BOXZEROBYTES];
67+
68+
let padded_c = [
69+
vec![0u8; CRYPTO_BOX_BOXZEROBYTES],
70+
result.ciphertext.to_vec(),
71+
]
72+
.concat();
73+
74+
// TODO: Test bad privkey, nonce etc and ensure failure
75+
76+
let open_result =
77+
sodalite::box_open(&mut m, &padded_c, &result.nonce, &enclave_pubkey, &privkey);
78+
79+
assert!(open_result.is_ok());
80+
81+
// Skip over the padding
82+
let padding: &[u8; CRYPTO_BOX_ZEROBYTES] =
83+
m[..CRYPTO_BOX_ZEROBYTES].try_into().expect("bad padding");
84+
85+
assert_eq!(
86+
padding, &[0_u8; CRYPTO_BOX_ZEROBYTES],
87+
"padding should be zero"
88+
);
89+
90+
// TODO: Assert that decrypted value is a valid JWT
91+
}

rtc_data_service/tests/ecalls/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
//! ECALL tests
22
3+
mod issue_execution_token;
34
mod local_attestation;

rtc_data_service/tests/main.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
//! Top-level test module
22
3+
// See rtc_tenclave/src/crypto.rs
4+
pub const CRYPTO_BOX_ZEROBYTES: usize = 32;
5+
pub const CRYPTO_BOX_BOXZEROBYTES: usize = 16;
6+
37
mod helpers;
48

59
mod ecalls;

rtc_data_service/tests/web_api/data_upload.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@ use rtc_data_service::data_upload::models;
1313
use crate::helpers;
1414

1515
// See rtc_tenclave/src/crypto.rs
16-
const CRYPTO_BOX_ZEROBYTES: usize = 32;
17-
const CRYPTO_BOX_BOXZEROBYTES: usize = 16;
16+
use crate::CRYPTO_BOX_BOXZEROBYTES;
17+
use crate::CRYPTO_BOX_ZEROBYTES;
1818

1919
/// Upload some data, decrypt and check the result.
2020
#[actix_rt::test]

0 commit comments

Comments
 (0)