Files
pcp/tests/invalidkeys.c

181 lines
3.7 KiB
C
Raw Normal View History

2013-10-28 22:50:05 +01:00
#include "invalidkeys.h"
int main() {
char *pw =ucmalloc(8);
char *pw2 =ucmalloc(8);
char *o = ucmalloc(8);
char *m = ucmalloc(8);
strcpy(pw, "xxxx");
strcpy(pw2, "xxxx");
strcpy(o, "xxxx");
strcpy(m, "xxxx");
2013-12-19 12:37:03 +01:00
sodium_init();
2013-10-28 22:50:05 +01:00
pcp_key_t *k = pcpkey_new ();
memcpy(k->owner, o, 8);
memcpy(k->mail, m, 8);
pcp_key_t *key = pcpkey_encrypt(k, pw);
int i;
2014-02-27 19:53:25 +01:00
for(i=0; i<3; i++)
mkinvalid_secret(key, i);
2013-10-28 22:50:05 +01:00
for(i=0; i<4; i++)
2014-02-27 19:53:25 +01:00
mkinvalid_public(key, i);
2013-10-28 22:50:05 +01:00
mkinvv("testvault-invalidheader", 0);
mkinvv("testvault-invalidversion", 1);
mkinvv("testvault-invaliditemsize", 2);
mkinvv("testvault-invaliditemtype", 3);
mkinvv("testvault-invalidkeytype", 4);
return 0;
}
void pr(char *t, unsigned char *b, size_t s) {
size_t i;
2013-10-28 22:50:05 +01:00
printf("%s:\n", t);
for(i=0; i<s; ++i)
printf("%02x", (unsigned int) b[i]);
printf("\n");
}
void mkinvv(const char *name, int type) {
unlink(name);
vault_t *v = pcpvault_new((char *)name, 0);
vault_item_header_t *item = ucmalloc(sizeof(vault_item_header_t));
vault_header_t *header = ucmalloc(sizeof(vault_header_t));
header->fileid = PCP_VAULT_ID;
header->version = PCP_VAULT_VERSION;
2013-10-29 23:08:43 +01:00
memset(header->checksum, 0, 32);
2013-10-28 22:50:05 +01:00
item->version = PCP_KEY_VERSION;
item->type = PCP_KEY_TYPE_SECRET;
item->size = sizeof(pcp_key_t);
unsigned char *blah = ucmalloc(30);
unsigned char *blub = ucmalloc(sizeof(pcp_pubkey_t));
fseek(v->fd, 0, SEEK_SET);
switch (type) {
case 0:
header->fileid = 0;
vh2be(header);
fwrite(header, sizeof(vault_header_t), 1, v->fd);
break;
case 1:
header->version = 0;
vh2be(header);
fwrite(header, sizeof(vault_header_t), 1, v->fd);
break;
case 2:
vh2be(header);
fwrite(header, sizeof(vault_header_t), 1, v->fd);
item->size = 8;
ih2be(item);
fwrite(item, sizeof(vault_item_header_t), 1, v->fd);
break;
case 3:
vh2be(header);
fwrite(header, sizeof(vault_header_t), 1, v->fd);
item->type = 0x08;
ih2be(item);
fwrite(item, sizeof(vault_item_header_t), 1, v->fd);
fwrite(blub, sizeof(pcp_pubkey_t), 1, v->fd);
break;
case 4:
vh2be(header);
fwrite(header, sizeof(vault_header_t), 1, v->fd);
fwrite(blah, 30, 1, v->fd);
break;
}
fclose(v->fd);
}
2014-02-27 19:53:25 +01:00
void mkinvalid_public(pcp_key_t *k, int type) {
pcp_key_t *key = ucmalloc(sizeof(pcp_key_t));
memcpy(key, k, sizeof(pcp_key_t));
FILE *fd = NULL;
2013-10-28 22:50:05 +01:00
switch(type) {
case 0:
key->type = 0;
2014-02-27 19:53:25 +01:00
fd = F("testpubkey-wrong-type");
2013-10-28 22:50:05 +01:00
break;
case 1:
key->version = 0;
2014-02-27 19:53:25 +01:00
fd = F("testpubkey-wrong-version");
2013-10-28 22:50:05 +01:00
break;
case 2:
key->serial = 0;
2014-02-27 19:53:25 +01:00
fd = F("testpubkey-wrong-serial");
2013-10-28 22:50:05 +01:00
break;
case 3:
key->ctime = 0;
2014-02-27 19:53:25 +01:00
fd = F("testpubkey-invalid-ctime");
2013-10-28 22:50:05 +01:00
break;
}
2014-02-27 19:53:25 +01:00
if(fd != NULL) {
Buffer *b = pcp_export_rfc_pub(key);
fwrite(buffer_get(b), 1, buffer_size(b), fd);
fclose(fd);
}
free(key);
2013-10-28 22:50:05 +01:00
}
2014-02-27 19:53:25 +01:00
void mkinvalid_secret(pcp_key_t *k, int type) {
2013-10-28 22:50:05 +01:00
pcp_key_t *key = ucmalloc(sizeof(pcp_key_t));
memcpy(key, k, sizeof(pcp_key_t));
2014-02-27 19:53:25 +01:00
FILE *fd = NULL;
fprintf(stderr, "fd test %d\n", type);
2013-10-28 22:50:05 +01:00
switch(type) {
case 0:
key->version = 0;
2014-02-27 19:53:25 +01:00
fd = F("testkey-wrong-version");
2013-10-28 22:50:05 +01:00
break;
2014-02-27 19:53:25 +01:00
case 1:
2013-10-28 22:50:05 +01:00
key->serial = 0;
2014-02-27 19:53:25 +01:00
fd = F("testkey-wrong-serial");
2013-10-28 22:50:05 +01:00
break;
2014-02-27 19:53:25 +01:00
case 2:
2013-10-28 22:50:05 +01:00
key->ctime = 0;
2014-02-27 19:53:25 +01:00
fd = F("testkey-invalid-ctime");
2013-10-28 22:50:05 +01:00
break;
}
2014-02-27 19:53:25 +01:00
if(fd != NULL) {
pcp_dumpkey(key);
Buffer *b = pcp_export_secret(key, "xxx");
fwrite(buffer_get(b), 1, buffer_size(b), fd);
fclose(fd);
}
else {
fprintf(stderr, "fd not opened for test %d\n", type);
}
free(key);
2013-10-28 22:50:05 +01:00
}
FILE *F(char *filename) {
FILE *f;
if((f = fopen(filename, "wb+")) == NULL) {
fprintf(stderr, "Could not open output file %s\n", filename);
exit(1);
}
return f;
}