mat@enterprise:~/Projects/cryptonit$ diff -Nur cryptonit-0.9.7/src/pkcs7.cpp cryptonit-fixed/src/pkcs7.cpp 
--- cryptonit-0.9.7/src/pkcs7.cpp	2006-05-15 17:12:56.000000000 +0100
+++ cryptonit-fixed/src/pkcs7.cpp	2011-08-12 22:14:03.292067292 +0100
@@ -227,15 +227,21 @@
     void pkcs7::setDigest(DigestName name)
     {
 	switch(name) {
+#ifndef OPENSSL_NO_MD2
 	case D_MD2:
 	    digest = EVP_md2();
 	    break;
+#endif
+#ifndef OPENSSL_NO_MD5
 	case D_MD5:
 	    digest = EVP_md5();
 	    break;
+#endif
+#ifndef OPENSSL_NO_SHA
 	case D_SHA1:
 	    digest = EVP_sha1();
 	    break;
+#endif
 	default:
 	    break;
 	}
@@ -456,7 +462,7 @@
     int pkcs7::sign(const char *filein, Certificate &cert, Key &privateKey,
 		    std::vector<Certificate> &certChain, bool detached)
     {
-	STACK_OF(509) *chain=NULL;
+	STACK_OF(X509) *chain=NULL;
 	std::vector<Certificate>::iterator certIt;
 	X509 *certif = cert.getX509Certificate();
 	EVP_PKEY *pkey = privateKey.getPrivateKey();
@@ -925,7 +931,7 @@
 	else if(isSignedAndEncrypted())
 	    recipientStack = sk_PKCS7_RECIP_INFO_dup(p7->d.signed_and_enveloped->recipientinfo);
     
-	while((cert=sk_PKCS7_RECIP_INFO_pop(recipientStack)->cert) != NULL) {
+	while((cert=((PKCS7_RECIP_INFO *)sk_PKCS7_RECIP_INFO_pop(recipientStack))->cert) != NULL) {
 	    Certificate *certif = new Certificate();
 	    certif->setX509Certificate(cert);
 #ifdef DEBUG
