[demos] Get image key to buffer
This commit is contained in:
		
							parent
							
								
									4cbf728910
								
							
						
					
					
						commit
						0ba7f80b21
					
				@ -23,6 +23,17 @@ extern "C" {
 | 
				
			|||||||
    ) -> c_int;
 | 
					    ) -> c_int;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#[link(name = "grpc_ratls_client")]
 | 
				
			||||||
 | 
					extern "C" {
 | 
				
			||||||
 | 
					    fn grpc_ratls_get_secret_to_buf(
 | 
				
			||||||
 | 
					        server_addr: *const c_char, // grpc server address+port, such as "localhost:50051"
 | 
				
			||||||
 | 
					        config_json: *const c_char, // ratls handshake config json file
 | 
				
			||||||
 | 
					        name: *const c_char, // secret name to be requested
 | 
				
			||||||
 | 
					        secret_buf: *const u8, // secret buffer provided by user
 | 
				
			||||||
 | 
					        buf_len: *mut u32 // buffer size
 | 
				
			||||||
 | 
					    ) -> c_int;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
fn main() -> Result<(), Box<dyn Error>> {
 | 
					fn main() -> Result<(), Box<dyn Error>> {
 | 
				
			||||||
    // Load the configuration from initfs
 | 
					    // Load the configuration from initfs
 | 
				
			||||||
    const IMAGE_CONFIG_FILE: &str = "/etc/image_config.json";
 | 
					    const IMAGE_CONFIG_FILE: &str = "/etc/image_config.json";
 | 
				
			||||||
@ -45,14 +56,20 @@ fn main() -> Result<(), Box<dyn Error>> {
 | 
				
			|||||||
        "encrypted" => {
 | 
					        "encrypted" => {
 | 
				
			||||||
            // Get the image encrypted key through RA
 | 
					            // Get the image encrypted key through RA
 | 
				
			||||||
            let secret = CString::new("image_key").unwrap();
 | 
					            let secret = CString::new("image_key").unwrap();
 | 
				
			||||||
            let filename = CString::new("/etc/image_key").unwrap();
 | 
					            let mut buffer: Vec<u8> = vec![0; 256];
 | 
				
			||||||
 | 
					            let buffer_ptr: *const u8 = buffer.as_ptr();
 | 
				
			||||||
 | 
					            let mut buffer_len: u32 = buffer.len() as u32;
 | 
				
			||||||
 | 
					            let len_ptr: *mut u32 = &mut buffer_len as *mut u32;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            //Read to buffer instead of file system for better security
 | 
				
			||||||
            let ret = unsafe {
 | 
					            let ret = unsafe {
 | 
				
			||||||
                grpc_ratls_get_secret(
 | 
					                grpc_ratls_get_secret_to_buf(
 | 
				
			||||||
                    server_addr.as_ptr(),
 | 
					                    server_addr.as_ptr(),
 | 
				
			||||||
                    config_json.as_ptr(),
 | 
					                    config_json.as_ptr(),
 | 
				
			||||||
                    secret.as_ptr(),
 | 
					                    secret.as_ptr(),
 | 
				
			||||||
                    filename.as_ptr())
 | 
					                    buffer_ptr,
 | 
				
			||||||
 | 
					                    len_ptr
 | 
				
			||||||
 | 
					                )
 | 
				
			||||||
            };
 | 
					            };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if ret != 0 {
 | 
					            if ret != 0 {
 | 
				
			||||||
@ -60,8 +77,11 @@ fn main() -> Result<(), Box<dyn Error>> {
 | 
				
			|||||||
                return Err(Box::new(std::io::Error::last_os_error()));
 | 
					                return Err(Box::new(std::io::Error::last_os_error()));
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            const IMAGE_KEY_FILE: &str = "/etc/image_key";
 | 
					            buffer.resize(buffer_len as usize, 0);
 | 
				
			||||||
            let key_str = load_key(IMAGE_KEY_FILE)?;
 | 
					            let key_string = String::from_utf8(buffer)
 | 
				
			||||||
 | 
					                .expect("error converting to string");
 | 
				
			||||||
 | 
					            let key_str = key_string
 | 
				
			||||||
 | 
					                .trim_end_matches(|c| c == '\r' || c == '\n').to_string();
 | 
				
			||||||
            let mut key: sgx_key_128bit_t = Default::default();
 | 
					            let mut key: sgx_key_128bit_t = Default::default();
 | 
				
			||||||
            parse_str_to_bytes(&key_str, &mut key)?;
 | 
					            parse_str_to_bytes(&key_str, &mut key)?;
 | 
				
			||||||
            Some(key)
 | 
					            Some(key)
 | 
				
			||||||
@ -151,13 +171,6 @@ fn load_config(config_path: &str) -> Result<ImageConfig, Box<dyn Error>> {
 | 
				
			|||||||
    Ok(config)
 | 
					    Ok(config)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
fn load_key(key_path: &str) -> Result<String, Box<dyn Error>> {
 | 
					 | 
				
			||||||
    let mut key_file = File::open(key_path)?;
 | 
					 | 
				
			||||||
    let mut key = String::new();
 | 
					 | 
				
			||||||
    key_file.read_to_string(&mut key)?;
 | 
					 | 
				
			||||||
    Ok(key.trim_end_matches(|c| c == '\r' || c == '\n').to_string())
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
fn parse_str_to_bytes(arg_str: &str, bytes: &mut [u8]) -> Result<(), Box<dyn Error>> {
 | 
					fn parse_str_to_bytes(arg_str: &str, bytes: &mut [u8]) -> Result<(), Box<dyn Error>> {
 | 
				
			||||||
    let bytes_str_vec = {
 | 
					    let bytes_str_vec = {
 | 
				
			||||||
        let bytes_str_vec: Vec<&str> = arg_str.split('-').collect();
 | 
					        let bytes_str_vec: Vec<&str> = arg_str.split('-').collect();
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user