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

Commit 772c108

Browse files
committed
feat(data_service): add test for auth_enclave token issuance
1 parent 5011c58 commit 772c108

File tree

4 files changed

+97
-2
lines changed

4 files changed

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

rtc_data_service/tests/ecalls/mod.rs

+1
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

+4
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

+2-2
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)