Is there documentation (aside from looking at the header files) on how to
use things like STACK_OF(type) and the sk_*_find() functions?
Perhaps I'm going about it wrong, but I can't figure it out.
Any help would be most apprecianted.  I'm trying to do this:

given a STACK_OF(PKCS12_SAFEBAG) instance and a
STACK_OF(X509_ATTRIBUTES) instance, I'm trying to find the
safebag which has all of the attributes in the given attribute stack. So,
here's the code pseudo-code (omitting return values):

void find_bag(STACK_OF(PKCS12_SAFEBAG) *bags,
STACK_OF(X509_ATTRIBUTES) *attribs) {

foreach (s in safebag) {
    bag_attribs = safebag[s]->attrib;
    foreach (i in attribs) {
        attrib = sk_X509_ATTRIBUTE_value(attribs, i);
        if ((attrib_pos = sk_X509_ATTRIBUTE_find(bag_attribs, attrib)) < 0) {
            printf("couldn't find attrib %d\n", i);
            return;
        } else {
            printf("FOUND attrib at position %d\n", attrib_pos);
        }
    }
    /* all given attributes found in this bag */
    printf("bag %d has all the attributes, it's the one you want", s);
}

The sk_X509_ATTRIBUTE_find() *always* returns -1.  I believe this is
because the base OpenSSL installation does not include a compare function
for the X509_ATTRIBUTE type, so the sk_*_find function can't find an
X509_ATTRIBUTE given a STACK_OF them.  I tried declaring a compare
function myself with the signature:

int my_cmp(X509_ATTRIBUTE *a, X509_ATTRIBUTE *b);

but when it's called during the sk_*_find invocation, it is passing invalid
arguments (i.e. they're not pointers to X509_ATTRIBUTE structures).

Anyone have any idea of a better way to do this, or if there is indeed a good
X509_ATTRIBUTE compare function I can use when calling the sk_* functions
when dealing with X509_ATTRIBUTES?


______________________________________________________________________
OpenSSL Project                                 http://www.openssl.org
User Support Mailing List                    [EMAIL PROTECTED]
Automated List Manager                           [EMAIL PROTECTED]

Reply via email to