Example #1
0
static int asn1_item_flags_i2d(ASN1_VALUE *val, unsigned char **out,
                               const ASN1_ITEM *it, int flags)
{
    if (out && !*out) {
        unsigned char *p, *buf;
        int len;
        len = ASN1_item_ex_i2d(&val, NULL, it, -1, flags);
        if (len <= 0)
            return len;
        buf = OPENSSL_malloc(len);
        if (!buf)
            return -1;
        p = buf;
        ASN1_item_ex_i2d(&val, &p, it, -1, flags);
        *out = buf;
        return len;
    }

    return ASN1_item_ex_i2d(&val, out, it, -1, flags);
}
Example #2
0
File: pkt.c Project: ep69/tang
int
pkt_encode(const ASN1_VALUE *val, const ASN1_ITEM *it, pkt_t *pkt)
{
    pkt_t tmp = {};

    tmp.size = ASN1_item_ex_i2d(WRAP(ASN1_VALUE, val), NULL, it, -1, 0);
    if (tmp.size > (typeof(tmp.size)) sizeof(tmp.data)) return E2BIG;
    if (tmp.size <= 0) return EINVAL;

    tmp.size = ASN1_item_ex_i2d(WRAP(ASN1_VALUE, val),
                                WRAP(unsigned char, tmp.data),
                                it, -1, 0);
    if (tmp.size <= 0) return EINVAL;

    *pkt = tmp;
    return 0;
}