[toolchain] Add get key to buffer API for grpc_ratls
This commit is contained in:
		
							parent
							
								
									6f9ae75f96
								
							
						
					
					
						commit
						4cbf728910
					
				| @ -35,6 +35,15 @@ using ratls::GrSecret; | ||||
| using ratls::SecretRequest; | ||||
| using ratls::SecretReply; | ||||
| 
 | ||||
| typedef enum { | ||||
|     GRPC_RATLS_SUCCESS = 0,             /// Success
 | ||||
|     GRPC_RATLS_ERR = -1,                /// General error
 | ||||
|     GRPC_RATLS_INVALID_PARAM = -2,      /// Invalid parameter
 | ||||
|     GRPC_RATLS_BUF_ERR = -3,            /// Invalid buffer or buffer allocation failure
 | ||||
|     GRPC_RATLS_NO_SECRET = -4,          /// No valid secret
 | ||||
|     GRPC_RATLS_BUF_TOO_SMALL = -5       /// Buffer is too small
 | ||||
| } grpc_ratls_result_t; | ||||
| 
 | ||||
| // Client
 | ||||
| class GrSecretClient { | ||||
|     public: | ||||
| @ -115,11 +124,11 @@ void base64_decode(const char *b64input, unsigned char *dest, size_t dest_len) { | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| int grpc_ratls_get_secret( | ||||
| static grpc_ratls_result_t grpc_ratls_get_secret_string( | ||||
|     const char *server_addr, | ||||
|     const char *config_json, | ||||
|     const char *name, | ||||
|     const char *secret_file | ||||
|     std::string* secret_string | ||||
| ) | ||||
| { | ||||
|     auto cred = grpc::sgx::TlsCredentials(config_json); | ||||
| @ -131,24 +140,73 @@ int grpc_ratls_get_secret( | ||||
|     // std::cout << "secret received: " << secret << "len: " << secret.length() << std::endl;
 | ||||
| 
 | ||||
|     if (secret.empty()) { | ||||
|         return -1; | ||||
|         return GRPC_RATLS_NO_SECRET; | ||||
|     } else { | ||||
|         //Decode From Base64
 | ||||
|         size_t len = base64_decode_len(secret.c_str()); | ||||
|         if (len) { | ||||
|             char *secret_orig = (char *)malloc(len); | ||||
|             if (!secret_orig) { | ||||
|                 return GRPC_RATLS_BUF_ERR; | ||||
|             } | ||||
|             base64_decode(secret.c_str(), (unsigned char *)secret_orig, len); | ||||
|             std::string secret_string(secret_orig, secret_orig + len - 1); | ||||
|             secret_string->assign(secret_orig, secret_orig + len - 1); | ||||
|             free(secret_orig); | ||||
| 
 | ||||
|             return GRPC_RATLS_SUCCESS; | ||||
|         } | ||||
| 
 | ||||
|         return GRPC_RATLS_ERR; | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| // Get secret to file
 | ||||
| int grpc_ratls_get_secret( | ||||
|     const char *server_addr, | ||||
|     const char *config_json, | ||||
|     const char *name, | ||||
|     const char *secret_file | ||||
| ) | ||||
| { | ||||
|     std::string secret_string; | ||||
|     grpc_ratls_result_t ret = grpc_ratls_get_secret_string( | ||||
|         server_addr, config_json, name, &secret_string | ||||
|     ); | ||||
| 
 | ||||
|     if (ret == GRPC_RATLS_SUCCESS) { | ||||
|         //write to file
 | ||||
|         std::ofstream myfile; | ||||
|         myfile.open(secret_file); | ||||
|         myfile << secret_string; | ||||
|         myfile.close(); | ||||
| 
 | ||||
|             return 0; | ||||
|     } | ||||
| 
 | ||||
|         return -2; | ||||
|     return ret; | ||||
| } | ||||
| 
 | ||||
| // Get secret to buffer
 | ||||
| int grpc_ratls_get_secret_to_buf( | ||||
|     const char *server_addr, | ||||
|     const char *config_json, | ||||
|     const char *name, | ||||
|     char *secret_buf, | ||||
|     unsigned int *buf_len | ||||
| ) | ||||
| { | ||||
|     std::string secret_string; | ||||
|     grpc_ratls_result_t ret = grpc_ratls_get_secret_string( | ||||
|         server_addr, config_json, name, &secret_string | ||||
|     ); | ||||
| 
 | ||||
|     if (ret == GRPC_RATLS_SUCCESS) { | ||||
|         if (*buf_len < secret_string.size()) { | ||||
|             std::cout << "buffer size is smaller than the secret string length " << secret_string.size() << std::endl;; | ||||
|             return GRPC_RATLS_BUF_TOO_SMALL; | ||||
|         } | ||||
|         //write to buffer
 | ||||
|         memcpy(secret_buf, secret_string.data(), secret_string.size()); | ||||
|         *buf_len = secret_string.size(); | ||||
|     } | ||||
| 
 | ||||
|     return ret; | ||||
| } | ||||
|  | ||||
| @ -13,6 +13,14 @@ extern int grpc_ratls_get_secret( | ||||
|     const char *secret_file // secret file to be saved
 | ||||
| ); | ||||
| 
 | ||||
| extern int grpc_ratls_get_secret_to_buf( | ||||
|     const char *server_addr, // grpc server address+port, such as "localhost:50051"
 | ||||
|     const char *config_json, // ratls handshake config json file
 | ||||
|     const char *name, // secret name to be requested
 | ||||
|     char *secret_buf, // buffer to save secret
 | ||||
|     unsigned int *buf_len // buffer size
 | ||||
| ); | ||||
| 
 | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user