Using OpenSSL headers in C on a Macbook Pro

no_longer_in_sudoers_file
Atlassian Team
Atlassian Team members are employees working across the company in a wide variety of roles.
March 13, 2016

This last week, I took the opportunity during the Atlassian ShipIt to work on my CRSCE compression algorithm, rewriting the crsce utility in C rather than Python (for speed and other efficiencies).  But while writing the HSM Buffer, I got the following error from the compiler:

In file included from ./hsm_buffer.h:3:
In file included from ./crypto/crypto.h:17:
./crypto/crypto.c:24:18: fatal error: 'openssl/sha.h' file not found
        #include <openssl/sha.h>

 

I was trying to compile my project on a Mac Book Pro (El Capitan) using GCC.  While I know that Mac provides its own encryption libraries (and plan to support them at some point), most people interested in CRSCE will want to use it on a Linux or Windows machine (and that means OpenSSL is the greatest bang for the buck.

1 answer

1 accepted

Suggest an answer

Log in or Sign up to answer
6 votes
Answer accepted
no_longer_in_sudoers_file
Atlassian Team
Atlassian Team members are employees working across the company in a wide variety of roles.
March 13, 2016

Here's the fix I came up with...

(1) Install openSSL using brew:

brew install openssl --upgrade

I already had openssl installed but the upgrade to El Capitan broke the libraries. So, reinstalling with --upgrade helped me fix my broken state.

 

(2) When compiling, I had been using:

gcc main.c -o crsce

What I should be doing is...

gcc main.c \
    -o crsce \
    -I /usr/local/opt/openssl/include \
    -L /usr/local/opt/openssl/lib

 

The conclusion is that this works now and all is well in the world...

#ifdef OS_MAC
    #ifdef CRSCE_CRYPTO_OPENSSL
        //
        // If using MAC, be sure to...
        //
        //      brew install openssl
        //
        // to install openssl library, then when building use...
        //
        //      gcc <topLevel.c> \
        //          -o <binaryName> \
        //          -I /usr/local/opt/openssl/include \
        //          -L /usr/local/opt/openssl/lib
        //
        // which will tell GCC where the files are located.
        //
        #include <openssl/sha.h>
        #define CRSCE_CRYPTO_READY openssl
    //
    //#elif CRSCE_CRYPTO_<PACKAGENAME>
    //  #include "...path.../file.h"
    //
    #else
        #pragma GCC error ("No recognized crypto package included")
    #endif
    #ifdef CRSCE_CRYPTO_READY
        #pragma message ("A Crypto Package has been included")
    #else
        #pragma GCC error ("No crypto package has been included in crypto.c")
    #endif
TAGS
AUG Leaders

Atlassian Community Events