KEYS: Provide signature verification with an asymmetric key
authorDavid Howells <dhowells@redhat.com>
Fri, 21 Sep 2012 22:25:04 +0000 (23:25 +0100)
committerRusty Russell <rusty@rustcorp.com.au>
Mon, 8 Oct 2012 03:20:15 +0000 (13:50 +1030)
commit4ae71c1dce1e3d2270a0755988033e236b8e45d6
treedd48fafaa13f718a7ea0a9e0fa79e8211239fe8e
parenta9681bf3dd7ccd2b32eba27d327ab76607429f7a
KEYS: Provide signature verification with an asymmetric key

Provide signature verification using an asymmetric-type key to indicate the
public key to be used.

The API is a single function that can be found in crypto/public_key.h:

int verify_signature(const struct key *key,
     const struct public_key_signature *sig)

The first argument is the appropriate key to be used and the second argument
is the parsed signature data:

struct public_key_signature {
u8 *digest;
u16 digest_size;
enum pkey_hash_algo pkey_hash_algo : 8;
union {
MPI mpi[2];
struct {
MPI s; /* m^d mod n */
} rsa;
struct {
MPI r;
MPI s;
} dsa;
};
};

This should be filled in prior to calling the function.  The hash algorithm
should already have been called and the hash finalised and the output should
be in a buffer pointed to by the 'digest' member.

Any extra data to be added to the hash by the hash format (eg. PGP) should
have been added by the caller prior to finalising the hash.

It is assumed that the signature is made up of a number of MPI values.  If an
algorithm becomes available for which this is not the case, the above structure
will have to change.

It is also assumed that it will have been checked that the signature algorithm
matches the key algorithm.

Signed-off-by: David Howells <dhowells@redhat.com>
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
crypto/asymmetric_keys/Makefile
crypto/asymmetric_keys/signature.c [new file with mode: 0644]
include/crypto/public_key.h