[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);
|
||||||
|
|
||||||
//write to file
|
return GRPC_RATLS_SUCCESS;
|
||||||
std::ofstream myfile;
|
|
||||||
myfile.open(secret_file);
|
|
||||||
myfile << secret_string;
|
|
||||||
myfile.close();
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return -2;
|
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 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