Exemplo n.º 1
0
size_t sk_push(_STACK *sk, void *p) { return (sk_insert(sk, p, sk->num)); }
Exemplo n.º 2
0
Arquivo: stack.c Projeto: 274914765/C
int sk_unshift (_STACK * st, void *data)
{
    return (sk_insert (st, data, 0));
}
Exemplo n.º 3
0
Arquivo: stack.c Projeto: 274914765/C
int sk_push (_STACK * st, void *data)
{
    return (sk_insert (st, data, st->num));
}
Exemplo n.º 4
0
int sk_push(STACK *st, char *data)
	{
		
	return(sk_insert(st,data,st->num));
	}
Exemplo n.º 5
0
int sk_unshift(STACK *st, char *data)
	{
	return(sk_insert(st,data,0));
	}
Exemplo n.º 6
0
/*
 * der points to the start of one or more DER-encoded keys. If there is
 * more than one key, the keys must be contained in multi-key CGA
 * extensions.
 *
 * Returns a stack of EVP_PKEYs on success.
 */
_STACK *
cga_der2keys(uint8_t *der, int dlen)
{
	uint8_t *dk;
	EVP_PKEY *k;
	int klen, elen;
	uint16_t type;
	_STACK *sk;

	if ((sk = sk_new_null()) == NULL) {
		APPLOG_NOMEM();
		return (NULL);
	}

	/* Extract first key, not in an extension */
	dk = cga_parse_key(der, &klen);
	DBG(&dbg_asn1, "getting key 1 (klen %d dlen %d)", klen, dlen);

	if ((k = cga_der2key(der, klen)) == NULL) {
		goto fail;
	}
	if (sk_push(sk, (void *)k) == 0) {
		APPLOG_NOMEM();
		goto fail;
	}

	/* Extract any keys in extensions */
	der += klen;
	dlen -= klen;
	while (dlen > 0) {
		if (cga_parse_next_ext(der, dlen, &elen, &type) < 0) {
			goto fail;
		}
		DBG(&dbg_asn1, "got extension type %d len %d", type, elen);
		if (dlen < elen) {
			DBG(&dbg_asn1, "elen > dlen (%d / %d)", elen, dlen);
			goto fail;
		}
		if (type != CGA_MULTIKEY_EXT) {
			goto next;
		}

		dk = cga_get_multikey_key(der, &klen);
		DBG(&dbg_asn1, "getting ext key (%d bytes)", klen);
		if ((k = cga_der2key(dk, klen)) == NULL) {
			goto fail;
		}
		if (sk_insert(sk, (void *)k, 0) == 0) {
			APPLOG_NOMEM();
			goto fail;
		}

	next:
		dlen -= elen;
		der += elen;
	}

	return (sk);

fail:
	cga_free_keystack(sk);
	return (NULL);
}