gbadev.org forum archive

This is a read-only mirror of the content originally found on forum.gbadev.org (now offline), salvaged from Wayback machine copies. A new forum can be found here.

DS development > Compiling OpenSSL

#162508 - yellowstar - Thu Sep 04, 2008 3:20 am

I'm attempting to compile OpenSSL for DS. This is so Wmb Asm could have RSA verification built-in, instead of relying on external software.(Wmb Asm DS can't verify the signature since Wmb Asm currently needs ndsrsa to check the signature)
However, I'm getting compiler errors. I modified the default Makefile so dka could be used for compiling.(Well, attempted to)

Errors
Code:

making all in crypto...
make[1]: Entering directory `/c/Downloads/openssl-0.9.8h/openssl-0.9.8h/crypto'
arm-eabi-gcc -I. -I.. -I../include -O   -c -o cryptlib.o cryptlib.c
cryptlib.c: In function 'DECLARE_STACK_OF':
cryptlib.c:125: error: expected declaration specifiers before 'IMPLEMENT_STACK_OF'
cryptlib.c:170:3: error: #error "Inconsistency between crypto.h and cryptlib.c"
cryptlib.c:172: error: expected declaration specifiers before ';' token
cryptlib.c:176: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
cryptlib.c:181: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
cryptlib.c:185: error: storage class specified for parameter 'locking_callback'
cryptlib.c:185: error: parameter 'locking_callback' is initialized
cryptlib.c:187: error: storage class specified for parameter 'add_lock_callback'
cryptlib.c:187: error: parameter 'add_lock_callback' is initialized
cryptlib.c:188: error: storage class specified for parameter 'id_callback'
cryptlib.c:188: error: parameter 'id_callback' is initialized
cryptlib.c:190: error: storage class specified for parameter 'dynlock_create_callback'
cryptlib.c:190: error: parameter 'dynlock_create_callback' is initialized
cryptlib.c:192: error: storage class specified for parameter 'dynlock_lock_callback'
cryptlib.c:192: error: parameter 'dynlock_lock_callback' is initialized
cryptlib.c:194: error: storage class specified for parameter 'dynlock_destroy_callback'
cryptlib.c:194: error: parameter 'dynlock_destroy_callback' is initialized
cryptlib.c:197: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
cryptlib.c:228: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
cryptlib.c:233: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
cryptlib.c:294: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
cryptlib.c:337: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
cryptlib.c:358: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
cryptlib.c:364: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
cryptlib.c:370: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
cryptlib.c:376: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
cryptlib.c:382: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
cryptlib.c:388: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
cryptlib.c:395: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
cryptlib.c:401: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
cryptlib.c:407: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
cryptlib.c:413: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
cryptlib.c:418: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
cryptlib.c:423: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
cryptlib.c:428: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
cryptlib.c:449: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
cryptlib.c:494: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
cryptlib.c:531: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
cryptlib.c:572: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
cryptlib.c:574: error: parameter 'OPENSSL_NONPIC_relocated' is initialized
cryptlib.c:576: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
cryptlib.c:741: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
cryptlib.c:747: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
cryptlib.c:751: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
cryptlib.c:758: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
cryptlib.c:574: error: declaration for parameter 'OPENSSL_NONPIC_relocated' but no such parameter
cryptlib.c:193: error: declaration for parameter 'dynlock_destroy_callback' but no such parameter
cryptlib.c:191: error: declaration for parameter 'dynlock_lock_callback' but no such parameter
cryptlib.c:189: error: declaration for parameter 'dynlock_create_callback' but no such parameter
cryptlib.c:188: error: declaration for parameter 'id_callback' but no such parameter
cryptlib.c:186: error: declaration for parameter 'add_lock_callback' but no such parameter
cryptlib.c:184: error: declaration for parameter 'locking_callback' but no such parameter
cryptlib.c:758: error: expected '{' at end of input
make[1]: *** [cryptlib.o] Error 1
make[1]: Leaving directory `/c/Downloads/openssl-0.9.8h/openssl-0.9.8h/crypto'
"make": *** [build_crypto] Error 1

> Process Exit Code: 2
> Time Taken: 00:04



Makefile
Code:

### Generated automatically from Makefile.org by Configure.

##
## Makefile for OpenSSL
##

VERSION=0.9.8h
MAJOR=0
MINOR=9.8
SHLIB_VERSION_NUMBER=0.9.8
SHLIB_VERSION_HISTORY=
SHLIB_MAJOR=0
SHLIB_MINOR=9.8
SHLIB_EXT=
PLATFORM=dist
OPTIONS= no-camellia no-cms no-gmp no-krb5 no-mdc2 no-montasm no-rc5 no-rfc3779 no-seed no-shared no-tlsext no-zlib no-zlib-dynamic
CONFIGURE_ARGS=dist
SHLIB_TARGET=

# HERE indicates where this Makefile lives.  This can be used to indicate
# where sub-Makefiles are expected to be.  Currently has very limited usage,
# and should probably not be bothered with at all.
HERE=.

# INSTALL_PREFIX is for package builders so that they can configure
# for, say, /usr/ and yet have everything installed to /tmp/somedir/usr/.
# Normally it is left empty.
INSTALL_PREFIX=
INSTALLTOP=/usr/local/ssl

# Do not edit this manually. Use Configure --openssldir=DIR do change this!
OPENSSLDIR=/usr/local/ssl

# NO_IDEA - Define to build without the IDEA algorithm
# NO_RC4  - Define to build without the RC4 algorithm
# NO_RC2  - Define to build without the RC2 algorithm
# THREADS - Define when building with threads, you will probably also need any
#           system defines as well, i.e. _REENTERANT for Solaris 2.[34]
# TERMIO  - Define the termio terminal subsystem, needed if sgtty is missing.
# TERMIOS - Define the termios terminal subsystem, Silicon Graphics.
# LONGCRYPT - Define to use HPUX 10.x's long password modification to crypt(3).
# DEVRANDOM - Give this the value of the 'random device' if your OS supports
#           one.  32 bytes will be read from this when the random
#           number generator is initalised.
# SSL_FORBID_ENULL - define if you want the server to be not able to use the
#           NULL encryption ciphers.
#
# LOCK_DEBUG - turns on lots of lock debug output :-)
# REF_CHECK - turn on some xyz_free() assertions.
# REF_PRINT - prints some stuff on structure free.
# CRYPTO_MDEBUG - turns on my 'memory leak' detecting stuff
# MFUNC - Make all Malloc/Free/Realloc calls call
#       CRYPTO_malloc/CRYPTO_free/CRYPTO_realloc which can be setup to
#       call application defined callbacks via CRYPTO_set_mem_functions()
# MD5_ASM needs to be defined to use the x86 assembler for MD5
# SHA1_ASM needs to be defined to use the x86 assembler for SHA1
# RMD160_ASM needs to be defined to use the x86 assembler for RIPEMD160
# Do not define B_ENDIAN or L_ENDIAN if 'unsigned long' == 8.  It must
# equal 4.
# PKCS1_CHECK - pkcs1 tests.

