Commit graph

2448 commits

Author SHA1 Message Date
Alex Shinn
732df3a136 Trying to load libraries for scribble doc examples. 2015-04-20 00:11:44 +09:00
Alex Shinn
4e75fbab49 Adding snow tests for advanced package defaults from config.
Adding test-library option to automatically infer tests from libraries.
Processing scribble docs even when we can't load the module.
2015-04-20 00:09:02 +09:00
ilammy
a6ca2e39dc chibi.crypto: move sexp_uintN_t typedefs to <sexp.h>
First we check for C99 support in Makefile.detect, looking for the
header we need and verifying whether it is the right one by using
a definition required by C99 standard to be present in that header.

uintN_t types are optional, but implementations are required to
provide corresponding limit #defines for the types they support,
so we can check for this with preprocessor only.

Finally, we define SEXP_UINTN_DEFINED for any sexp_uintN_t we have
so that the code can use #ifs to check for exact integer support.
2015-04-19 16:01:11 +03:00
ilammy
db2b598cde chibi.crypto: code style fixes
- Fixed some typos in sha-native.scm
- Removed unnecessary structs and unions from sha_context
- Used more efficient implementation of hex32
- Made (scheme base) a common import in (chibi crypto sha2)
2015-04-19 16:01:07 +03:00
ilammy
9088b1954c chibi.crypto: make Chibi use native SHA-2 by default
This change concerns only Chibi. The portable implementation is
still kept around because it is... well... portable and can be
used by other Scheme implementations.
2015-04-18 17:31:46 +03:00
ilammy
1f8c0088a7 chibi.crypto: fix formatting bug in portable SHA-2
We can't use 'integer->hex-string' alone to print out SHA-224/256
digest because it rightly converts #x00001234 into "1234", while
we need to keep the padding zero nibbles and get "00001234".

'hex' got renamed into 'hex32' because SHA-512 will need some
different 'hex64' which returns 16-character-long strings.
2015-04-18 17:31:46 +03:00
ilammy
37d808e470 chibi.crypto: more tests for SHA-2
* Boundary cases

  Both SHA-224 and SHA-256 use 512-bit data chunks and have a special
  behavior when chunk size is near the 448-bit boundary.

* Source type support

  Basic smoke tests for accepting bytevectors and binary input ports
  as valid arguments.
2015-04-18 17:31:45 +03:00
ilammy
baff1af72d chibi.crypto: native SHA-2 implementation
The original Scheme implementation is astonishingly slow. Rewriting
SHA-2 in C yields around x10000 speed boost for premade strings and
bytevectors. For input ports this is alleviated to x100 boost.

The implementation is divided into two parts: native computational
backend and thin Scheme interface. It is tedious to properly do IO
from C, so the Scheme code handles reading data from an input port
and the C code performs actual computations on byte buffers (which
is also used to handle strings and bytevectors directly).

Scheme wrapper reads data in chunked manner with 'read-bytevector'.
Currently, the chunk size has insignificant impact on performance
as soon as it is bigger than 64. Also, using simply read-bytevector
turned out to be 33% faster than preallocating a buffer and filling
it with read-bytevector!

One tricky part is how to get exact 32-bit integers in C89. We have
no <inttypes.h> there, so instead we use <limits.h> to see whether
we have a standard type with suitable boundaries.

The other one is how to return a properly tagged sha_context from C.
Chibi FFI currently cannot handle the case when a procedure returns
either a C pointer (which needs to be boxed) or an exception (which
should be left as is). To workaround this sexp_start_sha() receives
a dummy argument of type sha_context; this makes Chibi FFI to put a
proper type tag into 'self', which is then extracted in the C code.

