Module Name: src
Committed By: agc
Date: Tue Dec 22 06:03:25 UTC 2009
Modified Files:
src/crypto/external/bsd/netpgp/dist: TODO configure configure.ac
src/crypto/external/bsd/netpgp/dist/include: netpgp.h
src/crypto/external/bsd/netpgp/dist/src/lib: Makefile.in crypto.c
crypto.h libnetpgp.3 netpgp.c signature.c ssh2pgp.c validate.c
validate.h version.h
src/crypto/external/bsd/netpgp/dist/src/netpgp: Makefile netpgp.1
netpgp.c
src/crypto/external/bsd/netpgp/dist/src/netpgpverify: Makefile
src/crypto/external/bsd/netpgp/lib: config.h
Log Message:
Netpgp changes to 1.99.15/20091221
+ some ssh host keys do not have the username of the generator included
in the key itself. If there is no username in there, create one.
+ added netpgp_encrypt_memory() and netpgp_decrypt_memory()
+ overhaul netpgp(1) to work with stdin/stdout if no filenames specified:
% netpgp --encrypt < a | netpgp --decrypt > b
netpgp: default key set to "C0596823"
netpgp: default key set to "C0596823"
pub 2048/RSA (Encrypt or Sign) 1b68dcfcc0596823 2004-01-12
Key fingerprint: d415 9deb 336d e4cc cdfa 00cd 1b68 dcfc c059 6823
uid Alistair Crooks <[email protected]>
uid Alistair Crooks <[email protected]>
uid Alistair Crooks <[email protected]>
uid Alistair Crooks <[email protected]>
netpgp passphrase:
% diff a b
% ls -al a b
-rw-r--r-- 1 agc agc 15243 Dec 20 08:55 a
-rw-r--r-- 1 agc agc 15243 Dec 21 17:15 b
%
% netpgp --sign < a | netpgp --cat > b
netpgp: default key set to "C0596823"
netpgp: default key set to "C0596823"
pub 2048/RSA (Encrypt or Sign) 1b68dcfcc0596823 2004-01-12
Key fingerprint: d415 9deb 336d e4cc cdfa 00cd 1b68 dcfc c059 6823
uid Alistair Crooks <[email protected]>
uid Alistair Crooks <[email protected]>
uid Alistair Crooks <[email protected]>
uid Alistair Crooks <[email protected]>
netpgp passphrase:
Good signature for <stdin> made Mon Dec 21 18:25:02 2009
using RSA (Encrypt or Sign) key 1b68dcfcc0596823
pub 2048/RSA (Encrypt or Sign) 1b68dcfcc0596823 2004-01-12
Key fingerprint: d415 9deb 336d e4cc cdfa 00cd 1b68 dcfc c059 6823
uid Alistair Crooks <[email protected]>
uid Alistair Crooks <[email protected]>
uid Alistair Crooks <[email protected]>
uid Alistair Crooks <[email protected]>
uid Alistair Crooks (Yahoo!) <[email protected]>
%
+ add explanations of memory-based operations to manual pages
To generate a diff of this commit:
cvs rdiff -u -r1.27 -r1.28 src/crypto/external/bsd/netpgp/dist/TODO
cvs rdiff -u -r1.20 -r1.21 src/crypto/external/bsd/netpgp/dist/configure
cvs rdiff -u -r1.19 -r1.20 src/crypto/external/bsd/netpgp/dist/configure.ac
cvs rdiff -u -r1.13 -r1.14 \
src/crypto/external/bsd/netpgp/dist/include/netpgp.h
cvs rdiff -u -r1.6 -r1.7 \
src/crypto/external/bsd/netpgp/dist/src/lib/Makefile.in
cvs rdiff -u -r1.17 -r1.18 \
src/crypto/external/bsd/netpgp/dist/src/lib/crypto.c
cvs rdiff -u -r1.12 -r1.13 \
src/crypto/external/bsd/netpgp/dist/src/lib/crypto.h
cvs rdiff -u -r1.10 -r1.11 \
src/crypto/external/bsd/netpgp/dist/src/lib/libnetpgp.3 \
src/crypto/external/bsd/netpgp/dist/src/lib/validate.h
cvs rdiff -u -r1.33 -r1.34 \
src/crypto/external/bsd/netpgp/dist/src/lib/netpgp.c
cvs rdiff -u -r1.23 -r1.24 \
src/crypto/external/bsd/netpgp/dist/src/lib/signature.c
cvs rdiff -u -r1.5 -r1.6 \
src/crypto/external/bsd/netpgp/dist/src/lib/ssh2pgp.c
cvs rdiff -u -r1.24 -r1.25 \
src/crypto/external/bsd/netpgp/dist/src/lib/validate.c
cvs rdiff -u -r1.21 -r1.22 \
src/crypto/external/bsd/netpgp/dist/src/lib/version.h
cvs rdiff -u -r1.5 -r1.6 \
src/crypto/external/bsd/netpgp/dist/src/netpgp/Makefile \
src/crypto/external/bsd/netpgp/dist/src/netpgp/netpgp.1
cvs rdiff -u -r1.8 -r1.9 \
src/crypto/external/bsd/netpgp/dist/src/netpgp/netpgp.c
cvs rdiff -u -r1.4 -r1.5 \
src/crypto/external/bsd/netpgp/dist/src/netpgpverify/Makefile
cvs rdiff -u -r1.2 -r1.3 src/crypto/external/bsd/netpgp/lib/config.h
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/crypto/external/bsd/netpgp/dist/TODO
diff -u src/crypto/external/bsd/netpgp/dist/TODO:1.27 src/crypto/external/bsd/netpgp/dist/TODO:1.28
--- src/crypto/external/bsd/netpgp/dist/TODO:1.27 Mon Dec 14 23:29:56 2009
+++ src/crypto/external/bsd/netpgp/dist/TODO Tue Dec 22 06:03:24 2009
@@ -10,10 +10,8 @@
separate from libcrypto?
64-bit offsets
thresholds
-Multiple recipients for encryption - ssss
default compression when signing?
elgamal enc/decryption?
-convert tests from ./tst to the autotest ./tests/
hkpd
Done
@@ -76,3 +74,7 @@
don't complain if no .gnupg dir (even when using --homedir)
make it work with ssh host keys
regex matching for names and signatures
+in memory encryption and decryption
+netpgpagent
+ssss
+make netpgp work from stdin/to stdout
Index: src/crypto/external/bsd/netpgp/dist/configure
diff -u src/crypto/external/bsd/netpgp/dist/configure:1.20 src/crypto/external/bsd/netpgp/dist/configure:1.21
--- src/crypto/external/bsd/netpgp/dist/configure:1.20 Mon Dec 14 23:29:56 2009
+++ src/crypto/external/bsd/netpgp/dist/configure Tue Dec 22 06:03:24 2009
@@ -1,7 +1,7 @@
#! /bin/sh
-# From configure.ac Revision: 1.18 .
+# From configure.ac Revision: 1.19 .
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.63 for netpgp 20091210.
+# Generated by GNU Autoconf 2.63 for netpgp 20091221.
#
# Report bugs to <Alistair Crooks <[email protected]> c0596823>.
#
@@ -751,8 +751,8 @@
# Identity of this package.
PACKAGE_NAME='netpgp'
PACKAGE_TARNAME='netpgp'
-PACKAGE_VERSION='20091210'
-PACKAGE_STRING='netpgp 20091210'
+PACKAGE_VERSION='20091221'
+PACKAGE_STRING='netpgp 20091221'
PACKAGE_BUGREPORT='Alistair Crooks <[email protected]> c0596823'
ac_unique_file="src/netpgp/netpgp.c"
@@ -1483,7 +1483,7 @@
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures netpgp 20091210 to adapt to many kinds of systems.
+\`configure' configures netpgp 20091221 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1553,7 +1553,7 @@
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of netpgp 20091210:";;
+ short | recursive ) echo "Configuration of netpgp 20091221:";;
esac
cat <<\_ACEOF
@@ -1660,7 +1660,7 @@
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-netpgp configure 20091210
+netpgp configure 20091221
generated by GNU Autoconf 2.63
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
@@ -1674,7 +1674,7 @@
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by netpgp $as_me 20091210, which was
+It was created by netpgp $as_me 20091221, which was
generated by GNU Autoconf 2.63. Invocation command line was
$ $0 $@
@@ -2561,7 +2561,7 @@
# Define the identity of the package.
PACKAGE='netpgp'
- VERSION='20091210'
+ VERSION='20091221'
cat >>confdefs.h <<_ACEOF
@@ -22306,7 +22306,7 @@
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by netpgp $as_me 20091210, which was
+This file was extended by netpgp $as_me 20091221, which was
generated by GNU Autoconf 2.63. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -22369,7 +22369,7 @@
_ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_version="\\
-netpgp config.status 20091210
+netpgp config.status 20091221
configured by $0, generated by GNU Autoconf 2.63,
with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
Index: src/crypto/external/bsd/netpgp/dist/configure.ac
diff -u src/crypto/external/bsd/netpgp/dist/configure.ac:1.19 src/crypto/external/bsd/netpgp/dist/configure.ac:1.20
--- src/crypto/external/bsd/netpgp/dist/configure.ac:1.19 Mon Dec 14 23:29:56 2009
+++ src/crypto/external/bsd/netpgp/dist/configure.ac Tue Dec 22 06:03:24 2009
@@ -1,10 +1,10 @@
-# $NetBSD: configure.ac,v 1.19 2009/12/14 23:29:56 agc Exp $
+# $NetBSD: configure.ac,v 1.20 2009/12/22 06:03:24 agc Exp $
#
# Process this file with autoconf to produce a configure script.
-AC_INIT([netpgp],[20091210],[Alistair Crooks <[email protected]> c0596823])
+AC_INIT([netpgp],[20091221],[Alistair Crooks <[email protected]> c0596823])
AC_PREREQ(2.63)
-AC_REVISION([$Revision: 1.19 $])
+AC_REVISION([$Revision: 1.20 $])
AS_SHELL_SANITIZE
Index: src/crypto/external/bsd/netpgp/dist/include/netpgp.h
diff -u src/crypto/external/bsd/netpgp/dist/include/netpgp.h:1.13 src/crypto/external/bsd/netpgp/dist/include/netpgp.h:1.14
--- src/crypto/external/bsd/netpgp/dist/include/netpgp.h:1.13 Mon Dec 14 23:29:56 2009
+++ src/crypto/external/bsd/netpgp/dist/include/netpgp.h Tue Dec 22 06:03:24 2009
@@ -86,9 +86,11 @@
int netpgp_sign_file(netpgp_t *, const char *, const char *, char *, int, int, int);
int netpgp_verify_file(netpgp_t *, const char *, const char *, int);
-/* memory signing */
+/* memory signing and encryption */
int netpgp_sign_memory(netpgp_t *, const char *, char *, size_t, char *, size_t, const unsigned, const unsigned);
-int netpgp_verify_memory(netpgp_t *, const void *, const size_t, const int);
+int netpgp_verify_memory(netpgp_t *, const void *, const size_t, void *, size_t, const int);
+int netpgp_encrypt_memory(netpgp_t *, const char *, void *, const size_t, char *, size_t, int);
+int netpgp_decrypt_memory(netpgp_t *, const void *, const size_t, char *, size_t, const int);
__END_DECLS
Index: src/crypto/external/bsd/netpgp/dist/src/lib/Makefile.in
diff -u src/crypto/external/bsd/netpgp/dist/src/lib/Makefile.in:1.6 src/crypto/external/bsd/netpgp/dist/src/lib/Makefile.in:1.7
--- src/crypto/external/bsd/netpgp/dist/src/lib/Makefile.in:1.6 Mon Dec 14 23:29:56 2009
+++ src/crypto/external/bsd/netpgp/dist/src/lib/Makefile.in Tue Dec 22 06:03:24 2009
@@ -52,17 +52,16 @@
libLTLIBRARIES_INSTALL = $(INSTALL)
LTLIBRARIES = $(lib_LTLIBRARIES)
libnetpgp_la_LIBADD =
-am_libnetpgp_la_OBJECTS = libnetpgp_la-compress.lo \
- libnetpgp_la-bufgap.lo \
- libnetpgp_la-create.lo libnetpgp_la-crypto.lo \
- libnetpgp_la-fastctype.lo \
+am_libnetpgp_la_OBJECTS = libnetpgp_la-bufgap.lo \
+ libnetpgp_la-compress.lo libnetpgp_la-create.lo \
+ libnetpgp_la-crypto.lo libnetpgp_la-fastctype.lo \
libnetpgp_la-keyring.lo libnetpgp_la-misc.lo \
libnetpgp_la-netpgp.lo libnetpgp_la-openssl_crypto.lo \
libnetpgp_la-packet-parse.lo libnetpgp_la-packet-print.lo \
libnetpgp_la-packet-show.lo libnetpgp_la-reader.lo \
- libnetpgp_la-signature.lo libnetpgp_la-symmetric.lo \
- libnetpgp_la-ssh2pgp.lo \
- libnetpgp_la-validate.lo libnetpgp_la-writer.lo
+ libnetpgp_la-signature.lo libnetpgp_la-ssh2pgp.lo \
+ libnetpgp_la-symmetric.lo libnetpgp_la-validate.lo \
+ libnetpgp_la-writer.lo
libnetpgp_la_OBJECTS = $(am_libnetpgp_la_OBJECTS)
DEFAULT_INCLUDES = -...@am__isrc@
depcomp = $(SHELL) $(top_srcdir)/buildaux/depcomp
Index: src/crypto/external/bsd/netpgp/dist/src/lib/crypto.c
diff -u src/crypto/external/bsd/netpgp/dist/src/lib/crypto.c:1.17 src/crypto/external/bsd/netpgp/dist/src/lib/crypto.c:1.18
--- src/crypto/external/bsd/netpgp/dist/src/lib/crypto.c:1.17 Tue Oct 6 02:26:05 2009
+++ src/crypto/external/bsd/netpgp/dist/src/lib/crypto.c Tue Dec 22 06:03:24 2009
@@ -54,7 +54,7 @@
#if defined(__NetBSD__)
__COPYRIGHT("@(#) Copyright (c) 2009 The NetBSD Foundation, Inc. All rights reserved.");
-__RCSID("$NetBSD: crypto.c,v 1.17 2009/10/06 02:26:05 agc Exp $");
+__RCSID("$NetBSD: crypto.c,v 1.18 2009/12/22 06:03:24 agc Exp $");
#endif
#include <sys/types.h>
@@ -215,8 +215,68 @@
return 1;
}
-static __ops_cb_ret_t
-callback_write_parsed(const __ops_packet_t *, __ops_cbdata_t *);
+static __ops_cb_ret_t
+write_parsed_cb(const __ops_packet_t *pkt, __ops_cbdata_t *cbinfo)
+{
+ const __ops_contents_t *content = &pkt->u;
+ static unsigned skipping; /* XXX - put skipping into pkt? */
+
+ if (__ops_get_debug_level(__FILE__)) {
+ printf("write_parsed_cb: ");
+ __ops_print_packet(pkt);
+ }
+ if (pkt->tag != OPS_PTAG_CT_UNARMOURED_TEXT && skipping) {
+ puts("...end of skip");
+ skipping = 0;
+ }
+ switch (pkt->tag) {
+ case OPS_PTAG_CT_UNARMOURED_TEXT:
+ printf("OPS_PTAG_CT_UNARMOURED_TEXT\n");
+ if (!skipping) {
+ puts("Skipping...");
+ skipping = 1;
+ }
+ fwrite(content->unarmoured_text.data, 1,
+ content->unarmoured_text.length, stdout);
+ break;
+
+ case OPS_PTAG_CT_PK_SESSION_KEY:
+ return pk_sesskey_cb(pkt, cbinfo);
+
+ case OPS_GET_SECKEY:
+ return get_seckey_cb(pkt, cbinfo);
+
+ case OPS_GET_PASSPHRASE:
+ return cbinfo->cryptinfo.getpassphrase(pkt, cbinfo);
+
+ case OPS_PTAG_CT_LITDATA_BODY:
+ return litdata_cb(pkt, cbinfo);
+
+ case OPS_PTAG_CT_ARMOUR_HEADER:
+ case OPS_PTAG_CT_ARMOUR_TRAILER:
+ case OPS_PTAG_CT_ENCRYPTED_PK_SESSION_KEY:
+ case OPS_PTAG_CT_COMPRESSED:
+ case OPS_PTAG_CT_LITDATA_HEADER:
+ case OPS_PTAG_CT_SE_IP_DATA_BODY:
+ case OPS_PTAG_CT_SE_IP_DATA_HEADER:
+ case OPS_PTAG_CT_SE_DATA_BODY:
+ case OPS_PTAG_CT_SE_DATA_HEADER:
+ /* Ignore these packets */
+ /* They're handled in __ops_parse_packet() */
+ /* and nothing else needs to be done */
+ break;
+
+ default:
+ if (__ops_get_debug_level(__FILE__)) {
+ fprintf(stderr, "Unexpected packet tag=%d (0x%x)\n",
+ pkt->tag,
+ pkt->tag);
+ }
+ break;
+ }
+
+ return OPS_RELEASE_MEMORY;
+}
/**
\ingroup HighLevel_Crypto
@@ -269,6 +329,44 @@
return 1;
}
+/* encrypt the contents of the input buffer, and return the mem structure */
+__ops_memory_t *
+__ops_encrypt_buf(__ops_io_t *io,
+ const void *input,
+ const size_t insize,
+ const __ops_key_t *pubkey,
+ const unsigned use_armour)
+{
+ __ops_output_t *output;
+ __ops_memory_t *outmem;
+
+ __OPS_USED(io);
+ if (input == NULL) {
+ (void) fprintf(io->errs,
+ "__ops_encrypt_buf: null memory\n");
+ return 0;
+ }
+
+ __ops_setup_memory_write(&output, &outmem, insize);
+
+ /* set armoured/not armoured here */
+ if (use_armour) {
+ __ops_writer_push_armor_msg(output);
+ }
+
+ /* Push the encrypted writer */
+ __ops_push_enc_se_ip(output, pubkey);
+
+ /* This does the writing */
+ __ops_write(output, input, insize);
+
+ /* tidy up */
+ __ops_writer_close(output);
+ __ops_output_delete(output);
+
+ return outmem;
+}
+
/**
\ingroup HighLevel_Crypto
\brief Decrypt a file.
@@ -299,7 +397,7 @@
/* setup for reading from given input file */
fd_in = __ops_setup_file_read(io, &parse, infile,
NULL,
- callback_write_parsed,
+ write_parsed_cb,
0);
if (fd_in < 0) {
perror(infile);
@@ -373,65 +471,65 @@
return 1;
}
-static __ops_cb_ret_t
-callback_write_parsed(const __ops_packet_t *pkt, __ops_cbdata_t *cbinfo)
+/* decrypt an area of memory */
+__ops_memory_t *
+__ops_decrypt_buf(__ops_io_t *io,
+ const void *input,
+ const size_t insize,
+ __ops_keyring_t *keyring,
+ const unsigned use_armour,
+ void *passfp,
+ __ops_cbfunc_t *getpassfunc)
{
- const __ops_contents_t *content = &pkt->u;
- static unsigned skipping; /* XXX - put skipping into pkt? */
+ __ops_stream_t *parse = NULL;
+ __ops_memory_t *outmem;
+ __ops_memory_t *inmem;
+ const int printerrors = 1;
- if (__ops_get_debug_level(__FILE__)) {
- printf("callback_write_parsed: ");
- __ops_print_packet(pkt);
- }
- if (pkt->tag != OPS_PTAG_CT_UNARMOURED_TEXT && skipping) {
- puts("...end of skip");
- skipping = 0;
+ if (input == NULL) {
+ (void) fprintf(io->errs,
+ "__ops_encrypt_buf: null memory\n");
+ return 0;
}
- switch (pkt->tag) {
- case OPS_PTAG_CT_UNARMOURED_TEXT:
- printf("OPS_PTAG_CT_UNARMOURED_TEXT\n");
- if (!skipping) {
- puts("Skipping...");
- skipping = 1;
- }
- fwrite(content->unarmoured_text.data, 1,
- content->unarmoured_text.length, stdout);
- break;
- case OPS_PTAG_CT_PK_SESSION_KEY:
- return pk_sesskey_cb(pkt, cbinfo);
+ inmem = __ops_memory_new();
+ __ops_memory_add(inmem, input, insize);
- case OPS_GET_SECKEY:
- return get_seckey_cb(pkt, cbinfo);
+ /* set up to read from memory */
+ __ops_setup_memory_read(io, &parse, inmem,
+ NULL,
+ write_parsed_cb,
+ 0);
- case OPS_GET_PASSPHRASE:
- return cbinfo->cryptinfo.getpassphrase(pkt, cbinfo);
+ /* setup for writing decrypted contents to given output file */
+ __ops_setup_memory_write(&parse->cbinfo.output, &outmem, insize);
- case OPS_PTAG_CT_LITDATA_BODY:
- return litdata_cb(pkt, cbinfo);
+ /* setup keyring and passphrase callback */
+ parse->cbinfo.cryptinfo.keyring = keyring;
+ parse->cbinfo.passfp = passfp;
+ parse->cbinfo.cryptinfo.getpassphrase = getpassfunc;
- case OPS_PTAG_CT_ARMOUR_HEADER:
- case OPS_PTAG_CT_ARMOUR_TRAILER:
- case OPS_PTAG_CT_ENCRYPTED_PK_SESSION_KEY:
- case OPS_PTAG_CT_COMPRESSED:
- case OPS_PTAG_CT_LITDATA_HEADER:
- case OPS_PTAG_CT_SE_IP_DATA_BODY:
- case OPS_PTAG_CT_SE_IP_DATA_HEADER:
- case OPS_PTAG_CT_SE_DATA_BODY:
- case OPS_PTAG_CT_SE_DATA_HEADER:
- /* Ignore these packets */
- /* They're handled in __ops_parse_packet() */
- /* and nothing else needs to be done */
- break;
+ /* Set up armour/passphrase options */
+ if (use_armour) {
+ __ops_reader_push_dearmour(parse);
+ }
- default:
- if (__ops_get_debug_level(__FILE__)) {
- fprintf(stderr, "Unexpected packet tag=%d (0x%x)\n",
- pkt->tag,
- pkt->tag);
- }
- break;
+ /* Do it */
+ __ops_parse(parse, printerrors);
+
+ /* Unsetup */
+ if (use_armour) {
+ __ops_reader_pop_dearmour(parse);
}
- return OPS_RELEASE_MEMORY;
+ /* tidy up */
+ __ops_teardown_memory_read(parse, inmem);
+ __ops_memory_release(inmem);
+ free(inmem);
+
+ __ops_writer_close(parse->cbinfo.output);
+ __ops_output_delete(parse->cbinfo.output);
+
+ return outmem;
}
+
Index: src/crypto/external/bsd/netpgp/dist/src/lib/crypto.h
diff -u src/crypto/external/bsd/netpgp/dist/src/lib/crypto.h:1.12 src/crypto/external/bsd/netpgp/dist/src/lib/crypto.h:1.13
--- src/crypto/external/bsd/netpgp/dist/src/lib/crypto.h:1.12 Sat Dec 5 07:08:18 2009
+++ src/crypto/external/bsd/netpgp/dist/src/lib/crypto.h Tue Dec 22 06:03:24 2009
@@ -55,6 +55,7 @@
#include "keyring.h"
#include "packet.h"
+#include "memory.h"
#include "packet-parse.h"
#include <openssl/dsa.h>
@@ -191,6 +192,21 @@
void *,
__ops_cbfunc_t *);
+__ops_memory_t *
+__ops_encrypt_buf(__ops_io_t *,
+ const void *,
+ const size_t,
+ const __ops_key_t *,
+ const unsigned);
+__ops_memory_t *
+__ops_decrypt_buf(__ops_io_t *,
+ const void *,
+ const size_t,
+ __ops_keyring_t *,
+ const unsigned,
+ void *,
+ __ops_cbfunc_t *);
+
/* Keys */
__ops_key_t *__ops_rsa_new_selfsign_key(const int,
const unsigned long, __ops_userid_t *);
Index: src/crypto/external/bsd/netpgp/dist/src/lib/libnetpgp.3
diff -u src/crypto/external/bsd/netpgp/dist/src/lib/libnetpgp.3:1.10 src/crypto/external/bsd/netpgp/dist/src/lib/libnetpgp.3:1.11
--- src/crypto/external/bsd/netpgp/dist/src/lib/libnetpgp.3:1.10 Mon Dec 14 23:29:56 2009
+++ src/crypto/external/bsd/netpgp/dist/src/lib/libnetpgp.3 Tue Dec 22 06:03:24 2009
@@ -1,4 +1,4 @@
-.\" $NetBSD: libnetpgp.3,v 1.10 2009/12/14 23:29:56 agc Exp $
+.\" $NetBSD: libnetpgp.3,v 1.11 2009/12/22 06:03:24 agc Exp $
.\"
.\" Copyright (c) 2009 The NetBSD Foundation, Inc.
.\" All rights reserved.
@@ -27,7 +27,7 @@
.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
.\" POSSIBILITY OF SUCH DAMAGE.
.\"
-.Dd November 19, 2009
+.Dd December 21, 2009
.Dt LIBNETPGP 3
.Os
.Sh NAME
@@ -37,6 +37,8 @@
.Lb libnetpgp
.Sh SYNOPSIS
.In netpgp.h
+.Pp
+The following functions relate to initialisations and finalisations:
.Ft int
.Fo netpgp_init
.Fa "netpgp_t *netpgp" "char *userid" "char *pubringfile" "char *secringfile"
@@ -45,14 +47,62 @@
.Fo netpgp_end
.Fa "netpgp_t *netpgp"
.Fc
+.Pp
+The following functions are for debugging, reflection and information:
+.Ft int
+.Fo netpgp_set_debug
+.Fa "const char *filename"
+.Fc
+.Ft int
+.Fo netpgp_get_debug
+.Fa "const char *filename"
+.Fc
+.Ft int
+.Fo netpgp_get_info
+.Fa "const char *type"
+.Fc
+.Ft int
+.Fo netpgp_list_packets
+.Fa "netpgp_t *netpgp" "char *filename" "int armour" "char *pubringname"
+.Fc
+.Pp
+The following functions are for variable management:
+.Ft int
+.Fo netpgp_setvar
+.Fa "netpgp_t *netpgp" "const char *name" "const char *value"
+.Fc
+.Ft char *
+.Fo netpgp_getvar
+.Fa "netpgp_t *netpgp" "const char *name"
+.Fc
+.Ft int
+.Fo netpgp_incvar
+.Fa "netpgp_t *netpgp" "const char *name" "const int delta"
+.Fc
+.Pp
+The following function sets the home directory:
+.Ft int
+.Fo netpgp_set_homedir
+.Fa "netpgp_t *netpgp" "char *homedir" "char *subdir" "const int quiet"
+.Fc
+.Pp
+The following functions are used for key management:
.Ft int
.Fo netpgp_list_keys
.Fa "netpgp_t *netpgp"
.Fc
.Ft int
+.Fo netpgp_match_list_keys
+.Fa "netpgp_t *netpgp" "char *pattern"
+.Fc
+.Ft int
.Fo netpgp_find_key
.Fa "netpgp_t *netpgp" "char *userid"
.Fc
+.Ft char *
+.Fo netpgp_get_key
+.Fa "netpgp_t *netpgp" "const char *id"
+.Fc
.Ft int
.Fo netpgp_export_key
.Fa "netpgp_t *netpgp" "char *userid"
@@ -65,6 +115,8 @@
.Fo netpgp_generate_key
.Fa "netpgp_t *netpgp" "char *userid" "int numbits"
.Fc
+.Pp
+The following functions are used for file management:
.Ft int
.Fo netpgp_encrypt_file
.Fa "netpgp_t *netpgp" "char *userid" "char *filename" "char *out"
@@ -83,6 +135,18 @@
.Fo netpgp_verify_file
.Fa "netpgp_t *netpgp" "char *f" "int armored"
.Fc
+.Pp
+The following functions are used for memory signing and encryption:
+.Ft int
+.Fo netpgp_encrypt_memory
+.Fa "netpgp_t *netpgp" "char *userid" "void *in" "const size_t insize"
+.Fa "char *out" "size_t outsize" "int armored"
+.Fc
+.Ft int
+.Fo netpgp_decrypt_memory
+.Fa "netpgp_t *netpgp" "const void *input" "const size_t insize"
+.Fa "char *out" "size_t outsize" "const int armored"
+.Fc
.Ft int
.Fo netpgp_sign_memory
.Fa "netpgp_t *netpgp" "const char *userid" "char *mem"
@@ -91,39 +155,8 @@
.Fc
.Ft int
.Fo netpgp_verify_memory
-.Fa "netpgp_t *netpgp" "const void *in" "const size_t size" "const int armored"
-.Fc
-.Ft char *
-.Fo netpgp_get_key
-.Fa "netpgp_t *netpgp" "const char *id"
-.Fc
-.Ft int
-.Fo netpgp_set_debug
-.Fa "const char *filename"
-.Fc
-.Ft int
-.Fo netpgp_get_debug
-.Fa "const char *filename"
-.Fc
-.Ft int
-.Fo netpgp_get_info
-.Fa "const char *type"
-.Fc
-.Ft int
-.Fo netpgp_list_packets
-.Fa "netpgp_t *netpgp" "char *filename" "int armour" "char *pubringname"
-.Fc
-.Ft int
-.Fo netpgp_setvar
-.Fa "netpgp_t *netpgp" "const char *name" "const char *value"
-.Fc
-.Ft char *
-.Fo netpgp_getvar
-.Fa "netpgp_t *netpgp" "const char *name"
-.Fc
-.Ft int
-.Fo netpgp_incvar
-.Fa "netpgp_t *netpgp" "const char *name" "const int delta"
+.Fa "netpgp_t *netpgp" "const void *in" "const size_t insize"
+.Fa "void *out" "size_t outsize" "const int armored"
.Fc
.Sh DESCRIPTION
.Nm
Index: src/crypto/external/bsd/netpgp/dist/src/lib/validate.h
diff -u src/crypto/external/bsd/netpgp/dist/src/lib/validate.h:1.10 src/crypto/external/bsd/netpgp/dist/src/lib/validate.h:1.11
--- src/crypto/external/bsd/netpgp/dist/src/lib/validate.h:1.10 Tue Jun 9 00:51:02 2009
+++ src/crypto/external/bsd/netpgp/dist/src/lib/validate.h Tue Dec 22 06:03:25 2009
@@ -106,6 +106,7 @@
unsigned __ops_validate_mem(__ops_io_t *,
__ops_validation_t *,
__ops_memory_t *,
+ __ops_memory_t **,
const int,
const __ops_keyring_t *);
Index: src/crypto/external/bsd/netpgp/dist/src/lib/netpgp.c
diff -u src/crypto/external/bsd/netpgp/dist/src/lib/netpgp.c:1.33 src/crypto/external/bsd/netpgp/dist/src/lib/netpgp.c:1.34
--- src/crypto/external/bsd/netpgp/dist/src/lib/netpgp.c:1.33 Mon Dec 14 23:29:56 2009
+++ src/crypto/external/bsd/netpgp/dist/src/lib/netpgp.c Tue Dec 22 06:03:24 2009
@@ -34,7 +34,7 @@
#if defined(__NetBSD__)
__COPYRIGHT("@(#) Copyright (c) 2009 The NetBSD Foundation, Inc. All rights reserved.");
-__RCSID("$NetBSD: netpgp.c,v 1.33 2009/12/14 23:29:56 agc Exp $");
+__RCSID("$NetBSD: netpgp.c,v 1.34 2009/12/22 06:03:24 agc Exp $");
#endif
#include <sys/types.h>
@@ -145,7 +145,7 @@
for (i = 0; i < res->validc; i++) {
(void) fprintf(io->res,
"Good signature for %s made %susing %s key %s\n",
- f,
+ (f) ? f : "<stdin>",
ctime(&res->valid_sigs[i].birthtime),
__ops_show_pka(res->valid_sigs[i].key_alg),
userid_to_id(res->valid_sigs[i].signer_id, id));
@@ -643,12 +643,17 @@
overwrite);
}
+#define ARMOR_HEAD "-----BEGIN PGP MESSAGE-----\r\n"
+
/* decrypt a file */
int
netpgp_decrypt_file(netpgp_t *netpgp, const char *f, char *out, int armored)
{
- const unsigned overwrite = 1;
- __ops_io_t *io;
+ const unsigned overwrite = 1;
+ __ops_io_t *io;
+ unsigned realarmour;
+ FILE *fp;
+ char buf[BUFSIZ];
io = netpgp->io;
if (f == NULL) {
@@ -656,9 +661,21 @@
"netpgp_decrypt_file: no filename specified\n");
return 0;
}
+ realarmour = (unsigned)armored;
+ if ((fp = fopen(f, "r")) == NULL) {
+ (void) fprintf(io->errs,
+ "netpgp_decrypt_file: can't open '%s'\n", f);
+ return 0;
+ }
+ if (fgets(buf, sizeof(buf), fp) == NULL) {
+ realarmour = 0;
+ } else {
+ realarmour = (strcmp(buf, ARMOR_HEAD) == 0);
+ }
+ (void) fclose(fp);
return __ops_decrypt_file(netpgp->io, f, out, netpgp->secring,
- (unsigned)armored, overwrite, netpgp->passfp,
- get_passphrase_cb);
+ (unsigned)realarmour, overwrite,
+ netpgp->passfp, get_passphrase_cb);
}
/* sign a file */
@@ -809,6 +826,9 @@
m = MIN(__ops_mem_len(signedmem), outsize);
(void) memcpy(out, __ops_mem_data(signedmem), m);
__ops_memory_free(signedmem);
+ ret = (int)m;
+ } else {
+ ret = 0;
}
__ops_forget(seckey, sizeof(*seckey));
return ret;
@@ -817,11 +837,13 @@
/* verify memory */
int
netpgp_verify_memory(netpgp_t *netpgp, const void *in, const size_t size,
- const int armored)
+ void *out, size_t outsize, const int armored)
{
__ops_validation_t result;
__ops_memory_t *signedmem;
+ __ops_memory_t *cat;
__ops_io_t *io;
+ size_t m;
int ret;
(void) memset(&result, 0x0, sizeof(result));
@@ -833,12 +855,20 @@
}
signedmem = __ops_memory_new();
__ops_memory_add(signedmem, in, size);
- ret = __ops_validate_mem(io, &result, signedmem, armored,
- netpgp->pubring);
+ ret = __ops_validate_mem(io, &result, signedmem,
+ (out) ? &cat : NULL,
+ armored, netpgp->pubring);
__ops_memory_free(signedmem);
if (ret) {
- resultp(io, in, &result, netpgp->pubring);
- return 1;
+ resultp(io, "<stdin>", &result, netpgp->pubring);
+ if (out) {
+ m = MIN(__ops_mem_len(cat), outsize);
+ (void) memcpy(out, __ops_mem_data(cat), m);
+ __ops_memory_free(cat);
+ } else {
+ m = 1;
+ }
+ return (int)m;
}
if (result.validc + result.invalidc + result.unknownc == 0) {
(void) fprintf(io->errs,
@@ -851,6 +881,80 @@
return 0;
}
+/* encrypt some memory */
+int
+netpgp_encrypt_memory(netpgp_t *netpgp,
+ const char *userid,
+ void *in,
+ const size_t insize,
+ char *out,
+ size_t outsize,
+ int armored)
+{
+ const __ops_key_t *keypair;
+ __ops_memory_t *enc;
+ __ops_io_t *io;
+ size_t m;
+
+ io = netpgp->io;
+ if (in == NULL) {
+ (void) fprintf(io->errs,
+ "netpgp_encrypt_buf: no memory to encrypt\n");
+ return 0;
+ }
+ if (userid == NULL) {
+ userid = netpgp_getvar(netpgp, "userid");
+ }
+ keypair = __ops_getkeybyname(io, netpgp->pubring, userid);
+ if (keypair == NULL) {
+ (void) fprintf(io->errs, "Userid '%s' not found in keyring\n",
+ userid);
+ return 0;
+ }
+ if (in == out) {
+ (void) fprintf(io->errs,
+ "netpgp_encrypt_buf: input and output bufs need to be different\n");
+ return 0;
+ }
+ if (outsize < insize) {
+ (void) fprintf(io->errs,
+ "netpgp_encrypt_buf: input size is larger than output size\n");
+ return 0;
+ }
+ enc = __ops_encrypt_buf(io, in, insize, keypair, (unsigned)armored);
+ m = MIN(__ops_mem_len(enc), outsize);
+ (void) memcpy(out, __ops_mem_data(enc), m);
+ __ops_memory_free(enc);
+ return (int)m;
+}
+
+/* decrypt a chunk of memory */
+int
+netpgp_decrypt_memory(netpgp_t *netpgp, const void *input, const size_t insize,
+ char *out, size_t outsize, const int armored)
+{
+ __ops_memory_t *mem;
+ __ops_io_t *io;
+ unsigned realarmour;
+ size_t m;
+
+ io = netpgp->io;
+ realarmour = (unsigned) armored;
+ if (input == NULL) {
+ (void) fprintf(io->errs,
+ "netpgp_decrypt_memory: no memory\n");
+ return 0;
+ }
+ realarmour = (strncmp(input, ARMOR_HEAD, sizeof(ARMOR_HEAD) - 1) == 0);
+ mem = __ops_decrypt_buf(netpgp->io, input, insize, netpgp->secring,
+ realarmour, netpgp->passfp,
+ get_passphrase_cb);
+ m = MIN(__ops_mem_len(mem), outsize);
+ (void) memcpy(out, __ops_mem_data(mem), m);
+ __ops_memory_free(mem);
+ return (int)m;
+}
+
/* wrappers for the ops_debug_level functions we added to openpgpsdk */
/* set the debugging level per filename */
@@ -998,3 +1102,4 @@
}
return 1;
}
+
Index: src/crypto/external/bsd/netpgp/dist/src/lib/signature.c
diff -u src/crypto/external/bsd/netpgp/dist/src/lib/signature.c:1.23 src/crypto/external/bsd/netpgp/dist/src/lib/signature.c:1.24
--- src/crypto/external/bsd/netpgp/dist/src/lib/signature.c:1.23 Fri Nov 20 07:17:07 2009
+++ src/crypto/external/bsd/netpgp/dist/src/lib/signature.c Tue Dec 22 06:03:25 2009
@@ -57,7 +57,7 @@
#if defined(__NetBSD__)
__COPYRIGHT("@(#) Copyright (c) 2009 The NetBSD Foundation, Inc. All rights reserved.");
-__RCSID("$NetBSD: signature.c,v 1.23 2009/11/20 07:17:07 agc Exp $");
+__RCSID("$NetBSD: signature.c,v 1.24 2009/12/22 06:03:25 agc Exp $");
#endif
#include <sys/types.h>
@@ -1138,8 +1138,8 @@
if (input == NULL) {
(void) fprintf(io->errs,
- "__ops_sign_buf_as_cleartext: null cleartext\n");
- return 0;
+ "__ops_sign_buf: null input\n");
+ return NULL;
}
/* set up signature */
Index: src/crypto/external/bsd/netpgp/dist/src/lib/ssh2pgp.c
diff -u src/crypto/external/bsd/netpgp/dist/src/lib/ssh2pgp.c:1.5 src/crypto/external/bsd/netpgp/dist/src/lib/ssh2pgp.c:1.6
--- src/crypto/external/bsd/netpgp/dist/src/lib/ssh2pgp.c:1.5 Mon Dec 14 23:29:57 2009
+++ src/crypto/external/bsd/netpgp/dist/src/lib/ssh2pgp.c Tue Dec 22 06:03:25 2009
@@ -221,6 +221,7 @@
uint32_t len;
int64_t off;
char hostname[256];
+ char owner[256];
char *space;
char *buf;
char *bin;
@@ -314,12 +315,19 @@
if (ok) {
(void) memset(&userid, 0x0, sizeof(userid));
(void) gethostname(hostname, sizeof(hostname));
- (void) __ops_asprintf((char **)(void *)&userid.userid,
- "%s (%s) <%.*s>",
- hostname,
- f,
+ if (strlen(space + 1) - 1 == 0) {
+ (void) snprintf(owner, sizeof(owner), "<r...@%s>",
+ hostname);
+ } else {
+ (void) snprintf(owner, sizeof(owner), "<%.*s>",
(int)strlen(space + 1) - 1,
space + 1);
+ }
+ (void) __ops_asprintf((char **)(void *)&userid.userid,
+ "%s (%s) %s",
+ hostname,
+ f,
+ owner);
__ops_keyid(key->key_id, sizeof(key->key_id), pubkey);
__ops_add_userid(key, &userid);
__ops_fingerprint(&key->fingerprint, pubkey);
Index: src/crypto/external/bsd/netpgp/dist/src/lib/validate.c
diff -u src/crypto/external/bsd/netpgp/dist/src/lib/validate.c:1.24 src/crypto/external/bsd/netpgp/dist/src/lib/validate.c:1.25
--- src/crypto/external/bsd/netpgp/dist/src/lib/validate.c:1.24 Mon Dec 7 16:17:17 2009
+++ src/crypto/external/bsd/netpgp/dist/src/lib/validate.c Tue Dec 22 06:03:25 2009
@@ -54,7 +54,7 @@
#if defined(__NetBSD__)
__COPYRIGHT("@(#) Copyright (c) 2009 The NetBSD Foundation, Inc. All rights reserved.");
-__RCSID("$NetBSD: validate.c,v 1.24 2009/12/07 16:17:17 agc Exp $");
+__RCSID("$NetBSD: validate.c,v 1.25 2009/12/22 06:03:25 agc Exp $");
#endif
#include <sys/types.h>
@@ -331,6 +331,7 @@
__ops_get_pubkey(signer),
key->reader->key->packets[
key->reader->packet].raw);
+ /* XXX - agc - put subkey logic here? */
break;
case OPS_SIG_DIRECT:
@@ -815,11 +816,12 @@
__ops_validate_mem(__ops_io_t *io,
__ops_validation_t *result,
__ops_memory_t *mem,
+ __ops_memory_t **cat,
const int armoured,
const __ops_keyring_t *keyring)
{
validate_data_cb_t validation;
- __ops_stream_t *stream = NULL;
+ __ops_stream_t *stream = NULL;
const int printerrors = 1;
__ops_setup_memory_read(io, &stream, mem, &validation, validate_data_cb, 1);
@@ -845,7 +847,14 @@
__ops_reader_pop_dearmour(stream);
}
__ops_teardown_memory_read(stream, mem);
- __ops_memory_free(validation.mem);
+
+ /* this is triggered only for --cat output */
+ if (*cat) {
+ /* need to send validated output somewhere */
+ *cat = validation.mem;
+ } else {
+ __ops_memory_free(validation.mem);
+ }
return validate_result_status(result);
}
Index: src/crypto/external/bsd/netpgp/dist/src/lib/version.h
diff -u src/crypto/external/bsd/netpgp/dist/src/lib/version.h:1.21 src/crypto/external/bsd/netpgp/dist/src/lib/version.h:1.22
--- src/crypto/external/bsd/netpgp/dist/src/lib/version.h:1.21 Mon Dec 14 23:35:06 2009
+++ src/crypto/external/bsd/netpgp/dist/src/lib/version.h Tue Dec 22 06:03:25 2009
@@ -58,7 +58,7 @@
#endif
/* development versions have .99 suffix */
-#define NETPGP_BASE_VERSION "1.99.14"
+#define NETPGP_BASE_VERSION "1.99.15"
#define NETPGP_VERSION_CAT(a, b) "NetPGP portable " a "/[" b "]"
#define NETPGP_VERSION_STRING \
Index: src/crypto/external/bsd/netpgp/dist/src/netpgp/Makefile
diff -u src/crypto/external/bsd/netpgp/dist/src/netpgp/Makefile:1.5 src/crypto/external/bsd/netpgp/dist/src/netpgp/Makefile:1.6
--- src/crypto/external/bsd/netpgp/dist/src/netpgp/Makefile:1.5 Mon Dec 14 23:29:57 2009
+++ src/crypto/external/bsd/netpgp/dist/src/netpgp/Makefile Tue Dec 22 06:03:25 2009
@@ -117,16 +117,16 @@
PACKAGE = netpgp
PACKAGE_BUGREPORT = Alistair Crooks <[email protected]> c0596823
PACKAGE_NAME = netpgp
-PACKAGE_STRING = netpgp 20091210
+PACKAGE_STRING = netpgp 20091221
PACKAGE_TARNAME = netpgp
-PACKAGE_VERSION = 20091210
+PACKAGE_VERSION = 20091221
PATH_SEPARATOR = :
RANLIB = ranlib
SED = /usr/bin/sed
SET_MAKE =
SHELL = /bin/ksh
STRIP = strip
-VERSION = 20091210
+VERSION = 20091221
WARNCFLAGS = -Werror -Wall -Wpointer-arith
abs_builddir = /usr/src/crypto/external/bsd/netpgp/dist/src/netpgp
abs_srcdir = /usr/src/crypto/external/bsd/netpgp/dist/src/netpgp
@@ -169,7 +169,7 @@
mkdir_p = $(top_builddir)/buildaux/install-sh -c -d
oldincludedir = /usr/include
pdfdir = ${docdir}
-prefix = /usr/local
+prefix = /usr/pkg
program_transform_name = s,x,x,
psdir = ${docdir}
sbindir = ${exec_prefix}/sbin
Index: src/crypto/external/bsd/netpgp/dist/src/netpgp/netpgp.1
diff -u src/crypto/external/bsd/netpgp/dist/src/netpgp/netpgp.1:1.5 src/crypto/external/bsd/netpgp/dist/src/netpgp/netpgp.1:1.6
--- src/crypto/external/bsd/netpgp/dist/src/netpgp/netpgp.1:1.5 Sat Dec 5 10:05:54 2009
+++ src/crypto/external/bsd/netpgp/dist/src/netpgp/netpgp.1 Tue Dec 22 06:03:25 2009
@@ -1,4 +1,4 @@
-.\" $NetBSD: netpgp.1,v 1.5 2009/12/05 10:05:54 wiz Exp $
+.\" $NetBSD: netpgp.1,v 1.6 2009/12/22 06:03:25 agc Exp $
.\"
.\" Copyright (c) 2009 The NetBSD Foundation, Inc.
.\" All rights reserved.
@@ -372,6 +372,44 @@
netpgp passphrase:
%
.Ed
+.Pp
+If no file name is provided, the data will be read from standard input,
+and displayed on standard output:
+.Bd -literal
+% netpgp --encrypt \*[Lt] a | netpgp --decrypt \*[Gt] b
+netpgp: default key set to "C0596823"
+netpgp: default key set to "C0596823"
+pub 2048/RSA (Encrypt or Sign) 1b68dcfcc0596823 2004-01-12
+Key fingerprint: d415 9deb 336d e4cc cdfa 00cd 1b68 dcfc c059 6823
+uid Alistair Crooks \*[lt][email protected]\*[gt]
+uid Alistair Crooks \*[lt][email protected]\*[gt]
+uid Alistair Crooks \*[lt][email protected]\*[gt]
+uid Alistair Crooks \*[lt][email protected]\*[gt]
+netpgp passphrase:
+%
+.Ed
+.Bd -literal
+% netpgp --sign \*[Lt] a | netpgp --cat \*[Gt] b
+netpgp: default key set to "C0596823"
+netpgp: default key set to "C0596823"
+pub 2048/RSA (Encrypt or Sign) 1b68dcfcc0596823 2004-01-12
+Key fingerprint: d415 9deb 336d e4cc cdfa 00cd 1b68 dcfc c059 6823
+uid Alistair Crooks \*[lt][email protected]\*[gt]
+uid Alistair Crooks \*[lt][email protected]\*[gt]
+uid Alistair Crooks \*[lt][email protected]\*[gt]
+uid Alistair Crooks \*[lt][email protected]\*[gt]
+netpgp passphrase:
+Good signature for \*[Lt]stdin\*[Gt] made Mon Dec 21 18:25:02 2009
+using RSA (Encrypt or Sign) key 1b68dcfcc0596823
+pub 2048/RSA (Encrypt or Sign) 1b68dcfcc0596823 2004-01-12
+Key fingerprint: d415 9deb 336d e4cc cdfa 00cd 1b68 dcfc c059 6823
+uid Alistair Crooks \*[lt][email protected]\*[gt]
+uid Alistair Crooks \*[lt][email protected]\*[gt]
+uid Alistair Crooks \*[lt][email protected]\*[gt]
+uid Alistair Crooks \*[lt][email protected]\*[gt]
+uid Alistair Crooks (Yahoo!) \*[lt][email protected]\*[gt]
+%
+.Ed
.Sh RETURN VALUES
The
.Nm
Index: src/crypto/external/bsd/netpgp/dist/src/netpgp/netpgp.c
diff -u src/crypto/external/bsd/netpgp/dist/src/netpgp/netpgp.c:1.8 src/crypto/external/bsd/netpgp/dist/src/netpgp/netpgp.c:1.9
--- src/crypto/external/bsd/netpgp/dist/src/netpgp/netpgp.c:1.8 Mon Dec 14 23:29:57 2009
+++ src/crypto/external/bsd/netpgp/dist/src/netpgp/netpgp.c Tue Dec 22 06:03:25 2009
@@ -63,6 +63,7 @@
"\t[--homedir=<homedir>] AND/OR\n"
"\t[--keyring=<keyring>] AND/OR\n"
"\t[--userid=<userid>] AND/OR\n"
+ "\t[--maxmemalloc=<number of bytes>] AND/OR\n"
"\t[--verbose]\n";
enum optdefs {
@@ -91,6 +92,7 @@
COREDUMPS,
PASSWDFD,
SSHKEYFILE,
+ MAX_MEM_ALLOC,
/* debug */
OPS_DEBUG
@@ -136,6 +138,9 @@
{"pass-fd", required_argument, NULL, PASSWDFD},
{"output", required_argument, NULL, OUTPUT},
{"results", required_argument, NULL, RESULTS},
+ {"maxmemalloc", required_argument, NULL, MAX_MEM_ALLOC},
+ {"max-mem", required_argument, NULL, MAX_MEM_ALLOC},
+ {"max-alloc", required_argument, NULL, MAX_MEM_ALLOC},
{ NULL, 0, NULL, 0},
};
@@ -174,42 +179,139 @@
return 1;
}
+/* read all of stdin into memory */
+static int
+stdin_to_mem(netpgp_t *netpgp, char **temp, char **out, unsigned *maxsize)
+{
+ unsigned newsize;
+ unsigned size;
+ char buf[BUFSIZ * 8];
+ char *loc;
+ int n;
+
+ *maxsize = (unsigned)atoi(netpgp_getvar(netpgp, "max mem alloc"));
+ size = 0;
+ *temp = NULL;
+ while ((n = read(STDIN_FILENO, buf, sizeof(buf))) > 0) {
+ newsize = size + ((n / BUFSIZ) + 1) * BUFSIZ;
+ if (newsize > *maxsize) {
+ (void) fprintf(stderr, "bounds check\n");
+ return size;
+ }
+ loc = realloc(*temp, newsize);
+ if (loc == NULL) {
+ (void) fprintf(stderr, "short read\n");
+ return size;
+ }
+ *temp = loc;
+ (void) memcpy(&(*temp)[size], buf, n);
+ size += n;
+ }
+ if ((*out = calloc(1, *maxsize)) == NULL) {
+ (void) fprintf(stderr, "Bad alloc\n");
+ return 0;
+ }
+ return (int)size;
+}
+
+/* output the text to stdout */
+static int
+showoutput(char *out, int size, const char *header)
+{
+ int cc;
+ int n;
+ int i;
+
+ if (size <= 0) {
+ (void) fprintf(stderr, "%s\n", header);
+ return 0;
+ }
+ for (cc = 0 ; cc < size ; cc += n) {
+ if ((n = write(STDOUT_FILENO, &out[cc], size - cc)) <= 0) {
+ break;
+ }
+ }
+ if (cc < size) {
+ (void) fprintf(stderr, "Short write\n");
+ return 0;
+ }
+ return cc == size;
+}
+
/* do a command once for a specified file 'f' */
static int
netpgp_cmd(netpgp_t *netpgp, prog_t *p, char *f)
{
- const int cleartext = 1;
+ const int cleartext = 1;
+ unsigned maxsize;
+ char *out;
+ char *in;
+ int ret;
+ int cc;
switch (p->cmd) {
case ENCRYPT:
- return nonnull(f, p->progname) &&
- netpgp_encrypt_file(netpgp,
+ if (f == NULL) {
+ cc = stdin_to_mem(netpgp, &in, &out, &maxsize);
+ ret = netpgp_encrypt_memory(netpgp,
+ netpgp_getvar(netpgp, "userid"),
+ in, cc, out, maxsize, p->armour);
+ ret = showoutput(out, ret, "Bad memory encryption");
+ free(in);
+ free(out);
+ return ret;
+ }
+ return netpgp_encrypt_file(netpgp,
netpgp_getvar(netpgp, "userid"),
f, p->output,
p->armour);
case DECRYPT:
- return nonnull(f, p->progname) &&
- netpgp_decrypt_file(netpgp, f, p->output, p->armour);
+ if (f == NULL) {
+ cc = stdin_to_mem(netpgp, &in, &out, &maxsize);
+ ret = netpgp_decrypt_memory(netpgp, in, cc, out,
+ maxsize, 0);
+ ret = showoutput(out, ret, "Bad memory decryption");
+ free(in);
+ free(out);
+ return ret;
+ }
+ return netpgp_decrypt_file(netpgp, f, p->output, p->armour);
+ case CLEARSIGN:
case SIGN:
- return nonnull(f, p->progname) &&
- netpgp_sign_file(netpgp,
+ if (f == NULL) {
+ cc = stdin_to_mem(netpgp, &in, &out, &maxsize);
+ ret = netpgp_sign_memory(netpgp,
netpgp_getvar(netpgp, "userid"),
- f, p->output,
- p->armour, !cleartext, p->detached);
- case CLEARSIGN:
- return nonnull(f, p->progname) &&
- netpgp_sign_file(netpgp,
+ in, cc, out,
+ maxsize, p->armour,
+ (p->cmd == CLEARSIGN) ? cleartext :
+ !cleartext);
+ ret = showoutput(out, ret, "Bad memory signature");
+ free(in);
+ free(out);
+ return ret;
+ }
+ return netpgp_sign_file(netpgp,
netpgp_getvar(netpgp, "userid"),
f, p->output,
- p->armour, cleartext, p->detached);
+ p->armour,
+ (p->cmd == CLEARSIGN) ? cleartext :
+ !cleartext,
+ p->detached);
case VERIFY:
- return nonnull(f, p->progname) &&
- netpgp_verify_file(netpgp, f, NULL, p->armour);
case VERIFY_CAT:
- return nonnull(f, p->progname) &&
- netpgp_verify_file(netpgp, f,
- (p->output) ? p->output : "-",
+ if (f == NULL) {
+ cc = stdin_to_mem(netpgp, &in, &out, &maxsize);
+ ret = netpgp_verify_memory(netpgp, in, cc,
+ (p->cmd == VERIFY_CAT) ? out : NULL,
+ (p->cmd == VERIFY_CAT) ? maxsize : 0,
p->armour);
+ ret = showoutput(out, ret, "Bad memory verification");
+ free(in);
+ free(out);
+ return ret;
+ }
+ return netpgp_verify_file(netpgp, f, NULL, p->armour);
case LIST_PACKETS:
return nonnull(f, p->progname) &&
netpgp_list_packets(netpgp, f, p->armour, NULL);
@@ -242,6 +344,8 @@
}
/* set some defaults */
netpgp_setvar(&netpgp, "hash", DEFAULT_HASH_ALG);
+ /* 4 MiB for a memory file */
+ netpgp_setvar(&netpgp, "max mem alloc", "4194304");
netpgp_set_homedir(&netpgp, getenv("HOME"), "/.gnupg", 1);
optindex = 0;
while ((ch = getopt_long(argc, argv, "", options, &optindex)) != -1) {
@@ -345,6 +449,9 @@
case SSHKEYFILE:
netpgp_setvar(&netpgp, "sshkeyfile", optarg);
break;
+ case MAX_MEM_ALLOC:
+ netpgp_setvar(&netpgp, "max mem alloc", optarg);
+ break;
case OPS_DEBUG:
netpgp_set_debug(optarg);
break;
Index: src/crypto/external/bsd/netpgp/dist/src/netpgpverify/Makefile
diff -u src/crypto/external/bsd/netpgp/dist/src/netpgpverify/Makefile:1.4 src/crypto/external/bsd/netpgp/dist/src/netpgpverify/Makefile:1.5
--- src/crypto/external/bsd/netpgp/dist/src/netpgpverify/Makefile:1.4 Mon Dec 14 23:29:57 2009
+++ src/crypto/external/bsd/netpgp/dist/src/netpgpverify/Makefile Tue Dec 22 06:03:25 2009
@@ -117,16 +117,16 @@
PACKAGE = netpgp
PACKAGE_BUGREPORT = Alistair Crooks <[email protected]> c0596823
PACKAGE_NAME = netpgp
-PACKAGE_STRING = netpgp 20091210
+PACKAGE_STRING = netpgp 20091221
PACKAGE_TARNAME = netpgp
-PACKAGE_VERSION = 20091210
+PACKAGE_VERSION = 20091221
PATH_SEPARATOR = :
RANLIB = ranlib
SED = /usr/bin/sed
SET_MAKE =
SHELL = /bin/ksh
STRIP = strip
-VERSION = 20091210
+VERSION = 20091221
WARNCFLAGS = -Werror -Wall -Wpointer-arith
abs_builddir = /usr/src/crypto/external/bsd/netpgp/dist/src/netpgpverify
abs_srcdir = /usr/src/crypto/external/bsd/netpgp/dist/src/netpgpverify
@@ -169,7 +169,7 @@
mkdir_p = $(top_builddir)/buildaux/install-sh -c -d
oldincludedir = /usr/include
pdfdir = ${docdir}
-prefix = /usr/local
+prefix = /usr/pkg
program_transform_name = s,x,x,
psdir = ${docdir}
sbindir = ${exec_prefix}/sbin
Index: src/crypto/external/bsd/netpgp/lib/config.h
diff -u src/crypto/external/bsd/netpgp/lib/config.h:1.2 src/crypto/external/bsd/netpgp/lib/config.h:1.3
--- src/crypto/external/bsd/netpgp/lib/config.h:1.2 Mon Dec 14 23:29:57 2009
+++ src/crypto/external/bsd/netpgp/lib/config.h Tue Dec 22 06:03:25 2009
@@ -125,19 +125,19 @@
#define PACKAGE_NAME "netpgp"
/* Define to the full name and version of this package. */
-#define PACKAGE_STRING "netpgp 20091210"
+#define PACKAGE_STRING "netpgp 20091221"
/* Define to the one symbol short name of this package. */
#define PACKAGE_TARNAME "netpgp"
/* Define to the version of this package. */
-#define PACKAGE_VERSION "20091210"
+#define PACKAGE_VERSION "20091221"
/* Define to 1 if you have the ANSI C header files. */
#define STDC_HEADERS 1
/* Version number of package */
-#define VERSION "20091210"
+#define VERSION "20091221"
/* Define for Solaris 2.5.1 so the uint32_t typedef from <sys/synch.h>,
<pthread.h>, or <semaphore.h> is not used. If the typedef were allowed, the