CC= arm-eabi-gcc
CFLAG= -O
DEPFLAG= -DOPENSSL_NO_CAMELLIA -DOPENSSL_NO_CMS -DOPENSSL_NO_GMP -DOPENSSL_NO_MDC2 -DOPENSSL_NO_RC5 -DOPENSSL_NO_RFC3779 -DOPENSSL_NO_SEED -DOPENSSL_NO_TLSEXT
PEX_LIBS=
EX_LIBS=
EXE_EXT=
ARFLAGS=
AR=ar $(ARFLAGS) r
RANLIB= /usr/bin/ranlib
PERL= /usr/bin/perl
TAR= tar
TARFLAGS= --no-recursion
MAKEDEPPROG=makedepend

# We let the C compiler driver to take care of .s files. This is done in
# order to be excused from maintaining a separate set of architecture
# dependent assembler flags. E.g. if you throw -mcpu=ultrasparc at SPARC
# gcc, then the driver will automatically translate it to -xarch=v8plus
# and pass it down to assembler.
AS=$(CC) -c
ASFLAG=$(CFLAG)

# For x86 assembler: Set PROCESSOR to 386 if you want to support
# the 80386.
PROCESSOR=

# CPUID module collects small commonly used assembler snippets
CPUID_OBJ=
BN_ASM= bn_asm.o
DES_ENC= des_enc.o fcrypt_b.o
AES_ASM_OBJ= aes_core.o aes_cbc.o
BF_ENC= bf_enc.o
CAST_ENC= c_enc.o
RC4_ENC= rc4_enc.o rc4_skey.o
RC5_ENC= rc5_enc.o
MD5_ASM_OBJ=
SHA1_ASM_OBJ=
RMD160_ASM_OBJ=

# KRB5 stuff
KRB5_INCLUDES=
LIBKRB5=

# Zlib stuff
ZLIB_INCLUDE=
LIBZLIB=

DIRS=   crypto ssl engines apps test tools
SHLIBDIRS= crypto ssl

# dirs in crypto to build
SDIRS=  \
   objects \
   md2 md4 md5 sha hmac ripemd \
   des aes rc2 rc4 idea bf cast \
   bn ec rsa dsa ecdsa dh ecdh dso engine \
   buffer bio stack lhash rand err \
   evp asn1 pem x509 x509v3 conf txt_db pkcs7 pkcs12 comp ocsp ui krb5 \
   store pqueue
# keep in mind that the above list is adjusted by ./Configure
# according to no-xxx arguments...

# tests to perform.  "alltests" is a special word indicating that all tests
# should be performed.
TESTS = alltests

MAKEFILE= Makefile

MANDIR=$(OPENSSLDIR)/man
MAN1=1
MAN3=3
MANSUFFIX=
SHELL=/bin/sh

TOP=    .
ONEDIRS=out tmp
EDIRS=  times doc bugs util include certs ms shlib mt demos perl sf dep VMS
WDIRS=  windows
LIBS=   libcrypto.a libssl.a
SHARED_CRYPTO=libcrypto$(SHLIB_EXT)
SHARED_SSL=libssl$(SHLIB_EXT)
SHARED_LIBS=
SHARED_LIBS_LINK_EXTS=
SHARED_LDFLAGS=

GENERAL=        Makefile
BASENAME=       openssl
NAME=           $(BASENAME)-$(VERSION)
TARFILE=        $(NAME).tar
WTARFILE=       $(NAME)-win.tar
EXHEADER=       e_os2.h
HEADER=         e_os.h

all: Makefile build_all openssl.pc libssl.pc libcrypto.pc

# as we stick to -e, CLEARENV ensures that local variables in lower
# Makefiles remain local and variable. $${VAR+VAR} is tribute to Korn
# shell, which [annoyingly enough] terminates unset with error if VAR
# is not present:-( TOP= && unset TOP is tribute to HP-UX /bin/sh,
# which terminates unset with error if no variable was present:-(
CLEARENV=   TOP= && unset TOP $${LIB+LIB} $${LIBS+LIBS}   \
      $${INCLUDE+INCLUDE} $${INCLUDES+INCLUDES}   \
      $${DIR+DIR} $${DIRS+DIRS} $${SRC+SRC}      \
      $${LIBSRC+LIBSRC} $${LIBOBJ+LIBOBJ} $${ALL+ALL}   \
      $${EXHEADER+EXHEADER} $${HEADER+HEADER}      \
      $${GENERAL+GENERAL} $${CFLAGS+CFLAGS}      \
      $${ASFLAGS+ASFLAGS} $${AFLAGS+AFLAGS}      \
      $${LDCMD+LDCMD} $${LDFLAGS+LDFLAGS}      \
      $${SHAREDCMD+SHAREDCMD} $${SHAREDFLAGS+SHAREDFLAGS}   \
      $${SHARED_LIB+SHARED_LIB} $${LIBEXTRAS+LIBEXTRAS}

