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");
|
|
|
|
|
|
2015-11-15 17:02:51 +01:00
|
|
|
if(sodium_init() == -1) return 1;
|
2014-05-05 11:57:57 +02:00
|
|
|
PCPCTX *ptx = ptx_new();
|
2013-10-28 22:50:05 +01:00
|
|
|
pcp_key_t *k = pcpkey_new ();
|
|
|
|
|
|
|
|
|
|
memcpy(k->owner, o, 8);
|
|
|
|
|
memcpy(k->mail, m, 8);
|
|
|
|
|
|
2014-05-05 11:57:57 +02:00
|
|
|
pcp_key_t *key = pcpkey_encrypt(ptx, k, pw);
|
2013-10-28 22:50:05 +01:00
|
|
|
|
|
|
|
|
int i;
|
2014-02-27 19:53:25 +01:00
|
|
|
for(i=0; i<3; i++)
|
2014-05-05 11:57:57 +02:00
|
|
|
mkinvalid_secret(ptx, key, i);
|
2013-10-28 22:50:05 +01:00
|
|
|
|
|
|
|
|
for(i=0; i<4; i++)
|
2015-07-07 10:38:42 +02:00
|
|
|
mkinvalid_public(ptx, key, i);
|
2013-10-28 22:50:05 +01:00
|
|
|
|
2014-05-05 11:57:57 +02:00
|
|
|
mkinvv(ptx, "testvault-invalidheader", 0);
|
|
|
|
|
mkinvv(ptx, "testvault-invalidversion", 1);
|
|
|
|
|
mkinvv(ptx, "testvault-invaliditemsize", 2);
|
|
|
|
|
mkinvv(ptx, "testvault-invaliditemtype", 3);
|
|
|
|
|
mkinvv(ptx, "testvault-invalidkeytype", 4);
|
2013-10-28 22:50:05 +01:00
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void pr(char *t, unsigned char *b, size_t s) {
|
2014-02-25 18:05:32 +01:00
|
|
|
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");
|
|
|
|
|
}
|
|
|
|
|
|
2014-05-05 11:57:57 +02:00
|
|
|
void mkinvv(PCPCTX *ptx, const char *name, int type) {
|
2013-10-28 22:50:05 +01:00
|
|
|
unlink(name);
|
2014-05-05 11:57:57 +02:00
|
|
|
vault_t *v = pcpvault_new(ptx, (char *)name, 0);
|
2013-10-28 22:50:05 +01:00
|
|
|
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);
|
|
|
|
|
}
|
|
|
|
|
|
2015-07-07 10:38:42 +02:00
|
|
|
void mkinvalid_public(PCPCTX *ptx, pcp_key_t *k, int type) {
|
2014-02-27 19:53:25 +01:00
|
|
|
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) {
|
2015-07-07 10:38:42 +02:00
|
|
|
Buffer *b = pcp_export_rfc_pub(ptx, key);
|
2014-02-27 19:53:25 +01:00
|
|
|
fwrite(buffer_get(b), 1, buffer_size(b), fd);
|
|
|
|
|
fclose(fd);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
free(key);
|
2013-10-28 22:50:05 +01:00
|
|
|
}
|
|
|
|
|
|
2014-05-05 11:57:57 +02:00
|
|
|
void mkinvalid_secret(PCPCTX *ptx, 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);
|
2014-05-05 11:57:57 +02:00
|
|
|
Buffer *b = pcp_export_secret(ptx, key, "xxx");
|
2014-02-27 19:53:25 +01:00
|
|
|
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;
|
|
|
|
|
}
|