View | Details | Raw Unified | Return to bug 2704
Collapse All | Expand All

(-)a/packet.c (-8 / +4 lines)
Lines 2202-2210 newkeys_to_blob(struct sshbuf *m, struct ssh *ssh, int mode) Link Here
2202
		return r;
2202
		return r;
2203
	if ((b = sshbuf_new()) == NULL)
2203
	if ((b = sshbuf_new()) == NULL)
2204
		return SSH_ERR_ALLOC_FAIL;
2204
		return SSH_ERR_ALLOC_FAIL;
2205
	/* The cipher struct is constant and shared, you export pointer */
2206
	if ((r = sshbuf_put_cstring(b, enc->name)) != 0 ||
2205
	if ((r = sshbuf_put_cstring(b, enc->name)) != 0 ||
2207
	    (r = sshbuf_put(b, &enc->cipher, sizeof(enc->cipher))) != 0 ||
2208
	    (r = sshbuf_put_u32(b, enc->enabled)) != 0 ||
2206
	    (r = sshbuf_put_u32(b, enc->enabled)) != 0 ||
2209
	    (r = sshbuf_put_u32(b, enc->block_size)) != 0 ||
2207
	    (r = sshbuf_put_u32(b, enc->block_size)) != 0 ||
2210
	    (r = sshbuf_put_string(b, enc->key, enc->key_len)) != 0 ||
2208
	    (r = sshbuf_put_string(b, enc->key, enc->key_len)) != 0 ||
Lines 2278-2289 newkeys_from_blob(struct sshbuf *m, struct ssh *ssh, int mode) Link Here
2278
	comp = &newkey->comp;
2276
	comp = &newkey->comp;
2279
2277
2280
	if ((r = sshbuf_get_cstring(b, &enc->name, NULL)) != 0 ||
2278
	if ((r = sshbuf_get_cstring(b, &enc->name, NULL)) != 0 ||
2281
	    (r = sshbuf_get(b, &enc->cipher, sizeof(enc->cipher))) != 0 ||
2282
	    (r = sshbuf_get_u32(b, (u_int *)&enc->enabled)) != 0 ||
2279
	    (r = sshbuf_get_u32(b, (u_int *)&enc->enabled)) != 0 ||
2283
	    (r = sshbuf_get_u32(b, &enc->block_size)) != 0 ||
2280
	    (r = sshbuf_get_u32(b, &enc->block_size)) != 0 ||
2284
	    (r = sshbuf_get_string(b, &enc->key, &keylen)) != 0 ||
2281
	    (r = sshbuf_get_string(b, &enc->key, &keylen)) != 0 ||
2285
	    (r = sshbuf_get_string(b, &enc->iv, &ivlen)) != 0)
2282
	    (r = sshbuf_get_string(b, &enc->iv, &ivlen)) != 0)
2286
		goto out;
2283
		goto out;
2284
	if ((enc->cipher = cipher_by_name(enc->name)) == NULL) {
2285
		r = SSH_ERR_INVALID_FORMAT;
2286
		goto out;
2287
	}
2287
	if (cipher_authlen(enc->cipher) == 0) {
2288
	if (cipher_authlen(enc->cipher) == 0) {
2288
		if ((r = sshbuf_get_cstring(b, &mac->name, NULL)) != 0)
2289
		if ((r = sshbuf_get_cstring(b, &mac->name, NULL)) != 0)
2289
			goto out;
2290
			goto out;
Lines 2301-2311 newkeys_from_blob(struct sshbuf *m, struct ssh *ssh, int mode) Link Here
2301
	if ((r = sshbuf_get_u32(b, &comp->type)) != 0 ||
2302
	if ((r = sshbuf_get_u32(b, &comp->type)) != 0 ||
2302
	    (r = sshbuf_get_cstring(b, &comp->name, NULL)) != 0)
2303
	    (r = sshbuf_get_cstring(b, &comp->name, NULL)) != 0)
2303
		goto out;
2304
		goto out;
2304
	if (enc->name == NULL ||
2305
	    cipher_by_name(enc->name) != enc->cipher) {
2306
		r = SSH_ERR_INVALID_FORMAT;
2307
		goto out;
2308
	}
2309
	if (sshbuf_len(b) != 0) {
2305
	if (sshbuf_len(b) != 0) {
2310
		r = SSH_ERR_INVALID_FORMAT;
2306
		r = SSH_ERR_INVALID_FORMAT;
2311
		goto out;
2307
		goto out;

Return to bug 2704