BUILDENV=   PLATFORM='${PLATFORM}' PROCESSOR='${PROCESSOR}' \
      CC='${CC}' CFLAG='${CFLAG}'          \
      AS='${CC}' ASFLAG='${CFLAG} -c'         \
      AR='${AR}' PERL='${PERL}' RANLIB='${RANLIB}'   \
      SDIRS='${SDIRS}' LIBRPATH='${INSTALLTOP}/lib'   \
      INSTALL_PREFIX='${INSTALL_PREFIX}'      \
      INSTALLTOP='${INSTALLTOP}' OPENSSLDIR='${OPENSSLDIR}'   \
      MAKEDEPEND='$$$${TOP}/util/domd $$$${TOP} -MD ${MAKEDEPPROG}' \
      DEPFLAG='-DOPENSSL_NO_DEPRECATED ${DEPFLAG}'   \
      MAKEDEPPROG='${MAKEDEPPROG}'         \
      SHARED_LDFLAGS='${SHARED_LDFLAGS}'      \
      KRB5_INCLUDES='${KRB5_INCLUDES}' LIBKRB5='${LIBKRB5}'   \
      EXE_EXT='${EXE_EXT}' SHARED_LIBS='${SHARED_LIBS}'   \
      SHLIB_EXT='${SHLIB_EXT}' SHLIB_TARGET='${SHLIB_TARGET}'   \
      PEX_LIBS='${PEX_LIBS}' EX_LIBS='${EX_LIBS}'   \
      CPUID_OBJ='${CPUID_OBJ}'         \
      BN_ASM='${BN_ASM}' DES_ENC='${DES_ENC}'    \
      AES_ASM_OBJ='${AES_ASM_OBJ}'         \
      BF_ENC='${BF_ENC}' CAST_ENC='${CAST_ENC}'   \
      RC4_ENC='${RC4_ENC}' RC5_ENC='${RC5_ENC}'   \
      SHA1_ASM_OBJ='${SHA1_ASM_OBJ}'         \
      MD5_ASM_OBJ='${MD5_ASM_OBJ}'         \
      RMD160_ASM_OBJ='${RMD160_ASM_OBJ}'      \
      THIS=$${THIS:-$@} MAKEFILE=Makefile MAKEOVERRIDES=
# MAKEOVERRIDES= effectively "equalizes" GNU-ish and SysV-ish make flavors,
# which in turn eliminates ambiguities in variable treatment with -e.

# BUILD_CMD is a generic macro to build a given target in a given
# subdirectory.  The target must be given through the shell variable
# `target' and the subdirectory to build in must be given through `dir'.
# This macro shouldn't be used directly, use RECURSIVE_BUILD_CMD or
# BUILD_ONE_CMD instead.
#
# BUILD_ONE_CMD is a macro to build a given target in a given
# subdirectory if that subdirectory is part of $(DIRS).  It requires
# exactly the same shell variables as BUILD_CMD.
#
# RECURSIVE_BUILD_CMD is a macro to build a given target in all
# subdirectories defined in $(DIRS).  It requires that the target
# is given through the shell variable `target'.
BUILD_CMD=  if [ -d "$$dir" ]; then \
       (   cd $$dir && echo "making $$target in $$dir..." && \
      $(CLEARENV) && $(MAKE) -e $(BUILDENV) TOP=.. DIR=$$dir $$target \
       ) || exit 1; \
       fi
RECURSIVE_BUILD_CMD=for dir in $(DIRS); do $(BUILD_CMD); done
BUILD_ONE_CMD=\
   if echo " $(DIRS) " | grep " $$dir " >/dev/null 2>/dev/null; then \
      $(BUILD_CMD); \
   fi

reflect:
   @[ -n "$(THIS)" ] && $(CLEARENV) && $(MAKE) $(THIS) -e $(BUILDENV)

sub_all: build_all
build_all: build_libs build_apps build_tests build_tools

build_libs: build_crypto build_ssl build_engines

build_crypto:
   @dir=crypto; target=all; $(BUILD_ONE_CMD)
build_ssl:
   @dir=ssl; target=all; $(BUILD_ONE_CMD)
build_engines:
   @dir=engines; target=all; $(BUILD_ONE_CMD)
build_apps:
   @dir=apps; target=all; $(BUILD_ONE_CMD)
build_tests:
   @dir=test; target=all; $(BUILD_ONE_CMD)
build_tools:
   @dir=tools; target=all; $(BUILD_ONE_CMD)

all_testapps: build_libs build_testapps
build_testapps:
   @dir=crypto; target=testapps; $(BUILD_ONE_CMD)

libcrypto$(SHLIB_EXT): libcrypto.a
   @if [ "$(SHLIB_TARGET)" != "" ]; then \
      $(MAKE) SHLIBDIRS=crypto build-shared; \
   else \
      echo "There's no support for shared libraries on this platform" >&2; \
      exit 1; \
   fi

libssl$(SHLIB_EXT): libcrypto$(SHLIB_EXT) libssl.a
   @if [ "$(SHLIB_TARGET)" != "" ]; then \
      $(MAKE) SHLIBDIRS=ssl SHLIBDEPS='-lcrypto' build-shared; \
   else \
      echo "There's no support for shared libraries on this platform" >&2; \
      exit 1; \
   fi

clean-shared:
   @set -e; for i in $(SHLIBDIRS); do \
      if [ -n "$(SHARED_LIBS_LINK_EXTS)" ]; then \
         tmp="$(SHARED_LIBS_LINK_EXTS)"; \
         for j in $${tmp:-x}; do \
            ( set -x; rm -f lib$$i$$j ); \
         done; \
      fi; \
      ( set -x; rm -f lib$$i$(SHLIB_EXT) ); \
      if [ "$(PLATFORM)" = "Cygwin" ]; then \
         ( set -x; rm -f cyg$$i$(SHLIB_EXT) lib$$i$(SHLIB_EXT).a ); \
      fi; \
   done

link-shared:
   @ set -e; for i in ${SHLIBDIRS}; do \
      $(MAKE) -f $(HERE)/Makefile.shared -e $(BUILDENV) \
         LIBNAME=$$i LIBVERSION=${SHLIB_MAJOR}.${SHLIB_MINOR} \
         LIBCOMPATVERSIONS=";${SHLIB_VERSION_HISTORY}" \
         symlink.$(SHLIB_TARGET); \
      libs="$$libs -l$$i"; \
   done

build-shared: do_$(SHLIB_TARGET) link-shared

do_$(SHLIB_TARGET):
   @ set -e; libs='-L. ${SHLIBDEPS}'; for i in ${SHLIBDIRS}; do \
      if [ "${SHLIBDIRS}" = "ssl" -a -n "$(LIBKRB5)" ]; then \
         libs="$(LIBKRB5) $$libs"; \
      fi; \
      $(CLEARENV) && $(MAKE) -f Makefile.shared -e $(BUILDENV) \
         LIBNAME=$$i LIBVERSION=${SHLIB_MAJOR}.${SHLIB_MINOR} \
         LIBCOMPATVERSIONS=";${SHLIB_VERSION_HISTORY}" \
         LIBDEPS="$$libs $(EX_LIBS)" \
         link_a.$(SHLIB_TARGET); \
      libs="-l$$i $$libs"; \
   done

