]> git.karo-electronics.de Git - linux-beck.git/log
linux-beck.git
15 years agocrypto: sha-s390 - Fix warnings in import function
Jan Glauber [Sat, 5 Sep 2009 06:27:35 +0000 (16:27 +1000)]
crypto: sha-s390 - Fix warnings in import function

That patch should fix the warnings.

Signed-off-by: Jan Glauber <jang@linux.vnet.ibm.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agocrypto: vmac - New hash algorithm for intel_txt support
Shane Wang [Wed, 2 Sep 2009 10:05:22 +0000 (20:05 +1000)]
crypto: vmac - New hash algorithm for intel_txt support

This patch adds VMAC (a fast MAC) support into crypto framework.

Signed-off-by: Shane Wang <shane.wang@intel.com>
Signed-off-by: Joseph Cihula <joseph.cihula@intel.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agocrypto: api - Do not displace newly registered algorithms
Herbert Xu [Mon, 31 Aug 2009 05:56:54 +0000 (15:56 +1000)]
crypto: api - Do not displace newly registered algorithms

We have a mechanism where newly registered algorithms of a higher
priority can displace existing instances that use a different
implementation of the same algorithm with a lower priority.

Unfortunately the same mechanism can cause a newly registered
algorithm to displace itself if it depends on an existing version
of the same algorithm.

This patch fixes this by keeping all algorithms that the newly
reigstered algorithm depends on, thus protecting them from being
removed.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agocrypto: ansi_cprng - Fix module initialization
Steffen Klassert [Sat, 29 Aug 2009 07:36:25 +0000 (17:36 +1000)]
crypto: ansi_cprng - Fix module initialization

Return the value we got from crypto_register_alg() instead of
returning 0 in any case.

Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
Acked-by: Neil Horman <nhorman@tuxdriver.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agocrypto: xcbc - Fix alignment calculation of xcbc_tfm_ctx
Steffen Klassert [Thu, 20 Aug 2009 07:58:04 +0000 (17:58 +1000)]
crypto: xcbc - Fix alignment calculation of xcbc_tfm_ctx

The alignment calculation of xcbc_tfm_ctx uses alg->cra_alignmask
and not alg->cra_alignmask + 1 as it should. This led to frequent
crashes during the selftest of xcbc(aes-asm) on x86_64
machines. This patch fixes this. Also we use the alignmask
of xcbc and not the alignmask of the underlying algorithm
for the alignmnent calculation in xcbc_create now.

Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agocrypto: fips - Depend on ansi_cprng
Neil Horman [Thu, 20 Aug 2009 07:54:16 +0000 (17:54 +1000)]
crypto: fips - Depend on ansi_cprng

What about something like this?  It defaults the CPRNG to m and makes FIPS
dependent on the CPRNG.  That way you get a module build by default, but you can
change it to y manually during config and still satisfy the dependency, and if
you select N it disables FIPS as well.  I rather like that better than making
FIPS a tristate.  I just tested it out here and it seems to work well.  Let me
know what you think

Signed-off-by: Neil Horman <nhorman@tuxdriver.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agocrypto: blkcipher - Do not use eseqiv on stream ciphers
Herbert Xu [Fri, 14 Aug 2009 12:55:35 +0000 (22:55 +1000)]
crypto: blkcipher - Do not use eseqiv on stream ciphers

Recently we switched to using eseqiv on SMP machines in preference
over chainiv.  However, eseqiv does not support stream ciphers so
they should still default to chainiv.

This patch applies the same check as done by eseqiv to weed out
the stream ciphers.  In particular, all algorithms where the IV
size is not equal to the block size will now default to chainiv.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agocrypto: ctr - Use chainiv on raw counter mode
Herbert Xu [Thu, 13 Aug 2009 13:10:39 +0000 (23:10 +1000)]
crypto: ctr - Use chainiv on raw counter mode

Raw counter mode only works with chainiv, which is no longer
the default IV generator on SMP machines.  This broke raw counter
mode as it can no longer instantiate as a givcipher.

This patch fixes it by always picking chainiv on raw counter
mode.  This is based on the diagnosis and a patch by Huang
Ying.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agoRevert crypto: fips - Select CPRNG
Herbert Xu [Thu, 13 Aug 2009 11:33:06 +0000 (21:33 +1000)]
Revert crypto: fips - Select CPRNG

This reverts commit 215ccd6f55a2144bd553e0a3d12e1386f02309fd.

It causes CPRNG and everything selected by it to be built-in
whenever FIPS is enabled.  The problem is that it is selecting
a tristate from a bool, which is usually not what is intended.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agocrypto: rng - Fix typo
Christian Kujau [Thu, 13 Aug 2009 01:53:56 +0000 (11:53 +1000)]
crypto: rng - Fix typo

Correct a typo in crypto/rng.c

Signed-off-by: Christian Kujau <lists@nerdbynature.de>
Acked-by: Neil Horman <nhorman@tuxdriver.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agocrypto: talitos - add support for 36 bit addressing
Kim Phillips [Thu, 13 Aug 2009 01:51:51 +0000 (11:51 +1000)]
crypto: talitos - add support for 36 bit addressing

Enabling extended addressing in the h/w requires we always assign the
extended address component (eptr) of the talitos h/w pointer.  This is
for e500 based platforms with large memories.

