Mercurial > hg > quicktun
changeset 37:bb4bbf380938
Added option PRIVATE_KEY_FILE to read private key from file
author | Ivo Smits <Ivo@UCIS.nl> |
---|---|
date | Mon, 06 May 2013 21:28:45 +0200 |
parents | 1fe62a94c28a |
children | d9f5caa13898 |
files | src/proto.nacl0.c src/proto.nacltai.c |
diffstat | 2 files changed, 38 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/src/proto.nacl0.c Mon May 06 21:28:05 2013 +0200 +++ b/src/proto.nacl0.c Mon May 06 21:28:45 2013 +0200 @@ -62,9 +62,25 @@ if (!(envval = getconf("PUBLIC_KEY"))) return errorexit("Missing PUBLIC_KEY"); if (strlen(envval) != 2*crypto_box_curve25519xsalsa20poly1305_PUBLICKEYBYTES) return errorexit("PUBLIC_KEY length"); hex2bin(cpublickey, envval, crypto_box_curve25519xsalsa20poly1305_PUBLICKEYBYTES); - if (!(envval = getconf("PRIVATE_KEY"))) return errorexit("Missing PRIVATE_KEY"); - if (strlen(envval) != 2*crypto_box_curve25519xsalsa20poly1305_PUBLICKEYBYTES) return errorexit("PRIVATE_KEY length"); - hex2bin(csecretkey, envval, crypto_box_curve25519xsalsa20poly1305_SECRETKEYBYTES); + if (envval = getconf("PRIVATE_KEY")) { + if (strlen(envval) != 2*crypto_box_curve25519xsalsa20poly1305_PUBLICKEYBYTES) return errorexit("PRIVATE_KEY length"); + hex2bin(csecretkey, envval, crypto_box_curve25519xsalsa20poly1305_SECRETKEYBYTES); + } else if (envval = getconf("PRIVATE_KEY_FILE")) { + FILE* pkfile = fopen(envval, "rb"); + if (!pkfile) return errorexitp("Could not open PRIVATE_KEY_FILE"); + char pktextbuf[crypto_box_curve25519xsalsa20poly1305_SECRETKEYBYTES * 2]; + size_t pktextsize = fread(pktextbuf, 1, sizeof(pktextbuf), pkfile); + if (pktextsize == crypto_box_curve25519xsalsa20poly1305_SECRETKEYBYTES) { + memcpy(csecretkey, pktextbuf, crypto_box_curve25519xsalsa20poly1305_SECRETKEYBYTES); + } else if (pktextsize = 2 * crypto_box_curve25519xsalsa20poly1305_SECRETKEYBYTES) { + hex2bin(csecretkey, pktextbuf, crypto_box_curve25519xsalsa20poly1305_SECRETKEYBYTES); + } else { + return errorexit("PRIVATE_KEY length"); + } + fclose(pkfile); + } else { + return errorexit("Missing PRIVATE_KEY"); + } crypto_box_curve25519xsalsa20poly1305_beforenm(d->cbefore, cpublickey, csecretkey); return 0; }
--- a/src/proto.nacltai.c Mon May 06 21:28:05 2013 +0200 +++ b/src/proto.nacltai.c Mon May 06 21:28:45 2013 +0200 @@ -164,9 +164,25 @@ if (!(envval = getconf("PUBLIC_KEY"))) return errorexit("Missing PUBLIC_KEY"); if (strlen(envval) != 2*crypto_box_curve25519xsalsa20poly1305_PUBLICKEYBYTES) return errorexit("PUBLIC_KEY length"); hex2bin(cpublickey, envval, crypto_box_curve25519xsalsa20poly1305_PUBLICKEYBYTES); - if (!(envval = getconf("PRIVATE_KEY"))) return errorexit("Missing PRIVATE_KEY"); - if (strlen(envval) != 2*crypto_box_curve25519xsalsa20poly1305_PUBLICKEYBYTES) return errorexit("PRIVATE_KEY length"); - hex2bin(csecretkey, envval, crypto_box_curve25519xsalsa20poly1305_SECRETKEYBYTES); + if (envval = getconf("PRIVATE_KEY")) { + if (strlen(envval) != 2*crypto_box_curve25519xsalsa20poly1305_PUBLICKEYBYTES) return errorexit("PRIVATE_KEY length"); + hex2bin(csecretkey, envval, crypto_box_curve25519xsalsa20poly1305_SECRETKEYBYTES); + } else if (envval = getconf("PRIVATE_KEY_FILE")) { + FILE* pkfile = fopen(envval, "rb"); + if (!pkfile) return errorexitp("Could not open PRIVATE_KEY_FILE"); + char pktextbuf[crypto_box_curve25519xsalsa20poly1305_SECRETKEYBYTES * 2]; + size_t pktextsize = fread(pktextbuf, 1, sizeof(pktextbuf), pkfile); + if (pktextsize == crypto_box_curve25519xsalsa20poly1305_SECRETKEYBYTES) { + memcpy(csecretkey, pktextbuf, crypto_box_curve25519xsalsa20poly1305_SECRETKEYBYTES); + } else if (pktextsize = 2 * crypto_box_curve25519xsalsa20poly1305_SECRETKEYBYTES) { + hex2bin(csecretkey, pktextbuf, crypto_box_curve25519xsalsa20poly1305_SECRETKEYBYTES); + } else { + return errorexit("PRIVATE_KEY length"); + } + fclose(pkfile); + } else { + return errorexit("Missing PRIVATE_KEY"); + } crypto_box_curve25519xsalsa20poly1305_beforenm(d->cbefore, cpublickey, csecretkey); memset(d->cenonce, 0, crypto_box_curve25519xsalsa20poly1305_NONCEBYTES);