adapt unittests to new pcp context stuff

This commit is contained in:
git@daemon.de
2014-05-05 11:57:57 +02:00
parent 86e815346a
commit 01f149d4f1
6 changed files with 76 additions and 64 deletions

View File

@@ -4,6 +4,7 @@
int main() { int main() {
/* testing basic Buffer api */ /* testing basic Buffer api */
Buffer *test = buffer_new(16, "test"); Buffer *test = buffer_new(16, "test");
PCPCTX *ptx = ptx_new();
byte *a = ucmalloc(32); byte *a = ucmalloc(32);
byte *b = ucmalloc(32); byte *b = ucmalloc(32);
@@ -92,7 +93,7 @@ int main() {
munmap(r, rs); munmap(r, rs);
fclose(RFD); fclose(RFD);
fatals_ifany(); fatals_ifany(ptx);
return 0; return 0;
} }

View File

@@ -14,76 +14,76 @@ void pr(string name, unsigned char *data, size_t len) {
cout << endl; cout << endl;
} }
FILE *_openwr(string file) { FILE *_openwr(string file, PcpContext &ptx) {
FILE *fd; FILE *fd;
if((fd = fopen(file.c_str(), "wb+")) == NULL) { if((fd = fopen(file.c_str(), "wb+")) == NULL) {
throw pcp::exception("Could not open output file " + file + "\n"); throw pcp::exception(ptx, "Could not open output file " + file + "\n");
} }
return fd; return fd;
} }
FILE *_openrd(string file) { FILE *_openrd(string file, PcpContext &ptx) {
FILE *fd; FILE *fd;
if((fd = fopen(file.c_str(), "rb")) == NULL) { if((fd = fopen(file.c_str(), "rb")) == NULL) {
throw pcp::exception("Could not open input file " + file + "\n"); throw pcp::exception(ptx, "Could not open input file " + file + "\n");
} }
return fd; return fd;
} }
void test0() { void test0(PcpContext &ptx) {
// test keygen and crypto // test keygen and crypto
FILE *CLEAR, *CIPHER, *DECRYPTED; FILE *CLEAR, *CIPHER, *DECRYPTED;
Key A = Key("a", "alicia", "alicia@local"); Key A = Key(ptx, "a", "alicia", "alicia@local");
Key B = Key("b", "bobby", "bobby@local"); Key B = Key(ptx, "b", "bobby", "bobby@local");
PubKey PA = A.get_public(); PubKey PA = A.get_public();
PubKey PB = B.get_public(); PubKey PB = B.get_public();
A.decrypt("a"); A.decrypt("a");
B.decrypt("b"); B.decrypt("b");
Crypto A2B(A, PB); Crypto A2B(ptx, A, PB);
Crypto B2A(B, PA); Crypto B2A(ptx, B, PA);
CLEAR = _openwr("testcppclear"); CLEAR = _openwr("testcppclear", ptx);
fprintf(CLEAR, "HALLO\n"); fprintf(CLEAR, "HALLO\n");
fclose(CLEAR); fclose(CLEAR);
CIPHER = _openwr("testcpcipher"); CIPHER = _openwr("testcpcipher", ptx);
CLEAR = _openrd("testcppclear"); CLEAR = _openrd("testcppclear", ptx);
if(A2B.encrypt(CLEAR, CIPHER, false)) { if(A2B.encrypt(CLEAR, CIPHER, false)) {
CIPHER = _openrd("testcpcipher"); CIPHER = _openrd("testcpcipher", ptx);
DECRYPTED = _openwr("testcppdecrypted"); DECRYPTED = _openwr("testcppdecrypted", ptx);
if(B2A.decrypt(CIPHER, DECRYPTED, false)) { if(B2A.decrypt(CIPHER, DECRYPTED, false)) {
DECRYPTED = _openrd("testcppdecrypted"); DECRYPTED = _openrd("testcppdecrypted", ptx);
char *got = (char *)ucmalloc(10); char *got = (char *)ucmalloc(10);
if(fread(got, 1, 6, DECRYPTED) < 6) { if(fread(got, 1, 6, DECRYPTED) < 6) {
throw pcp::exception("read error, could not read decrypted content"); throw pcp::exception(ptx, "read error, could not read decrypted content");
} }
if(strncmp(got, "HALLO", 5) != 0) { if(strncmp(got, "HALLO", 5) != 0) {
throw pcp::exception(); throw pcp::exception(ptx);
} }
} }
else else
throw pcp::exception("failed to decrypt"); throw pcp::exception(ptx, "failed to decrypt");
} }
else else
throw pcp::exception("failed to encrypt"); throw pcp::exception(ptx, "failed to encrypt");
cout << "0 ok" << endl; cout << "0 ok" << endl;
} }
void test1() { void test1(PcpContext &ptx) {
// test the vault // test the vault
Key A = Key("a", "alicia", "alicia@local"); Key A = Key(ptx, "a", "alicia", "alicia@local");
Key B = Key("b", "bobby", "bobby@local"); Key B = Key(ptx, "b", "bobby", "bobby@local");
PubKey PA = A.get_public(); PubKey PA = A.get_public();
PubKey PB = B.get_public(); PubKey PB = B.get_public();
Vault vault = Vault("vcpp1"); Vault vault = Vault(ptx, "vcpp1");
vault.key_add(A); vault.key_add(A);
vault.pubkey_add(PB); vault.pubkey_add(PB);
@@ -102,12 +102,12 @@ void test1() {
} }
if(gotp == false || gots == false) if(gotp == false || gots == false)
throw pcp::exception("wtf - didnt find installed keys"); throw pcp::exception(ptx, "wtf - didnt find installed keys");
else else
cout << "1 ok" << endl; cout << "1 ok" << endl;
} }
void test2() { void test2(PcpContext &ptx) {
// try importing a key from disk // try importing a key from disk
ifstream pf("key-bobby-pub"); ifstream pf("key-bobby-pub");
string z; string z;
@@ -118,22 +118,22 @@ void test2() {
if(strlen(buf) > 0) if(strlen(buf) > 0)
z += buf + string("\n"); z += buf + string("\n");
} }
PubKey B(z); PubKey B(ptx, z);
//cout << B.to_text(); //cout << B.to_text();
cout << "2 ok" << endl; cout << "2 ok" << endl;
} }
void test3() { void test3(PcpContext &ptx) {
// signature test // signature test
Key A = Key("a", "alicia", "alicia@local"); Key A = Key(ptx, "a", "alicia", "alicia@local");
A.decrypt("a"); A.decrypt("a");
PubKey PA = A.get_public(); PubKey PA = A.get_public();
string message = "hallo baby"; string message = "hallo baby";
Signature SigA(A); Signature SigA(ptx, A);
Signature SigB(PA); Signature SigB(ptx, PA);
if(SigA.sign((unsigned char*)message.c_str(), message.length())) if(SigA.sign((unsigned char*)message.c_str(), message.length()))
if(SigB.verify(SigA.sig) ) if(SigB.verify(SigA.sig) )
@@ -158,29 +158,30 @@ void test4() {
int main(int argc, char **argv) { int main(int argc, char **argv) {
sodium_init(); sodium_init();
PcpContext ptx;
try { try {
if(argc < 2) if(argc < 2)
throw pcp::exception("usage: cpptest N"); throw pcp::exception(ptx, "usage: cpptest N");
switch(argv[1][0]) { switch(argv[1][0]) {
case '0': case '0':
test0(); test0(ptx);
break; break;
case '1': case '1':
test1(); test1(ptx);
break; break;
case '2': case '2':
test2(); test2(ptx);
break; break;
case '3': case '3':
test3(); test3(ptx);
break; break;
case '4': case '4':
test3(); test4();
break; break;
default: default:

View File

@@ -21,6 +21,8 @@ int main(int argc, char **argv) {
size_t clearlen = 256; size_t clearlen = 256;
size_t zlen = (clearlen * 5 / 4); size_t zlen = (clearlen * 5 / 4);
PCPCTX *ptx = ptx_new();
if(argc < 2) { if(argc < 2) {
fprintf(stderr, "Usage: decodertest <N>\n"); fprintf(stderr, "Usage: decodertest <N>\n");
return 1; return 1;
@@ -40,8 +42,8 @@ int main(int argc, char **argv) {
if(z85 == NULL) { if(z85 == NULL) {
ret = FALSE; ret = FALSE;
if(PCP_ERRSET == 0) { if(ptx->pcp_errset == 0) {
fatal("failed to encoded data to Z85\n"); fatal(ptx, "failed to encoded data to Z85\n");
} }
goto OUT; goto OUT;
} }
@@ -103,14 +105,14 @@ int main(int argc, char **argv) {
/* line decoder */ /* line decoder */
char *raw = pcp_readz85string(buffer_get(zdone), buffer_size(zdone)); char *raw = pcp_readz85string(ptx, buffer_get(zdone), buffer_size(zdone));
if(raw == NULL) { if(raw == NULL) {
/* unexpected */ /* unexpected */
ret = FALSE; ret = FALSE;
} }
else { else {
back = pcp_z85_decode(raw, &zlen); back = pcp_z85_decode(ptx, raw, &zlen);
if(back == NULL) { if(back == NULL) {
if(mode > 3) { if(mode > 3) {
/* expected fail */ /* expected fail */
@@ -137,8 +139,8 @@ int main(int argc, char **argv) {
if(back != NULL) { if(back != NULL) {
if(mode <= 3 && memcmp(back, clear, 256) != 0) { if(mode <= 3 && memcmp(back, clear, 256) != 0) {
ret = FALSE; ret = FALSE;
if(PCP_ERRSET == 0) { if(ptx->pcp_errset == 0) {
fatal("decoded content doesn't match\n"); fatal(ptx, "decoded content doesn't match\n");
} }
} }
} }
@@ -157,8 +159,10 @@ int main(int argc, char **argv) {
} }
else { else {
fprintf(stdout, "%d - failed\n", mode); fprintf(stdout, "%d - failed\n", mode);
fatals_ifany(); fatals_ifany(ptx);
} }
ptx_clean(ptx);
return ret; return ret;
} }

View File

@@ -16,12 +16,13 @@ int main() {
pcp_key_t *a = pcpkey_new(); pcp_key_t *a = pcpkey_new();
pcp_key_t *b = pcpkey_new(); pcp_key_t *b = pcpkey_new();
PCPCTX *ptx = ptx_new();
pcp_pubkey_t *p = pcpkey_pub_from_secret(b); pcp_pubkey_t *p = pcpkey_pub_from_secret(b);
unsigned char m[12] = "hallo world"; unsigned char m[12] = "hallo world";
size_t clen; size_t clen;
unsigned char *c = pcp_box_encrypt(a, p, m, 12, &clen); unsigned char *c = pcp_box_encrypt(ptx, a, p, m, 12, &clen);
unsigned char *n = ucmalloc(24); unsigned char *n = ucmalloc(24);
memcpy(n, c, 24); memcpy(n, c, 24);

View File

@@ -11,26 +11,26 @@ int main() {
strcpy(m, "xxxx"); strcpy(m, "xxxx");
sodium_init(); sodium_init();
PCPCTX *ptx = ptx_new();
pcp_key_t *k = pcpkey_new (); pcp_key_t *k = pcpkey_new ();
memcpy(k->owner, o, 8); memcpy(k->owner, o, 8);
memcpy(k->mail, m, 8); memcpy(k->mail, m, 8);
pcp_key_t *key = pcpkey_encrypt(k, pw); pcp_key_t *key = pcpkey_encrypt(ptx, k, pw);
int i; int i;
for(i=0; i<3; i++) for(i=0; i<3; i++)
mkinvalid_secret(key, i); mkinvalid_secret(ptx, key, i);
for(i=0; i<4; i++) for(i=0; i<4; i++)
mkinvalid_public(key, i); mkinvalid_public(key, i);
mkinvv("testvault-invalidheader", 0); mkinvv(ptx, "testvault-invalidheader", 0);
mkinvv("testvault-invalidversion", 1); mkinvv(ptx, "testvault-invalidversion", 1);
mkinvv("testvault-invaliditemsize", 2); mkinvv(ptx, "testvault-invaliditemsize", 2);
mkinvv("testvault-invaliditemtype", 3); mkinvv(ptx, "testvault-invaliditemtype", 3);
mkinvv("testvault-invalidkeytype", 4); mkinvv(ptx, "testvault-invalidkeytype", 4);
return 0; return 0;
} }
@@ -43,9 +43,9 @@ void pr(char *t, unsigned char *b, size_t s) {
printf("\n"); printf("\n");
} }
void mkinvv(const char *name, int type) { void mkinvv(PCPCTX *ptx, const char *name, int type) {
unlink(name); unlink(name);
vault_t *v = pcpvault_new((char *)name, 0); vault_t *v = pcpvault_new(ptx, (char *)name, 0);
vault_item_header_t *item = ucmalloc(sizeof(vault_item_header_t)); vault_item_header_t *item = ucmalloc(sizeof(vault_item_header_t));
vault_header_t *header = ucmalloc(sizeof(vault_header_t)); vault_header_t *header = ucmalloc(sizeof(vault_header_t));
@@ -135,7 +135,7 @@ void mkinvalid_public(pcp_key_t *k, int type) {
free(key); free(key);
} }
void mkinvalid_secret(pcp_key_t *k, int type) { void mkinvalid_secret(PCPCTX *ptx, pcp_key_t *k, int type) {
pcp_key_t *key = ucmalloc(sizeof(pcp_key_t)); pcp_key_t *key = ucmalloc(sizeof(pcp_key_t));
memcpy(key, k, sizeof(pcp_key_t)); memcpy(key, k, sizeof(pcp_key_t));
FILE *fd = NULL; FILE *fd = NULL;
@@ -159,7 +159,7 @@ void mkinvalid_secret(pcp_key_t *k, int type) {
if(fd != NULL) { if(fd != NULL) {
pcp_dumpkey(key); pcp_dumpkey(key);
Buffer *b = pcp_export_secret(key, "xxx"); Buffer *b = pcp_export_secret(ptx, key, "xxx");
fwrite(buffer_get(b), 1, buffer_size(b), fd); fwrite(buffer_get(b), 1, buffer_size(b), fd);
fclose(fd); fclose(fd);
} }

View File

@@ -5,8 +5,12 @@ int main() {
pcp_key_t *alice, *bob; pcp_key_t *alice, *bob;
pcp_pubkey_t *alicepub, *bobpub, *pubhash; pcp_pubkey_t *alicepub, *bobpub, *pubhash;
Pcpstream *clear_in, *crypt_out, *clear_out; Pcpstream *clear_in, *crypt_out, *clear_out;
PCPCTX *ptx;
char message[] = "hello world"; char message[] = "hello world";
/* we always need a context */
ptx = ptx_new();
/* generate the keypairs for both */ /* generate the keypairs for both */
alice = pcpkey_new(); alice = pcpkey_new();
bob = pcpkey_new(); bob = pcpkey_new();
@@ -30,7 +34,7 @@ int main() {
/* actually encrypt the message, don't sign it /* actually encrypt the message, don't sign it
Alice is the sender, Bob is the recipient */ Alice is the sender, Bob is the recipient */
pcp_encrypt_stream(clear_in, crypt_out, alice, pubhash, 0); pcp_encrypt_stream(ptx, clear_in, crypt_out, alice, pubhash, 0);
/* now, print the encrypted result */ /* now, print the encrypted result */
fprintf(stderr, "Alice encrypted %"FMT_SIZE_T" bytes for Bob:\n", (SIZE_T_CAST)strlen(message)); fprintf(stderr, "Alice encrypted %"FMT_SIZE_T" bytes for Bob:\n", (SIZE_T_CAST)strlen(message));
@@ -42,14 +46,13 @@ int main() {
clear_out = ps_new_outbuffer(); clear_out = ps_new_outbuffer();
/* in order for the decryptor find the senders public key, /* in order for the decryptor find the senders public key,
we need to put it into the global hash. this step can be we need to put it into the context hash. this step can be
omitted when using a Vault. */ omitted when using a Vault. */
pcppubkey_hash = NULL; pcphash_add(ptx, alicepub, alicepub->type);
HASH_ADD_STR( pcppubkey_hash , id, alicepub);
/* try to decrypt the message */ /* try to decrypt the message */
if(pcp_decrypt_stream(crypt_out, clear_out, bob, NULL, 0) == 0) if(pcp_decrypt_stream(ptx, crypt_out, clear_out, bob, NULL, 0) == 0)
fatals_ifany(); fatals_ifany(ptx);
else { else {
/* and finally print out the decrypted message */ /* and finally print out the decrypted message */
fprintf(stderr, "Bob decrypted %"FMT_SIZE_T" bytes from Alice:\n", (SIZE_T_CAST)buffer_size(ps_buffer(crypt_out))); fprintf(stderr, "Bob decrypted %"FMT_SIZE_T" bytes from Alice:\n", (SIZE_T_CAST)buffer_size(ps_buffer(crypt_out)));
@@ -60,6 +63,8 @@ int main() {
ps_close(crypt_out); ps_close(crypt_out);
ps_close(clear_out); ps_close(clear_out);
ptx_clean(ptx);
free(alice); free(alice);
free(alicepub); free(alicepub);
free(bob); free(bob);