Signed-off-by: Kim Phillips <kim.phillips@freescale.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agocrypto: talitos - align locks on cache lines
Kim Phillips [Thu, 13 Aug 2009 01:50:38 +0000 (11:50 +1000)]
crypto: talitos - align locks on cache lines

align channel access locks onto separate cache lines (for performance
reasons).  This is done by placing per-channel variables into their own
private struct, and using the cacheline_aligned attribute within that
struct.

Signed-off-by: Kim Phillips <kim.phillips@freescale.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agocrypto: talitos - simplify hmac data size calculation
Kim Phillips [Thu, 13 Aug 2009 01:49:06 +0000 (11:49 +1000)]
crypto: talitos - simplify hmac data size calculation

don't do request->src vs. assoc pointer math - it's the same as adding
assoclen and ivsize (just with more effort).

Signed-off-by: Kim Phillips <kim.phillips@freescale.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agocrypto: mv_cesa - Add support for Orion5X crypto engine
Sebastian Andrzej Siewior [Mon, 10 Aug 2009 02:50:03 +0000 (12:50 +1000)]
crypto: mv_cesa - Add support for Orion5X crypto engine

This adds support for Marvell's Cryptographic Engines and Security
Accelerator (CESA) which can be found on a few SoC.
Tested with dm-crypt.

Acked-by: Nicolas Pitre <nico@marvell.com>
Signed-off-by: Sebastian Andrzej Siewior <sebastian@breakpoint.cc>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agocrypto: cryptd - Add support to access underlaying shash
Huang Ying [Thu, 6 Aug 2009 05:35:20 +0000 (15:35 +1000)]
crypto: cryptd - Add support to access underlaying shash

cryptd_alloc_ahash() will allocate a cryptd-ed ahash for specified
algorithm name. The new allocated one is guaranteed to be cryptd-ed
ahash, so the shash underlying can be gotten via cryptd_ahash_child().

Signed-off-by: Huang Ying <ying.huang@intel.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agocrypto: gcm - Use GHASH digest algorithm
Huang Ying [Thu, 6 Aug 2009 05:34:26 +0000 (15:34 +1000)]
crypto: gcm - Use GHASH digest algorithm

Remove the dedicated GHASH implementation in GCM, and uses the GHASH
digest algorithm instead. This will make GCM uses hardware accelerated
GHASH implementation automatically if available.

ahash instead of shash interface is used, because some hardware
accelerated GHASH implementation needs asynchronous interface.

Signed-off-by: Huang Ying <ying.huang@intel.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agocrypto: ghash - Add GHASH digest algorithm for GCM
Huang Ying [Thu, 6 Aug 2009 05:32:38 +0000 (15:32 +1000)]
crypto: ghash - Add GHASH digest algorithm for GCM

GHASH is implemented as a shash algorithm. The actual implementation
is copied from gcm.c. This makes it possible to add
architecture/hardware accelerated GHASH implementation.

Signed-off-by: Huang Ying <ying.huang@intel.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agocrypto: authenc - Convert to ahash
Steffen Klassert [Wed, 5 Aug 2009 09:35:34 +0000 (19:35 +1000)]
crypto: authenc - Convert to ahash

This patch converts authenc to the new ahash interface.

Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agocrypto: api - Fix aligned ctx helper
Herbert Xu [Fri, 24 Jul 2009 07:26:15 +0000 (15:26 +0800)]
crypto: api - Fix aligned ctx helper

The aligned ctx helper was using a bogus alignment value thas was
one off the correct value.  Fortunately the current users do not
require anything beyond the natural alignment of the platform so
this hasn't caused a problem.

This patch fixes that and also removes the unnecessary minimum
check since if the alignment is less than the natural alignment
then the subsequent ALIGN operation should be a noop.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agocrypto: hmac - Prehash ipad/opad
Herbert Xu [Fri, 24 Jul 2009 07:18:41 +0000 (15:18 +0800)]
crypto: hmac - Prehash ipad/opad

This patch uses crypto_shash_export/crypto_shash_import to prehash
ipad/opad to speed up hmac.  This is partly based on a similar patch
by Steffen Klassert.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agocrypto: aes - Undefined behaviour in crypto_aes_expand_key
Phil Carmody [Fri, 24 Jul 2009 05:59:17 +0000 (13:59 +0800)]
crypto: aes - Undefined behaviour in crypto_aes_expand_key

It's undefined behaviour in C to write outside the bounds of an array.
The key expansion routine takes a shortcut of creating 8 words at a
time, but this creates 4 additional words which don't fit in the array.

As everyone is hopefully now aware, GCC is at liberty to make any
assumptions and optimisations it likes in situations where it can
detect that UB has occured, up to and including nasal demons, and
as the indices being accessed in the array are trivially calculable,
it's rash to invite gcc to do take any liberties at all.

Signed-off-by: Phil Carmody <ext-phil.2.carmody@nokia.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agocrypto: shash - Test for the algorithms import function before exporting it
Steffen Klassert [Fri, 24 Jul 2009 05:57:13 +0000 (13:57 +0800)]
crypto: shash - Test for the algorithms import function before exporting it

