@@ -3,6 +3,7 @@ use std::sync::Arc;
33use actix_web:: { http:: StatusCode , web, HttpRequest , HttpResponse } ;
44use serde:: { Deserialize , Serialize } ;
55use serde_json:: json;
6+ use zeroize:: { Zeroize , Zeroizing } ;
67
78use crate :: {
89 core:: { Core , SealConfig } ,
@@ -24,13 +25,15 @@ pub struct InitRequest {
2425 pub secret_threshold : u8 ,
2526}
2627
27- #[ derive( Debug , Clone , Serialize , Deserialize ) ]
28+ #[ derive( Debug , Clone , Serialize , Deserialize , Zeroize ) ]
29+ #[ zeroize( drop) ]
2830pub struct InitResponse {
2931 pub keys : Vec < String > ,
3032 pub root_token : String ,
3133}
3234
33- #[ derive( Debug , Clone , Serialize , Deserialize ) ]
35+ #[ derive( Debug , Clone , Serialize , Deserialize , Zeroize ) ]
36+ #[ zeroize( drop) ]
3437struct UnsealRequest {
3538 key : String ,
3639}
@@ -101,7 +104,7 @@ async fn sys_init_put_request_handler(
101104 let result = core. init ( & seal_config) ?;
102105
103106 let resp =
104- InitResponse { keys : result. secret_shares . iter ( ) . map ( hex:: encode) . collect ( ) , root_token : result. root_token } ;
107+ InitResponse { keys : result. secret_shares . iter ( ) . map ( hex:: encode) . collect ( ) , root_token : result. root_token . clone ( ) } ;
105108
106109 Ok ( response_json_ok ( None , resp) )
107110}
@@ -126,7 +129,7 @@ async fn sys_unseal_request_handler(
126129 // TODO
127130 let payload = serde_json:: from_slice :: < UnsealRequest > ( & body) ?;
128131 body. clear ( ) ;
129- let key = hex:: decode ( payload. key ) ? ;
132+ let key: Zeroizing < Vec < u8 > > = Zeroizing :: new ( hex:: decode ( payload. key . clone ( ) ) ? ) ;
130133
131134 let _result = core. unseal ( & key) ?;
132135
0 commit comments