Mailing Lists: Apple Mailing Lists

Image of Mac OS face in stamp
 
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

dlopen and d2i_DHparams



I'm getting strange behavior when I try to dlopen libcrypto.dylib and then use d2i_DHparams.

$ cat foobar.cpp
#include <openssl/dh.h>
#include <openssl/asn1.h>
#include <openssl/bn.h>
#include <cstdio>
#include <dlfcn.h>

#ifdef DHparams_dup
# undef DHparams_dup
#endif
#define DHparams_dup (x) \
(DH *)ASN1_dup((int (*)(...)) i2d_DHparams, \
(char *(*)(...))d2i_DHparams, (char *)(x))


int main()
{
void *handle = dlopen("libcrypto.dylib", RTLD_LAZY| RTLD_GLOBAL);
DH *dh = DH_new();


BN_hex2bn(&dh->p,
"FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024"
"E088A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD"
"3A431B302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC"
"6F44C42E9A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F"
"24117C4B1FE649286651ECE65381FFFFFFFFFFFFFFFF");
dh->g = BN_new();
BN_set_word(dh->g, DH_GENERATOR_2);


        DH *dh2 = DHparams_dup(dh);

        dlclose(handle);
        return 0;
}
$ make foo bar baz
g++ -o foo -lcrypto foobar.cpp
g++ -flat_namespace -undefined suppress -bind_at_load \
-o bar foobar.cpp
MACOSX_DEPLOYMENT_TARGET=10.3 g++ -undefined dynamic_lookup \
-bind_at_load -o baz foobar.cpp
$ ./foo
$ ./bar
dyld: Symbol not found: _d2i_DHparams
  Referenced from: /Users/steve/temp/dlopen/./bar
  Expected in: flat namespace

Trace/BPT trap
$ ./baz
dyld: Symbol not found: _d2i_DHparams
  Referenced from: /Users/steve/temp/dlopen/./baz
  Expected in: dynamic lookup

Trace/BPT trap

When I run ./foo it runs correctly. When I run ./bar and ./baz dyld fails with the symbol not found. However, it works with other functions such as SHA1.

$ cat hash.cpp
#include <openssl/sha.h>
#include <cstdio>
#include <cstring>
#include <dlfcn.h>

int main()
{
void *handle = dlopen("libcrypto.dylib", RTLD_LAZY| RTLD_GLOBAL);
unsigned char md[SHA_DIGEST_LENGTH];
char hello[] = "Hello World!";


        puts(hello);
        SHA1((unsigned char *)hello, strlen(hello), md);

        for(int i = 0; i < SHA_DIGEST_LENGTH; ++i)
                printf("%02hhx", md[i]);
        puts("");
        dlclose(handle);
        return 0;
}
$ make hash
g++ -flat_namespace -undefined suppress -bind_at_load \
-o hash hash.cpp
$ ./hash
Hello World!
2ef7bde608ce5404e97d5f042f95f89f1c232871

What is the difference between SHA1 and d2i_DHparams that would cause the first program to fail but the second one to succeed?

- Steve

Attachment: smime.p7s
Description: S/MIME cryptographic signature

 _______________________________________________
Do not post admin requests to the list. They will be ignored.
Darwin-dev mailing list      (email@hidden)
Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/darwin-dev/email@hidden

This email sent to email@hidden



Visit the Apple Store online or at retail locations.
1-800-MY-APPLE

Contact Apple | Terms of Use | Privacy Policy

Copyright © 2007 Apple Inc. All rights reserved.