libcrypto.pc: Makefile
   @ ( echo 'prefix=$(INSTALLTOP)'; \
       echo 'exec_prefix=$${prefix}'; \
       echo 'libdir=$${exec_prefix}/lib'; \
       echo 'includedir=$${prefix}/include'; \
       echo ''; \
       echo 'Name: OpenSSL-libcrypto'; \
       echo 'Description: OpenSSL cryptography library'; \
       echo 'Version: '$(VERSION); \
       echo 'Requires: '; \
       echo 'Libs: -L$${libdir} -lcrypto $(EX_LIBS)'; \
       echo 'Cflags: -I$${includedir} $(KRB5_INCLUDES)' ) > libcrypto.pc

libssl.pc: Makefile
   @ ( echo 'prefix=$(INSTALLTOP)'; \
       echo 'exec_prefix=$${prefix}'; \
       echo 'libdir=$${exec_prefix}/lib'; \
       echo 'includedir=$${prefix}/include'; \
       echo ''; \
       echo 'Name: OpenSSL'; \
       echo 'Description: Secure Sockets Layer and cryptography libraries'; \
       echo 'Version: '$(VERSION); \
       echo 'Requires: '; \
       echo 'Libs: -L$${libdir} -lssl -lcrypto $(EX_LIBS)'; \
       echo 'Cflags: -I$${includedir} $(KRB5_INCLUDES)' ) > libssl.pc

openssl.pc: Makefile
   @ ( echo 'prefix=$(INSTALLTOP)'; \
       echo 'exec_prefix=$${prefix}'; \
       echo 'libdir=$${exec_prefix}/lib'; \
       echo 'includedir=$${prefix}/include'; \
       echo ''; \
       echo 'Name: OpenSSL'; \
       echo 'Description: Secure Sockets Layer and cryptography libraries and tools'; \
       echo 'Version: '$(VERSION); \
       echo 'Requires: '; \
       echo 'Libs: -L$${libdir} -lssl -lcrypto $(EX_LIBS)'; \
       echo 'Cflags: -I$${includedir} $(KRB5_INCLUDES)' ) > openssl.pc

Makefile: Makefile.org Configure config
   @echo "Makefile is older than Makefile.org, Configure or config."
   @echo "Reconfigure the source tree (via './config' or 'perl Configure'), please."
   @false

libclean:
   rm -f *.map *.so *.so.* *.dll engines/*.so engines/*.dll *.a engines/*.a */lib */*/lib

clean:   libclean
   rm -f shlib/*.o *.o core a.out fluff rehash.time testlog make.log cctest cctest.c
   @set -e; target=clean; $(RECURSIVE_BUILD_CMD)
   rm -f $(LIBS)
   rm -f openssl.pc libssl.pc libcrypto.pc
   rm -f speed.* .pure
   rm -f $(TARFILE)
   @set -e; for i in $(ONEDIRS) ;\
   do \
   rm -fr $$i/*; \
   done

makefile.one: files
   $(PERL) util/mk1mf.pl >makefile.one; \
   sh util/do_ms.sh

files:
   $(PERL) $(TOP)/util/files.pl Makefile > $(TOP)/MINFO
   @set -e; target=files; $(RECURSIVE_BUILD_CMD)

links:
   @$(PERL) $(TOP)/util/mkdir-p.pl include/openssl
   @$(PERL) $(TOP)/util/mklink.pl include/openssl $(EXHEADER)
   @set -e; target=links; $(RECURSIVE_BUILD_CMD)

gentests:
   @(cd test && echo "generating dummy tests (if needed)..." && \
   $(CLEARENV) && $(MAKE) -e $(BUILDENV) TESTS='${TESTS}' OPENSSL_DEBUG_MEMORY=on generate );

dclean:
   rm -f *.bak
   @set -e; target=dclean; $(RECURSIVE_BUILD_CMD)

rehash: rehash.time
rehash.time: certs
   @(OPENSSL="`pwd`/util/opensslwrap.sh"; \
     OPENSSL_DEBUG_MEMORY=on; \
     export OPENSSL OPENSSL_DEBUG_MEMORY; \
     $(PERL) tools/c_rehash certs)
   touch rehash.time

test:   tests

tests: rehash
   @(cd test && echo "testing..." && \
   $(CLEARENV) && $(MAKE) -e $(BUILDENV) TOP=.. TESTS='${TESTS}' OPENSSL_DEBUG_MEMORY=on tests );
   util/opensslwrap.sh version -a

report:
   @$(PERL) util/selftest.pl

depend:
   @set -e; target=depend; $(RECURSIVE_BUILD_CMD)

lint:
   @set -e; target=lint; $(RECURSIVE_BUILD_CMD)

tags:
   rm -f TAGS
   find . -name '[^.]*.[ch]' | xargs etags -a

errors:
   $(PERL) util/mkerr.pl -recurse -write
   (cd engines; $(MAKE) PERL=$(PERL) errors)
   $(PERL) util/ck_errf.pl */*.c */*/*.c

stacks:
   $(PERL) util/mkstack.pl -write

util/libeay.num::
   $(PERL) util/mkdef.pl crypto update

util/ssleay.num::
   $(PERL) util/mkdef.pl ssl update

crypto/objects/obj_dat.h: crypto/objects/obj_dat.pl crypto/objects/obj_mac.h
   $(PERL) crypto/objects/obj_dat.pl crypto/objects/obj_mac.h crypto/objects/obj_dat.h
crypto/objects/obj_mac.h: crypto/objects/objects.pl crypto/objects/objects.txt crypto/objects/obj_mac.num
   $(PERL) crypto/objects/objects.pl crypto/objects/objects.txt crypto/objects/obj_mac.num crypto/objects/obj_mac.h

apps/openssl-vms.cnf: apps/openssl.cnf
   $(PERL) VMS/VMSify-conf.pl < apps/openssl.cnf > apps/openssl-vms.cnf

crypto/bn/bn_prime.h: crypto/bn/bn_prime.pl
   $(PERL) crypto/bn/bn_prime.pl >crypto/bn/bn_prime.h


TABLE: Configure
   (echo 'Output of `Configure TABLE'"':"; \
   $(PERL) Configure TABLE) > TABLE

update: errors stacks util/libeay.num util/ssleay.num crypto/objects/obj_dat.h apps/openssl-vms.cnf crypto/bn/bn_prime.h TABLE depend

# Build distribution tar-file. As the list of files returned by "find" is
# pretty long, on several platforms a "too many arguments" error or similar
# would occur. Therefore the list of files is temporarily stored into a file
# and read directly, requiring GNU-Tar. Call "make TAR=gtar dist" if the normal
# tar does not support the --files-from option.
tar:
   find . -type d -print | xargs chmod 755
   find . -type f -print | xargs chmod a+r
   find . -type f -perm -0100 -print | xargs chmod a+x
   find * \! -path CVS/\* \! -path \*/CVS/\* \! -name CVS \! -name .cvsignore \! -name STATUS \! -name TABLE | sort > ../$(TARFILE).list; \

   $(TAR) $(TARFLAGS) --files-from ../$(TARFILE).list -cvf - | \
   tardy --user_number=0  --user_name=openssl \
         --group_number=0 --group_name=openssl \
         --prefix=openssl-$(VERSION) - |\
   gzip --best >../$(TARFILE).gz; \
   rm -f ../$(TARFILE).list; \
   ls -l ../$(TARFILE).gz

