#include <stdio.h>
#include <string.h>
#include <memory.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;
TEEnvInit();
{
char * szServerName = "localhost";
long lPort = 8888;
char * szUserName = "ls";
char * szPassword = "password1A";
h = OpenConnectionWithNativeUser(
TE_SSL_CONNECTION,
szServerName,
lPort,
szUserName,
strlen(szUserName),
szPassword,
strlen(szPassword)
);
if (h == 0)
{
PrintError("Connection error:");
goto CLEANUP1;
}
else
printf("Connected to %s at %d as %s\n", szServerName, lPort, szUserName);
}
{
#define ROW_NUM 5
#define COL_NUM 5
#define DATA_LEN 128
#define HL_LEN 60
char data[ROW_NUM][COL_NUM][DATA_LEN];
char data_enc[ROW_NUM][COL_NUM][DATA_LEN];
char data_dec[ROW_NUM][COL_NUM][DATA_LEN];
char hl[ROW_NUM][HL_LEN];
int datalen_enc[ROW_NUM][COL_NUM];
int hllen[ROW_NUM];
TE_MATRIX_HANDLE mh = 0;
TE_MATRIX_HANDLE mh2 = 0;
int i, j;
printf("Original data:\n");
for(i=0; i<ROW_NUM; i++)
{
for(j=0; j<COL_NUM; j++)
{
sprintf(data[i][j], "this is data at row %d and colum %d", i, j);
printf("data[%d][%d] = %s\n", i, j, data[i][j]);
}
}
mh = TEMatrixCreate();
for(i=0; i<ROW_NUM; i++)
{
for(j=0; j<COL_NUM; j++)
{
ret = TEMatrixSetElement(mh, i+1, j+1, data[i][j], strlen(data[i][j]));
if(ret) {
PrintError("TEMatrixSetElement() failed:");
goto CLEANUP2;
}
}
}
ret = TEMatrixEncrypt(h, mh);
if(ret) {
PrintError("TEMatrixEncrypt() failed:");
goto CLEANUP2;
}
TEMatrixSetEncode(mh, 1);
printf("Encrypted data:\n");
for(i=0; i<ROW_NUM; i++)
{
for(j=0; j<COL_NUM; j++)
{
ret = TEMatrixGetElement(mh, i+1, j+1, data_enc[i][j], DATA_LEN, &datalen_enc[i][j]);
if(ret) {
PrintError("TEMatrixGetElement() failed:");
goto CLEANUP2;
}
if(TEMatrixGetEncode(mh))
printf("data_enc[%d][%d] = %s\n", i, j, data_enc[i][j]);
else
printf("datalen_enc[%d][%d] = %d\n", i, j, datalen_enc[i][j]);
}
ret = TEMatrixGetHiddenLink(mh, i+1, hl[i], HL_LEN, &hllen[i]);
if(ret) {
PrintError("TEMatrixGetHiddenLink() failed:");
goto CLEANUP2;
}
if(TEMatrixGetEncode(mh))
printf("hllen[%d] = %s\n", i, hl[i]);
else
printf("hllen[%d] = %d\n", i, hllen[i]);
}
mh2 = TEMatrixCreate();
TEMatrixSetDecode(mh2, 1);
for(i=0; i<ROW_NUM; i++)
{
for(j=0; j<COL_NUM; j++)
{
ret = TEMatrixSetElement(mh2, i+1, j+1, data_enc[i][j], datalen_enc[i][j]);
if(ret) {
PrintError("TEMatrixSetElement() failed:");
goto CLEANUP3;
}
}
ret = TEMatrixSetHiddenLink(mh2, i+1, hl[i], hllen[i]);
if(ret) {
PrintError("TEMatrixSetHiddenLink() failed:");
goto CLEANUP3;
}
}
ret = TEMatrixDecrypt(h, mh2);
if(ret) {
PrintError("TEMatrixDecrypt() failed:");
goto CLEANUP3;
}
printf("Decrypted data:\n");
for(i=0; i<ROW_NUM; i++)
{
for(j=0; j<COL_NUM; j++)
{
int nLen;
memset(data_dec[i][j], 0, DATA_LEN);
ret = TEMatrixGetElement(mh2, i+1, j+1, data_dec[i][j], DATA_LEN, &nLen);
if(ret) {
PrintError("TEMatrixGetElement() failed:");
goto CLEANUP3;
}
printf("data_dec[%d][%d] = %s\n", i, j, data_dec[i][j]);
}
}
printf("Test matrix OK\n");
CLEANUP3:
TEMatrixRelease(mh2);
CLEANUP2:
TEMatrixRelease(mh);
}
CLEANUP1:
CloseConnection(h);
printf("Disconnected from server\n\n");
TEEnvClose();
return 0;
}