crypto_init_shash_ops_async() tests for setkey and not for import
before exporting the algorithms import function to ahash.
This patch fixes this.

Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agocrypto: ahash - Use GFP_KERNEL on allocation if the request can sleep
Steffen Klassert [Fri, 24 Jul 2009 05:56:31 +0000 (13:56 +0800)]
crypto: ahash - Use GFP_KERNEL on allocation if the request can sleep

ahash_op_unaligned() and ahash_def_finup() allocate memory atomically,
regardless whether the request can sleep or not. This patch changes
this to use GFP_KERNEL if the request can sleep.

Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agocrypto: shash - Require all algorithms to support export/import
Herbert Xu [Wed, 22 Jul 2009 04:37:06 +0000 (12:37 +0800)]
crypto: shash - Require all algorithms to support export/import

This patch provides a default export/import function for all
shash algorithms.  It simply copies the descriptor context as
is done by sha1_generic.

This in essence means that all existing shash algorithms now
support export/import.  This is something that will be depended
upon in implementations such as hmac.  Therefore all new shash
and ahash implementations must support export/import.

For those that cannot obtain a partial result, padlock-sha's
fallback model should be used so that a partial result is always
available.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agocrypto: sha512-s390 - Add export/import support
Herbert Xu [Wed, 22 Jul 2009 04:29:41 +0000 (12:29 +0800)]
crypto: sha512-s390 - Add export/import support

This patch adds export/import support to sha512-s390 (which includes
sha384-s390).  The exported type is defined by struct sha512_state,
which is basically the entire descriptor state of sha512_generic.

Since sha512-s390 only supports a 64-bit byte count the import
function will reject anything that exceeds that.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agocrypto: sha512_generic - Use 64-bit counters
Herbert Xu [Wed, 22 Jul 2009 04:22:43 +0000 (12:22 +0800)]
crypto: sha512_generic - Use 64-bit counters

This patch replaces the 32-bit counters in sha512_generic with
64-bit counters.  It also switches the bit count to the simpler
byte count.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agocrypto: sha512 - Export struct sha512_state
Herbert Xu [Wed, 22 Jul 2009 03:48:18 +0000 (11:48 +0800)]
crypto: sha512 - Export struct sha512_state

This patch renames struct sha512_ctx and exports it as struct
sha512_state so that other sha512 implementations can use it
as the reference structure for exporting their state.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agocrypto: xcbc - Fix shash conversion
Herbert Xu [Wed, 22 Jul 2009 06:37:15 +0000 (14:37 +0800)]
crypto: xcbc - Fix shash conversion

Although xcbc was converted to shash, it didn't obey the new
requirement that all hash state must be stored in the descriptor
rather than the transform.

This patch fixes this issue and also optimises away the rekeying
by precomputing K2 and K3 within setkey.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agocrypto: xcbc - Use crypto_xor
Herbert Xu [Wed, 22 Jul 2009 05:04:37 +0000 (13:04 +0800)]
crypto: xcbc - Use crypto_xor

This patch replaces the local xor function with the generic
crypto_xor function.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agocrypto: cryptd - Add finup/export/import for hash
Herbert Xu [Wed, 22 Jul 2009 03:10:22 +0000 (11:10 +0800)]
crypto: cryptd - Add finup/export/import for hash

This patch adds the finup/export/import functions to the cryptd
ahash implementation.  We simply invoke the underlying shash
operations.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agocrypto: s390 - Fix sha build failure
Sachin Sant [Thu, 16 Jul 2009 11:58:42 +0000 (19:58 +0800)]
crypto: s390 - Fix sha build failure

Use struct s390_sha_ctx instead of sha1/sha256_state struct to fix
s390 crypto build break.

Signed-off-by: Sachin Sant <sachinp@in.ibm.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agocrypto: padlock - Fix hashing of partial blocks
Herbert Xu [Thu, 16 Jul 2009 02:33:27 +0000 (10:33 +0800)]
crypto: padlock - Fix hashing of partial blocks

When we encounter partial blocks in finup, we'll invoke the xsha
instruction with a bogus count that is not a multiple of the block
size.  This patch fixes it.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agocrypto: shash - Fix async finup handling of null digest
Herbert Xu [Wed, 15 Jul 2009 13:26:41 +0000 (21:26 +0800)]
crypto: shash - Fix async finup handling of null digest

When shash_ahash_finup encounters a null request, we end up not
calling the underlying final function.  This patch fixes that.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agocrypto: shash - Fix digest size offset
Herbert Xu [Wed, 15 Jul 2009 13:16:05 +0000 (21:16 +0800)]
crypto: shash - Fix digest size offset

When an shash algorithm is exported as ahash, ahash will access
its digest size through hash_alg_common.  That's why the shash
layout needs to match hash_alg_common.  This wasn't the case
because the alignment weren't identical.

This patch fixes the problem.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agocrypto: ahash - Fix setkey crash
Herbert Xu [Wed, 15 Jul 2009 12:39:05 +0000 (20:39 +0800)]
crypto: ahash - Fix setkey crash

When the alignment check was made unconditional for ahash we
may end up crashing on shash algorithms because we're always
calling alg->setkey instead of tfm->setkey.

This patch fixes it.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agocrypto: padlock - Fix compile error on i386
Herbert Xu [Wed, 15 Jul 2009 10:37:48 +0000 (18:37 +0800)]
crypto: padlock - Fix compile error on i386