tar-snap:
   @$(TAR) $(TARFLAGS) -cvf - \
      `find * \! -path CVS/\* \! -path \*/CVS/\* \! -name CVS \! -name .cvsignore \! -name STATUS \! -name TABLE \! -name '*.o' \! -name '*.a' \! -name '*.so' \! -name '*.so.*'  \! -name 'openssl' \! -name '*test' \! -name '.#*' \! -name '*~' | sort` |\
   tardy --user_number=0  --user_name=openssl \
         --group_number=0 --group_name=openssl \
         --prefix=openssl-$(VERSION) - > ../$(TARFILE);\
   ls -l ../$(TARFILE)

dist:   
   $(PERL) Configure dist
   @$(MAKE) dist_pem_h
   @$(MAKE) SDIRS='${SDIRS}' clean
   @$(MAKE) TAR='${TAR}' TARFLAGS='${TARFLAGS}' tar

dist_pem_h:
   (cd crypto/pem; $(MAKE) -e $(BUILDENV) pem.h; $(MAKE) clean)

install: all install_docs install_sw

install_sw:
   @$(PERL) $(TOP)/util/mkdir-p.pl $(INSTALL_PREFIX)$(INSTALLTOP)/bin \
      $(INSTALL_PREFIX)$(INSTALLTOP)/lib \
      $(INSTALL_PREFIX)$(INSTALLTOP)/lib/engines \
      $(INSTALL_PREFIX)$(INSTALLTOP)/lib/pkgconfig \
      $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl \
      $(INSTALL_PREFIX)$(OPENSSLDIR)/misc \
      $(INSTALL_PREFIX)$(OPENSSLDIR)/certs \
      $(INSTALL_PREFIX)$(OPENSSLDIR)/private
   @set -e; headerlist="$(EXHEADER)"; for i in $$headerlist;\
   do \
   (cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i; \
   chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i ); \
   done;
   @set -e; target=install; $(RECURSIVE_BUILD_CMD)
   @set -e; for i in $(LIBS) ;\
   do \
      if [ -f "$$i" ]; then \
      (       echo installing $$i; \
         cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/lib/$$i.new; \
         $(RANLIB) $(INSTALL_PREFIX)$(INSTALLTOP)/lib/$$i.new; \
         chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/lib/$$i.new; \
         mv -f $(INSTALL_PREFIX)$(INSTALLTOP)/lib/$$i.new $(INSTALL_PREFIX)$(INSTALLTOP)/lib/$$i ); \
      fi; \
   done;
   @set -e; if [ -n "$(SHARED_LIBS)" ]; then \
      tmp="$(SHARED_LIBS)"; \
      for i in $${tmp:-x}; \
      do \
         if [ -f "$$i" -o -f "$$i.a" ]; then \
         (       echo installing $$i; \
            if [ "$(PLATFORM)" != "Cygwin" ]; then \
               cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/lib/$$i.new; \
               chmod 555 $(INSTALL_PREFIX)$(INSTALLTOP)/lib/$$i.new; \
               mv -f $(INSTALL_PREFIX)$(INSTALLTOP)/lib/$$i.new $(INSTALL_PREFIX)$(INSTALLTOP)/lib/$$i; \
            else \
               c=`echo $$i | sed 's/^lib\(.*\)\.dll\.a/cyg\1-$(SHLIB_VERSION_NUMBER).dll/'`; \
               cp $$c $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$c.new; \
               chmod 755 $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$c.new; \
               mv -f $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$c.new $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$c; \
               cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/lib/$$i.new; \
               chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/lib/$$i.new; \
               mv -f $(INSTALL_PREFIX)$(INSTALLTOP)/lib/$$i.new $(INSTALL_PREFIX)$(INSTALLTOP)/lib/$$i; \
            fi ); \
         fi; \
      done; \
      (   here="`pwd`"; \
         cd $(INSTALL_PREFIX)$(INSTALLTOP)/lib; \
         $(MAKE) -f $$here/Makefile HERE="$$here" link-shared ); \
      if [ "$(INSTALLTOP)" != "/usr" ]; then \
         echo 'OpenSSL shared libraries have been installed in:'; \
         echo '  $(INSTALLTOP)'; \
         echo ''; \
         sed -e '1,/^$$/d' doc/openssl-shared.txt; \
      fi; \
   fi
   cp libcrypto.pc $(INSTALL_PREFIX)$(INSTALLTOP)/lib/pkgconfig
   chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/lib/pkgconfig/libcrypto.pc
   cp libssl.pc $(INSTALL_PREFIX)$(INSTALLTOP)/lib/pkgconfig
   chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/lib/pkgconfig/libssl.pc
   cp openssl.pc $(INSTALL_PREFIX)$(INSTALLTOP)/lib/pkgconfig
   chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/lib/pkgconfig/openssl.pc

