# HG changeset patch # User Ivo Smits # Date 1367868525 -7200 # Node ID bb4bbf3809386afb844fbe4dc2410d5bbb34a986 # Parent 1fe62a94c28a0e492136b5824cd69997223e9aa6 Added option PRIVATE_KEY_FILE to read private key from file diff -r 1fe62a94c28a -r bb4bbf380938 src/proto.nacl0.c --- 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; } diff -r 1fe62a94c28a -r bb4bbf380938 src/proto.nacltai.c --- 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);