The previous change to allow hashing from states other than the
initial broke compilation on i386 because the inline assembly
tried to squeeze a u64 into a 32-bit register.  As we've already
checked for 32-bit overflows we can simply truncate it to u32,
or unsigned long so that we don't truncate at all on x86-64.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agocrypto: xcbc - Fix incorrect error value when creating instance
Herbert Xu [Wed, 15 Jul 2009 08:53:33 +0000 (16:53 +0800)]
crypto: xcbc - Fix incorrect error value when creating instance

If shash_alloc_instance() fails, we return the wrong error value.
This patch fixes it.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agocrypto: hmac - Fix incorrect error value when creating instance
Herbert Xu [Wed, 15 Jul 2009 08:52:55 +0000 (16:52 +0800)]
crypto: hmac - Fix incorrect error value when creating instance

If shash_alloc_instance() fails, we return the wrong error value.
This patch fixes it.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agocrypto: cryptd - Fix uninitialized return value
Steffen Klassert [Wed, 15 Jul 2009 08:51:04 +0000 (16:51 +0800)]
crypto: cryptd - Fix uninitialized return value

If cryptd_alloc_instance() fails, the return value is uninitialized.
This patch fixes this by setting the return value.

Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agocrypto: crypto4xx - Disable SHA implementation
Herbert Xu [Wed, 15 Jul 2009 07:11:08 +0000 (15:11 +0800)]
crypto: crypto4xx - Disable SHA implementation

The crypto4xx SHA implementation keeps the hash state in the tfm
data structure.  This breaks a fundamental requirement of ahash
implementations that they must be reentrant.

This patch disables the broken implementation.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agocrypto: ahash - Add unaligned handling and default operations
Herbert Xu [Wed, 15 Jul 2009 04:40:40 +0000 (12:40 +0800)]
crypto: ahash - Add unaligned handling and default operations

This patch exports the finup operation where available and adds
a default finup operation for ahash.  The operations final, finup
and digest also will now deal with unaligned result pointers by
copying it.  Finally export/import operations are will now be
exported too.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agocrypto: ahash - Use GFP_KERNEL in unaligned setkey
Herbert Xu [Tue, 14 Jul 2009 13:48:35 +0000 (21:48 +0800)]
crypto: ahash - Use GFP_KERNEL in unaligned setkey

We currently use GFP_ATOMIC in the unaligned setkey function
to allocate the temporary aligned buffer.  Since setkey must
be called in a sleepable context, we can use GFP_KERNEL instead.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agocrypto: shash - Fix alignment in unaligned operations
Herbert Xu [Tue, 14 Jul 2009 13:43:56 +0000 (21:43 +0800)]
crypto: shash - Fix alignment in unaligned operations

When we encounter an unaligned pointer we are supposed to copy
it to a temporary aligned location.  However the temporary buffer
isn't aligned properly.  This patch fixes that.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agocrypto: hash - Zap unaligned buffers
Herbert Xu [Tue, 14 Jul 2009 13:35:36 +0000 (21:35 +0800)]
crypto: hash - Zap unaligned buffers

Some unaligned buffers on the stack weren't zapped properly which
may cause secret data to be leaked.  This patch fixes them by doing
a zero memset.

It is also possible for us to place random kernel stack contents
in the digest buffer if a digest operation fails.  This is fixed
by only copying if the operation succeeded.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agocrypto: ahash - Remove old_ahash_alg
Herbert Xu [Tue, 14 Jul 2009 12:29:57 +0000 (20:29 +0800)]
crypto: ahash - Remove old_ahash_alg

Now that all ahash implementations have been converted to the new
ahash type, we can remove old_ahash_alg and its associated support.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agocrypto: crypto4xx - Switch to new style ahash
Herbert Xu [Tue, 14 Jul 2009 12:21:46 +0000 (20:21 +0800)]
crypto: crypto4xx - Switch to new style ahash

This patch changes crypto4xx to use the new style ahash type.
In particular, we now use ahash_alg to define ahash algorithms
instead of crypto_alg.

This is achieved by introducing a union that encapsulates the
new type and the existing crypto_alg structure.  They're told
apart through a u32 field containing the type value.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agocrypto: cryptd - Switch to new style ahash
Herbert Xu [Tue, 14 Jul 2009 11:11:32 +0000 (19:11 +0800)]
crypto: cryptd - Switch to new style ahash

This patch changes cryptd to use the new style ahash type.  In
particular, the instance is enlarged to encapsulate the new
ahash_alg structure.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agocrypto: cryptd - Switch to template create API
Herbert Xu [Tue, 14 Jul 2009 10:45:45 +0000 (18:45 +0800)]
crypto: cryptd - Switch to template create API

This patch changes cryptd to use the template->create function
instead of alloc in anticipation for the switch to new style
ahash algorithms.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agocrypto: hash - Add helpers to free spawns
Herbert Xu [Tue, 14 Jul 2009 10:30:24 +0000 (18:30 +0800)]
crypto: hash - Add helpers to free spawns

This patch adds the helpers crypto_drop_ahash and crypto_drop_shash
so that these spawns can be dropped without ugly casts.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agocrypto: tcrypt - Add mask parameter
Herbert Xu [Tue, 14 Jul 2009 08:06:54 +0000 (16:06 +0800)]
crypto: tcrypt - Add mask parameter

