added crypt+sign support

This commit is contained in:
git@daemon.de
2014-01-27 16:12:43 +01:00
parent 038439bbfb
commit 770d8cb234
6 changed files with 137 additions and 38 deletions

View File

@@ -44,7 +44,7 @@ char *default_vault() {
}
int main (int argc, char **argv) {
int opt, mode, usevault, useid, userec, lo, armor, detach;
int opt, mode, usevault, useid, userec, lo, armor, detach, signcrypt;
char *vaultfile = default_vault();
char *outfile = NULL;
char *infile = NULL;
@@ -65,6 +65,7 @@ int main (int argc, char **argv) {
lo = 0;
armor = 0;
detach = 0;
signcrypt = 0;
static struct option longopts[] = {
// generics
@@ -103,12 +104,12 @@ int main (int argc, char **argv) {
// signing
{ "sign", no_argument, NULL, 'g' },
{ "check-signature", required_argument, NULL, 'c' },
{ "check-signature", optional_argument, NULL, 'c' },
{ "detach", no_argument, NULL, 'a' },
{ NULL, 0, NULL, 0 }
};
while ((opt = getopt_long(argc, argv, "klV:vdehsO:i:I:pSPRtEx:DzZr:gc:yma",
while ((opt = getopt_long(argc, argv, "klV:vdehsO:i:I:pSPRtEx:DzZr:gc::yma",
longopts, NULL)) != -1) {
switch (opt) {
@@ -183,8 +184,10 @@ int main (int argc, char **argv) {
break;
case 'c':
mode += PCP_MODE_VERIFY;
sigfile = ucmalloc(strlen(optarg)+1);
strncpy(sigfile, optarg, strlen(optarg)+1);
if(optarg) {
sigfile = ucmalloc(strlen(optarg)+1);
strncpy(sigfile, optarg, strlen(optarg)+1);
}
usevault = 1;
break;
case 'y':
@@ -238,6 +241,16 @@ int main (int argc, char **argv) {
return 1;
}
if(mode == PCP_MODE_ENCRYPT + PCP_MODE_SIGN) {
mode = PCP_MODE_ENCRYPT;
signcrypt = 1;
}
if(mode == PCP_MODE_DECRYPT + PCP_MODE_VERIFY) {
mode = PCP_MODE_DECRYPT;
signcrypt = 1;
}
sodium_init(); // FIXME: better called from the lib?
if(mode == PCP_MODE_ENCRYPT && useid == 0 && userec == 0) {
@@ -345,11 +358,11 @@ int main (int argc, char **argv) {
if(useid == 1 && userec == 0) {
// one dst, FIXME: make id a list as well
id = pcp_normalize_id(keyid);
pcpencrypt(id, infile, outfile, xpass, NULL);
pcpencrypt(id, infile, outfile, xpass, NULL, signcrypt);
}
else if(useid == 0 && userec == 1) {
// multiple dst
pcpencrypt(NULL, infile, outfile, xpass, recipient);
pcpencrypt(NULL, infile, outfile, xpass, recipient, signcrypt);
}
else {
// -i and -r specified
@@ -368,12 +381,12 @@ int main (int argc, char **argv) {
if(useid) {
id = pcp_normalize_id(keyid);
if(id != NULL) {
pcpdecrypt(id, useid, infile, outfile, xpass);
pcpdecrypt(id, useid, infile, outfile, xpass, signcrypt);
free(id);
}
}
else {
pcpdecrypt(NULL, useid, infile, outfile, xpass);
pcpdecrypt(NULL, useid, infile, outfile, xpass, signcrypt);
}
if(xpass != NULL)
free(xpass);
@@ -422,7 +435,7 @@ int main (int argc, char **argv) {
break;
case PCP_MODE_ENCRYPT_ME:
pcpencrypt(NULL, infile, outfile, xpass, NULL);
pcpencrypt(NULL, infile, outfile, xpass, NULL, 0);
break;
case PCP_MODE_TEXT: