keytrans cleanup: getting rid of unimplemented/useless code.
authorDaniel Kahn Gillmor <dkg@fifthhorseman.net>
Fri, 13 Jun 2008 13:34:16 +0000 (09:34 -0400)
committerDaniel Kahn Gillmor <dkg@fifthhorseman.net>
Fri, 13 Jun 2008 13:34:16 +0000 (09:34 -0400)
src/keytrans/Makefile
src/keytrans/gpg2ssh.c [deleted file]
src/keytrans/openpgp2ssh.c
src/keytrans/ssh2gpg.c [deleted file]

index fdd4ccda27b0262f68913f0d175b5ee186c5442e..53fa5dc7eb9efc6987c20e9fda5d92db4808eb28 100644 (file)
@@ -7,13 +7,6 @@ openpgp2ssh: openpgp2ssh.c gnutls-helpers.o
        gcc -g -Wall --pedantic -o $@ -c $<
 
 clean: 
-       rm -f openpgp2ssh gpg2ssh ssh2gpg *.o
-
-# deprecated:
-gpg2ssh: gpg2ssh.c gnutls-helpers.o
-       gcc -g -Wall --pedantic -o gpg2ssh gpg2ssh.c `libgnutls-config --libs --cflags` -lgnutls-extra gnutls-helpers.o
-
-ssh2gpg: ssh2gpg.c gnutls-helpers.o
-       gcc -g -Wall --pedantic -o ssh2gpg ssh2gpg.c `libgnutls-config --libs --cflags` -lgnutls-extra gnutls-helpers.o
+       rm -f openpgp2ssh *.o
 
 .PHONY: clean all
