8 INCLUDES= -I$(TOP) -I../include $(KRB5_INCLUDES)
11 OPENSSLDIR= /usr/local/ssl
12 INSTALLTOP= /usr/local/ssl
13 MAKEFILE= Makefile.ssl
14 MAKE= make -f $(MAKEFILE)
15 MAKEDEPPROG= makedepend
16 MAKEDEPEND= $(TOP)/util/domd $(TOP) -MD $(MAKEDEPPROG)
20 EX_LIBS= #-lnsl -lsocket
22 CFLAGS= $(INCLUDES) $(CFLAG)
24 GENERAL=Makefile.ssl maketests.com \
25 tests.com testenc.com tx509.com trsa.com tcrl.com tsid.com treq.com \
26 tpkcs7.com tpkcs7d.com tverify.com testgen.com testss.com testssl.com \
27 testca.com VMSca-response.1 VMSca-response.2
29 DLIBCRYPTO= ../libcrypto.a
31 LIBCRYPTO= -L.. -lcrypto
58 ENGINETEST= enginetest
62 EXE= $(BNTEST) $(ECTEST) $(IDEATEST) $(MD2TEST) $(MD4TEST) $(MD5TEST) $(HMACTEST) \
63 $(RC2TEST) $(RC4TEST) $(RC5TEST) \
64 $(DESTEST) $(SHATEST) $(SHA1TEST) $(MDC2TEST) $(RMDTEST) \
65 $(RANDTEST) $(DHTEST) $(ENGINETEST) \
66 $(BFTEST) $(CASTTEST) $(SSLTEST) $(EXPTEST) $(DSATEST) $(RSATEST)
70 OBJ= $(BNTEST).o $(ECTEST).o $(IDEATEST).o $(MD2TEST).o $(MD4TEST).o $(MD5TEST).o \
72 $(RC2TEST).o $(RC4TEST).o $(RC5TEST).o \
73 $(DESTEST).o $(SHATEST).o $(SHA1TEST).o $(MDC2TEST).o $(RMDTEST).o \
74 $(RANDTEST).o $(DHTEST).o $(ENGINETEST).o $(CASTTEST).o \
75 $(BFTEST).o $(SSLTEST).o $(DSATEST).o $(EXPTEST).o $(RSATEST).o
76 SRC= $(BNTEST).c $(ECTEST).c $(IDEATEST).c $(MD2TEST).c $(MD4TEST).c $(MD5TEST).c \
78 $(RC2TEST).c $(RC4TEST).c $(RC5TEST).c \
79 $(DESTEST).c $(SHATEST).c $(SHA1TEST).c $(MDC2TEST).c $(RMDTEST).c \
80 $(RANDTEST).c $(DHTEST).c $(ENGINETEST).c $(CASTTEST).c \
81 $(BFTEST).c $(SSLTEST).c $(DSATEST).c $(EXPTEST).c $(RSATEST).c
86 ALL= $(GENERAL) $(SRC) $(HEADER)
89 (cd ..; $(MAKE) DIRS=$(DIR) all)
96 $(PERL) $(TOP)/util/files.pl Makefile.ssl >> $(TOP)/MINFO
99 @@$(TOP)/util/point.sh Makefile.ssl Makefile
108 tests: exe apps $(TESTS)
111 @(cd ../apps; $(MAKE) CC='${CC}' CFLAG='${CFLAG}' INSTALLTOP='${INSTALLTOP}' PEX_LIBS='${PEX_LIBS}' EX_LIBS='${EX_LIBS}' all)
114 test_des test_idea test_sha test_md4 test_md5 test_hmac \
116 test_rmd test_rc2 test_rc4 test_rc5 test_bf test_cast test_rd \
117 test_rand test_bn test_ec test_enc test_x509 test_rsa test_crl test_sid \
118 test_gen test_req test_pkcs7 test_verify test_dh test_dsa \
119 test_ss test_ca test_engine test_ssl
171 echo test normal x509v1 certificate
172 sh ./tx509 2>/dev/null
173 echo test first x509v3 certificate
174 sh ./tx509 v3-cert1.pem 2>/dev/null
175 echo test second x509v3 certificate
176 sh ./tx509 v3-cert2.pem 2>/dev/null
179 @sh ./trsa 2>/dev/null
183 @sh ./tcrl 2>/dev/null
186 @sh ./tsid 2>/dev/null
189 @sh ./treq 2>/dev/null
190 @sh ./treq testreq2.pem 2>/dev/null
193 @sh ./tpkcs7 2>/dev/null
194 @sh ./tpkcs7d 2>/dev/null
197 @echo starting big number library test, could take a while...
198 @./$(BNTEST) >tmp.bntest
199 @echo quit >>tmp.bntest
201 @<tmp.bntest sh -c "`sh ./bctest || true`" | $(PERL) -e '$$i=0; while (<STDIN>) {if (/^test (.*)/) {print STDERR "\nverify $$1";} elsif (!/^0$$/) {die "\nFailed! bc: $$_";} else {print STDERR "."; $$i++;}} print STDERR "\n$$i tests passed\n"'
202 @echo 'test a^b%c implementations'
206 @echo 'test elliptic curves'
210 @echo "The following command should have some OK's and some failures"
211 @echo "There are definitly a few expired certificates"
212 ../apps/openssl verify -CApath ../certs ../certs/*.pem
215 @echo "Generate a set of DH parameters"
219 @echo "Generate a set of DSA parameters"
224 @echo "Generate and verify a certificate request"
227 test_ss keyU.ss certU.ss certCA.ss: testss
228 @echo "Generate and certify a test certificate"
232 @echo "Manipulate the ENGINE structures"
235 test_ssl: keyU.ss certU.ss certCA.ss
236 @echo "test SSL protocol"
237 @sh ./testssl keyU.ss certU.ss certCA.ss
240 @if ../apps/openssl no-rsa; then \
241 echo "skipping CA.sh test -- requires RSA"; \
243 echo "Generate and certify a test certificate via the 'ca' program"; \
248 @echo "test Rijndael"
252 lint -DLINT $(INCLUDES) $(SRC)>fluff
255 $(MAKEDEPEND) $(INCLUDES) $(DEPFLAG) $(PROGS) $(SRC)
258 $(PERL) -pe 'if (/^# DO NOT DELETE THIS LINE/) {print; exit(0);}' $(MAKEFILE) >Makefile.new
259 mv -f Makefile.new $(MAKEFILE)
262 rm -f .rnd tmp.bntest *.o *.obj lib tags core .pure .nfs* *.old *.bak fluff $(EXE) *.ss *.srl log
268 (cd ../crypto; $(MAKE))
270 $(RSATEST): $(RSATEST).o $(DLIBCRYPTO)
271 $(CC) -o $(RSATEST) $(CFLAGS) $(RSATEST).o $(PEX_LIBS) $(LIBCRYPTO) $(EX_LIBS)
273 $(BNTEST): $(BNTEST).o $(DLIBCRYPTO)
274 $(CC) -o $(BNTEST) $(CFLAGS) $(BNTEST).o $(PEX_LIBS) $(LIBCRYPTO) $(EX_LIBS)
276 $(ECTEST): $(ECTEST).o $(DLIBCRYPTO)
277 $(CC) -o $(ECTEST) $(CFLAGS) $(ECTEST).o $(PEX_LIBS) $(LIBCRYPTO) $(EX_LIBS)
279 $(EXPTEST): $(EXPTEST).o $(DLIBCRYPTO)
280 $(CC) -o $(EXPTEST) $(CFLAGS) $(EXPTEST).o $(PEX_LIBS) $(LIBCRYPTO) $(EX_LIBS)
282 $(IDEATEST): $(IDEATEST).o $(DLIBCRYPTO)
283 $(CC) -o $(IDEATEST) $(CFLAGS) $(IDEATEST).o $(PEX_LIBS) $(LIBCRYPTO) $(EX_LIBS)
285 $(MD2TEST): $(MD2TEST).o $(DLIBCRYPTO)
286 $(CC) -o $(MD2TEST) $(CFLAGS) $(MD2TEST).o $(PEX_LIBS) $(LIBCRYPTO) $(EX_LIBS)
288 $(SHATEST): $(SHATEST).o $(DLIBCRYPTO)
289 $(CC) -o $(SHATEST) $(CFLAGS) $(SHATEST).o $(PEX_LIBS) $(LIBCRYPTO) $(EX_LIBS)
291 $(SHA1TEST): $(SHA1TEST).o $(DLIBCRYPTO)
292 $(CC) -o $(SHA1TEST) $(CFLAGS) $(SHA1TEST).o $(PEX_LIBS) $(LIBCRYPTO) $(EX_LIBS)
294 $(RMDTEST): $(RMDTEST).o $(DLIBCRYPTO)
295 $(CC) -o $(RMDTEST) $(CFLAGS) $(RMDTEST).o $(PEX_LIBS) $(LIBCRYPTO) $(EX_LIBS)
297 $(MDC2TEST): $(MDC2TEST).o $(DLIBCRYPTO)
298 $(CC) -o $(MDC2TEST) $(CFLAGS) $(MDC2TEST).o $(PEX_LIBS) $(LIBCRYPTO) $(EX_LIBS)
300 $(MD4TEST): $(MD4TEST).o $(DLIBCRYPTO)
301 $(CC) -o $(MD4TEST) $(CFLAGS) $(MD4TEST).o $(PEX_LIBS) $(LIBCRYPTO) $(EX_LIBS)
303 $(MD5TEST): $(MD5TEST).o $(DLIBCRYPTO)
304 $(CC) -o $(MD5TEST) $(CFLAGS) $(MD5TEST).o $(PEX_LIBS) $(LIBCRYPTO) $(EX_LIBS)
306 $(HMACTEST): $(HMACTEST).o $(DLIBCRYPTO)
307 $(CC) -o $(HMACTEST) $(CFLAGS) $(HMACTEST).o $(PEX_LIBS) $(LIBCRYPTO) $(EX_LIBS)
309 $(RC2TEST): $(RC2TEST).o $(DLIBCRYPTO)
310 $(CC) -o $(RC2TEST) $(CFLAGS) $(RC2TEST).o $(PEX_LIBS) $(LIBCRYPTO) $(EX_LIBS)
312 $(BFTEST): $(BFTEST).o $(DLIBCRYPTO)
313 $(CC) -o $(BFTEST) $(CFLAGS) $(BFTEST).o $(PEX_LIBS) $(LIBCRYPTO) $(EX_LIBS)
315 $(CASTTEST): $(CASTTEST).o $(DLIBCRYPTO)
316 $(CC) -o $(CASTTEST) $(CFLAGS) $(CASTTEST).o $(PEX_LIBS) $(LIBCRYPTO) $(EX_LIBS)
318 $(RC4TEST): $(RC4TEST).o $(DLIBCRYPTO)
319 $(CC) -o $(RC4TEST) $(CFLAGS) $(RC4TEST).o $(PEX_LIBS) $(LIBCRYPTO) $(EX_LIBS)
321 $(RC5TEST): $(RC5TEST).o $(DLIBCRYPTO)
322 $(CC) -o $(RC5TEST) $(CFLAGS) $(RC5TEST).o $(PEX_LIBS) $(LIBCRYPTO) $(EX_LIBS)
324 $(DESTEST): $(DESTEST).o $(DLIBCRYPTO)
325 $(CC) -o $(DESTEST) $(CFLAGS) $(DESTEST).o $(PEX_LIBS) $(LIBCRYPTO) $(EX_LIBS)
327 $(RANDTEST): $(RANDTEST).o $(DLIBCRYPTO)
328 $(CC) -o $(RANDTEST) $(CFLAGS) $(RANDTEST).o $(PEX_LIBS) $(LIBCRYPTO) $(EX_LIBS)
330 $(DHTEST): $(DHTEST).o $(DLIBCRYPTO)
331 $(CC) -o $(DHTEST) $(CFLAGS) $(DHTEST).o $(PEX_LIBS) $(LIBCRYPTO) $(EX_LIBS)
333 $(DSATEST): $(DSATEST).o $(DLIBCRYPTO)
334 $(CC) -o $(DSATEST) $(CFLAGS) $(DSATEST).o $(PEX_LIBS) $(LIBCRYPTO) $(EX_LIBS)
336 $(METHTEST): $(METHTEST).o $(DLIBCRYPTO)
337 $(CC) -o $(METHTEST) $(CFLAGS) $(METHTEST).o $(PEX_LIBS) $(LIBCRYPTO) $(EX_LIBS)
339 $(SSLTEST): $(SSLTEST).o $(DLIBSSL) $(DLIBCRYPTO)
340 $(CC) -o $(SSLTEST) $(CFLAGS) $(SSLTEST).o $(PEX_LIBS) $(LIBSSL) $(LIBKRB5) $(LIBCRYPTO) $(EX_LIBS)
342 $(ENGINETEST): $(ENGINETEST).o $(DLIBCRYPTO)
343 $(CC) -o $(ENGINETEST) $(CFLAGS) $(ENGINETEST).o $(PEX_LIBS) $(LIBCRYPTO) $(EX_LIBS)
345 #$(RDTEST).o: $(RDTEST).c
346 # $(CC) -c $(CFLAGS) -DINTERMEDIATE_VALUE_KAT -DTRACE_KAT_MCT $(RDTEST).c
348 #$(RDTEST): $(RDTEST).o $(DLIBCRYPTO)
349 # $(CC) -o $(RDTEST) $(CFLAGS) $(RDTEST).o $(PEX_LIBS) $(LIBCRYPTO) $(EX_LIBS)
351 # DO NOT DELETE THIS LINE -- make depend depends on it.
353 bftest.o: ../include/openssl/blowfish.h ../include/openssl/e_os2.h
354 bftest.o: ../include/openssl/opensslconf.h bftest.c
355 bntest.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
356 bntest.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
357 bntest.o: ../include/openssl/buffer.h ../include/openssl/cast.h
358 bntest.o: ../include/openssl/crypto.h ../include/openssl/des.h
359 bntest.o: ../include/openssl/dh.h ../include/openssl/dsa.h
360 bntest.o: ../include/openssl/e_os2.h ../include/openssl/err.h
361 bntest.o: ../include/openssl/evp.h ../include/openssl/idea.h
362 bntest.o: ../include/openssl/lhash.h ../include/openssl/md2.h
363 bntest.o: ../include/openssl/md4.h ../include/openssl/md5.h
364 bntest.o: ../include/openssl/mdc2.h ../include/openssl/obj_mac.h
365 bntest.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h
366 bntest.o: ../include/openssl/opensslv.h ../include/openssl/pkcs7.h
367 bntest.o: ../include/openssl/rand.h ../include/openssl/rc2.h
368 bntest.o: ../include/openssl/rc4.h ../include/openssl/rc5.h
369 bntest.o: ../include/openssl/rd_fst.h ../include/openssl/rijndael.h
370 bntest.o: ../include/openssl/ripemd.h ../include/openssl/rsa.h
371 bntest.o: ../include/openssl/safestack.h ../include/openssl/sha.h
372 bntest.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
373 bntest.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h bntest.c
374 casttest.o: ../include/openssl/cast.h casttest.c
375 destest.o: ../include/openssl/des.h ../include/openssl/e_os2.h
376 destest.o: ../include/openssl/opensslconf.h destest.c
377 dhtest.o: ../include/openssl/bio.h ../include/openssl/bn.h
378 dhtest.o: ../include/openssl/crypto.h ../include/openssl/dh.h
379 dhtest.o: ../include/openssl/e_os2.h ../include/openssl/opensslconf.h
380 dhtest.o: ../include/openssl/opensslv.h ../include/openssl/rand.h
381 dhtest.o: ../include/openssl/safestack.h ../include/openssl/stack.h
382 dhtest.o: ../include/openssl/symhacks.h dhtest.c
383 dsatest.o: ../include/openssl/bio.h ../include/openssl/bn.h
384 dsatest.o: ../include/openssl/crypto.h ../include/openssl/dh.h
385 dsatest.o: ../include/openssl/dsa.h ../include/openssl/e_os2.h
386 dsatest.o: ../include/openssl/err.h ../include/openssl/lhash.h
387 dsatest.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
388 dsatest.o: ../include/openssl/rand.h ../include/openssl/safestack.h
389 dsatest.o: ../include/openssl/stack.h ../include/openssl/symhacks.h dsatest.c
390 ectest.o: ../include/openssl/bio.h ../include/openssl/bn.h
391 ectest.o: ../include/openssl/crypto.h ../include/openssl/e_os2.h
392 ectest.o: ../include/openssl/ec.h ../include/openssl/err.h
393 ectest.o: ../include/openssl/lhash.h ../include/openssl/opensslconf.h
394 ectest.o: ../include/openssl/opensslv.h ../include/openssl/safestack.h
395 ectest.o: ../include/openssl/stack.h ../include/openssl/symhacks.h ectest.c
396 enginetest.o: ../include/openssl/asn1.h ../include/openssl/bio.h
397 enginetest.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
398 enginetest.o: ../include/openssl/cast.h ../include/openssl/crypto.h
399 enginetest.o: ../include/openssl/des.h ../include/openssl/dh.h
400 enginetest.o: ../include/openssl/dsa.h ../include/openssl/e_os2.h
401 enginetest.o: ../include/openssl/engine.h ../include/openssl/err.h
402 enginetest.o: ../include/openssl/evp.h ../include/openssl/idea.h
403 enginetest.o: ../include/openssl/lhash.h ../include/openssl/md2.h
404 enginetest.o: ../include/openssl/md4.h ../include/openssl/md5.h
405 enginetest.o: ../include/openssl/mdc2.h ../include/openssl/obj_mac.h
406 enginetest.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h
407 enginetest.o: ../include/openssl/opensslv.h ../include/openssl/rand.h
408 enginetest.o: ../include/openssl/rc2.h ../include/openssl/rc4.h
409 enginetest.o: ../include/openssl/rc5.h ../include/openssl/rd_fst.h
410 enginetest.o: ../include/openssl/rijndael.h ../include/openssl/ripemd.h
411 enginetest.o: ../include/openssl/rsa.h ../include/openssl/safestack.h
412 enginetest.o: ../include/openssl/sha.h ../include/openssl/stack.h
413 enginetest.o: ../include/openssl/symhacks.h enginetest.c
414 exptest.o: ../include/openssl/bio.h ../include/openssl/bn.h
415 exptest.o: ../include/openssl/crypto.h ../include/openssl/e_os2.h
416 exptest.o: ../include/openssl/err.h ../include/openssl/lhash.h
417 exptest.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
418 exptest.o: ../include/openssl/rand.h ../include/openssl/safestack.h
419 exptest.o: ../include/openssl/stack.h ../include/openssl/symhacks.h exptest.c
420 hmactest.o: ../include/openssl/asn1.h ../include/openssl/bio.h
421 hmactest.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
422 hmactest.o: ../include/openssl/cast.h ../include/openssl/crypto.h
423 hmactest.o: ../include/openssl/des.h ../include/openssl/dh.h
424 hmactest.o: ../include/openssl/dsa.h ../include/openssl/e_os2.h
425 hmactest.o: ../include/openssl/evp.h ../include/openssl/hmac.h
426 hmactest.o: ../include/openssl/idea.h ../include/openssl/md2.h
427 hmactest.o: ../include/openssl/md4.h ../include/openssl/md5.h
428 hmactest.o: ../include/openssl/mdc2.h ../include/openssl/obj_mac.h
429 hmactest.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h
430 hmactest.o: ../include/openssl/opensslv.h ../include/openssl/rc2.h
431 hmactest.o: ../include/openssl/rc4.h ../include/openssl/rc5.h
432 hmactest.o: ../include/openssl/rd_fst.h ../include/openssl/rijndael.h
433 hmactest.o: ../include/openssl/ripemd.h ../include/openssl/rsa.h
434 hmactest.o: ../include/openssl/safestack.h ../include/openssl/sha.h
435 hmactest.o: ../include/openssl/stack.h ../include/openssl/symhacks.h hmactest.c
436 ideatest.o: ../include/openssl/idea.h ../include/openssl/opensslconf.h
437 ideatest.o: ideatest.c
438 md2test.o: ../include/openssl/md2.h ../include/openssl/opensslconf.h md2test.c
439 md4test.o: ../include/openssl/e_os2.h ../include/openssl/md4.h
440 md4test.o: ../include/openssl/opensslconf.h md4test.c
441 md5test.o: ../include/openssl/md5.h md5test.c
442 mdc2test.o: ../include/openssl/des.h ../include/openssl/e_os2.h
443 mdc2test.o: ../include/openssl/mdc2.h ../include/openssl/opensslconf.h
444 mdc2test.o: mdc2test.c
445 randtest.o: ../include/openssl/e_os2.h ../include/openssl/opensslconf.h
446 randtest.o: ../include/openssl/rand.h randtest.c
447 rc2test.o: ../include/openssl/opensslconf.h ../include/openssl/rc2.h rc2test.c
448 rc4test.o: ../include/openssl/opensslconf.h ../include/openssl/rc4.h rc4test.c
449 rc5test.o: ../include/openssl/rc5.h rc5test.c
450 rmdtest.o: ../include/openssl/e_os2.h ../include/openssl/opensslconf.h
451 rmdtest.o: ../include/openssl/ripemd.h rmdtest.c
452 rsa_test.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
453 rsa_test.o: ../include/openssl/bn.h ../include/openssl/crypto.h
454 rsa_test.o: ../include/openssl/e_os2.h ../include/openssl/err.h
455 rsa_test.o: ../include/openssl/lhash.h ../include/openssl/opensslconf.h
456 rsa_test.o: ../include/openssl/opensslv.h ../include/openssl/rand.h
457 rsa_test.o: ../include/openssl/rsa.h ../include/openssl/safestack.h
458 rsa_test.o: ../include/openssl/stack.h ../include/openssl/symhacks.h rsa_test.c
459 sha1test.o: ../include/openssl/e_os2.h ../include/openssl/opensslconf.h
460 sha1test.o: ../include/openssl/sha.h sha1test.c
461 shatest.o: ../include/openssl/e_os2.h ../include/openssl/opensslconf.h
462 shatest.o: ../include/openssl/sha.h shatest.c
463 ssltest.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
464 ssltest.o: ../include/openssl/blowfish.h ../include/openssl/bn.h
465 ssltest.o: ../include/openssl/buffer.h ../include/openssl/cast.h
466 ssltest.o: ../include/openssl/comp.h ../include/openssl/crypto.h
467 ssltest.o: ../include/openssl/des.h ../include/openssl/dh.h
468 ssltest.o: ../include/openssl/dsa.h ../include/openssl/e_os2.h
469 ssltest.o: ../include/openssl/err.h ../include/openssl/evp.h
470 ssltest.o: ../include/openssl/idea.h ../include/openssl/lhash.h
471 ssltest.o: ../include/openssl/md2.h ../include/openssl/md4.h
472 ssltest.o: ../include/openssl/md5.h ../include/openssl/mdc2.h
473 ssltest.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h
474 ssltest.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
475 ssltest.o: ../include/openssl/pem.h ../include/openssl/pem2.h
476 ssltest.o: ../include/openssl/pkcs7.h ../include/openssl/rand.h
477 ssltest.o: ../include/openssl/rc2.h ../include/openssl/rc4.h
478 ssltest.o: ../include/openssl/rc5.h ../include/openssl/rd_fst.h
479 ssltest.o: ../include/openssl/rijndael.h ../include/openssl/ripemd.h
480 ssltest.o: ../include/openssl/rsa.h ../include/openssl/safestack.h
481 ssltest.o: ../include/openssl/sha.h ../include/openssl/ssl.h
482 ssltest.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h
483 ssltest.o: ../include/openssl/ssl3.h ../include/openssl/stack.h
484 ssltest.o: ../include/openssl/symhacks.h ../include/openssl/tls1.h
485 ssltest.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h ssltest.c