X-Git-Url: https://asedeno.scripts.mit.edu/gitweb/?a=blobdiff_plain;f=sshpubk.c;h=923ebe9d9ebe81052b830135ee170d3b9fb9aec7;hb=49d2cf19accb059b3b68d1fc2b78e606a578c3e8;hp=868fb15e09c022ed229f3e5bef2aa1fa7a322975;hpb=6be9bb74bb3c00fc3b858268a2c36288a7211a31;p=PuTTY.git diff --git a/sshpubk.c b/sshpubk.c index 868fb15e..923ebe9d 100644 --- a/sshpubk.c +++ b/sshpubk.c @@ -1,7 +1,7 @@ /* * Generic SSH public-key handling operations. In particular, * reading of SSH public-key files, and also the generic `sign' - * operation for ssh2 (which checks the type of the key and + * operation for SSH-2 (which checks the type of the key and * dispatches to the appropriate key-type specific function). */ @@ -13,18 +13,6 @@ #include "ssh.h" #include "misc.h" -#define PUT_32BIT(cp, value) do { \ - (cp)[3] = (value); \ - (cp)[2] = (value) >> 8; \ - (cp)[1] = (value) >> 16; \ - (cp)[0] = (value) >> 24; } while (0) - -#define GET_32BIT(cp) \ - (((unsigned long)(unsigned char)(cp)[0] << 24) | \ - ((unsigned long)(unsigned char)(cp)[1] << 16) | \ - ((unsigned long)(unsigned char)(cp)[2] << 8) | \ - ((unsigned long)(unsigned char)(cp)[3])) - #define rsa_signature "SSH PRIVATE KEY FILE FORMAT 1.1\n" #define BASE64_TOINT(x) ( (x)-'A'<26 ? (x)-'A'+0 :\ @@ -78,7 +66,7 @@ static int loadrsakey_main(FILE * fp, struct RSAKey *key, int pub_only, || buf[i + 3] != 0) goto end; /* reserved field nonzero, panic! */ i += 4; - /* Now the serious stuff. An ordinary SSH 1 public key. */ + /* Now the serious stuff. An ordinary SSH-1 public key. */ i += makekey(buf + i, len, key, NULL, 1); if (i < 0) goto end; /* overran */ @@ -307,7 +295,7 @@ int saversakey(const Filename *filename, struct RSAKey *key, char *passphrase) p += 4; /* - * An ordinary SSH 1 public key consists of: a uint32 + * An ordinary SSH-1 public key consists of: a uint32 * containing the bit count, then two bignums containing the * modulus and exponent respectively. */ @@ -384,11 +372,11 @@ int saversakey(const Filename *filename, struct RSAKey *key, char *passphrase) } /* ---------------------------------------------------------------------- - * SSH2 private key load/store functions. + * SSH-2 private key load/store functions. */ /* - * PuTTY's own format for SSH2 keys is as follows: + * PuTTY's own format for SSH-2 keys is as follows: * * The file is text. Lines are terminated by CRLF, although CR-only * and LF-only are tolerated on input. @@ -404,7 +392,7 @@ int saversakey(const Filename *filename, struct RSAKey *key, char *passphrase) * * Next there is a line saying "Public-Lines: " plus a number N. * The following N lines contain a base64 encoding of the public - * part of the key. This is encoded as the standard SSH2 public key + * part of the key. This is encoded as the standard SSH-2 public key * blob (with no initial length): so for RSA, for example, it will * read * @@ -878,7 +866,8 @@ struct ssh2_userkey *ssh2_load_userkey(const Filename *filename, } char *ssh2_userkey_loadpub(const Filename *filename, char **algorithm, - int *pub_blob_len, const char **errorstr) + int *pub_blob_len, char **commentptr, + const char **errorstr) { FILE *fp; char header[40], *b; @@ -887,6 +876,7 @@ char *ssh2_userkey_loadpub(const Filename *filename, char **algorithm, int public_blob_len; int i; const char *error = NULL; + char *comment; public_blob = NULL; @@ -924,9 +914,13 @@ char *ssh2_userkey_loadpub(const Filename *filename, char **algorithm, /* Read the Comment header line. */ if (!read_header(fp, header) || 0 != strcmp(header, "Comment")) goto error; - if ((b = read_body(fp)) == NULL) + if ((comment = read_body(fp)) == NULL) goto error; - sfree(b); /* we don't care */ + + if (commentptr) + *commentptr = comment; + else + sfree(comment); /* Read the Public-Lines header line and the public blob. */ if (!read_header(fp, header) || 0 != strcmp(header, "Public-Lines")) @@ -1213,10 +1207,10 @@ char *key_type_to_str(int type) switch (type) { case SSH_KEYTYPE_UNOPENABLE: return "unable to open file"; break; case SSH_KEYTYPE_UNKNOWN: return "not a private key"; break; - case SSH_KEYTYPE_SSH1: return "SSH1 private key"; break; - case SSH_KEYTYPE_SSH2: return "PuTTY SSH2 private key"; break; - case SSH_KEYTYPE_OPENSSH: return "OpenSSH SSH2 private key"; break; - case SSH_KEYTYPE_SSHCOM: return "ssh.com SSH2 private key"; break; + case SSH_KEYTYPE_SSH1: return "SSH-1 private key"; break; + case SSH_KEYTYPE_SSH2: return "PuTTY SSH-2 private key"; break; + case SSH_KEYTYPE_OPENSSH: return "OpenSSH SSH-2 private key"; break; + case SSH_KEYTYPE_SSHCOM: return "ssh.com SSH-2 private key"; break; default: return "INTERNAL ERROR"; break; } }