This commits adds a new shared library 'crypto$(SO)' with intent to
keep there all native code of (chibi crypto) libraries. This allows
to simply put any future native implementation of SHA-512 or MD5 in
some md5.c and just include those files into crypto.stub.
2015-04-18 17:31:45 +03:00
ilammy
78a57dfe83 chibi.crypto: documentation for (chibi crypto sha-2)
Clearly state what kind of arguments sha-224 and sha-256 can handle
and what they return as a result.
2015-04-18 17:31:44 +03:00
Alex Shinn
f9c063ebe6 Clean up unused var warning. Fixes issue #256. 2015-04-16 08:37:51 +09:00
Alex Shinn
6d94e9b04c Adding Alexei Lozovsky to AUTHORS. 2015-04-15 17:20:31 +09:00
Alex Shinn
01df2fec44 Merge pull request #251 from ilammy/overflow-fixes
Fixed a couple of integer overflows
2015-04-15 17:14:58 +09:00
Alex Shinn
b6bbc1cae5 Enabling chicken snow installs, and adding to tests.
Smarter handling of requested vs. available impl installs.
2015-04-15 15:19:44 +09:00
Alex Shinn
4267164e92 Interleave reading/writing to subprocess in process-pipe-bytevector,
using u8-ready? to avoid blocking.  Fixes issue #253.
2015-04-15 11:24:56 +09:00
Alex Shinn
aa3f869798 Avoiding potential segfault from trying to capture temporary local variables in a macro.
Fixes issue #252.
2015-04-14 23:22:48 +09:00
Alex Shinn
579fcf95ae Fixing kawa install rules and adding to tests. 2015-04-11 01:21:38 +09:00
Alex Shinn
d1537fec79 Fixing library rewriting and test-depends bug. 2015-04-11 01:01:07 +09:00
Alex Shinn
2af0685012 Adding cross-implementation installation tests. 2015-04-09 11:05:33 +09:00
Alex Shinn
c9a9fc0070 Noting some simple char-set utilities are public domain. 2015-04-09 01:43:17 +09:00
Alex Shinn
ab966b3a85 Adding ray tracer benchmark. 2015-04-09 01:38:53 +09:00
Alex Shinn
66de0af938 Adding -R support to chibi bash completion. 2015-04-09 01:31:36 +09:00
Alex Shinn
e6ae585d1b Adding a gitignore for the temp data dir. 2015-04-09 01:30:06 +09:00
Alex Shinn
4dda923081 Updating copyright years. 2015-04-09 01:28:02 +09:00
Alex Shinn
9998a5619c Adding Marc to AUTHORS. 2015-04-09 01:25:26 +09:00
Alex Shinn
cef5f2facf Clarifying default language. 2015-04-09 01:24:07 +09:00
Alex Shinn
14c8776c40 Updating some completed items. 2015-04-09 01:22:52 +09:00
Alex Shinn
3979e98aa6 Adding initial snow command-line tests. 2015-04-09 01:16:52 +09:00
Alex Shinn
30453bdb32 Fixing snow tests requiring file renaming.
Adding support for test dependencies.
Allowing testing from a local repository.
Adding a snow index command.
Various bugfixes and config improvements.
2015-04-09 01:14:14 +09:00
Alex Shinn
f63ed5497e Ignoring generated files from snow tests. 2015-04-09 01:10:01 +09:00
Alex Shinn
55329e39fb Making uri-resolve work with bare local paths. 2015-04-08 23:04:48 +09:00
Alex Shinn
4e5cdedc03 Converting tests to modules instead of separate programs.
By convention, a library meant for testing exports "run-tests".
Also by convention, assume the test for (foo bar) is (foo bar-test),
keeping the test in the same directory and avoiding confusion since
(chibi test) is not a test for (chibi).
- Avoids the hack of "load"ing test, with resulting namespace complications.
- Allows keeping tests together with the libraries.
- Allows setting up test hooks before running.
- Allows implicit inference of test locations when using above conventions.
2015-04-05 23:38:51 +09:00
Alex Shinn
f4f954fe35 Fixing snow-chibi install source path after removing submodule. 2015-04-05 08:15:07 +09:00
Alex Shinn
71dc6ef42f Flattening submodule. 2015-04-04 23:16:31 +09:00
Alex Shinn
f52a13524c Removing submodule. 2015-04-04 23:14:31 +09:00
Alex Shinn
59a4e56df5 Fixing error messages for unknown options. 2015-04-03 14:11:33 +09:00
Alex Shinn
443dd1bc3f Adding process->output+error+status. 2015-04-03 07:13:33 +09:00
ilammy
8329ee9fd6 Do not lose carry bit in addition edge case
Previous code was losing the carry bit in 'all ones' case, when adata[i]
= bdata[i] = SEXP_UINT_T_MAX, and carry = 1 too. In this case expression
(SEXP_UINT_T_MAX - bdata[i] - carry) overflows and yields an incorrect
value SEXP_UINT_T_MAX which results into carry being incorrectly set to
0 after addition.

