[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::SecretRequest; | ||||||
| using ratls::SecretReply; | 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
 | // Client
 | ||||||
| class GrSecretClient { | class GrSecretClient { | ||||||
|     public: |     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 *server_addr, | ||||||
|     const char *config_json, |     const char *config_json, | ||||||
|     const char *name, |     const char *name, | ||||||
|     const char *secret_file |     std::string* secret_string | ||||||
| ) | ) | ||||||
| { | { | ||||||
|     auto cred = grpc::sgx::TlsCredentials(config_json); |     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;
 |     // std::cout << "secret received: " << secret << "len: " << secret.length() << std::endl;
 | ||||||
| 
 | 
 | ||||||
|     if (secret.empty()) { |     if (secret.empty()) { | ||||||
|         return -1; |         return GRPC_RATLS_NO_SECRET; | ||||||
|     } else { |     } else { | ||||||
|         //Decode From Base64
 |         //Decode From Base64
 | ||||||
|         size_t len = base64_decode_len(secret.c_str()); |         size_t len = base64_decode_len(secret.c_str()); | ||||||
|         if (len) { |         if (len) { | ||||||
|             char *secret_orig = (char *)malloc(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); |             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
 |         //write to file
 | ||||||
|         std::ofstream myfile; |         std::ofstream myfile; | ||||||
|         myfile.open(secret_file); |         myfile.open(secret_file); | ||||||
|         myfile << secret_string; |         myfile << secret_string; | ||||||
|         myfile.close(); |         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
 |     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 | #ifdef __cplusplus | ||||||
| } | } | ||||||
| #endif | #endif | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user