install_docs:
   @$(PERL) $(TOP)/util/mkdir-p.pl \
      $(INSTALL_PREFIX)$(MANDIR)/man1 \
      $(INSTALL_PREFIX)$(MANDIR)/man3 \
      $(INSTALL_PREFIX)$(MANDIR)/man5 \
      $(INSTALL_PREFIX)$(MANDIR)/man7
   @pod2man="`cd util; ./pod2mantest $(PERL)`"; \
   here="`pwd`"; \
   filecase=; \
   if [ "$(PLATFORM)" = "DJGPP" -o "$(PLATFORM)" = "Cygwin" -o "$(PLATFORM)" = "mingw" ]; then \
      filecase=-i; \
   fi; \
   set -e; for i in doc/apps/*.pod; do \
      fn=`basename $$i .pod`; \
      sec=`$(PERL) util/extract-section.pl 1 < $$i`; \
      echo "installing man$$sec/$$fn.$${sec}$(MANSUFFIX)"; \
      (cd `$(PERL) util/dirname.pl $$i`; \
      sh -c "$$pod2man \
         --section=$$sec --center=OpenSSL \
         --release=$(VERSION) `basename $$i`") \
         >  $(INSTALL_PREFIX)$(MANDIR)/man$$sec/$$fn.$${sec}$(MANSUFFIX); \
      $(PERL) util/extract-names.pl < $$i | \
         (grep -v $$filecase "^$$fn\$$"; true) | \
         (grep -v "[   ]"; true) | \
         (cd $(INSTALL_PREFIX)$(MANDIR)/man$$sec/; \
          while read n; do \
            $$here/util/point.sh $$fn.$${sec}$(MANSUFFIX) "$$n".$${sec}$(MANSUFFIX); \
          done); \
   done; \
   set -e; for i in doc/crypto/*.pod doc/ssl/*.pod; do \
      fn=`basename $$i .pod`; \
      sec=`$(PERL) util/extract-section.pl 3 < $$i`; \
      echo "installing man$$sec/$$fn.$${sec}$(MANSUFFIX)"; \
      (cd `$(PERL) util/dirname.pl $$i`; \
      sh -c "$$pod2man \
         --section=$$sec --center=OpenSSL \
         --release=$(VERSION) `basename $$i`") \
         >  $(INSTALL_PREFIX)$(MANDIR)/man$$sec/$$fn.$${sec}$(MANSUFFIX); \
      $(PERL) util/extract-names.pl < $$i | \
         (grep -v $$filecase "^$$fn\$$"; true) | \
         (grep -v "[   ]"; true) | \
         (cd $(INSTALL_PREFIX)$(MANDIR)/man$$sec/; \
          while read n; do \
            $$here/util/point.sh $$fn.$${sec}$(MANSUFFIX) "$$n".$${sec}$(MANSUFFIX); \
          done); \
   done

# DO NOT DELETE THIS LINE -- make depend depends on it.

#162517 - sarachiel - Thu Sep 04, 2008 7:44 am

I guess you will have to look at the ssl library source code. I couldn't see any error in your Makefile, and those errors are typically what happens when a typedef or a structure misses somewhere.
I assume you already checked if you had all the header files. This is probably caused by a bad combination of #ifdef in the code and/or header files.

#162519 - Sektor - Thu Sep 04, 2008 9:37 am

You could try CyaSSL instead, it's lighter. CyaSSLDS.7z - ready to compile for DS (taken from beup).
_________________
GTAMP.com/DS

#162531 - theli - Thu Sep 04, 2008 12:52 pm

i also successfully used XYSSL on DS
http://theli.ho.ua/ds/xyssl-0.8-bsd-nds.7z

#162532 - samel - Thu Sep 04, 2008 1:12 pm

Personally i use Anubis
http://paginas.terra.com.br/informatica/paulobarreto/AnubisPage.html

#162559 - yellowstar - Thu Sep 04, 2008 11:02 pm

Apparently the compiler is failing to find <openssl/crypto.h>, and it's not even reporting any errors about failing to find that header... I get these same errors when compiling for Windows...

@Sektor:
Thanks. I guess I'll use CyaSSL, unless these OpenSSL compiling errors are resolved.

EDIT:
Well, the Windows compiling errors aren't exactly the same. The first few errors are about the same. It complains that NUM_LOCKS is undeclared, then it says it is bailing out, and stops compiling.

#162636 - yellowstar - Sat Sep 06, 2008 5:37 pm

I fixed these compiler errors. I found that almost all of the headers in the include directory were empty. Once I copied in the headers from the crypto directory, into the include directory, those errors were resolved. But once I installed Perl, which is needed for compiling OpenSSL apparently, I got the following errors. I'd prefer to use OpenSSL, but how do I use the RSA and SHA-1 functionality in CyaSSL? I know I need to use RsaSSL_Verify, but what values should go in the fields in that RsaKey struct...
Code:

making all in crypto...
make[1]: Entering directory `/c/Downloads/openssl-0.9.8h/openssl-0.9.8h/crypto'
making all in crypto/objects...
make[2]: Entering directory `/c/Downloads/openssl-0.9.8h/openssl-0.9.8h/crypto/objects'
arm-eabi-gcc -I.. -I../.. -I../../include -O   -c -o o_names.o o_names.c
In file included from ../../include/openssl/asn1.h:74,
                 from ../../include/openssl/objects.h:960,
                 from o_names.c:7:
../../include/openssl/bn.h:290: error: expected specifier-qualifier-list before 'BN_ULONG'
../../include/openssl/bn.h:310: error: expected specifier-qualifier-list before 'BN_ULONG'
../../include/openssl/bn.h:414: error: expected ')' before 'a'
../../include/openssl/bn.h:457: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'BN_mod_word'
../../include/openssl/bn.h:458: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'BN_div_word'
../../include/openssl/bn.h:459: error: expected declaration specifiers or '...' before 'BN_ULONG'
../../include/openssl/bn.h:460: error: expected declaration specifiers or '...' before 'BN_ULONG'
../../include/openssl/bn.h:461: error: expected declaration specifiers or '...' before 'BN_ULONG'
../../include/openssl/bn.h:462: error: expected declaration specifiers or '...' before 'BN_ULONG'
../../include/openssl/bn.h:463: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'BN_get_word'
../../include/openssl/bn.h:478: error: expected declaration specifiers or '...' before 'BN_ULONG'
../../include/openssl/bn.h:751: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'bn_mul_add_words'
../../include/openssl/bn.h:752: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'bn_mul_words'
../../include/openssl/bn.h:753: error: expected ')' before '*' token
../../include/openssl/bn.h:754: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'bn_div_words'
../../include/openssl/bn.h:755: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'bn_add_words'
../../include/openssl/bn.h:756: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'bn_sub_words'
In file included from ../../include/openssl/objects.h:960,
                 from o_names.c:7:
../../include/openssl/asn1.h:764: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'const'
../../include/openssl/asn1.h:778: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'const'
../../include/openssl/asn1.h:797: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'const'
../../include/openssl/asn1.h:817: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'const'
../../include/openssl/asn1.h:826: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'const'
../../include/openssl/asn1.h:840: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'const'
../../include/openssl/asn1.h:845: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'const'
../../include/openssl/asn1.h:846: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'const'
../../include/openssl/asn1.h:847: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'const'
../../include/openssl/asn1.h:848: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'const'
../../include/openssl/asn1.h:849: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'const'
../../include/openssl/asn1.h:854: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'const'
../../include/openssl/asn1.h:856: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'const'
../../include/openssl/asn1.h:857: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'const'
../../include/openssl/asn1.h:858: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'const'
../../include/openssl/asn1.h:859: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'const'
../../include/openssl/asn1.h:860: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'const'
../../include/openssl/asn1.h:861: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'const'
../../include/openssl/asn1.h:862: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'const'
../../include/openssl/asn1.h:863: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'const'
../../include/openssl/asn1.h:864: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'const'
../../include/openssl/asn1.h:866: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'const'
make[2]: *** [o_names.o] Error 1
make[2]: Leaving directory `/c/Downloads/openssl-0.9.8h/openssl-0.9.8h/crypto/objects'
make[1]: *** [subdirs] Error 1
make[1]: Leaving directory `/c/Downloads/openssl-0.9.8h/openssl-0.9.8h/crypto'
"make": *** [build_crypto] Error 1


Part of bn.h:
Code:

* crypto/bn/bn.h */
/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com)
 * All rights reserved.
 *
 * This package is an SSL implementation written
 * by Eric Young (eay@cryptsoft.com).
 * The implementation was written so as to conform with Netscapes SSL.
 *
 * This library is free for commercial and non-commercial use as long as
 * the following conditions are aheared to.  The following conditions
 * apply to all code found in this distribution, be it the RC4, RSA,
 * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
 * included with this distribution is covered by the same copyright terms
 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
 *
 * Copyright remains Eric Young's, and as such any Copyright notices in
 * the code are not to be removed.
 * If this package is used in a product, Eric Young should be given attribution
 * as the author of the parts of the library used.
 * This can be in the form of a textual message at program startup or
 * in documentation (online or textual) provided with the package.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 * 3. All advertising materials mentioning features or use of this software
 *    must display the following acknowledgement:
 *    "This product includes cryptographic software written by
 *     Eric Young (eay@cryptsoft.com)"
 *    The word 'cryptographic' can be left out if the rouines from the library
 *    being used are not cryptographic related :-).
 * 4. If you include any Windows specific code (or a derivative thereof) from
 *    the apps directory (application code) you must include an acknowledgement:
 *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
 *
 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY


 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 *
 * The licence and distribution terms for any publically available version or
 * derivative of this code cannot be changed.  i.e. this code cannot simply be
 * copied and put under another distribution licence
 * [including the GNU Public Licence.]
 */