We need to avoid the second overflow when calculating the new value of
the carry bit. One way to do this is at first check for the overflow in
(adata[i] + bdata[i]), and then throw in the (previous) carry bit.

I have also given "n" more expressive name and added a comment about
the reason why we need that temporary variable.
2015-03-26 02:30:48 +02:00
ilammy
a1ec8ff493 Avoid overflow when doing sexp_fx_abs()
Naturally, fixed-width integer arithmetics can overflow. Chibi handles
it pretty well in general, but one case was missing: it is negation of
the minimal negative number that can be represented as a fixnum. That is,
sexp_fx_neg() must not be applied to sexp_make_fixnum(SEXP_MIN_FIXNUM)
because it overflows and returns an identical fixnum back.

sexp_fx_neg() itself seems to be used right in the current code, but
sexp_fx_abs()--which is defined in terms of sexp_fx_neg()--could be
applied to the forbidden number when used to retrieve an unboxed value
via the sexp_unbox_fixnum(sexp_fx_abs(x)) pattern. So I have added a
separate macro that safely calculates unboxed absolute value of a fixnum,
and replaced sexp_unbox_fixnum(sexp_fx_abs(x)) usages with it.

Current implementation uses two-bit tag for fixnums, plus we need one
bit for the sign, so fixnums have (machine word - 3) significant bits.
Regression tests cover word sizes of 16, 32, 64, and 128 bits (for the
sake of past- and future-proofness).

sexp_bignum_expt() does not have a regression test because we need to
check it with negative exponents like -2^29, so the base must be over
at least 2^(2^29) for the differences to be visible. Fun fact: bignum
representation of such number takes around 1/32 of the available user-
space memory, which makes testing on anything except 32-bit systems
unreasonable (4 TB of RAM anyone?)
2015-03-26 02:30:48 +02:00
Alex Shinn
3700b86470 Updating submodule. 2015-03-22 23:17:14 +09:00
Alex Shinn
d08ce6e925 regexp-search can terminate early if a match is found and all remaining possible matches start to the right of it 2015-03-22 22:45:36 +09:00
Alex Shinn
87761001aa Adding (time [<name>] <expr>) macro for easy benchmarking. 2015-03-22 22:44:38 +09:00
Alex Shinn
9dcf11056c Updating submodule. 2015-03-22 17:16:58 +09:00
Alex Shinn
11d9e1114e Ignoring generated tarballs. 2015-03-22 17:15:25 +09:00
Alex Shinn
6c08d399e7 changes go to the 0.7.3 release 2015-03-22 17:02:41 +09:00
Alex Shinn
ce7ab08e1e Updating submodule. 2015-03-22 16:17:53 +09:00
Alex Shinn
2576183b48 Updating submodule. 2015-03-22 16:06:08 +09:00
Alex Shinn
f95153f6c1 Adding .gitignore. 2015-03-17 22:50:40 +09:00
Alex Shinn
b22e81afd6 fixing install target for snow-chibi 2015-03-17 22:09:32 +09:00
Alex Shinn
62c0dd1ede removed snow-chibi tool moved to submodule 2015-03-17 22:06:10 +09:00
Alex Shinn
dba883c687 added submodule for removed chibi-snow 2015-03-17 21:53:47 +09:00