This patch adds a mask parameter to complement the existing type
parameter.  This is useful when instantiating algorithms that
require a mask other than the default, e.g., ahash algorithms.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agocrypto: ahash - Add instance/spawn support
Herbert Xu [Tue, 14 Jul 2009 06:06:06 +0000 (14:06 +0800)]
crypto: ahash - Add instance/spawn support

This patch adds support for creating ahash instances and using
ahash as spawns.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agocrypto: ahash - Convert to new style algorithms
Herbert Xu [Tue, 14 Jul 2009 04:28:26 +0000 (12:28 +0800)]
crypto: ahash - Convert to new style algorithms

This patch converts crypto_ahash to the new style.  The old ahash
algorithm type is retained until the existing ahash implementations
are also converted.  All ahash users will automatically get the
new crypto_ahash type.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agocrypto: api - Remove frontend argument from extsize/init_tfm
Herbert Xu [Mon, 13 Jul 2009 12:46:25 +0000 (20:46 +0800)]
crypto: api - Remove frontend argument from extsize/init_tfm

As the extsize and init_tfm functions belong to the frontend the
frontend argument is superfluous.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agocrypto: crypto4xx - Use crypto_ahash_set_reqsize
Herbert Xu [Sun, 12 Jul 2009 15:08:28 +0000 (23:08 +0800)]
crypto: crypto4xx - Use crypto_ahash_set_reqsize

This patch makes crypto4xx use crypto_ahash_set_reqsize to avoid
accessing crypto_ahash directly.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agocrypto: cryptd - Use crypto_ahash_set_reqsize
Herbert Xu [Sun, 12 Jul 2009 15:06:33 +0000 (23:06 +0800)]
crypto: cryptd - Use crypto_ahash_set_reqsize

This patch makes cryptd use crypto_ahash_set_reqsize to avoid
accessing crypto_ahash directly.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agocrypto: ahash - Add crypto_ahash_set_reqsize
Herbert Xu [Sun, 12 Jul 2009 15:05:48 +0000 (23:05 +0800)]
crypto: ahash - Add crypto_ahash_set_reqsize

This patch adds the helper crypto_ahash_set_reqsize so that
implementations do not directly access the crypto_ahash structure.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agocrypto: cryptd - Use shash algorithms
Herbert Xu [Sun, 12 Jul 2009 13:38:59 +0000 (21:38 +0800)]
crypto: cryptd - Use shash algorithms

This patch changes cryptd to use shash algorithms instead of the
legacy hash interface.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agocrypto: shash - Export async functions
Herbert Xu [Sun, 12 Jul 2009 13:25:20 +0000 (21:25 +0800)]
crypto: shash - Export async functions

This patch exports the async functions so that they can be reused
by cryptd when it switches over to using shash.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agocrypto: hash - Remove legacy hash/digest implementaion
Herbert Xu [Sun, 12 Jul 2009 05:58:04 +0000 (13:58 +0800)]
crypto: hash - Remove legacy hash/digest implementaion

This patch removes the implementation of hash and digest now that
no algorithms use them anymore.  The interface though will remain
until the users are converted across.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agocrypto: authenc - Remove reference to crypto_hash
Herbert Xu [Sun, 12 Jul 2009 04:50:11 +0000 (12:50 +0800)]
crypto: authenc - Remove reference to crypto_hash

Now that there are no more legacy hash implementations we can
remove the reference to crypto_hash.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agocrypto: xcbc - Switch to shash
Herbert Xu [Sun, 12 Jul 2009 04:48:32 +0000 (12:48 +0800)]
crypto: xcbc - Switch to shash

This patch converts the xcbc algorithm to the new shash type.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agocrypto: hmac - Switch to shash
Herbert Xu [Thu, 9 Jul 2009 04:43:37 +0000 (12:43 +0800)]
crypto: hmac - Switch to shash

This patch changes hmac to the new shash interface.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agocrypto: padlock - Switch sha to shash
Herbert Xu [Sat, 11 Jul 2009 10:16:16 +0000 (18:16 +0800)]
crypto: padlock - Switch sha to shash

This patch converts the padlock-sha implementation to shash.
In doing so the existing mechanism of storing the data until
final is no longer viable as we do not have a way of allocating
data in crypto_shash_init and then reliably freeing it.

This is just as well because a better way of handling the problem
is to hash everything but the last chunk using normal sha code
and then provide the intermediate result to the padlock device.

This is good enough because the primary application of padlock-sha
is IPsec and there the data is laid out in the form of an hmac
header followed by the rest of the packet.  In essence we can
provide all the data to the padlock as the hmac header only needs
to be hashed once.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agocrypto: shash - Make descsize a run-time attribute
Herbert Xu [Tue, 14 Jul 2009 04:50:12 +0000 (12:50 +0800)]
crypto: shash - Make descsize a run-time attribute

This patch changes descsize to a run-time attribute so that
implementations can change it in their init functions.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agocrypto: async - Use kzfree for requests
Herbert Xu [Sat, 11 Jul 2009 14:22:14 +0000 (22:22 +0800)]
crypto: async - Use kzfree for requests

