#include <stdlib.h>
#include <assert.h>
+#include "putty.h"
#include "ssh.h"
#include "misc.h"
i += 4;
if (len - i < j)
goto end;
- comment = smalloc(j + 1);
+ comment = snewn(j + 1, char);
if (comment) {
memcpy(comment, buf + i, j);
comment[j] = '\0';
return ret;
}
-int loadrsakey(char *filename, struct RSAKey *key, char *passphrase)
+int loadrsakey(const Filename *filename, struct RSAKey *key, char *passphrase)
{
FILE *fp;
char buf[64];
- fp = fopen(filename, "rb");
+ fp = f_open(*filename, "rb");
if (!fp)
return 0; /* doesn't even exist */
* See whether an RSA key is encrypted. Return its comment field as
* well.
*/
-int rsakey_encrypted(char *filename, char **comment)
+int rsakey_encrypted(const Filename *filename, char **comment)
{
FILE *fp;
char buf[64];
- fp = fopen(filename, "rb");
+ fp = f_open(*filename, "rb");
if (!fp)
return 0; /* doesn't even exist */
* an RSA key, as given in the agent protocol (modulus bits,
* exponent, modulus).
*/
-int rsakey_pubblob(char *filename, void **blob, int *bloblen)
+int rsakey_pubblob(const Filename *filename, void **blob, int *bloblen)
{
FILE *fp;
char buf[64];
*bloblen = 0;
ret = 0;
- fp = fopen(filename, "rb");
+ fp = f_open(*filename, "rb");
if (!fp)
return 0; /* doesn't even exist */
/*
* Save an RSA key file. Return nonzero on success.
*/
-int saversakey(char *filename, struct RSAKey *key, char *passphrase)
+int saversakey(const Filename *filename, struct RSAKey *key, char *passphrase)
{
unsigned char buf[16384];
unsigned char keybuf[16];
/*
* Done. Write the result to the file.
*/
- fp = fopen(filename, "wb");
+ fp = f_open(*filename, "wb");
if (fp) {
int ret = (fwrite(buf, 1, p - buf, fp) == (size_t) (p - buf));
ret = ret && (fclose(fp) == 0);
int c;
size = 128;
- text = smalloc(size);
+ text = snewn(size, char);
len = 0;
text[len] = '\0';
}
if (len + 1 > size) {
size += 128;
- text = srealloc(text, size);
+ text = sresize(text, size, char);
}
text[len++] = c;
text[len] = '\0';
int i, j, k;
/* We expect at most 64 base64 characters, ie 48 real bytes, per line. */
- blob = smalloc(48 * nlines);
+ blob = snewn(48 * nlines, unsigned char);
len = 0;
for (i = 0; i < nlines; i++) {
line = read_body(fp);
NULL, NULL, NULL
};
-struct ssh2_userkey *ssh2_load_userkey(char *filename, char *passphrase)
+struct ssh2_userkey *ssh2_load_userkey(const Filename *filename,
+ char *passphrase)
{
FILE *fp;
char header[40], *b, *encryption, *comment, *mac;
int passlen = passphrase ? strlen(passphrase) : 0;
ret = NULL; /* return NULL for most errors */
- comment = mac = NULL;
+ encryption = comment = mac = NULL;
public_blob = private_blob = NULL;
- fp = fopen(filename, "rb");
+ fp = f_open(*filename, "rb");
if (!fp)
goto error;
4 + commlen +
4 + public_blob_len +
4 + private_blob_len);
- macdata = smalloc(maclen);
+ macdata = snewn(maclen, unsigned char);
p = macdata;
#define DO_STR(s,len) PUT_32BIT(p,(len));memcpy(p+4,(s),(len));p+=4+(len)
DO_STR(alg->name, namelen);
/*
* Create and return the key.
*/
- ret = smalloc(sizeof(struct ssh2_userkey));
+ ret = snew(struct ssh2_userkey);
ret->alg = alg;
ret->comment = comment;
ret->data = alg->createkey(public_blob, public_blob_len,
return ret;
}
-char *ssh2_userkey_loadpub(char *filename, char **algorithm,
+char *ssh2_userkey_loadpub(const Filename *filename, char **algorithm,
int *pub_blob_len)
{
FILE *fp;
public_blob = NULL;
- fp = fopen(filename, "rb");
+ fp = f_open(*filename, "rb");
if (!fp)
goto error;
return NULL;
}
-int ssh2_userkey_encrypted(char *filename, char **commentptr)
+int ssh2_userkey_encrypted(const Filename *filename, char **commentptr)
{
FILE *fp;
char header[40], *b, *comment;
if (commentptr)
*commentptr = NULL;
- fp = fopen(filename, "rb");
+ fp = f_open(*filename, "rb");
if (!fp)
return 0;
if (!read_header(fp, header)
fputc('\n', fp);
}
-int ssh2_save_userkey(char *filename, struct ssh2_userkey *key,
+int ssh2_save_userkey(const Filename *filename, struct ssh2_userkey *key,
char *passphrase)
{
FILE *fp;
}
priv_encrypted_len = priv_blob_len + cipherblk - 1;
priv_encrypted_len -= priv_encrypted_len % cipherblk;
- priv_blob_encrypted = smalloc(priv_encrypted_len);
+ priv_blob_encrypted = snewn(priv_encrypted_len, unsigned char);
memset(priv_blob_encrypted, 0, priv_encrypted_len);
memcpy(priv_blob_encrypted, priv_blob, priv_blob_len);
/* Create padding based on the SHA hash of the unpadded blob. This prevents
4 + commlen +
4 + pub_blob_len +
4 + priv_encrypted_len);
- macdata = smalloc(maclen);
+ macdata = snewn(maclen, unsigned char);
p = macdata;
#define DO_STR(s,len) PUT_32BIT(p,(len));memcpy(p+4,(s),(len));p+=4+(len)
DO_STR(key->alg->name, namelen);
memset(&s, 0, sizeof(s));
}
- fp = fopen(filename, "w");
+ fp = f_open(*filename, "w");
if (!fp)
return 0;
fprintf(fp, "PuTTY-User-Key-File-2: %s\n", key->alg->name);
* A function to determine the type of a private key file. Returns
* 0 on failure, 1 or 2 on success.
*/
-int key_type(char *filename)
+int key_type(const Filename *filename)
{
FILE *fp;
char buf[32];
const char openssh_sig[] = "-----BEGIN ";
int i;
- fp = fopen(filename, "r");
+ fp = f_open(*filename, "r");
if (!fp)
return SSH_KEYTYPE_UNOPENABLE;
i = fread(buf, 1, sizeof(buf), fp);