diff --git a/src/keytrans/gpg2ssh.c b/src/keytrans/gpg2ssh.c
deleted file mode 100644 (file)
index c99f03f..0000000
+++ /dev/null
@@ -1,293 +0,0 @@
-#include "gnutls-helpers.h"
-
-#include <gnutls/openpgp.h>
-#include <gnutls/x509.h>
-
-/* for waitpid() */
-#include <sys/types.h>
-#include <sys/wait.h>
-
-/* 
-   Author: Daniel Kahn Gillmor <dkg@fifthhorseman.net>
-   Date: Tue, 08 Apr 2008
-   License: GPL v3 or later
-
-   monkeysphere public key translator: execute this with an GPG
-   certificate (public key(s) + userid(s)) on stdin.  It currently
-   only works with RSA keys.
-
-   It will spit out a version of the first key capable of being used
-   for authentication on stdout.  The output format should be suitable
-   for appending a known_hosts file.
-
-   Requirements: I've only built this so far with GnuTLS v2.3.4 --
-   version 2.2.0 does not contain the appropriate pieces.
-
- */
-
-int main(int argc, char* argv[]) {
-  gnutls_datum_t data;
-  int ret;
-  gnutls_openpgp_crt_t openpgp_crt;
-  gnutls_openpgp_keyid_t keyid;
-  printable_keyid p_keyid;
-  unsigned int keyidx;
-  unsigned int usage, bits;
-  gnutls_pk_algorithm_t algo;
-
-  gnutls_datum_t m, e, p, q, g, y;
-  gnutls_datum_t algolabel;
-
-  char output_data[10240];
-  char userid[10240];
-  size_t uidsz = sizeof(userid);
-
-  const gnutls_datum_t* all[5];
-  int pipefd;
-  pid_t child_pid;
-  char* const args[] = {"/usr/bin/base64", "--wrap=0", NULL};
-  const char* algoname;
-  int mpicount;
-  int pipestatus;
-
-  init_gnutls();
-  
-  init_datum(&data);
-
-  init_datum(&m);
-  init_datum(&e);
-  init_datum(&p);
-  init_datum(&q);
-  init_datum(&g);
-  init_datum(&y);
-
-  init_datum(&algolabel);
-
-  init_keyid(keyid);
-
-  /* slurp in the private key from stdin */
-  if (ret = set_datum_fd(&data, 0), ret) {
-    err("didn't read file descriptor 0\n");
-    return 1;
-  }
-
-
-  if (ret = gnutls_openpgp_crt_init(&openpgp_crt), ret) {
-    err("Failed to initialize OpenPGP certificate (error: %d)\n", ret);
-    return 1;
-  }
-
-  /* format could be either: GNUTLS_OPENPGP_FMT_RAW,
-     GNUTLS_OPENPGP_FMT_BASE64; if MONKEYSPHERE_RAW is set, use RAW,
-     otherwise, use BASE64: */
-
-  /* FIXME: we should be auto-detecting the input format, and
-     translating it as needed. */
-
-  if (getenv("MONKEYSPHERE_RAW")) {
-    err("assuming RAW formatted certificate\n");
-    if (ret = gnutls_openpgp_crt_import(openpgp_crt, &data, GNUTLS_OPENPGP_FMT_RAW), ret) {
-      err("failed to import the OpenPGP certificate in RAW format (error: %d)\n", ret);
-      return ret;
-    }
-  } else {
-    err("assuming BASE64 formatted certificate\n");
-    if (ret = gnutls_openpgp_crt_import (openpgp_crt, &data, GNUTLS_OPENPGP_FMT_BASE64), ret) {
-      err("failed to import the OpenPGP certificate in BASE64 format (error: %d)\n", ret);
-      return ret;
-    }
-  }
-
-  if (gnutls_openpgp_crt_get_revoked_status(openpgp_crt)) {
-    err("the primary key was revoked!\n");
-    return 1;
-  }
-
-  /* FIXME: We're currently looking at the primary key or maybe the
-     first authentication-capable subkey.  
-
-     Instead, we should be iterating through the primary key and all
-     subkeys: for each one with the authentication usage flag set of a
-     algorithm we can handle, we should output matching UserIDs and
-     the SSH version of the key. */
-     
-
-  if (ret = gnutls_openpgp_crt_get_key_usage(openpgp_crt, &usage), ret) {
-    err("failed to get the usage flags for the primary key (error: %d)\n", ret);
-    return ret;
-  }
-  if (usage & GNUTLS_KEY_KEY_AGREEMENT &&
-      usage & GNUTLS_KEY_KEY_ENCIPHERMENT) {
-    err("the primary key can be used for authentication and communication encryption!\n");
-
-    algo = gnutls_openpgp_crt_get_pk_algorithm(openpgp_crt, &bits);
-    if (algo < 0) {
-      err("failed to get the algorithm of the OpenPGP public key (error: %d)\n", algo);
-      return algo;
-    } else if (algo == GNUTLS_PK_RSA) {
-      
-      err("OpenPGP RSA certificate, with %d bits\n", bits);
-      ret = gnutls_openpgp_crt_get_pk_rsa_raw(openpgp_crt, &m, &e);
-      if (GNUTLS_E_SUCCESS != ret) {
-       err ("failed to export RSA key parameters (error: %d)\n", ret);
-       return 1;
-      }
-    } else if (algo == GNUTLS_PK_DSA) {
-      err("OpenPGP DSA Key, with %d bits\n", bits);
-      ret = gnutls_openpgp_crt_get_pk_dsa_raw(openpgp_crt, &p, &q, &g, &y);
-      if (GNUTLS_E_SUCCESS != ret) {
-       err ("failed to export DSA key parameters (error: %d)\n", ret);
-       return 1;
-      }
-    } else {
-      err("OpenPGP Key was not RSA or DSA -- can't deal! (actual algorithm was: %d)\n", algo);
-      return 1;
-    }
-    
-  } else {
-    err("primary key is not good for authentication and communication encryption.  Trying subkeys...\n");
-    
-    if (ret = gnutls_openpgp_crt_get_auth_subkey(openpgp_crt, keyid, 0), ret) {
-      err("failed to find a subkey capable of authentication and communication encryption (error: %d)\n", ret);
-      return ret;
-    }
-    make_keyid_printable(p_keyid, keyid);
-    err("found authentication subkey %.16s\n", p_keyid);
-
-    ret = gnutls_openpgp_crt_get_subkey_idx(openpgp_crt, keyid);
-    if (ret < 0) {
-      err("could not get the index of subkey %.16s (error: %d)\n", ret);
-      return ret;
-    }
-    keyidx = ret;
-
-    if (gnutls_openpgp_crt_get_subkey_revoked_status(openpgp_crt, keyidx)) {
-      err("The authentication subkey was revoked!\n");
-      return 1;
-    }
-
-    if (ret = gnutls_openpgp_crt_get_subkey_usage(openpgp_crt, keyidx, &usage), ret) {
-      err("could not figure out usage of subkey %.16s (error: %d)\n", p_keyid, ret);
-      return ret;
-    }
-    if ((usage & GNUTLS_KEY_KEY_AGREEMENT) == 0 &&
-       usage & GNUTLS_KEY_KEY_ENCIPHERMENT) {
-      err("could not find a subkey with authentication and communication encryption.\n");
-      return 1;
-    }
-
-    /* switch, based on the algorithm in question, to extract the MPI
-       components: */
-
-    algo = gnutls_openpgp_crt_get_subkey_pk_algorithm(openpgp_crt, keyidx, &bits);
-    if (algo < 0) {
-      err("failed to get the algorithm of the authentication subkey (error: %d)\n", algo);
-      return algo;
-    } else if (algo == GNUTLS_PK_RSA) {
-      
-      err("OpenPGP RSA subkey, with %d bits\n", bits);
-      ret = gnutls_openpgp_crt_get_subkey_pk_rsa_raw(openpgp_crt, keyidx, &m, &e);
-      if (GNUTLS_E_SUCCESS != ret) {
-       err ("failed to export RSA subkey parameters (error: %d)\n", ret);
-       return 1;
-      }
-    } else if (algo == GNUTLS_PK_DSA) {
-      err("OpenPGP DSA subkey, with %d bits\n", bits);
-      ret = gnutls_openpgp_crt_get_subkey_pk_dsa_raw(openpgp_crt, keyidx, &p, &q, &g, &y);
-      if (GNUTLS_E_SUCCESS != ret) {
-       err ("failed to export DSA subkey parameters (error: %d)\n", ret);
-       return 1;
-      }
-    } else {
-      err("OpenPGP subkey was not RSA or DSA -- can't deal! (actual algorithm was: %d)\n", algo);
-      return 1;
-    }
-  } 
-
-  /* make sure userid is NULL-terminated */
-  userid[sizeof(userid) - 1] = 0;
-  uidsz--;
-
-  /* FIXME: we're just choosing the first UserID from the certificate:
-     instead, we should be selecting every User ID that is adequately
-     signed and matches the spec, and aggregating them with commas for
-     known_hosts output */
-
-  if (ret = gnutls_openpgp_crt_get_name(openpgp_crt, 0, userid, &uidsz), ret) {
-    err("Failed to fetch the first UserID (error: %d)\n", ret);
-    return ret;
-  }
-
-  if (ret = validate_ssh_host_userid(userid), ret) {
-    err("bad userid: not a valid ssh host.\n");
-    return ret;
-  }
-
-  /* remove ssh:// from the beginning of userid */
-  memmove(userid, userid + strlen("ssh://"), 1 + strlen(userid) - strlen("ssh://"));
-  
-
-  /* now we have algo, and the various MPI data are set.  Can we
-     export them cleanly? */
-
-  /* for the moment, we'll just dump the info raw, and pipe it
-     externally through coreutils' /usr/bin/base64 */
-
-  if (algo == GNUTLS_PK_RSA) {
-    algoname = "ssh-rsa";
-    mpicount = 3;
-
-    all[0] = &algolabel;
-    all[1] = &e;
-    all[2] = &m;
-  } else if (algo == GNUTLS_PK_DSA) {
-    algoname = "ssh-dss";
-    mpicount = 5;
-
-    all[0] = &algolabel;
-    all[1] = &p;
-    all[2] = &q;
-    all[3] = &g;
-    all[4] = &y;
-  } else {
-    err("no idea what this algorithm is: %d\n", algo);
-    return 1;
-  }
-
-  if (ret = datum_from_string(&algolabel, algoname), ret) {
-    err("couldn't label string (error: %d)\n", ret);
-    return ret;
-  }
-
-  snprintf(output_data, sizeof(output_data), "%s %s ", userid, algoname);
-
-  pipefd = create_writing_pipe(&child_pid, args[0], args);
-  if (pipefd < 0) {
-    err("failed to create a writing pipe (returned %d)\n", pipefd);
-    return pipefd;
-  }
-    
-  write(1, output_data, strlen(output_data));
-
-  if (0 != write_data_fd_with_length(pipefd, all, mpicount)) {
-    err("was not able to write out RSA key data\n");
-    return 1;
-  }
-  close(pipefd);
-  if (child_pid != waitpid(child_pid, &pipestatus, 0)) {
-    err("could not wait for child process to return for some reason.\n");
-    return 1;
-  }
-  if (pipestatus != 0) {
-    err("base64 pipe died with return code %d\n", pipestatus);
-    return pipestatus;
-  }
-
-  write(1, "\n", 1);
-
-
-
-  gnutls_openpgp_crt_deinit(openpgp_crt);
-  gnutls_global_deinit();
-  return 0;
-}
index 30e19d5e1790f1c42305afb604a55c62a56a1b75..10351e651785c1407915cc07bd8b8cc6051adc39 100644 (file)
@@ -278,87 +278,6 @@ int emit_public_openssh_from_pgp(const gnutls_openpgp_crt_t* pgp_crt, gnutls_ope
   return 0;
 }
 