This patch changes the kfree call to kzfree for async requests.
As the request may contain sensitive data it needs to be zeroed
before it can be reallocated by others.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agocrypto: shash - Move null setkey check to registration time
Herbert Xu [Sat, 11 Jul 2009 14:17:39 +0000 (22:17 +0800)]
crypto: shash - Move null setkey check to registration time

This patch moves the run-time null setkey check to shash_prepare_alg
just like we did for finup/digest.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agocrypto: padlock - Use shash fallback for sha
Herbert Xu [Fri, 10 Jul 2009 09:26:44 +0000 (17:26 +0800)]
crypto: padlock - Use shash fallback for sha

This patch changes padlock sha fallback to shash instead of hash.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agocrypto: sha256-s390 - Add export/import support
Herbert Xu [Fri, 10 Jul 2009 05:20:32 +0000 (13:20 +0800)]
crypto: sha256-s390 - Add export/import support

This patch adds export/import support to sha256-s390.  The exported
type is defined by struct sha256_state, which is basically the entire
descriptor state of sha256_generic.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agocrypto: sha1-s390 - Add export/import support
Herbert Xu [Fri, 10 Jul 2009 05:18:26 +0000 (13:18 +0800)]
crypto: sha1-s390 - Add export/import support

This patch adds export/import support to sha1-s390.  The exported
type is defined by struct sha1_state, which is basically the entire
descriptor state of sha1_generic.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agocrypto: sha256_generic - Add export/import support
Herbert Xu [Fri, 10 Jul 2009 05:00:27 +0000 (13:00 +0800)]
crypto: sha256_generic - Add export/import support

This patch adds export/import support to sha256_generic.  The exported
type is defined by struct sha256_state, which is basically the entire
descriptor state of sha256_generic.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agocrypto: sha256_generic - Use 64-bit counter like sha1
Herbert Xu [Fri, 10 Jul 2009 04:54:20 +0000 (12:54 +0800)]
crypto: sha256_generic - Use 64-bit counter like sha1

This patch replaces the two 32-bit counter code in sha256_generic
with the simpler 64-bit counter code from sha1.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agocrypto: sha1_generic - Add export/import support
Herbert Xu [Thu, 9 Jul 2009 13:27:13 +0000 (21:27 +0800)]
crypto: sha1_generic - Add export/import support

This patch adds export/import support to sha1_generic.  The exported
type is defined by struct sha1_state, which is basically the entire
descriptor state of sha1_generic.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agocrypto: shash - Move finup/digest null checks to registration time
Herbert Xu [Thu, 9 Jul 2009 12:36:44 +0000 (20:36 +0800)]
crypto: shash - Move finup/digest null checks to registration time

This patch moves the run-time null finup/digest checks to the
shash_prepare_alg function which is run at registration time.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agocrypto: shash - Export/import hash state only
Herbert Xu [Thu, 9 Jul 2009 12:30:57 +0000 (20:30 +0800)]
crypto: shash - Export/import hash state only

This patch replaces the full descriptor export with an export of
the partial hash state.  This allows the use of a consistent export
format across all implementations of a given algorithm.

This is useful because a number of cases require the use of the
partial hash state, e.g., PadLock can use the SHA1 hash state
to get around the fact that it can only hash contiguous data
chunks.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agocrypto: api - Fix crypto_drop_spawn crash on blank spawns
Herbert Xu [Thu, 9 Jul 2009 03:34:06 +0000 (11:34 +0800)]
crypto: api - Fix crypto_drop_spawn crash on blank spawns

This patch allows crypto_drop_spawn to be called on spawns that
have not been initialised or have failed initialisation.  This
fixes potential crashes during initialisation without adding
special case code.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agocrypto: shash - Add shash_instance_ctx
Herbert Xu [Thu, 9 Jul 2009 03:32:55 +0000 (11:32 +0800)]
crypto: shash - Add shash_instance_ctx

This patch adds the helper shash_instance_ctx which is the shash
analogue of crypto_instance_ctx.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agocrypto: shash - Propagate reinit return value
Herbert Xu [Wed, 8 Jul 2009 15:39:01 +0000 (23:39 +0800)]
crypto: shash - Propagate reinit return value

This patch fixes crypto_shash_import to propagate the value returned
by reinit.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agocrypto: shash - Use finup in default digest
Herbert Xu [Wed, 8 Jul 2009 15:32:08 +0000 (23:32 +0800)]
crypto: shash - Use finup in default digest

This patch simplifies the default digest function by using finup.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agocrypto: shash - Add __crypto_shash_cast
Herbert Xu [Wed, 8 Jul 2009 14:36:36 +0000 (22:36 +0800)]
crypto: shash - Add __crypto_shash_cast

This patch adds __crypto_shash_cast which turns a crypto_tfm
into crypto_shash.  It's analogous to the other __crypto_*_cast
functions.

It hasn't been needed until now since no existing shash algorithms
have had an init function.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agocrypto: shash - Add crypto_shash_ctx_aligned
Herbert Xu [Wed, 8 Jul 2009 14:32:07 +0000 (22:32 +0800)]
crypto: shash - Add crypto_shash_ctx_aligned

