1########################################################################
2#
3# Copyright (c) 2009, Secure Endpoints Inc.
4# All rights reserved.
5# 
6# Redistribution and use in source and binary forms, with or without
7# modification, are permitted provided that the following conditions
8# are met:
9# 
10# - Redistributions of source code must retain the above copyright
11#   notice, this list of conditions and the following disclaimer.
12# 
13# - Redistributions in binary form must reproduce the above copyright
14#   notice, this list of conditions and the following disclaimer in
15#   the documentation and/or other materials provided with the
16#   distribution.
17# 
18# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
21# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
22# COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
23# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
24# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
25# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
26# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
27# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
28# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29# POSSIBILITY OF SUCH DAMAGE.
30# 
31
32SUBDIRS=libtommath
33
34RELDIR=lib\hcrypto
35
36intcflags=-DKRB5 -DASN1_LIB -I$(HCRYPTOINCLUDEDIR) -DUSE_HCRYPTO_LTM=1
37
38!include ../../windows/NTMakefile.w32
39
40# Do dependencies first
41
42all:: subdirs
43
44clean:: clean-subdirs
45
46test:: test-subdirs
47
48# Include files
49
50HCRYPTOINCLUDEDIR=$(INCDIR)\hcrypto
51
52INCFILES=	\
53	$(HCRYPTOINCLUDEDIR)\aes.h	\
54	$(HCRYPTOINCLUDEDIR)\bn.h	\
55	$(HCRYPTOINCLUDEDIR)\des.h	\
56	$(HCRYPTOINCLUDEDIR)\dh.h	\
57	$(HCRYPTOINCLUDEDIR)\dsa.h	\
58	$(HCRYPTOINCLUDEDIR)\ec.h	\
59	$(HCRYPTOINCLUDEDIR)\ecdh.h	\
60	$(HCRYPTOINCLUDEDIR)\ecdsa.h	\
61	$(HCRYPTOINCLUDEDIR)\engine.h	\
62	$(HCRYPTOINCLUDEDIR)\evp.h	\
63	$(HCRYPTOINCLUDEDIR)\evp-hcrypto.h	\
64	$(HCRYPTOINCLUDEDIR)\evp-cc.h	\
65	$(HCRYPTOINCLUDEDIR)\hmac.h	\
66	$(HCRYPTOINCLUDEDIR)\md2.h	\
67	$(HCRYPTOINCLUDEDIR)\md4.h	\
68	$(HCRYPTOINCLUDEDIR)\md5.h	\
69	$(HCRYPTOINCLUDEDIR)\pkcs12.h	\
70	$(HCRYPTOINCLUDEDIR)\rand.h	\
71	$(HCRYPTOINCLUDEDIR)\randi.h	\
72	$(HCRYPTOINCLUDEDIR)\rc2.h	\
73	$(HCRYPTOINCLUDEDIR)\rc4.h	\
74	$(HCRYPTOINCLUDEDIR)\rsa.h	\
75	$(HCRYPTOINCLUDEDIR)\sha.h	\
76	$(HCRYPTOINCLUDEDIR)\ui.h
77
78mkincdir:
79!if !exist($(HCRYPTOINCLUDEDIR))
80	$(MKDIR) $(HCRYPTOINCLUDEDIR)
81!endif
82
83{}.h{$(HCRYPTOINCLUDEDIR)}.h:
84	$(CP) $** $@
85
86all:: mkincdir
87
88all:: $(INCFILES)
89
90# libhcrypto
91
92libhcrypto_OBJs = 			\
93	$(OBJ)\aes.obj			\
94	$(OBJ)\bn.obj			\
95	$(OBJ)\camellia.obj		\
96	$(OBJ)\camellia-ntt.obj		\
97	$(OBJ)\common.obj		\
98	$(OBJ)\des.obj			\
99	$(OBJ)\dh.obj			\
100	$(OBJ)\dh-ltm.obj		\
101	$(OBJ)\dh-tfm.obj		\
102	$(OBJ)\dsa.obj			\
103	$(OBJ)\evp.obj			\
104	$(OBJ)\evp-hcrypto.obj		\
105	$(OBJ)\evp-cc.obj		\
106	$(OBJ)\engine.obj		\
107	$(OBJ)\hmac.obj			\
108	$(OBJ)\md2.obj			\
109	$(OBJ)\md4.obj			\
110	$(OBJ)\md5.obj			\
111	$(OBJ)\pkcs5.obj		\
112	$(OBJ)\pkcs12.obj		\
113	$(OBJ)\rand-w32.obj		\
114	$(OBJ)\rand.obj			\
115	$(OBJ)\rc2.obj			\
116	$(OBJ)\rc4.obj			\
117	$(OBJ)\rijndael-alg-fst.obj	\
118	$(OBJ)\rnd_keys.obj		\
119	$(OBJ)\rsa.obj			\
120	$(OBJ)\rsa-gmp.obj		\
121	$(OBJ)\rsa-ltm.obj		\
122	$(OBJ)\rsa-tfm.obj		\
123	$(OBJ)\sha.obj			\
124	$(OBJ)\sha256.obj		\
125	$(OBJ)\sha512.obj		\
126	$(OBJ)\ui.obj			\
127	$(OBJ)\validate.obj
128
129$(LIBHCRYPTO): $(libhcrypto_OBJs)
130	$(LIBCON)
131
132all:: $(LIBHCRYPTO)
133
134clean::
135	-$(RM) $(LIBHCRYPTO)
136
137# Tests
138
139TESTLIB=$(OBJ)\libhctest.lib
140
141$(TESTLIB):		    \
142	$(OBJ)\des.obj	    \
143	$(OBJ)\ui.obj
144	$(LIBCON)
145
146test-binaries:				\
147	$(OBJ)\destest.exe		\
148	$(OBJ)\example_evp_cipher.exe	\
149	$(OBJ)\mdtest.exe		\
150	$(OBJ)\rc2test.exe		\
151	$(OBJ)\rctest.exe		\
152	$(OBJ)\test_bn.exe		\
153	$(OBJ)\test_cipher.exe		\
154	$(OBJ)\test_engine_dso.exe	\
155	$(OBJ)\test_hmac.exe		\
156	$(OBJ)\test_pkcs5.exe		\
157	$(OBJ)\test_pkcs12.exe		\
158	$(OBJ)\test_rsa.exe		\
159	$(OBJ)\test_dh.exe		\
160	$(OBJ)\test_rand.exe		\
161	$(OBJ)\test_crypto.sh
162
163$(OBJ)\destest.exe: $(OBJ)\destest.obj $(TESTLIB) $(LIBROKEN)
164	$(EXECONLINK)
165	$(EXEPREP_NODIST)
166
167$(OBJ)\example_evp_cipher.exe: $(OBJ)\example_evp_cipher.obj $(TESTLIB) $(LIBHEIMDAL) $(LIBROKEN)
168	$(EXECONLINK)
169	$(EXEPREP_NODIST)
170
171$(OBJ)\mdtest.exe: $(OBJ)\mdtest.obj $(LIBHEIMDAL) $(LIBROKEN) $(OBJ)\sha512.obj
172	$(EXECONLINK)
173	$(EXEPREP_NODIST)
174
175$(OBJ)\rc2test.exe: $(OBJ)\rc2test.obj $(LIBHEIMDAL) $(LIBROKEN)
176	$(EXECONLINK)
177	$(EXEPREP_NODIST)
178
179$(OBJ)\rctest.exe: $(OBJ)\rctest.obj $(LIBHEIMDAL) $(LIBROKEN)
180	$(EXECONLINK)
181	$(EXEPREP_NODIST)
182
183$(OBJ)\test_bn.exe: $(OBJ)\test_bn.obj $(LIBHEIMDAL) $(LIBROKEN)
184	$(EXECONLINK)
185	$(EXEPREP_NODIST)
186
187$(OBJ)\test_cipher.exe: $(OBJ)\test_cipher.obj $(TESTLIB) $(LIBHEIMDAL) $(LIBROKEN) $(LIBVERS)
188	$(EXECONLINK)
189	$(EXEPREP_NODIST)
190
191$(OBJ)\test_engine_dso.exe: $(OBJ)\test_engine_dso.obj $(LIBHEIMDAL) $(LIBROKEN) $(LIBVERS)
192	$(EXECONLINK)
193	$(EXEPREP_NODIST)
194
195$(OBJ)\test_hmac.exe: $(OBJ)\test_hmac.obj $(LIBHEIMDAL) $(LIBROKEN)
196	$(EXECONLINK)
197	$(EXEPREP_NODIST)
198
199$(OBJ)\test_pkcs5.exe: $(OBJ)\test_pkcs5.obj $(LIBHEIMDAL) $(LIBROKEN)
200	$(EXECONLINK)
201	$(EXEPREP_NODIST)
202
203$(OBJ)\test_pkcs12.exe: $(OBJ)\test_pkcs12.obj $(LIBHEIMDAL) $(LIBROKEN)
204	$(EXECONLINK)
205	$(EXEPREP_NODIST)
206
207$(OBJ)\test_rsa.exe: $(OBJ)\test_rsa.obj $(LIBHEIMDAL) $(LIBROKEN) $(LIBVERS)
208	$(EXECONLINK)
209	$(EXEPREP_NODIST)
210
211$(OBJ)\test_dh.exe: $(OBJ)\test_dh.obj $(LIBHEIMDAL) $(LIBROKEN) $(LIBVERS)
212	$(EXECONLINK)
213	$(EXEPREP_NODIST)
214
215$(OBJ)\test_rand.exe: $(OBJ)\test_rand.obj $(LIBHEIMDAL) $(LIBROKEN) $(LIBVERS)
216	$(EXECONLINK)
217	$(EXEPREP_NODIST)
218
219SRCDIR2=$(SRCDIR:\=\\\\)
220
221$(OBJ)\test_crypto.sh: test_crypto.in NTMakefile
222	$(SED) -e "s,[@]srcdir[@],$(SRCDIR2),g" -e "s,[@]exeext[@],.exe,g" -e "s,\r,," < test_crypto.in > $@ || $(RM) $@
223
224test-run:
225	cd $(OBJ)
226!ifdef SH
227	$(SH) test_crypto.sh
228!endif
229	destest.exe
230	mdtest.exe
231	rc2test.exe
232	rctest.exe
233	test_bn.exe
234	test_cipher.exe
235	test_engine_dso.exe
236	test_hmac.exe
237	test_pkcs5.exe
238	test_pkcs12.exe
239	test_rsa.exe
240	test_dh.exe
241	cd $(SRCDIR)
242
243test:: $(TESTLIB) test-binaries test-run
244
245test-exports:
246	$(PERL) ..\..\cf\w32-check-exported-symbols.pl --vs version-script.map --def libhcrypto-exports.def
247
248test:: test-exports
249