if ((*p & 0x1F) == 0x1F) {
*id = 0;
while (*p & 0x80) {
- *id = (*id << 7) | (*p & 0x7F);
p++, sourcelen--;
if (sourcelen == 0)
return -1;
+ *id = (*id << 7) | (*p & 0x7F);
}
- *id = (*id << 7) | (*p & 0x7F);
p++, sourcelen--;
} else {
*id = *p & 0x1F;
char base64_bit[4];
int base64_chars = 0;
- ret = smalloc(sizeof(*ret));
+ ret = snew(struct openssh_key);
ret->keyblob = NULL;
ret->keyblob_len = ret->keyblob_size = 0;
ret->encrypted = 0;
if (ret->keyblob_len + len > ret->keyblob_size) {
ret->keyblob_size = ret->keyblob_len + len + 256;
- ret->keyblob = srealloc(ret->keyblob, ret->keyblob_size);
+ ret->keyblob = sresize(ret->keyblob, ret->keyblob_size,
+ unsigned char);
}
memcpy(ret->keyblob + ret->keyblob_len, out, len);
struct ssh2_userkey *retval = NULL;
char *errmsg;
unsigned char *blob;
- int blobsize, blobptr, privptr;
- char *modptr;
- int modlen;
+ int blobsize = 0, blobptr, privptr;
+ char *modptr = NULL;
+ int modlen = 0;
blob = NULL;
num_integers = 9;
else if (key->type == OSSH_DSA)
num_integers = 6;
+ else
+ num_integers = 0; /* placate compiler warnings */
/*
* Space to create key blob in.
*/
blobsize = 256+key->keyblob_len;
- blob = smalloc(blobsize);
+ blob = snewn(blobsize, unsigned char);
PUT_32BIT(blob, 7);
if (key->type == OSSH_DSA)
memcpy(blob+4, "ssh-dss", 7);
if (ret < 0 || id != 2 ||
key->keyblob+key->keyblob_len-p < len) {
errmsg = "ASN.1 decoding failure";
+ retval = SSH2_WRONG_PASSPHRASE;
goto error;
}
* the sanity checks for free.
*/
assert(privptr > 0); /* should have bombed by now if not */
- retkey = smalloc(sizeof(struct ssh2_userkey));
+ retkey = snew(struct ssh2_userkey);
retkey->alg = (key->type == OSSH_RSA ? &ssh_rsa : &ssh_dss);
retkey->data = retkey->alg->createkey(blob, privptr,
blob+privptr, blobptr-privptr);
char *passphrase)
{
unsigned char *pubblob, *privblob, *spareblob;
- int publen, privlen, sparelen;
+ int publen, privlen, sparelen = 0;
unsigned char *outblob;
int outlen;
struct mpint_pos numbers[9];
dmp1.bytes = (bignum_bitcount(bdmp1)+8)/8;
dmq1.bytes = (bignum_bitcount(bdmq1)+8)/8;
sparelen = dmp1.bytes + dmq1.bytes;
- spareblob = smalloc(sparelen);
+ spareblob = snewn(sparelen, unsigned char);
dmp1.start = spareblob;
dmq1.start = spareblob + dmp1.bytes;
for (i = 0; i < dmp1.bytes; i++)
/*
* Now we know how big outblob needs to be. Allocate it.
*/
- outblob = smalloc(outlen);
+ outblob = snewn(outlen, unsigned char);
/*
* And write the data into it.
char base64_bit[4];
int base64_chars = 0;
- ret = smalloc(sizeof(*ret));
+ ret = snew(struct sshcom_key);
ret->comment[0] = '\0';
ret->keyblob = NULL;
ret->keyblob_len = ret->keyblob_size = 0;
if (ret->keyblob_len + len > ret->keyblob_size) {
ret->keyblob_size = ret->keyblob_len + len + 256;
- ret->keyblob = srealloc(ret->keyblob, ret->keyblob_size);
+ ret->keyblob = sresize(ret->keyblob, ret->keyblob_size,
+ unsigned char);
}
memcpy(ret->keyblob + ret->keyblob_len, out, len);
struct ssh2_userkey *ret = NULL, *retkey;
const struct ssh_signkey *alg;
unsigned char *blob = NULL;
- int blobsize, publen, privlen;
+ int blobsize = 0, publen, privlen;
if (!key)
return NULL;
* Strip away the containing string to get to the real meat.
*/
len = GET_32BIT(ciphertext);
- if (len > cipherlen-4) {
+ if (len < 0 || len > cipherlen-4) {
errmsg = "containing string was ill-formed";
goto error;
}
* end up feeding them to alg->createkey().
*/
blobsize = cipherlen + 256;
- blob = smalloc(blobsize);
+ blob = snewn(blobsize, unsigned char);
privlen = 0;
if (type == RSA) {
struct mpint_pos n, e, d, u, p, q;
publen = pos;
pos += put_mp(blob+pos, x.start, x.bytes);
privlen = pos - publen;
- }
+ } else
+ return NULL;
assert(privlen > 0); /* should have bombed by now if not */
- retkey = smalloc(sizeof(struct ssh2_userkey));
+ retkey = snew(struct ssh2_userkey);
retkey->alg = alg;
retkey->data = alg->createkey(blob, publen, blob+publen, privlen);
if (!retkey->data) {
outlen = 512;
for (i = 0; i < nnumbers; i++)
outlen += 4 + numbers[i].bytes;
- outblob = smalloc(outlen);
+ outblob = snewn(outlen, unsigned char);
/*
* Create the unencrypted key blob.