GSoc2010 project suggestion: replacement software crypto provider

Thor Lancelot Simon <[email protected]> Tue, 23 Feb 2010 23:23:09 -0500
Newsgroups gmane.os.netbsd.devel.crypto,gmane.os.netbsd.current
Message-ID <[email protected]>
I think it's possible to combine the project Hubert suggeted with one I
suggested on the Wiki, in a way which might yield some benefit to almost
all users of opencrypto.  Here is that attempt:

	NetBSD uses the opencrypto(9) framework, derived from OpenBSD and
	FreeBSD, to provide cryptographic services for the kernel.  The
	framework uses hardware accelleration where possible and software
	elsewise.  Software cryptography is provided by a module variously
	known as "cryptosoft" or "swcrypto".  This module is difficult to
	maintain and has various performance issues.  It should be replaced
	in a way which increases functionality, does not harm performance,
	and increases maintainability.

	The replacement module should use standard implementations of
	a reasonable (not exhaustive) set of popular cipher and hash/MAC
	algorithms, drawn from another suitably licensed library such as
	OpenSSL or LibTomCrypt.  It should provide modular-arithmetic and
	asymmetric-cryptography operations (opencrypto "key operations")
	drawn from the same library.  It should use the source library's
	optimizations (assembler implementations, optimized cbc/counter
	modes, etc) wherever possible.

	The asymmetric operations should be implemented, if possible,
	such that the standard API of the source library (particularly
	the functions for RSA sign and verify operations) is also
	directly available in the kernel.

	A reasonable initial set of algorithms and modes would be:

		AES128 in CBC mode
		AES128 in CTR mode
		SHA1
		SHA2 (256, 384, and 512 bit sizes)
		HMAC-SHAn (plain and 96-bit-truncated)
		CRK_MOD_EXP
		CRK_MOD_EXP_CRT
		DEFLATE
		GZIP
		
	The replacement module should be able to operate in either a
	synchronous (process request in the context in which it was
	submitted) or asynchronous, multithreaded (enqueue requests for
	later processing and return; dequeue in a processing thread
	and return results as the hardware drivers do) mode, as selected
	by the user at runtime.  Ideally, it should determine the overhead
	of the asynchronous mode for various operation sizes at startup
	time, and, by default, dispatch asynchronously only those requests
	which might actually complete fater.

Thor