Module Name: src
Committed By: agc
Date: Fri Aug 13 18:29:41 UTC 2010
Modified Files:
src/crypto/external/bsd/netpgp/dist/src/lib: config.h.in create.c
crypto.c keyring.c keyring.h misc.c netpgp.c openssl_crypto.c
packet-parse.c packet-print.c packet.h reader.c ssh2pgp.c version.h
src/crypto/external/bsd/netpgp/dist/src/netpgp: netpgp.1 netpgp.c
src/crypto/external/bsd/netpgp/dist/src/netpgpkeys: netpgpkeys.1
netpgpkeys.c
Log Message:
Changes to 3.99.9/20100809
+ add single character options to netpgp(1) and netpgpkeys(1)
+ add -o long-option(=value)? options to netpgp(1) and netpgpkeys(1)
+ add some small preparations for using the first subkey for encryption
(much more to follow)
To generate a diff of this commit:
cvs rdiff -u -r1.9 -r1.10 \
src/crypto/external/bsd/netpgp/dist/src/lib/config.h.in
cvs rdiff -u -r1.31 -r1.32 \
src/crypto/external/bsd/netpgp/dist/src/lib/create.c
cvs rdiff -u -r1.25 -r1.26 \
src/crypto/external/bsd/netpgp/dist/src/lib/crypto.c \
src/crypto/external/bsd/netpgp/dist/src/lib/openssl_crypto.c \
src/crypto/external/bsd/netpgp/dist/src/lib/packet.h
cvs rdiff -u -r1.40 -r1.41 \
src/crypto/external/bsd/netpgp/dist/src/lib/keyring.c
cvs rdiff -u -r1.29 -r1.30 \
src/crypto/external/bsd/netpgp/dist/src/lib/keyring.h
cvs rdiff -u -r1.33 -r1.34 src/crypto/external/bsd/netpgp/dist/src/lib/misc.c
cvs rdiff -u -r1.66 -r1.67 \
src/crypto/external/bsd/netpgp/dist/src/lib/netpgp.c
cvs rdiff -u -r1.38 -r1.39 \
src/crypto/external/bsd/netpgp/dist/src/lib/packet-parse.c \
src/crypto/external/bsd/netpgp/dist/src/lib/reader.c \
src/crypto/external/bsd/netpgp/dist/src/lib/version.h
cvs rdiff -u -r1.35 -r1.36 \
src/crypto/external/bsd/netpgp/dist/src/lib/packet-print.c
cvs rdiff -u -r1.14 -r1.15 \
src/crypto/external/bsd/netpgp/dist/src/lib/ssh2pgp.c
cvs rdiff -u -r1.13 -r1.14 \
src/crypto/external/bsd/netpgp/dist/src/netpgp/netpgp.1
cvs rdiff -u -r1.12 -r1.13 \
src/crypto/external/bsd/netpgp/dist/src/netpgp/netpgp.c
cvs rdiff -u -r1.13 -r1.14 \
src/crypto/external/bsd/netpgp/dist/src/netpgpkeys/netpgpkeys.1
cvs rdiff -u -r1.15 -r1.16 \
src/crypto/external/bsd/netpgp/dist/src/netpgpkeys/netpgpkeys.c
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/src/lib/config.h.in
diff -u src/crypto/external/bsd/netpgp/dist/src/lib/config.h.in:1.9 src/crypto/external/bsd/netpgp/dist/src/lib/config.h.in:1.10
--- src/crypto/external/bsd/netpgp/dist/src/lib/config.h.in:1.9 Sat Aug 7 04:16:40 2010
+++ src/crypto/external/bsd/netpgp/dist/src/lib/config.h.in Fri Aug 13 18:29:40 2010
@@ -114,10 +114,6 @@
/* Define to 1 if you have the <zlib.h> header file. */
#undef HAVE_ZLIB_H
-/* Define to the sub-directory in which libtool stores uninstalled libraries.
- */
-#undef LT_OBJDIR
-
/* Name of package */
#undef PACKAGE
Index: src/crypto/external/bsd/netpgp/dist/src/lib/create.c
diff -u src/crypto/external/bsd/netpgp/dist/src/lib/create.c:1.31 src/crypto/external/bsd/netpgp/dist/src/lib/create.c:1.32
--- src/crypto/external/bsd/netpgp/dist/src/lib/create.c:1.31 Fri Jul 9 05:35:34 2010
+++ src/crypto/external/bsd/netpgp/dist/src/lib/create.c Fri Aug 13 18:29:40 2010
@@ -57,7 +57,7 @@
#if defined(__NetBSD__)
__COPYRIGHT("@(#) Copyright (c) 2009 The NetBSD Foundation, Inc. All rights reserved.");
-__RCSID("$NetBSD: create.c,v 1.31 2010/07/09 05:35:34 agc Exp $");
+__RCSID("$NetBSD: create.c,v 1.32 2010/08/13 18:29:40 agc Exp $");
#endif
#include <sys/types.h>
@@ -961,11 +961,18 @@
const __ops_pubkey_t *pubkey;
__ops_pk_sesskey_t *sesskey;
+ const uint8_t *id;
uint8_t unencoded_m_buf[SZ_UNENCODED_M_BUF];
uint8_t *encoded_m_buf;
size_t sz_encoded_m_buf;
- pubkey = __ops_get_pubkey(key);
+ if (memcmp(key->encid, "\0\0\0\0\0\0\0\0", 8) == 0) {
+ pubkey = __ops_get_pubkey(key);
+ id = key->sigid;
+ } else {
+ pubkey = &key->enckey;
+ id = key->encid;
+ }
sz_encoded_m_buf = BN_num_bytes(pubkey->key.rsa.n);
if ((encoded_m_buf = calloc(1, sz_encoded_m_buf)) == NULL) {
(void) fprintf(stderr,
@@ -986,13 +993,12 @@
return NULL;
}
sesskey->version = OPS_PKSK_V3;
- (void) memcpy(sesskey->key_id, key->key_id,
- sizeof(sesskey->key_id));
+ (void) memcpy(sesskey->key_id, id, sizeof(sesskey->key_id));
if (__ops_get_debug_level(__FILE__)) {
- hexdump(stderr, "Encrypting for RSA keyid", key->key_id, sizeof(sesskey->key_id));
+ hexdump(stderr, "Encrypting for RSA keyid", id, sizeof(sesskey->key_id));
}
- switch (key->key.pubkey.alg) {
+ switch (pubkey->alg) {
case OPS_PKA_RSA:
case OPS_PKA_DSA:
case OPS_PKA_ELGAMAL:
@@ -1004,7 +1010,7 @@
free(sesskey);
return NULL;
}
- sesskey->alg = key->key.pubkey.alg;
+ sesskey->alg = pubkey->alg;
/* \todo allow user to specify other algorithm */
sesskey->symm_alg = OPS_SA_CAST5;
Index: src/crypto/external/bsd/netpgp/dist/src/lib/crypto.c
diff -u src/crypto/external/bsd/netpgp/dist/src/lib/crypto.c:1.25 src/crypto/external/bsd/netpgp/dist/src/lib/crypto.c:1.26
--- src/crypto/external/bsd/netpgp/dist/src/lib/crypto.c:1.25 Fri Jul 9 05:35:34 2010
+++ src/crypto/external/bsd/netpgp/dist/src/lib/crypto.c Fri Aug 13 18:29:40 2010
@@ -54,7 +54,7 @@
#if defined(__NetBSD__)
__COPYRIGHT("@(#) Copyright (c) 2009 The NetBSD Foundation, Inc. All rights reserved.");
-__RCSID("$NetBSD: crypto.c,v 1.25 2010/07/09 05:35:34 agc Exp $");
+__RCSID("$NetBSD: crypto.c,v 1.26 2010/08/13 18:29:40 agc Exp $");
#endif
#include <sys/types.h>
@@ -264,7 +264,7 @@
__ops_encrypt_file(__ops_io_t *io,
const char *infile,
const char *outfile,
- const __ops_key_t *pubkey,
+ const __ops_key_t *key,
const unsigned use_armour,
const unsigned allow_overwrite)
{
@@ -289,7 +289,7 @@
}
/* Push the encrypted writer */
- if (!__ops_push_enc_se_ip(output, pubkey)) {
+ if (!__ops_push_enc_se_ip(output, key)) {
__ops_memory_free(inmem);
return 0;
}
Index: src/crypto/external/bsd/netpgp/dist/src/lib/openssl_crypto.c
diff -u src/crypto/external/bsd/netpgp/dist/src/lib/openssl_crypto.c:1.25 src/crypto/external/bsd/netpgp/dist/src/lib/openssl_crypto.c:1.26
--- src/crypto/external/bsd/netpgp/dist/src/lib/openssl_crypto.c:1.25 Fri Jul 9 05:35:34 2010
+++ src/crypto/external/bsd/netpgp/dist/src/lib/openssl_crypto.c Fri Aug 13 18:29:40 2010
@@ -57,7 +57,7 @@
#if defined(__NetBSD__)
__COPYRIGHT("@(#) Copyright (c) 2009 The NetBSD Foundation, Inc. All rights reserved.");
-__RCSID("$NetBSD: openssl_crypto.c,v 1.25 2010/07/09 05:35:34 agc Exp $");
+__RCSID("$NetBSD: openssl_crypto.c,v 1.26 2010/08/13 18:29:40 agc Exp $");
#endif
#ifdef HAVE_OPENSSL_DSA_H
@@ -821,8 +821,8 @@
RSA_free(rsa);
- __ops_keyid(keydata->key_id, OPS_KEY_ID_SIZE, &keydata->key.seckey.pubkey, seckey->hash_alg);
- __ops_fingerprint(&keydata->fingerprint, &keydata->key.seckey.pubkey, seckey->hash_alg);
+ __ops_keyid(keydata->sigid, OPS_KEY_ID_SIZE, &keydata->key.seckey.pubkey, seckey->hash_alg);
+ __ops_fingerprint(&keydata->sigfingerprint, &keydata->key.seckey.pubkey, seckey->hash_alg);
/* Generate checksum */
Index: src/crypto/external/bsd/netpgp/dist/src/lib/packet.h
diff -u src/crypto/external/bsd/netpgp/dist/src/lib/packet.h:1.25 src/crypto/external/bsd/netpgp/dist/src/lib/packet.h:1.26
--- src/crypto/external/bsd/netpgp/dist/src/lib/packet.h:1.25 Fri Jul 9 15:12:06 2010
+++ src/crypto/external/bsd/netpgp/dist/src/lib/packet.h Fri Aug 13 18:29:40 2010
@@ -949,13 +949,17 @@
DYNARRAY(__ops_subpacket_t, packet); /* array of raw subpackets */
DYNARRAY(__ops_subsig_t, subsig); /* array of signature subkeys */
DYNARRAY(__ops_revoke_t, revoke); /* array of signature revocations */
- uint8_t key_id[OPS_KEY_ID_SIZE];
- __ops_fingerprint_t fingerprint; /* pgp fingerprint */
__ops_content_enum type; /* type of key */
__ops_keydata_key_t key; /* pubkey/seckey data */
+ __ops_pubkey_t sigkey; /* signature key */
+ uint8_t sigid[OPS_KEY_ID_SIZE];
+ __ops_fingerprint_t sigfingerprint; /* pgp signature fingerprint */
+ __ops_pubkey_t enckey; /* encryption key */
+ uint8_t encid[OPS_KEY_ID_SIZE];
+ __ops_fingerprint_t encfingerprint; /* pgp encryption id fingerprint */
uint32_t uid0; /* primary uid index in uids array */
- uint8_t revoked;
- __ops_revoke_t revocation;
+ uint8_t revoked; /* key has been revoked */
+ __ops_revoke_t revocation; /* revocation reason */
};
#define MDC_PKT_TAG 0xd3
Index: src/crypto/external/bsd/netpgp/dist/src/lib/keyring.c
diff -u src/crypto/external/bsd/netpgp/dist/src/lib/keyring.c:1.40 src/crypto/external/bsd/netpgp/dist/src/lib/keyring.c:1.41
--- src/crypto/external/bsd/netpgp/dist/src/lib/keyring.c:1.40 Sat Aug 7 04:16:40 2010
+++ src/crypto/external/bsd/netpgp/dist/src/lib/keyring.c Fri Aug 13 18:29:40 2010
@@ -57,7 +57,7 @@
#if defined(__NetBSD__)
__COPYRIGHT("@(#) Copyright (c) 2009 The NetBSD Foundation, Inc. All rights reserved.");
-__RCSID("$NetBSD: keyring.c,v 1.40 2010/08/07 04:16:40 agc Exp $");
+__RCSID("$NetBSD: keyring.c,v 1.41 2010/08/13 18:29:40 agc Exp $");
#endif
#ifdef HAVE_FCNTL_H
@@ -338,7 +338,7 @@
const uint8_t *
__ops_get_key_id(const __ops_key_t *key)
{
- return key->key_id;
+ return key->sigid;
}
/**
@@ -509,7 +509,7 @@
sig = __ops_create_sig_new();
__ops_sig_start_key_sig(sig, &key->key.seckey.pubkey, userid, OPS_CERT_POSITIVE);
__ops_add_birthtime(sig, time(NULL));
- __ops_add_issuer_keyid(sig, key->key_id);
+ __ops_add_issuer_keyid(sig, key->sigid);
__ops_add_primary_userid(sig, 1);
__ops_end_hashed_subpkts(sig);
@@ -823,15 +823,16 @@
{
for ( ; keyring && *from < keyring->keyc; *from += 1) {
if (__ops_get_debug_level(__FILE__)) {
- hexdump(io->errs, "keyring keyid", keyring->keys[*from].key_id, OPS_KEY_ID_SIZE);
+ hexdump(io->errs, "keyring keyid", keyring->keys[*from].sigid, OPS_KEY_ID_SIZE);
hexdump(io->errs, "keyid", keyid, OPS_KEY_ID_SIZE);
}
- if (memcmp(keyring->keys[*from].key_id, keyid,
- OPS_KEY_ID_SIZE) == 0) {
+ if (memcmp(keyring->keys[*from].sigid, keyid, OPS_KEY_ID_SIZE) == 0 ||
+ memcmp(&keyring->keys[*from].sigid[OPS_KEY_ID_SIZE / 2],
+ keyid, OPS_KEY_ID_SIZE / 2) == 0) {
return &keyring->keys[*from];
}
- if (memcmp(&keyring->keys[*from].key_id[OPS_KEY_ID_SIZE / 2],
- keyid, OPS_KEY_ID_SIZE / 2) == 0) {
+ if (memcmp(&keyring->keys[*from].encid, keyid, OPS_KEY_ID_SIZE) == 0 ||
+ memcmp(&keyring->keys[*from].encid[OPS_KEY_ID_SIZE / 2], keyid, OPS_KEY_ID_SIZE / 2) == 0) {
return &keyring->keys[*from];
}
}
@@ -1017,7 +1018,7 @@
"sec", &key->key.seckey.pubkey, psigs);
} else {
__ops_sprint_mj(io, keyring, key, &obj->value.v[obj->c],
- "pub", &key->key.pubkey, psigs);
+ "signature ", &key->key.pubkey, psigs);
}
if (obj->value.v[obj->c].type != 0) {
obj->c += 1;
@@ -1057,24 +1058,37 @@
/* add a key to a public keyring */
int
-__ops_add_to_pubring(__ops_keyring_t *keyring, const __ops_pubkey_t *pubkey)
+__ops_add_to_pubring(__ops_keyring_t *keyring, const __ops_pubkey_t *pubkey, __ops_content_enum tag)
{
__ops_key_t *key;
time_t duration;
if (__ops_get_debug_level(__FILE__)) {
- fprintf(stderr, "__ops_add_to_pubring\n");
+ fprintf(stderr, "__ops_add_to_pubring (type %u)\n", tag);
+ }
+ switch(tag) {
+ case OPS_PTAG_CT_PUBLIC_KEY:
+ EXPAND_ARRAY(keyring, key);
+ key = &keyring->keys[keyring->keyc++];
+ duration = key->key.pubkey.duration;
+ (void) memset(key, 0x0, sizeof(*key));
+ key->type = tag;
+ __ops_keyid(key->sigid, OPS_KEY_ID_SIZE, pubkey, keyring->hashtype);
+ __ops_fingerprint(&key->sigfingerprint, pubkey, keyring->hashtype);
+ key->key.pubkey = *pubkey;
+ key->key.pubkey.duration = duration;
+ return 1;
+ case OPS_PTAG_CT_PUBLIC_SUBKEY:
+ /* subkey is not the first */
+ key = &keyring->keys[keyring->keyc - 1];
+ __ops_keyid(key->encid, OPS_KEY_ID_SIZE, pubkey, keyring->hashtype);
+ duration = key->key.pubkey.duration;
+ (void) memcpy(&key->enckey, pubkey, sizeof(key->enckey));
+ key->enckey.duration = duration;
+ return 1;
+ default:
+ return 0;
}
- EXPAND_ARRAY(keyring, key);
- key = &keyring->keys[keyring->keyc++];
- duration = key->key.pubkey.duration;
- (void) memset(key, 0x0, sizeof(*key));
- __ops_keyid(key->key_id, OPS_KEY_ID_SIZE, pubkey, keyring->hashtype);
- __ops_fingerprint(&key->fingerprint, pubkey, keyring->hashtype);
- key->type = OPS_PTAG_CT_PUBLIC_KEY;
- key->key.pubkey = *pubkey;
- key->key.pubkey.duration = duration;
- return 1;
}
/* add a key to a secret keyring */
@@ -1099,8 +1113,8 @@
key = &keyring->keys[keyring->keyc++];
(void) memset(key, 0x0, sizeof(*key));
pubkey = &seckey->pubkey;
- __ops_keyid(key->key_id, OPS_KEY_ID_SIZE, pubkey, keyring->hashtype);
- __ops_fingerprint(&key->fingerprint, pubkey, keyring->hashtype);
+ __ops_keyid(key->sigid, OPS_KEY_ID_SIZE, pubkey, keyring->hashtype);
+ __ops_fingerprint(&key->sigfingerprint, pubkey, keyring->hashtype);
key->type = OPS_PTAG_CT_SECRET_KEY;
key->key.seckey = *seckey;
if (__ops_get_debug_level(__FILE__)) {
Index: src/crypto/external/bsd/netpgp/dist/src/lib/keyring.h
diff -u src/crypto/external/bsd/netpgp/dist/src/lib/keyring.h:1.29 src/crypto/external/bsd/netpgp/dist/src/lib/keyring.h:1.30
--- src/crypto/external/bsd/netpgp/dist/src/lib/keyring.h:1.29 Sat Aug 7 04:16:40 2010
+++ src/crypto/external/bsd/netpgp/dist/src/lib/keyring.h Fri Aug 13 18:29:40 2010
@@ -143,7 +143,7 @@
char *__ops_export_key(__ops_io_t *, const __ops_key_t *, uint8_t *);
-int __ops_add_to_pubring(__ops_keyring_t *, const __ops_pubkey_t *);
+int __ops_add_to_pubring(__ops_keyring_t *, const __ops_pubkey_t *, __ops_content_enum tag);
int __ops_add_to_secring(__ops_keyring_t *, const __ops_seckey_t *);
int __ops_append_keyring(__ops_keyring_t *, __ops_keyring_t *);
Index: src/crypto/external/bsd/netpgp/dist/src/lib/misc.c
diff -u src/crypto/external/bsd/netpgp/dist/src/lib/misc.c:1.33 src/crypto/external/bsd/netpgp/dist/src/lib/misc.c:1.34
--- src/crypto/external/bsd/netpgp/dist/src/lib/misc.c:1.33 Fri Jul 9 05:35:34 2010
+++ src/crypto/external/bsd/netpgp/dist/src/lib/misc.c Fri Aug 13 18:29:40 2010
@@ -57,7 +57,7 @@
#if defined(__NetBSD__)
__COPYRIGHT("@(#) Copyright (c) 2009 The NetBSD Foundation, Inc. All rights reserved.");
-__RCSID("$NetBSD: misc.c,v 1.33 2010/07/09 05:35:34 agc Exp $");
+__RCSID("$NetBSD: misc.c,v 1.34 2010/08/13 18:29:40 agc Exp $");
#endif
#include <sys/types.h>
@@ -118,7 +118,8 @@
keyring = accumulate->keyring;
switch (pkt->tag) {
case OPS_PTAG_CT_PUBLIC_KEY:
- __ops_add_to_pubring(keyring, &content->pubkey);
+ case OPS_PTAG_CT_PUBLIC_SUBKEY:
+ __ops_add_to_pubring(keyring, &content->pubkey, pkt->tag);
return OPS_KEEP_MEMORY;
case OPS_PTAG_CT_SECRET_KEY:
case OPS_PTAG_CT_ENCRYPTED_SECRET_KEY:
Index: src/crypto/external/bsd/netpgp/dist/src/lib/netpgp.c
diff -u src/crypto/external/bsd/netpgp/dist/src/lib/netpgp.c:1.66 src/crypto/external/bsd/netpgp/dist/src/lib/netpgp.c:1.67
--- src/crypto/external/bsd/netpgp/dist/src/lib/netpgp.c:1.66 Sat Aug 7 04:16:40 2010
+++ src/crypto/external/bsd/netpgp/dist/src/lib/netpgp.c Fri Aug 13 18:29:40 2010
@@ -34,7 +34,7 @@
#if defined(__NetBSD__)
__COPYRIGHT("@(#) Copyright (c) 2009 The NetBSD Foundation, Inc. All rights reserved.");
-__RCSID("$NetBSD: netpgp.c,v 1.66 2010/08/07 04:16:40 agc Exp $");
+__RCSID("$NetBSD: netpgp.c,v 1.67 2010/08/13 18:29:40 agc Exp $");
#endif
#include <sys/types.h>
@@ -319,7 +319,7 @@
int n;
(void) memset(id, 0x0, len);
- src = pubring->keys[(last) ? pubring->keyc - 1 : 0].key_id;
+ src = pubring->keys[(last) ? pubring->keyc - 1 : 0].sigid;
for (i = 0, n = 0 ; i < OPS_KEY_ID_SIZE ; i += 2) {
n += snprintf(&id[n], len - n, "%02x%02x", src[i], src[i + 1]);
}
@@ -739,7 +739,7 @@
id_array.c, 10, 10, "netpgp_match_keys_json", return 0);
__ops_sprint_mj(netpgp->io, netpgp->pubring,
key, &id_array.value.v[id_array.c++],
- "pub",
+ "signature ",
&key->key.pubkey, psigs);
}
k += 1;
@@ -930,7 +930,7 @@
char *out,
int armored)
{
- const __ops_key_t *keypair;
+ const __ops_key_t *key;
const unsigned overwrite = 1;
const char *suffix;
__ops_io_t *io;
@@ -944,14 +944,14 @@
}
suffix = (armored) ? ".asc" : ".gpg";
/* get key with which to sign */
- if ((keypair = resolve_userid(netpgp, netpgp->pubring, userid)) == NULL) {
+ if ((key = resolve_userid(netpgp, netpgp->pubring, userid)) == NULL) {
return 0;
}
if (out == NULL) {
(void) snprintf(outname, sizeof(outname), "%s%s", f, suffix);
out = outname;
}
- return (int)__ops_encrypt_file(io, f, out, keypair, (unsigned)armored,
+ return (int)__ops_encrypt_file(io, f, out, key, (unsigned)armored,
overwrite);
}
@@ -1015,10 +1015,11 @@
if (pubkey == NULL) {
(void) fprintf(io->errs,
"netpgp: warning - using pubkey from secring\n");
- __ops_print_keydata(io, netpgp->pubring, keypair, "pub",
+ __ops_print_keydata(io, netpgp->pubring, keypair, "signature ",
&keypair->key.seckey.pubkey, 0);
} else {
- __ops_print_keydata(io, netpgp->pubring, pubkey, "pub", &pubkey->key.pubkey, 0);
+ __ops_print_keydata(io, netpgp->pubring, pubkey, "signature ",
+ &pubkey->key.pubkey, 0);
}
}
if (netpgp_getvar(netpgp, "ssh keys") == NULL) {
Index: src/crypto/external/bsd/netpgp/dist/src/lib/packet-parse.c
diff -u src/crypto/external/bsd/netpgp/dist/src/lib/packet-parse.c:1.38 src/crypto/external/bsd/netpgp/dist/src/lib/packet-parse.c:1.39
--- src/crypto/external/bsd/netpgp/dist/src/lib/packet-parse.c:1.38 Fri Jul 9 05:35:34 2010
+++ src/crypto/external/bsd/netpgp/dist/src/lib/packet-parse.c Fri Aug 13 18:29:40 2010
@@ -58,7 +58,7 @@
#if defined(__NetBSD__)
__COPYRIGHT("@(#) Copyright (c) 2009 The NetBSD Foundation, Inc. All rights reserved.");
-__RCSID("$NetBSD: packet-parse.c,v 1.38 2010/07/09 05:35:34 agc Exp $");
+__RCSID("$NetBSD: packet-parse.c,v 1.39 2010/08/13 18:29:40 agc Exp $");
#endif
#ifdef HAVE_OPENSSL_CAST_H
@@ -1237,8 +1237,10 @@
{
__ops_packet_t pkt;
- if (!parse_pubkey_data(&pkt.u.pubkey, region, stream))
+ if (!parse_pubkey_data(&pkt.u.pubkey, region, stream)) {
+ (void) fprintf(stderr, "parse_pubkey: parse_pubkey_data failed\n");
return 0;
+ }
/* XXX: this test should be done for all packets, surely? */
if (region->readc != region->length) {
Index: src/crypto/external/bsd/netpgp/dist/src/lib/reader.c
diff -u src/crypto/external/bsd/netpgp/dist/src/lib/reader.c:1.38 src/crypto/external/bsd/netpgp/dist/src/lib/reader.c:1.39
--- src/crypto/external/bsd/netpgp/dist/src/lib/reader.c:1.38 Fri Jul 9 05:35:35 2010
+++ src/crypto/external/bsd/netpgp/dist/src/lib/reader.c Fri Aug 13 18:29:41 2010
@@ -54,7 +54,7 @@
#if defined(__NetBSD__)
__COPYRIGHT("@(#) Copyright (c) 2009 The NetBSD Foundation, Inc. All rights reserved.");
-__RCSID("$NetBSD: reader.c,v 1.38 2010/07/09 05:35:35 agc Exp $");
+__RCSID("$NetBSD: reader.c,v 1.39 2010/08/13 18:29:41 agc Exp $");
#endif
#include <sys/types.h>
@@ -2204,7 +2204,8 @@
}
do {
/* print out the user id */
- __ops_print_keydata(io, cbinfo->cryptinfo.pubring, pubkey, "pub", &pubkey->key.pubkey, 0);
+ __ops_print_keydata(io, cbinfo->cryptinfo.pubring, pubkey,
+ "signature ", &pubkey->key.pubkey, 0);
/* now decrypt key */
secret = __ops_decrypt_seckey(keypair, cbinfo->passfp);
if (secret == NULL) {
@@ -2240,7 +2241,8 @@
if (cbinfo->cryptinfo.keydata == NULL) {
(void) fprintf(io->errs, "get_passphrase_cb: NULL keydata\n");
} else {
- __ops_print_keydata(io, cbinfo->cryptinfo.pubring, cbinfo->cryptinfo.keydata, "pub",
+printf("get_passphrase_cb\n");
+ __ops_print_keydata(io, cbinfo->cryptinfo.pubring, cbinfo->cryptinfo.keydata, "signature ",
&cbinfo->cryptinfo.keydata->key.pubkey, 0);
}
switch (pkt->tag) {
Index: src/crypto/external/bsd/netpgp/dist/src/lib/version.h
diff -u src/crypto/external/bsd/netpgp/dist/src/lib/version.h:1.38 src/crypto/external/bsd/netpgp/dist/src/lib/version.h:1.39
--- src/crypto/external/bsd/netpgp/dist/src/lib/version.h:1.38 Sat Aug 7 04:16:40 2010
+++ src/crypto/external/bsd/netpgp/dist/src/lib/version.h Fri Aug 13 18:29:41 2010
@@ -58,7 +58,7 @@
#endif
/* development versions have .99 suffix */
-#define NETPGP_BASE_VERSION "3.99.8"
+#define NETPGP_BASE_VERSION "3.99.9"
#define NETPGP_VERSION_CAT(a, b) "NetPGP portable " a "/[" b "]"
#define NETPGP_VERSION_STRING \
Index: src/crypto/external/bsd/netpgp/dist/src/lib/packet-print.c
diff -u src/crypto/external/bsd/netpgp/dist/src/lib/packet-print.c:1.35 src/crypto/external/bsd/netpgp/dist/src/lib/packet-print.c:1.36
--- src/crypto/external/bsd/netpgp/dist/src/lib/packet-print.c:1.35 Sat Aug 7 04:16:40 2010
+++ src/crypto/external/bsd/netpgp/dist/src/lib/packet-print.c Fri Aug 13 18:29:40 2010
@@ -58,7 +58,7 @@
#if defined(__NetBSD__)
__COPYRIGHT("@(#) Copyright (c) 2009 The NetBSD Foundation, Inc. All rights reserved.");
-__RCSID("$NetBSD: packet-print.c,v 1.35 2010/08/07 04:16:40 agc Exp $");
+__RCSID("$NetBSD: packet-print.c,v 1.36 2010/08/13 18:29:40 agc Exp $");
#endif
#include <string.h>
@@ -362,16 +362,16 @@
/* print the sub key binding signature info */
static int
-psubkeybinding(char *buf, size_t size, __ops_subsig_t *subsig, const __ops_pubkey_t *pubkey, const char *expired)
+psubkeybinding(char *buf, size_t size, const __ops_key_t *key, const char *expired)
{
char keyid[512];
char t[32];
- return snprintf(buf, size, "sub %d/%s %s %s %s\n",
- numkeybits(pubkey),
- __ops_show_pka(subsig->sig.info.key_alg),
- strhexdump(keyid, subsig->sig.info.signer_id, OPS_KEY_ID_SIZE, ""),
- ptimestr(t, sizeof(t), subsig->sig.info.birthtime),
+ return snprintf(buf, size, "encryption %d/%s %s %s %s\n",
+ numkeybits(&key->enckey),
+ __ops_show_pka(key->enckey.alg),
+ strhexdump(keyid, key->encid, OPS_KEY_ID_SIZE, ""),
+ ptimestr(t, sizeof(t), key->enckey.birthtime),
expired);
}
@@ -452,7 +452,7 @@
trustkey = __ops_getkeybyid(io, keyring, key->subsigs[j].sig.info.signer_id, &from);
if (key->subsigs[j].sig.info.version == 4 &&
key->subsigs[j].sig.info.type == OPS_SIG_SUBKEY) {
- psubkeybinding(&uidbuf[n], sizeof(uidbuf) - n, &key->subsigs[j], pubkey, expired);
+ psubkeybinding(&uidbuf[n], sizeof(uidbuf) - n, key, expired);
} else {
n += snprintf(&uidbuf[n], sizeof(uidbuf) - n,
"sig %s %s %s\n",
@@ -466,10 +466,10 @@
header,
numkeybits(pubkey),
__ops_show_pka(pubkey->alg),
- strhexdump(keyid, key->key_id, OPS_KEY_ID_SIZE, ""),
+ strhexdump(keyid, key->sigid, OPS_KEY_ID_SIZE, ""),
ptimestr(t, sizeof(t), pubkey->birthtime),
expired,
- strhexdump(fp, key->fingerprint.fingerprint, key->fingerprint.length, " "),
+ strhexdump(fp, key->sigfingerprint.fingerprint, key->sigfingerprint.length, " "),
uidbuf);
}
@@ -496,9 +496,9 @@
mj_append_field(keyjson, "header", "string", header);
mj_append_field(keyjson, "key bits", "integer", (int64_t) numkeybits(pubkey));
mj_append_field(keyjson, "pka", "string", __ops_show_pka(pubkey->alg));
- mj_append_field(keyjson, "key id", "string", strhexdump(keyid, key->key_id, OPS_KEY_ID_SIZE, ""));
+ mj_append_field(keyjson, "key id", "string", strhexdump(keyid, key->sigid, OPS_KEY_ID_SIZE, ""));
mj_append_field(keyjson, "fingerprint", "string",
- strhexdump(fp, key->fingerprint.fingerprint, key->fingerprint.length, " "));
+ strhexdump(fp, key->sigfingerprint.fingerprint, key->sigfingerprint.length, " "));
mj_append_field(keyjson, "birthtime", "integer", pubkey->birthtime);
mj_append_field(keyjson, "duration", "integer", pubkey->duration);
for (i = 0; i < key->uidc; i++) {
@@ -528,13 +528,13 @@
mj_create(&sub_obj, "array");
if (key->subsigs[j].sig.info.version == 4 &&
key->subsigs[j].sig.info.type == OPS_SIG_SUBKEY) {
- mj_append(&sub_obj, "integer", (int64_t)numkeybits(pubkey));
+ mj_append(&sub_obj, "integer", (int64_t)numkeybits(&key->enckey));
mj_append(&sub_obj, "string",
- (const char *)__ops_show_pka(key->subsigs[j].sig.info.key_alg));
+ (const char *)__ops_show_pka(key->enckey.alg));
mj_append(&sub_obj, "string",
- strhexdump(keyid, key->subsigs[j].sig.info.signer_id, OPS_KEY_ID_SIZE, ""));
- mj_append(&sub_obj, "integer", (int64_t)key->subsigs[j].sig.info.birthtime);
- mj_append_field(keyjson, "sub", "array", &sub_obj);
+ strhexdump(keyid, key->encid, OPS_KEY_ID_SIZE, ""));
+ mj_append(&sub_obj, "integer", (int64_t)key->enckey.birthtime);
+ mj_append_field(keyjson, "encryption", "array", &sub_obj);
mj_delete(&sub_obj);
} else {
mj_append(&sub_obj, "string",
@@ -615,7 +615,7 @@
}
}
return __ops_asprintf(buf, "pub:%s:%d:%d:%lld:%lld\n%s",
- strhexdump(fp, key->fingerprint.fingerprint, OPS_FINGERPRINT_SIZE, ""),
+ strhexdump(fp, key->sigfingerprint.fingerprint, OPS_FINGERPRINT_SIZE, ""),
pubkey->alg,
numkeybits(pubkey),
(long long)pubkey->birthtime,
@@ -689,7 +689,7 @@
int cc;
cc = snprintf(out, outsize, "key:%s:%d:%lld:%lld:%d:\n",
- strhexdump(fp, key->fingerprint.fingerprint, OPS_FINGERPRINT_SIZE, ""),
+ strhexdump(fp, key->sigfingerprint.fingerprint, OPS_FINGERPRINT_SIZE, ""),
key->key.pubkey.version,
(long long)key->key.pubkey.birthtime,
(long long)key->key.pubkey.days_valid,
Index: src/crypto/external/bsd/netpgp/dist/src/lib/ssh2pgp.c
diff -u src/crypto/external/bsd/netpgp/dist/src/lib/ssh2pgp.c:1.14 src/crypto/external/bsd/netpgp/dist/src/lib/ssh2pgp.c:1.15
--- src/crypto/external/bsd/netpgp/dist/src/lib/ssh2pgp.c:1.14 Fri Jul 9 05:35:35 2010
+++ src/crypto/external/bsd/netpgp/dist/src/lib/ssh2pgp.c Fri Aug 13 18:29:41 2010
@@ -317,9 +317,9 @@
hostname,
f,
owner);
- __ops_keyid(key->key_id, sizeof(key->key_id), pubkey, hashtype);
+ __ops_keyid(key->sigid, sizeof(key->sigid), pubkey, hashtype);
__ops_add_userid(key, userid);
- __ops_fingerprint(&key->fingerprint, pubkey, hashtype);
+ __ops_fingerprint(&key->sigfingerprint, pubkey, hashtype);
free(userid);
if (__ops_get_debug_level(__FILE__)) {
/*__ops_print_keydata(io, keyring, key, "pub", pubkey, 0);*/
@@ -415,8 +415,8 @@
crypted.set_crypt_key(&crypted, sesskey);
__ops_encrypt_init(&crypted);
key->key.seckey.pubkey.alg = OPS_PKA_RSA;
- __ops_fingerprint(&key->fingerprint, pubkey, hashtype);
- __ops_keyid(key->key_id, sizeof(key->key_id), pubkey, hashtype);
+ __ops_fingerprint(&key->sigfingerprint, pubkey, hashtype);
+ __ops_keyid(key->sigid, sizeof(key->sigid), pubkey, hashtype);
return 1;
}
Index: src/crypto/external/bsd/netpgp/dist/src/netpgp/netpgp.1
diff -u src/crypto/external/bsd/netpgp/dist/src/netpgp/netpgp.1:1.13 src/crypto/external/bsd/netpgp/dist/src/netpgp/netpgp.1:1.14
--- src/crypto/external/bsd/netpgp/dist/src/netpgp/netpgp.1:1.13 Fri May 14 17:27:35 2010
+++ src/crypto/external/bsd/netpgp/dist/src/netpgp/netpgp.1 Fri Aug 13 18:29:41 2010
@@ -1,4 +1,4 @@
-.\" $NetBSD: netpgp.1,v 1.13 2010/05/14 17:27:35 joerg Exp $
+.\" $NetBSD: netpgp.1,v 1.14 2010/08/13 18:29:41 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 March 4, 2010
+.Dd August 9, 2010
.Dt NETPGP 1
.Os
.Sh NAME
@@ -78,8 +78,12 @@
.Ar file ...
.Nm
.Fl Fl version
+.Nm
+.Op Fl Vdesv
+.Op Fl olong-option Ns = Ns value
+.Ar file ...
.Pp
-where the options for all commands are:
+where the long options for all commands are:
.Pp
.Op Fl Fl coredumps
.br
Index: src/crypto/external/bsd/netpgp/dist/src/netpgp/netpgp.c
diff -u src/crypto/external/bsd/netpgp/dist/src/netpgp/netpgp.c:1.12 src/crypto/external/bsd/netpgp/dist/src/netpgp/netpgp.c:1.13
--- src/crypto/external/bsd/netpgp/dist/src/netpgp/netpgp.c:1.12 Thu Jul 1 04:27:21 2010
+++ src/crypto/external/bsd/netpgp/dist/src/netpgp/netpgp.c Fri Aug 13 18:29:41 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: netpgp.c,v 1.12 2010/07/01 04:27:21 agc Exp $ */
+/* $NetBSD: netpgp.c,v 1.13 2010/08/13 18:29:41 agc Exp $ */
/*-
* Copyright (c) 2009 The NetBSD Foundation, Inc.
@@ -35,6 +35,7 @@
#include <sys/stat.h>
#include <getopt.h>
+#include <regex.h>
#include <netpgp.h>
#include <stdio.h>
#include <stdlib.h>
@@ -69,7 +70,7 @@
enum optdefs {
/* commands */
- ENCRYPT,
+ ENCRYPT = 260,
DECRYPT,
SIGN,
CLEARSIGN,
@@ -333,6 +334,162 @@
}
}
+/* set an option */
+static int
+setoption(netpgp_t *netpgp, prog_t *p, int val, char *arg, int *homeset)
+{
+ switch (val) {
+ case COREDUMPS:
+ netpgp_setvar(netpgp, "coredumps", "allowed");
+ break;
+ case ENCRYPT:
+ case SIGN:
+ case CLEARSIGN:
+ /* for encryption and signing, we need a userid */
+ netpgp_setvar(netpgp, "need userid", "1");
+ p->cmd = val;
+ break;
+ case DECRYPT:
+ case VERIFY:
+ case VERIFY_CAT:
+ case LIST_PACKETS:
+ case SHOW_KEYS:
+ case HELP_CMD:
+ p->cmd = val;
+ break;
+ case VERSION_CMD:
+ printf(
+"%s\nAll bug reports, praise and chocolate, please, to:\n%s\n",
+ netpgp_get_info("version"),
+ netpgp_get_info("maintainer"));
+ exit(EXIT_SUCCESS);
+ /* options */
+ case SSHKEYS:
+ netpgp_setvar(netpgp, "ssh keys", "1");
+ break;
+ case KEYRING:
+ if (arg == NULL) {
+ (void) fprintf(stderr,
+ "No keyring argument provided\n");
+ exit(EXIT_ERROR);
+ }
+ snprintf(p->keyring, sizeof(p->keyring), "%s", arg);
+ break;
+ case USERID:
+ if (arg == NULL) {
+ (void) fprintf(stderr,
+ "No userid argument provided\n");
+ exit(EXIT_ERROR);
+ }
+ netpgp_setvar(netpgp, "userid", arg);
+ break;
+ case ARMOUR:
+ p->armour = 1;
+ break;
+ case DETACHED:
+ p->detached = 1;
+ break;
+ case VERBOSE:
+ netpgp_incvar(netpgp, "verbose", 1);
+ break;
+ case HOMEDIR:
+ if (arg == NULL) {
+ (void) fprintf(stderr,
+ "No home directory argument provided\n");
+ exit(EXIT_ERROR);
+ }
+ netpgp_set_homedir(netpgp, arg, NULL, 0);
+ *homeset = 1;
+ break;
+ case HASH_ALG:
+ if (arg == NULL) {
+ (void) fprintf(stderr,
+ "No hash algorithm argument provided\n");
+ exit(EXIT_ERROR);
+ }
+ netpgp_setvar(netpgp, "hash", arg);
+ break;
+ case PASSWDFD:
+ if (arg == NULL) {
+ (void) fprintf(stderr,
+ "No pass-fd argument provided\n");
+ exit(EXIT_ERROR);
+ }
+ netpgp_setvar(netpgp, "pass-fd", arg);
+ break;
+ case OUTPUT:
+ if (arg == NULL) {
+ (void) fprintf(stderr,
+ "No output filename argument provided\n");
+ exit(EXIT_ERROR);
+ }
+ if (p->output) {
+ (void) free(p->output);
+ }
+ p->output = strdup(arg);
+ break;
+ case RESULTS:
+ if (arg == NULL) {
+ (void) fprintf(stderr,
+ "No output filename argument provided\n");
+ exit(EXIT_ERROR);
+ }
+ netpgp_setvar(netpgp, "results", arg);
+ break;
+ case SSHKEYFILE:
+ netpgp_setvar(netpgp, "sshkeyfile", arg);
+ break;
+ case MAX_MEM_ALLOC:
+ netpgp_setvar(netpgp, "max mem alloc", arg);
+ break;
+ case DURATION:
+ netpgp_setvar(netpgp, "duration", arg);
+ break;
+ case BIRTHTIME:
+ netpgp_setvar(netpgp, "birthtime", arg);
+ break;
+ case OPS_DEBUG:
+ netpgp_set_debug(arg);
+ break;
+ default:
+ p->cmd = HELP_CMD;
+ break;
+ }
+ return 1;
+}
+
+/* we have -o option=value -- parse, and process */
+static int
+parse_option(netpgp_t *netpgp, prog_t *p, const char *s, int *homeset)
+{
+ static regex_t opt;
+ struct option *op;
+ static int compiled;
+ regmatch_t matches[10];
+ char option[128];
+ char value[128];
+
+ if (!compiled) {
+ compiled = 1;
+ (void) regcomp(&opt, "([^=]{1,128})(=(.*))?", REG_EXTENDED);
+ }
+ if (regexec(&opt, s, 10, matches, 0) == 0) {
+ (void) snprintf(option, sizeof(option), "%.*s",
+ (int)(matches[1].rm_eo - matches[1].rm_so), &s[matches[1].rm_so]);
+ if (matches[2].rm_so > 0) {
+ (void) snprintf(value, sizeof(value), "%.*s",
+ (int)(matches[3].rm_eo - matches[3].rm_so), &s[matches[3].rm_so]);
+ } else {
+ value[0] = 0x0;
+ }
+ for (op = options ; op->name ; op++) {
+ if (strcmp(op->name, option) == 0) {
+ return setoption(netpgp, p, op->val, value, homeset);
+ }
+ }
+ }
+ return 0;
+}
int
main(int argc, char **argv)
@@ -360,124 +517,45 @@
netpgp_setvar(&netpgp, "max mem alloc", "4194304");
homeset = 0;
optindex = 0;
- while ((ch = getopt_long(argc, argv, "", options, &optindex)) != -1) {
- switch (options[optindex].val) {
- case COREDUMPS:
- netpgp_setvar(&netpgp, "coredumps", "allowed");
- p.cmd = options[optindex].val;
- break;
- case ENCRYPT:
- case SIGN:
- case CLEARSIGN:
- /* for encryption and signing, we need a userid */
- netpgp_setvar(&netpgp, "need userid", "1");
- p.cmd = options[optindex].val;
- break;
- case DECRYPT:
- case VERIFY:
- case VERIFY_CAT:
- case LIST_PACKETS:
- case SHOW_KEYS:
- case HELP_CMD:
- p.cmd = options[optindex].val;
- break;
- case VERSION_CMD:
- printf(
-"%s\nAll bug reports, praise and chocolate, please, to:\n%s\n",
- netpgp_get_info("version"),
- netpgp_get_info("maintainer"));
- exit(EXIT_SUCCESS);
- /* options */
- case SSHKEYS:
- netpgp_setvar(&netpgp, "ssh keys", "1");
- break;
- case KEYRING:
- if (optarg == NULL) {
- (void) fprintf(stderr,
- "No keyring argument provided\n");
- exit(EXIT_ERROR);
- }
- snprintf(p.keyring, sizeof(p.keyring), "%s", optarg);
- break;
- case USERID:
- if (optarg == NULL) {
- (void) fprintf(stderr,
- "No userid argument provided\n");
- exit(EXIT_ERROR);
- }
- netpgp_setvar(&netpgp, "userid", optarg);
- break;
- case ARMOUR:
- p.armour = 1;
- break;
- case DETACHED:
- p.detached = 1;
- break;
- case VERBOSE:
- netpgp_incvar(&netpgp, "verbose", 1);
- break;
- case HOMEDIR:
- if (optarg == NULL) {
- (void) fprintf(stderr,
- "No home directory argument provided\n");
- exit(EXIT_ERROR);
- }
- netpgp_set_homedir(&netpgp, optarg, NULL, 0);
- homeset = 1;
- break;
- case HASH_ALG:
- if (optarg == NULL) {
- (void) fprintf(stderr,
- "No hash algorithm argument provided\n");
- exit(EXIT_ERROR);
- }
- netpgp_setvar(&netpgp, "hash", optarg);
- break;
- case PASSWDFD:
- if (optarg == NULL) {
- (void) fprintf(stderr,
- "No pass-fd argument provided\n");
- exit(EXIT_ERROR);
- }
- netpgp_setvar(&netpgp, "pass-fd", optarg);
- break;
- case OUTPUT:
- if (optarg == NULL) {
- (void) fprintf(stderr,
- "No output filename argument provided\n");
- exit(EXIT_ERROR);
- }
- if (p.output) {
- (void) free(p.output);
+ while ((ch = getopt_long(argc, argv, "Vdeo:sv", options, &optindex)) != -1) {
+ if (ch >= ENCRYPT) {
+ /* getopt_long returns 0 for long options */
+ if (!setoption(&netpgp, &p, options[optindex].val, optarg, &homeset)) {
+ (void) fprintf(stderr, "Bad option\n");
}
- p.output = strdup(optarg);
- break;
- case RESULTS:
- if (optarg == NULL) {
- (void) fprintf(stderr,
- "No output filename argument provided\n");
- exit(EXIT_ERROR);
+ } else {
+ switch (ch) {
+ case 'V':
+ printf(
+ "%s\nAll bug reports, praise and chocolate, please, to:\n%s\n",
+ netpgp_get_info("version"),
+ netpgp_get_info("maintainer"));
+ exit(EXIT_SUCCESS);
+ case 'd':
+ p.cmd = DECRYPT;
+ break;
+ case 'e':
+ /* for encryption and signing, we need a userid */
+ netpgp_setvar(&netpgp, "need userid", "1");
+ p.cmd = ENCRYPT;
+ break;
+ case 'o':
+ if (!parse_option(&netpgp, &p, optarg, &homeset)) {
+ (void) fprintf(stderr, "Bad option\n");
+ }
+ break;
+ case 's':
+ /* for encryption and signing, we need a userid */
+ netpgp_setvar(&netpgp, "need userid", "1");
+ p.cmd = SIGN;
+ break;
+ case 'v':
+ p.cmd = VERIFY;
+ break;
+ default:
+ p.cmd = HELP_CMD;
+ break;
}
- netpgp_setvar(&netpgp, "results", optarg);
- break;
- case SSHKEYFILE:
- netpgp_setvar(&netpgp, "sshkeyfile", optarg);
- break;
- case MAX_MEM_ALLOC:
- netpgp_setvar(&netpgp, "max mem alloc", optarg);
- break;
- case DURATION:
- netpgp_setvar(&netpgp, "duration", optarg);
- break;
- case BIRTHTIME:
- netpgp_setvar(&netpgp, "birthtime", optarg);
- break;
- case OPS_DEBUG:
- netpgp_set_debug(optarg);
- break;
- default:
- p.cmd = HELP_CMD;
- break;
}
}
if (!homeset) {
Index: src/crypto/external/bsd/netpgp/dist/src/netpgpkeys/netpgpkeys.1
diff -u src/crypto/external/bsd/netpgp/dist/src/netpgpkeys/netpgpkeys.1:1.13 src/crypto/external/bsd/netpgp/dist/src/netpgpkeys/netpgpkeys.1:1.14
--- src/crypto/external/bsd/netpgp/dist/src/netpgpkeys/netpgpkeys.1:1.13 Fri Jun 25 07:40:35 2010
+++ src/crypto/external/bsd/netpgp/dist/src/netpgpkeys/netpgpkeys.1 Fri Aug 13 18:29:41 2010
@@ -1,4 +1,4 @@
-.\" $NetBSD: netpgpkeys.1,v 1.13 2010/06/25 07:40:35 wiz Exp $
+.\" $NetBSD: netpgpkeys.1,v 1.14 2010/08/13 18:29:41 agc Exp $
.\"
.\" Copyright (c) 2009, 2010 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 June 25, 2010
+.Dd August 9, 2010
.Dt NETPGPKEYS 1
.Os
.Sh NAME
@@ -60,8 +60,12 @@
.Ar file ...
.Nm
.Fl Fl version
+.Nm
+.Op Fl Vgls
+.Op Fl olong-option Ns = Ns value
+.Ar file ...
.Pp
-where the options for all commands are:
+where the long options for all commands are:
.Pp
.Op Fl Fl coredumps
.br
Index: src/crypto/external/bsd/netpgp/dist/src/netpgpkeys/netpgpkeys.c
diff -u src/crypto/external/bsd/netpgp/dist/src/netpgpkeys/netpgpkeys.c:1.15 src/crypto/external/bsd/netpgp/dist/src/netpgpkeys/netpgpkeys.c:1.16
--- src/crypto/external/bsd/netpgp/dist/src/netpgpkeys/netpgpkeys.c:1.15 Sat Aug 7 04:16:41 2010
+++ src/crypto/external/bsd/netpgp/dist/src/netpgpkeys/netpgpkeys.c Fri Aug 13 18:29:41 2010
@@ -33,6 +33,7 @@
#include <sys/stat.h>
#include <getopt.h>
+#include <regex.h>
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
@@ -70,7 +71,7 @@
enum optdefs {
/* commands */
- LIST_KEYS = 1,
+ LIST_KEYS = 260,
LIST_SIGS,
FIND_KEY,
EXPORT_KEY,
@@ -276,9 +277,9 @@
pobj(fp, &sub->value.v[0], (psigs) ? 4 : 14); /* human name */
pobj(fp, &sub->value.v[1], 1); /* any revocation */
p(fp, "\n", NULL);
- } else if (strcmp(obj->value.v[i].value.s, "sub") == 0) {
+ } else if (strcmp(obj->value.v[i].value.s, "encryption") == 0) {
sub = &obj->value.v[i + 1];
- p(fp, "sub", NULL);
+ p(fp, "encryption", NULL);
pobj(fp, &sub->value.v[0], 1); /* size */
p(fp, "/", NULL);
pobj(fp, &sub->value.v[1], 0); /* alg */
@@ -381,6 +382,142 @@
}
}
+/* set the option */
+static int
+setoption(netpgp_t *netpgp, prog_t *p, int val, char *arg, int *homeset)
+{
+ switch (val) {
+ case COREDUMPS:
+ netpgp_setvar(netpgp, "coredumps", "allowed");
+ break;
+ case GENERATE_KEY:
+ netpgp_setvar(netpgp, "userid checks", "skip");
+ p->cmd = val;
+ break;
+ case LIST_KEYS:
+ case LIST_SIGS:
+ case FIND_KEY:
+ case EXPORT_KEY:
+ case IMPORT_KEY:
+ case GET_KEY:
+ case HELP_CMD:
+ p->cmd = val;
+ break;
+ case VERSION_CMD:
+ printf(
+"%s\nAll bug reports, praise and chocolate, please, to:\n%s\n",
+ netpgp_get_info("version"),
+ netpgp_get_info("maintainer"));
+ exit(EXIT_SUCCESS);
+ /* options */
+ case SSHKEYS:
+ netpgp_setvar(netpgp, "ssh keys", "1");
+ break;
+ case KEYRING:
+ if (arg == NULL) {
+ (void) fprintf(stderr,
+ "No keyring argument provided\n");
+ exit(EXIT_ERROR);
+ }
+ snprintf(p->keyring, sizeof(p->keyring), "%s", arg);
+ break;
+ case USERID:
+ if (optarg == NULL) {
+ (void) fprintf(stderr,
+ "no userid argument provided\n");
+ exit(EXIT_ERROR);
+ }
+ netpgp_setvar(netpgp, "userid", arg);
+ break;
+ case VERBOSE:
+ netpgp_incvar(netpgp, "verbose", 1);
+ break;
+ case HOMEDIR:
+ if (arg == NULL) {
+ (void) fprintf(stderr,
+ "no home directory argument provided\n");
+ exit(EXIT_ERROR);
+ }
+ netpgp_set_homedir(netpgp, arg, NULL, 0);
+ *homeset = 1;
+ break;
+ case NUMBITS:
+ if (arg == NULL) {
+ (void) fprintf(stderr,
+ "no number of bits argument provided\n");
+ exit(EXIT_ERROR);
+ }
+ p->numbits = atoi(arg);
+ break;
+ case HASH_ALG:
+ if (arg == NULL) {
+ (void) fprintf(stderr,
+ "No hash algorithm argument provided\n");
+ exit(EXIT_ERROR);
+ }
+ netpgp_setvar(netpgp, "hash", arg);
+ break;
+ case PASSWDFD:
+ if (arg == NULL) {
+ (void) fprintf(stderr,
+ "no pass-fd argument provided\n");
+ exit(EXIT_ERROR);
+ }
+ netpgp_setvar(netpgp, "pass-fd", arg);
+ break;
+ case RESULTS:
+ if (arg == NULL) {
+ (void) fprintf(stderr,
+ "No output filename argument provided\n");
+ exit(EXIT_ERROR);
+ }
+ netpgp_setvar(netpgp, "res", arg);
+ break;
+ case SSHKEYFILE:
+ netpgp_setvar(netpgp, "sshkeyfile", arg);
+ break;
+ case OPS_DEBUG:
+ netpgp_set_debug(arg);
+ break;
+ default:
+ p->cmd = HELP_CMD;
+ break;
+ }
+}
+
+/* we have -o option=value -- parse, and process */
+static int
+parse_option(netpgp_t *netpgp, prog_t *p, const char *s, int *homeset)
+{
+ static regex_t opt;
+ struct option *op;
+ static int compiled;
+ regmatch_t matches[10];
+ char option[128];
+ char value[128];
+
+ if (!compiled) {
+ compiled = 1;
+ (void) regcomp(&opt, "([^=]{1,128})(=(.*))?", REG_EXTENDED);
+ }
+ if (regexec(&opt, s, 10, matches, 0) == 0) {
+ (void) snprintf(option, sizeof(option), "%.*s",
+ (int)(matches[1].rm_eo - matches[1].rm_so), &s[matches[1].rm_so]);
+ if (matches[2].rm_so > 0) {
+ (void) snprintf(value, sizeof(value), "%.*s",
+ (int)(matches[3].rm_eo - matches[3].rm_so), &s[matches[3].rm_so]);
+ } else {
+ value[0] = 0x0;
+ }
+ for (op = options ; op->name ; op++) {
+ if (strcmp(op->name, option) == 0) {
+ return setoption(netpgp, p, op->val, value, homeset);
+ }
+ }
+ }
+ return 0;
+}
+
int
main(int argc, char **argv)
{
@@ -407,108 +544,38 @@
netpgp_setvar(&netpgp, "res", "<stdout>");
netpgp_setvar(&netpgp, "hash", DEFAULT_HASH_ALG);
optindex = 0;
- while ((ch = getopt_long(argc, argv, "", options, &optindex)) != -1) {
- switch (options[optindex].val) {
- case COREDUMPS:
- netpgp_setvar(&netpgp, "coredumps", "allowed");
- p.cmd = options[optindex].val;
- break;
- case GENERATE_KEY:
- netpgp_setvar(&netpgp, "userid checks", "skip");
- p.cmd = options[optindex].val;
- break;
- case LIST_KEYS:
- case LIST_SIGS:
- case FIND_KEY:
- case EXPORT_KEY:
- case IMPORT_KEY:
- case GET_KEY:
- case HELP_CMD:
- p.cmd = options[optindex].val;
- break;
- case VERSION_CMD:
- printf(
-"%s\nAll bug reports, praise and chocolate, please, to:\n%s\n",
- netpgp_get_info("version"),
- netpgp_get_info("maintainer"));
- exit(EXIT_SUCCESS);
- /* options */
- case SSHKEYS:
- netpgp_setvar(&netpgp, "ssh keys", "1");
- break;
- case KEYRING:
- if (optarg == NULL) {
- (void) fprintf(stderr,
- "%s: No keyring argument provided\n",
- *argv);
- exit(EXIT_ERROR);
- }
- snprintf(p.keyring, sizeof(p.keyring), "%s", optarg);
- break;
- case USERID:
- if (optarg == NULL) {
- (void) fprintf(stderr,
- "%s: no userid argument provided\n",
- *argv);
- exit(EXIT_ERROR);
- }
- netpgp_setvar(&netpgp, "userid", optarg);
- break;
- case VERBOSE:
- netpgp_incvar(&netpgp, "verbose", 1);
- break;
- case HOMEDIR:
- if (optarg == NULL) {
- (void) fprintf(stderr,
- "%s: no home directory argument provided\n",
- *argv);
- exit(EXIT_ERROR);
- }
- netpgp_set_homedir(&netpgp, optarg, NULL, 0);
- homeset = 1;
- break;
- case NUMBITS:
- if (optarg == NULL) {
- (void) fprintf(stderr,
- "%s: no number of bits argument provided\n",
- *argv);
- exit(EXIT_ERROR);
+ while ((ch = getopt_long(argc, argv, "Vglo:s", options, &optindex)) != -1) {
+ if (ch >= LIST_KEYS) {
+ /* getopt_long returns 0 for long options */
+ if (!setoption(&netpgp, &p, options[optindex].val, optarg, &homeset)) {
+ (void) fprintf(stderr, "Bad option\n");
}
- p.numbits = atoi(optarg);
- break;
- case HASH_ALG:
- if (optarg == NULL) {
- (void) fprintf(stderr,
- "No hash algorithm argument provided\n");
- exit(EXIT_ERROR);
- }
- netpgp_setvar(&netpgp, "hash", optarg);
- break;
- case PASSWDFD:
- if (optarg == NULL) {
- (void) fprintf(stderr,
- "%s: no pass-fd argument provided\n", *argv);
- exit(EXIT_ERROR);
- }
- netpgp_setvar(&netpgp, "pass-fd", optarg);
- break;
- case RESULTS:
- if (optarg == NULL) {
- (void) fprintf(stderr,
- "No output filename argument provided\n");
- exit(EXIT_ERROR);
+ } else {
+ switch (ch) {
+ case 'V':
+ printf(
+ "%s\nAll bug reports, praise and chocolate, please, to:\n%s\n",
+ netpgp_get_info("version"),
+ netpgp_get_info("maintainer"));
+ exit(EXIT_SUCCESS);
+ case 'g':
+ p.cmd = GENERATE_KEY;
+ break;
+ case 'l':
+ p.cmd = LIST_KEYS;
+ break;
+ case 'o':
+ if (!parse_option(&netpgp, &p, optarg, &homeset)) {
+ (void) fprintf(stderr, "Bad option\n");
+ }
+ break;
+ case 's':
+ p.cmd = LIST_SIGS;
+ break;
+ default:
+ p.cmd = HELP_CMD;
+ break;
}
- netpgp_setvar(&netpgp, "res", optarg);
- break;
- case SSHKEYFILE:
- netpgp_setvar(&netpgp, "sshkeyfile", optarg);
- break;
- case OPS_DEBUG:
- netpgp_set_debug(optarg);
- break;
- default:
- p.cmd = HELP_CMD;
- break;
}
}
if (!homeset) {