-
-
-int convert_x509_to_pgp(gnutls_openpgp_privkey_t* output, gnutls_datum_t* input) {
-  gnutls_x509_privkey_t x509_privkey;
-  gnutls_datum_t m, e, d, p, q, u, g, y, x;
-  gnutls_pk_algorithm_t x509_algo;
-  int ret;
-
-  init_datum(&m);
-  init_datum(&e);
-  init_datum(&d);
-  init_datum(&p);
-  init_datum(&q);
-  init_datum(&u);
-  init_datum(&g);
-  init_datum(&y);
-  init_datum(&x);
-
-  if (ret = gnutls_x509_privkey_init(&x509_privkey), ret) {
-    err("Failed to initialized X.509 private key (error: %d)\n", ret);
-    return 1;
-  }
-
-
-  /* format could be either:     GNUTLS_X509_FMT_DER,
-    GNUTLS_X509_FMT_PEM; if MONKEYSPHERE_DER is set, use DER,
-     otherwise, use PEM: */
-
-  if (getenv("MONKEYSPHERE_DER")) {
-    err("assuming DER formatted private keys\n");
-    if (ret = gnutls_x509_privkey_import(x509_privkey, input, GNUTLS_X509_FMT_DER), ret)
-      err("failed to import the X.509 private key in DER format (error: %d)\n", ret);
-  } else {
-    err("assuming PEM formatted private keys\n");
-    if (ret = gnutls_x509_privkey_import (x509_privkey, input, GNUTLS_X509_FMT_PEM), ret)
-      err("failed to import the X.509 private key in PEM format (error: %d)\n", ret);
-  }
-
-  x509_algo = gnutls_x509_privkey_get_pk_algorithm(x509_privkey);
-  if (x509_algo < 0) {
-    err("failed to get X.509 key algorithm (error: %d)\n", x509_algo);
-    return 1;
-  }
-  if (x509_algo == GNUTLS_PK_RSA) {
-    err("X.509 RSA Key\n");
-    ret = gnutls_x509_privkey_export_rsa_raw(x509_privkey, &m, &e, &d, &p, &q, &u);
-    if (GNUTLS_E_SUCCESS != ret) {
-      err ("failed to export RSA key parameters (error: %d)\n", ret);
-      return 1;
-    }
-
-    /*     ret = gnutls_openpgp_privkey_import_rsa_raw (*output, &m, &e, &d, &p, &q, &u);  */
-    ret = GNUTLS_E_UNIMPLEMENTED_FEATURE;
-    if (GNUTLS_E_SUCCESS != ret) {
-      err ("failed to import RSA key parameters (error: %d)\n", ret);
-      return 1;
-    }
-  } else if (x509_algo == GNUTLS_PK_DSA) {
-    err("X.509 DSA Key\n");
-    ret = gnutls_x509_privkey_export_dsa_raw(x509_privkey, &p, &q, &g, &y, &x);
-    if (GNUTLS_E_SUCCESS != ret) {
-      err ("failed to export DSA key parameters (error: %d)\n", ret);
-      return 1;
-    }
-
-    /*    ret = gnutls_openpgp_privkey_import_dsa_raw (*output, &p, &q, &g, &y, &x);  */
-    ret = GNUTLS_E_UNIMPLEMENTED_FEATURE;
-    if (GNUTLS_E_SUCCESS != ret) {
-      err ("failed to import DSA key parameters (error: %d)\n", ret);
-      return 1;
-    }
-  } else {
-    err("OpenPGP Key was not RSA or DSA -- can't deal! (actual algorithm was: %d)\n", x509_algo);
-    return 1;
-  }
-  
-  gnutls_x509_privkey_deinit(x509_privkey);
-  return 0;
-}
-
-
 int main(int argc, char* argv[]) {
   gnutls_datum_t data;
   int ret;
diff --git a/src/keytrans/ssh2gpg.c b/src/keytrans/ssh2gpg.c
deleted file mode 100644 (file)
index b14a540..0000000
+++ /dev/null
@@ -1,171 +0,0 @@
-#include "gnutls-helpers.h"
-
-#include <gnutls/openpgp.h>
-#include <gnutls/x509.h>
-
-/* for waitpid() */
-#include <sys/types.h>
-#include <sys/wait.h>
-
-/* for time() */
-#include <time.h>
-
-/* for htons() */
-#include <arpa/inet.h>
-
-
-/* 
-   Author: Daniel Kahn Gillmor <dkg@fifthhorseman.net>
-   Date: Sun, 2008-04-20
-   License: GPL v3 or later
-
-   monkeysphere public key translator: execute this with an ssh
-   private key on stdin.  It currently only works with RSA keys.
-
-   it should eventually work with OpenSSH-style public keys instead of
-   the full private key, but it was easier to do this way.
-
-   It shoud spit out a version of the public key suitable for acting
-   as an OpenPGP public sub key packet.
-
- */
-
-int main(int argc, char* argv[]) {
-  gnutls_datum_t data;
-  int ret;
-  gnutls_x509_privkey_t x509_privkey;
-  gnutls_openpgp_crt_t openpgp_crt;
-  gnutls_openpgp_keyid_t keyid;
-  printable_keyid p_keyid;
-  unsigned int keyidx;
-  unsigned int usage, bits;
-  gnutls_pk_algorithm_t algo;
-
-  unsigned char packettag;
-  unsigned char openpgpversion;
-  time_t timestamp;
-  uint32_t clunkytime;
-  unsigned char openpgpalgo;
-  unsigned int packetlen;
-  uint16_t plen;
-
-  gnutls_datum_t m, e, d, p, q, u, g, y;
-  gnutls_datum_t algolabel;
-
-  char output_data[10240];
-  char userid[10240];
-  size_t uidsz = sizeof(userid);
-
-  const gnutls_datum_t* all[5];
-  int pipefd;
-  pid_t child_pid;
-  char* const args[] = {"/usr/bin/base64", "--wrap=0", NULL};
-  const char* algoname;
-  int mpicount;
-  int pipestatus;
-
-  init_gnutls();
-  
-  init_datum(&data);
-
-  init_datum(&m);
-  init_datum(&e);
-  init_datum(&d);
-  init_datum(&p);
-  init_datum(&q);
-  init_datum(&u);
-  init_datum(&g);
-  init_datum(&y);
-
-  init_datum(&algolabel);
-
-  init_keyid(keyid);
-
-  /* slurp in the private key from stdin */
-  if (ret = set_datum_fd(&data, 0), ret) {
-    err("didn't read file descriptor 0\n");
-    return 1;
-  }
-
-
-  if (ret = gnutls_x509_privkey_init(&x509_privkey), ret) {
-    err("Failed to initialize private key structure (error: %d)\n", ret);
-    return 1;
-  }
-
-  err("assuming PEM formatted private key\n");
-  if (ret = gnutls_x509_privkey_import(x509_privkey, &data, GNUTLS_X509_FMT_PEM), ret) {
-    err("failed to import the PEM-encoded private key (error: %d)\n", ret);
-    return ret;
-  }
-
-  algo = gnutls_x509_privkey_get_pk_algorithm(x509_privkey);
-  if (algo < 0) {
-    err("failed to get the algorithm of the PEM-encoded public key (error: %d)\n", algo);
-    return algo;
-  } else if (algo == GNUTLS_PK_RSA) {
-    err("RSA private key\n");
-    ret = gnutls_x509_privkey_export_rsa_raw(x509_privkey, &m, &e, &d, &p, &q, &u);
-    if (GNUTLS_E_SUCCESS != ret) {
-      err ("failed to export RSA key parameters (error: %d)\n", ret);
-      return 1;
-    }
-    err("Modulus size %d, exponent size %d\n", m.size, e.size);
-  } else if (algo == GNUTLS_PK_DSA) {
-    err("DSA Key, not implemented!!\n", bits);
-    return 1;
-  } else {
-    err("Key was not RSA or DSA -- can't deal! (actual algorithm was: %d)\n", algo);
-    return 1;
-  }
-
-  /* now we have algo, and the various MPI data are set.  Can we
-     export them as a public subkey packet? */
-
-  /* this packet should be tagged 14, and should contain:
-
-     1 octet: version (4)
-     4 octets: time of generation (seconds since 1970)
-     1 octet: algo (http://tools.ietf.org/html/rfc4880#section-5.5.2 implies 1 for RSA)
-     MPI: modulus
-     MPI: exponent
-  */
-
-  packetlen = 1 + 4 + 1;
-  /* FIXME: this is RSA only.  for DSA, there'll be more: */
-  packetlen += get_openpgp_mpi_size(&m) + get_openpgp_mpi_size(&e);
-
-  /* FIXME: we should generate this bound more cleanly -- i just
-     happen to know that 65535 is 2^16-1: */
-  if (packetlen > 65535) {
-    err("packet length is too long (%d)\n", packetlen);
-    return 1;
-  }
-
-  /* we're going to emit an old-style packet, with tag 14 (public
-     subkey), with a two-octet packet length */
-  packettag = 0x80 | (14 << 2) | 1;
-  
-  write(1, &packettag, sizeof(packettag));
-  plen = htons(packetlen);
-  write(1, &plen, sizeof(plen));
-
-  openpgpversion = 4;
-  write(1, &openpgpversion, 1);
-
-  timestamp = time(NULL);
-  clunkytime = htonl(timestamp);
-  write(1, &clunkytime, 4);
-
-  /* FIXME: handle things other than RSA */
-  openpgpalgo = 1;
-  write(1, &openpgpalgo, 1);
-  
-  write_openpgp_mpi_to_fd(1, &m);
-  write_openpgp_mpi_to_fd(1, &e);
-
-  gnutls_x509_privkey_deinit(x509_privkey);
-  gnutls_global_deinit();
-  return 0;
-}