/* ====================================================================
 * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED.
 *
 * Portions of the attached software ("Contribution") are developed by
 * SUN MICROSYSTEMS, INC., and are contributed to the OpenSSL project.
 *
 * The Contribution is licensed pursuant to the Eric Young open source
 * license provided above.
 *
 * The binary polynomial arithmetic software is originally written by
 * Sheueling Chang Shantz and Douglas Stebila of Sun Microsystems Laboratories.
 *
 */

#ifndef HEADER_BN_H
#define HEADER_BN_H

#include <openssl/e_os2.h>
#ifndef OPENSSL_NO_FP_API
#include <stdio.h> /* FILE */
#endif
#include <openssl/ossl_typ.h>

#ifdef  __cplusplus
extern "C" {
#endif

/* These preprocessor symbols control various aspects of the bignum headers and
 * library code. They're not defined by any "normal" configuration, as they are
 * intended for development and testing purposes. NB: defining all three can be
 * useful for debugging application code as well as openssl itself.
 *
 * BN_DEBUG - turn on various debugging alterations to the bignum code
 * BN_DEBUG_RAND - uses random poisoning of unused words to trip up
 * mismanagement of bignum internals. You must also define BN_DEBUG.
 */
/* #define BN_DEBUG */
/* #define BN_DEBUG_RAND */

#define BN_MUL_COMBA
#define BN_SQR_COMBA
#define BN_RECURSION

/* This next option uses the C libraries (2 word)/(1 word) function.
 * If it is not defined, I use my C version (which is slower).
 * The reason for this flag is that when the particular C compiler
 * library routine is used, and the library is linked with a different
 * compiler, the library is missing.  This mostly happens when the
 * library is built with gcc and then linked using normal cc.  This would
 * be a common occurrence because gcc normally produces code that is
 * 2 times faster than system compilers for the big number stuff.
 * For machines with only one compiler (or shared libraries), this should
 * be on.  Again this in only really a problem on machines
 * using "long long's", are 32bit, and are not using my assembler code. */
#if defined(OPENSSL_SYS_MSDOS) || defined(OPENSSL_SYS_WINDOWS) || \
    defined(OPENSSL_SYS_WIN32) || defined(linux)
# ifndef BN_DIV2W
#  define BN_DIV2W
# endif
#endif

/* assuming long is 64bit - this is the DEC Alpha
 * unsigned long long is only 64 bits :-(, don't define
 * BN_LLONG for the DEC Alpha */
#ifdef SIXTY_FOUR_BIT_LONG
#define BN_ULLONG   unsigned long long
#define BN_ULONG   unsigned long
#define BN_LONG      long
#define BN_BITS      128
#define BN_BYTES   8
#define BN_BITS2   64
#define BN_BITS4   32
#define BN_MASK      (0xffffffffffffffffffffffffffffffffLL)
#define BN_MASK2   (0xffffffffffffffffL)
#define BN_MASK2l   (0xffffffffL)
#define BN_MASK2h   (0xffffffff00000000L)
#define BN_MASK2h1   (0xffffffff80000000L)
#define BN_TBIT      (0x8000000000000000L)
#define BN_DEC_CONV   (10000000000000000000UL)
#define BN_DEC_FMT1   "%lu"
#define BN_DEC_FMT2   "%019lu"
#define BN_DEC_NUM   19
#endif

/* This is where the long long data type is 64 bits, but long is 32.
 * For machines where there are 64bit registers, this is the mode to use.
 * IRIX, on R4000 and above should use this mode, along with the relevant
 * assembler code :-).  Do NOT define BN_LLONG.
 */
#ifdef SIXTY_FOUR_BIT
#undef BN_LLONG
#undef BN_ULLONG
#define BN_ULONG   unsigned long long
#define BN_LONG      long long
#define BN_BITS      128
#define BN_BYTES   8
#define BN_BITS2   64
#define BN_BITS4   32
#define BN_MASK2   (0xffffffffffffffffLL)
#define BN_MASK2l   (0xffffffffL)
#define BN_MASK2h   (0xffffffff00000000LL)
#define BN_MASK2h1   (0xffffffff80000000LL)
#define BN_TBIT      (0x8000000000000000LL)
#define BN_DEC_CONV   (10000000000000000000ULL)
#define BN_DEC_FMT1   "%llu"
#define BN_DEC_FMT2   "%019llu"
#define BN_DEC_NUM   19
#endif

#ifdef THIRTY_TWO_BIT
#ifdef BN_LLONG
# if defined(OPENSSL_SYS_WIN32) && !defined(__GNUC__)
#  define BN_ULLONG   unsigned __int64

# else
#  define BN_ULLONG   unsigned long long
# endif
#endif
#define BN_ULONG   unsigned long
#define BN_LONG      long
#define BN_BITS      64
#define BN_BYTES   4
#define BN_BITS2   32
#define BN_BITS4   16
#ifdef OPENSSL_SYS_WIN32
/* VC++ doesn't like the LL suffix */
#define BN_MASK      (0xffffffffffffffffL)
#else
#define BN_MASK      (0xffffffffffffffffLL)
#endif
#define BN_MASK2   (0xffffffffL)
#define BN_MASK2l   (0xffff)
#define BN_MASK2h1   (0xffff8000L)
#define BN_MASK2h   (0xffff0000L)
#define BN_TBIT      (0x80000000L)
#define BN_DEC_CONV   (1000000000L)
#define BN_DEC_FMT1   "%lu"
#define BN_DEC_FMT2   "%09lu"
#define BN_DEC_NUM   9
#endif

#ifdef SIXTEEN_BIT
#ifndef BN_DIV2W
#define BN_DIV2W
#endif
#define BN_ULLONG   unsigned long
#define BN_ULONG   unsigned short
#define BN_LONG      short
#define BN_BITS      32
#define BN_BYTES   2
#define BN_BITS2   16
#define BN_BITS4   8
#define BN_MASK      (0xffffffff)
#define BN_MASK2   (0xffff)
#define BN_MASK2l   (0xff)
#define BN_MASK2h1   (0xff80)
#define BN_MASK2h   (0xff00)
#define BN_TBIT      (0x8000)
#define BN_DEC_CONV   (100000)
#define BN_DEC_FMT1   "%u"
#define BN_DEC_FMT2   "%05u"
#define BN_DEC_NUM   5
#endif

#ifdef EIGHT_BIT
#ifndef BN_DIV2W
#define BN_DIV2W
#endif
#define BN_ULLONG   unsigned short
#define BN_ULONG   unsigned char
#define BN_LONG      char
#define BN_BITS      16
#define BN_BYTES   1
#define BN_BITS2   8
#define BN_BITS4   4
#define BN_MASK      (0xffff)
#define BN_MASK2   (0xff)
#define BN_MASK2l   (0xf)
#define BN_MASK2h1   (0xf8)
#define BN_MASK2h   (0xf0)
#define BN_TBIT      (0x80)
#define BN_DEC_CONV   (100)
#define BN_DEC_FMT1   "%u"
#define BN_DEC_FMT2   "%02u"
#define BN_DEC_NUM   2
#endif

#define BN_DEFAULT_BITS   1280

#define BN_FLG_MALLOCED      0x01
#define BN_FLG_STATIC_DATA   0x02
#define BN_FLG_CONSTTIME   0x04 /* avoid leaking exponent information through timing,
                                      * BN_mod_exp_mont() will call BN_mod_exp_mont_consttime,
                                      * BN_div() will call BN_div_no_branch,
                                      * BN_mod_inverse() will call BN_mod_inverse_no_branch.
                                      */

#ifndef OPENSSL_NO_DEPRECATED
#define BN_FLG_EXP_CONSTTIME BN_FLG_CONSTTIME /* deprecated name for the flag */
                                      /* avoid leaking exponent information through timings
                                      * (BN_mod_exp_mont() will call BN_mod_exp_mont_consttime) */
#endif

#ifndef OPENSSL_NO_DEPRECATED
#define BN_FLG_FREE      0x8000   /* used for debuging */
#endif
#define BN_set_flags(b,n)   ((b)->flags|=(n))
#define BN_get_flags(b,n)   ((b)->flags&(n))

/* get a clone of a BIGNUM with changed flags, for *temporary* use only
 * (the two BIGNUMs cannot not be used in parallel!) */
#define BN_with_flags(dest,b,n)  ((dest)->d=(b)->d, \
                                  (dest)->top=(b)->top, \
                                  (dest)->dmax=(b)->dmax, \
                                  (dest)->neg=(b)->neg, \
                                  (dest)->flags=(((dest)->flags & BN_FLG_MALLOCED) \
                                                 |  ((b)->flags & ~BN_FLG_MALLOCED) \
                                                 |  BN_FLG_STATIC_DATA \
                                                 |  (n)))

/* Already declared in ossl_typ.h */
#if 0
typedef struct bignum_st BIGNUM;
/* Used for temp variables (declaration hidden in bn_lcl.h) */
typedef struct bignum_ctx BN_CTX;
typedef struct bn_blinding_st BN_BLINDING;
typedef struct bn_mont_ctx_st BN_MONT_CTX;
typedef struct bn_recp_ctx_st BN_RECP_CTX;
typedef struct bn_gencb_st BN_GENCB;
#endif

struct bignum_st
   {
   BN_ULONG *d;   /* Pointer to an array of 'BN_BITS2' bit chunks. */ //<----------First error here
   int top;   /* Index of last used d +1. */
   /* The next are internal book keeping for bn_expand. */
   int dmax;   /* Size of the d array. */
   int neg;   /* one if the number is negative */
   int flags;
   };