#include <stdio.h>
#include "teagent_c.h"
void PrintError(const char * msg)
{
char szErr[1024];
uint32_t nLength = 1024;
uint32_t nCode = GetLastTEError(szErr, &nLength);
printf("%s Code = 0x%x, Message = %s\n", msg, nCode, szErr);
}
int main()
{
TE_HANDLE h;
TE_RETCODE ret;
uint32_t sid;
uint64_t pid;
TEEnvInit();
{
char * szServerName = "localhost";
long lPort = 8888;
const char * p12_file = "/test_key.pfx";
const char * password = "password";
h = OpenConnectionWithPKCS12File(
szServerName,
lPort,
p12_file,
password,
strlen(password)
);
if (h == 0)
{
PrintError("Connection error:");
goto CLEANUP;
}
else
printf("Connected to %s at %d as certificate user with %s.\n", szServerName, lPort, p12_file);
ret = TEGetSystemId(h, &sid);
if(ret) {
PrintError("TEGetSystemId() failed:");
goto CLEANUP;
}
else
printf("sid = %d\n", sid);
ret = CurrentLogonPrincipalId(h, &pid);
if(ret) {
PrintError("CurrentLogonPrincipalId() failed:");
goto CLEANUP;
}
else
printf("pid = %llu\n", (unsigned long long)pid);
}
{
#define KEY_NUMBER 3
#define KEY_BUFFER_SIZE 256
#define HIDDENLINK_BUFFER_SIZE 60
TE_KEY_BUFFER tekeybuffer[KEY_NUMBER];
int i, j;
for (i=0; i<KEY_NUMBER; i++)
{
tekeybuffer[i].key.buffer = (unsigned char*)malloc(KEY_BUFFER_SIZE);
if(tekeybuffer[i].key.buffer == NULL) {
printf("Error: out of memory.\n");
for(j=0; j<i; j++) {
free(tekeybuffer[j].key.buffer);
}
goto CLEANUP;
}
tekeybuffer[i].key.size = KEY_BUFFER_SIZE;
tekeybuffer[i].key.len = 0;
tekeybuffer[i].hiddenlink.buffer = (unsigned char*)malloc(HIDDENLINK_BUFFER_SIZE);
if(tekeybuffer[i].hiddenlink.buffer == NULL) {
printf("Error: out of memory.\n");
for(j=0; j<=i; j++) {
free(tekeybuffer[j].key.buffer);
}
for(j=0; j<i; j++) {
free(tekeybuffer[j].hiddenlink.buffer);
}
goto CLEANUP;
}
tekeybuffer[i].hiddenlink.size = HIDDENLINK_BUFFER_SIZE;
tekeybuffer[i].hiddenlink.len = 0;
}
ret = TEExportMultiKeys(
h,
sid,
pid,
tekeybuffer,
KEY_NUMBER
);
if(ret) {
PrintError("TEExportMultiKeys() failed:");
}
else {
for (i=0; i<KEY_NUMBER; i++)
{
printf("tekeybuffer[%d].key.buffer (len = %d) :\n", i, tekeybuffer[i].key.len);
for(j=0; j<tekeybuffer[i].key.len; j++) {
printf("[%2x] ", tekeybuffer[i].key.buffer[j]);
}
printf("\n");
}
}
for (i=0; i<KEY_NUMBER; i++)
{
free(tekeybuffer[i].key.buffer);
free(tekeybuffer[i].hiddenlink.buffer);
}
}
CLEANUP:
CloseConnection(h);
printf("Disconnected from server\n\n");
TEEnvClose();
return 0;
}