This patch adds crypto_shash_ctx_aligned which will be needed
by hmac after its conversion to shash.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agocrypto: shash - Add shash_register_instance
Herbert Xu [Wed, 8 Jul 2009 10:46:23 +0000 (18:46 +0800)]
crypto: shash - Add shash_register_instance

This patch adds shash_register_instance so that shash instances
can be registered without bypassing the shash checks applied to
normal algorithms.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agocrypto: shash - Add shash_attr_alg2 helper
Herbert Xu [Wed, 8 Jul 2009 09:56:28 +0000 (17:56 +0800)]
crypto: shash - Add shash_attr_alg2 helper

This patch adds the helper shash_attr_alg2 which locates a shash
algorithm based on the information in the given attribute.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agocrypto: api - Add crypto_attr_alg2 helper
Herbert Xu [Wed, 8 Jul 2009 09:53:16 +0000 (17:53 +0800)]
crypto: api - Add crypto_attr_alg2 helper

This patch adds the helper crypto_attr_alg2 which is similar to
crypto_attr_alg but takes an extra frontend argument.  This is
intended to be used by new style algorithm types such as shash.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agocrypto: shash - Add spawn support
Herbert Xu [Wed, 8 Jul 2009 09:21:37 +0000 (17:21 +0800)]
crypto: shash - Add spawn support

This patch adds the functions needed to create and use shash
spawns, i.e., to use shash algorithms in a template.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agocrypto: api - Add new style spawn support
Herbert Xu [Wed, 8 Jul 2009 07:55:52 +0000 (15:55 +0800)]
crypto: api - Add new style spawn support

This patch modifies the spawn infrastructure to support new style
algorithms like shash.  In particular, this means storing the
frontend type in the spawn and using crypto_create_tfm to allocate
the tfm.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agocrypto: shash - Add shash_instance
Herbert Xu [Tue, 7 Jul 2009 07:17:12 +0000 (15:17 +0800)]
crypto: shash - Add shash_instance

This patch adds shash_instance and the associated alloc/free
functions.  This is meant to be an instance that with a shash
algorithm under it.  Note that the instance itself doesn't have
to be shash.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agocrypto: api - Add crypto_alloc_instance2
Herbert Xu [Tue, 7 Jul 2009 06:07:37 +0000 (14:07 +0800)]
crypto: api - Add crypto_alloc_instance2

This patch adds a new argument to crypto_alloc_instance which
sets aside some space before the instance for use by algorithms
such as shash that place type-specific data before crypto_alg.

For compatibility the function has been renamed so that existing
users aren't affected.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agocrypto: api - Add new template create function
Herbert Xu [Tue, 7 Jul 2009 04:30:33 +0000 (12:30 +0800)]
crypto: api - Add new template create function

This patch introduces the template->create function intended
to replace the existing alloc function.  The intention is for
create to handle the registration directly, whereas currently
the caller of alloc has to handle the registration.

This allows type-specific code to be run prior to registration.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agocrypto: ansi_prng - alloc cipher just in init
Sebastian Andrzej Siewior [Fri, 3 Jul 2009 04:10:47 +0000 (12:10 +0800)]
crypto: ansi_prng - alloc cipher just in init

As reported by Eric Sesterhenn the re-allocation of the cipher in reset leads
to:
|BUG: sleeping function called from invalid context at kernel/rwsem.c:21
|in_atomic(): 1, irqs_disabled(): 0, pid: 4926, name: modprobe
|INFO: lockdep is turned off.
|Pid: 4926, comm: modprobe Tainted: G   M 2.6.31-rc1-22297-g5298976 #24
|Call Trace:
| [<c011dd93>] __might_sleep+0xf9/0x101
| [<c0777aa0>] down_read+0x16/0x68
| [<c048bf04>] crypto_alg_lookup+0x16/0x34
| [<c048bf52>] crypto_larval_lookup+0x30/0xf9
| [<c048c038>] crypto_alg_mod_lookup+0x1d/0x62
| [<c048c13e>] crypto_alloc_base+0x1e/0x64
| [<c04bf991>] reset_prng_context+0xab/0x13f
| [<c04e5cfc>] ? __spin_lock_init+0x27/0x51
| [<c04bfce1>] cprng_init+0x2a/0x42
| [<c048bb4c>] __crypto_alloc_tfm+0xfa/0x128
| [<c048c153>] crypto_alloc_base+0x33/0x64
| [<c04933c9>] alg_test_cprng+0x30/0x1f4
| [<c0493329>] alg_test+0x12f/0x19f
| [<c0177f1f>] ? __alloc_pages_nodemask+0x14d/0x481
| [<d09219e2>] do_test+0xf9d/0x163f [tcrypt]
| [<d0920de6>] do_test+0x3a1/0x163f [tcrypt]
| [<d0926035>] tcrypt_mod_init+0x35/0x7c [tcrypt]
| [<c010113c>] _stext+0x54/0x12c
| [<d0926000>] ? tcrypt_mod_init+0x0/0x7c [tcrypt]
| [<c01398a3>] ? up_read+0x16/0x2b
| [<c0139fc4>] ? __blocking_notifier_call_chain+0x40/0x4c
| [<c014ee8d>] sys_init_module+0xa9/0x1bf
| [<c010292b>] sysenter_do_call+0x12/0x32

