keys: add new key-type encrypted
authorMimi Zohar <zohar@linux.vnet.ibm.com>
Tue, 23 Nov 2010 23:55:35 +0000 (18:55 -0500)
committerJames Morris <jmorris@namei.org>
Sun, 28 Nov 2010 21:55:29 +0000 (08:55 +1100)
commit7e70cb4978507cf31d76b90e4cfb4c28cad87f0c
treec5df493eef8d30dcb40d647b0528970eb4a391c6
parentd00a1c72f7f4661212299e6cb132dfa58030bcdb
keys: add new key-type encrypted

Define a new kernel key-type called 'encrypted'. Encrypted keys are kernel
generated random numbers, which are encrypted/decrypted with a 'trusted'
symmetric key. Encrypted keys are created/encrypted/decrypted in the kernel.
Userspace only ever sees/stores encrypted blobs.

Changelog:
- bug fix: replaced master-key rcu based locking with semaphore
  (reported by David Howells)
- Removed memset of crypto_shash_digest() digest output
- Replaced verification of 'key-type:key-desc' using strcspn(), with
  one based on string constants.
- Moved documentation to Documentation/keys-trusted-encrypted.txt
- Replace hash with shash (based on comments by David Howells)
- Make lengths/counts size_t where possible (based on comments by David Howells)
  Could not convert most lengths, as crypto expects 'unsigned int'
  (size_t: on 32 bit is defined as unsigned int, but on 64 bit is unsigned long)
- Add 'const' where possible (based on comments by David Howells)
- allocate derived_buf dynamically to support arbitrary length master key
  (fixed by Roberto Sassu)
- wait until late_initcall for crypto libraries to be registered
- cleanup security/Kconfig
- Add missing 'update' keyword (reported/fixed by Roberto Sassu)
- Free epayload on failure to create key (reported/fixed by Roberto Sassu)
- Increase the data size limit (requested by Roberto Sassu)
- Crypto return codes are always 0 on success and negative on failure,
  remove unnecessary tests.
- Replaced kzalloc() with kmalloc()

Signed-off-by: Mimi Zohar <zohar@us.ibm.com>
Signed-off-by: David Safford <safford@watson.ibm.com>
Reviewed-by: Roberto Sassu <roberto.sassu@polito.it>
Signed-off-by: James Morris <jmorris@namei.org>
include/keys/encrypted-type.h [new file with mode: 0644]
security/Kconfig
security/keys/Makefile
security/keys/encrypted_defined.c [new file with mode: 0644]
security/keys/encrypted_defined.h [new file with mode: 0644]