because a spin lock is held and crypto_alloc_base() may sleep.
There is no reason to re-allocate the cipher, the state is resetted in
->setkey(). This patches makes the cipher allocation a one time thing and
moves it to init.

Reported-by: Eric Sesterhenn <eric.sesterhenn@lsexperts.de>
Signed-off-by: Sebastian Andrzej Siewior <sebastian@breakpoint.cc>
Acked-by: Neil Horman <nhorman@tuxdriver.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agocrypto: ansi_prng - Use just a BH lock
Sebastian Andrzej Siewior [Fri, 3 Jul 2009 04:09:41 +0000 (12:09 +0800)]
crypto: ansi_prng - Use just a BH lock

The current code uses a mix of sping_lock() & spin_lock_irqsave(). This can
lead to deadlock with the correct timming & cprng_get_random() + cprng_reset()
sequence.
I've converted them to bottom half locks since all three user grab just a BH
lock so this runs probably in softirq :)

Signed-off-by: Sebastian Andrzej Siewior <sebastian@breakpoint.cc>
Acked-by: Neil Horman <nhorman@tuxdriver.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agocrypto: testmgr - Allow implementation-specific tests
Herbert Xu [Thu, 2 Jul 2009 08:32:12 +0000 (16:32 +0800)]
crypto: testmgr - Allow implementation-specific tests

This patch adds the support for testing specific implementations.
This should only be used in very specific situations.  Right now
this means specific implementations of random number generators.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agocrypto: skcipher - Change default sync geniv on SMP to eseqiv
Herbert Xu [Thu, 25 Jun 2009 10:43:48 +0000 (18:43 +0800)]
crypto: skcipher - Change default sync geniv on SMP to eseqiv

As it stands we use chainiv for sync algorithms and eseqiv for
async algorithms.  However, when there is more than one CPU
chainiv forces all processing to be serialised which is usually
not what you want.  Also, the added overhead of eseqiv isn't that
great.

Therefore this patch changes the default sync geniv on SMP machines
to eseqiv.  For the odd situation where the overhead is unacceptable
then chainiv is still available as an option.

Note that on UP machines chainiv is still preferred over eseqiv
for sync algorithms.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agocrypto: skcipher - Fix request for sync algorithms
Herbert Xu [Thu, 25 Jun 2009 06:46:31 +0000 (14:46 +0800)]
crypto: skcipher - Fix request for sync algorithms

When a sync givcipher algorithm is requested, if an async version
of the same algorithm already exists, then we will loop forever
without ever constructing the sync version based on a blkcipher.

This is because we did not include the requested type/mask when
getting a larval for the geniv algorithm that is to be constructed.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agohwrng: Use PCI_VDEVICE
Joe Perches [Thu, 25 Jun 2009 05:50:53 +0000 (13:50 +0800)]
hwrng: Use PCI_VDEVICE

Signed-off-by: Joe Perches <joe@perches.com>
Acked-by: Matt Mackall <mpm@selenic.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agocrypto: testmgr - Remove hash size check
Herbert Xu [Wed, 24 Jun 2009 05:48:13 +0000 (13:48 +0800)]
crypto: testmgr - Remove hash size check

Until hash test vectors grow longer than 256 bytes, the only
purpose of the check is to generate a gcc warning.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agocrypto: aes-ni - Don't print message with KERN_ERR on old system
Roland Dreier [Wed, 24 Jun 2009 05:42:40 +0000 (13:42 +0800)]
crypto: aes-ni - Don't print message with KERN_ERR on old system

When the aes-intel module is loaded on a system that does not have the
AES instructions, it prints

    Intel AES-NI instructions are not detected.

at level KERN_ERR.  Since aes-intel is aliased to "aes" it will be tried
whenever anything uses AES and spam the console.  This doesn't match
existing practice for how to handle "no hardware" when initializing a
module, so downgrade the message to KERN_INFO.

Signed-off-by: Roland Dreier <rolandd@cisco.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agocrypto: fips - Select CPRNG
Neil Horman [Sun, 21 Jun 2009 13:38:03 +0000 (21:38 +0800)]
crypto: fips - Select CPRNG

The ANSI CPRNG has no dependence on FIPS support.  FIPS support however,
requires the use of the CPRNG.  Adjust that depedency relationship in Kconfig.

Signed-off-by: Neil Horman <nhorman@tuxdriver.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agocrypto: tcrypt - Fix module return code when testing by name
Herbert Xu [Fri, 19 Jun 2009 12:37:00 +0000 (20:37 +0800)]
crypto: tcrypt - Fix module return code when testing by name

We should return 0/-ENOENT instead of 1/0 when testing by name.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agocrypto: ansi_cprng - Do not select FIPS
Herbert Xu [Fri, 19 Jun 2009 12:32:58 +0000 (20:32 +0800)]
crypto: ansi_cprng - Do not select FIPS

The RNG should work with FIPS disabled.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
15 years agocrypto: tcrypt - Test algorithms by name
Steffen Klassert [Fri, 19 Jun 2009 11:46:53 +0000 (19:46 +0800)]
crypto: tcrypt - Test algorithms by name

This adds the 'alg' module parameter to be able to test an
algorithm by name. If the algorithm type is not ad-hoc
clear for a algorithm (e.g. pcrypt, cryptd) it is possilbe
to set the algorithm type with the 'type' module parameter.

Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>