[crypto] Split crypto_algorithm into {digest,cipher,pubkey}_algorithm

The various types of cryptographic algorithm are fundamentally
different, and it was probably a mistake to try to handle them via a
single common type.

pubkey_algorithm is a placeholder type for now.
This commit is contained in:
Michael Brown
2009-02-18 21:56:02 +00:00
parent 5de8305feb
commit a3219b24a8
16 changed files with 169 additions and 130 deletions

View File

@@ -136,7 +136,7 @@ static void tls_generate_random ( void *data, size_t len ) {
* @v digest_ctx Digest context
* @v args ( data, len ) pairs of data, terminated by NULL
*/
static void tls_hmac_update_va ( struct crypto_algorithm *digest,
static void tls_hmac_update_va ( struct digest_algorithm *digest,
void *digest_ctx, va_list args ) {
void *data;
size_t len;
@@ -159,7 +159,7 @@ static void tls_hmac_update_va ( struct crypto_algorithm *digest,
* @v seeds ( data, len ) pairs of seed data, terminated by NULL
*/
static void tls_p_hash_va ( struct tls_session *tls,
struct crypto_algorithm *digest,
struct digest_algorithm *digest,
void *secret, size_t secret_len,
void *out, size_t out_len,
va_list seeds ) {
@@ -409,9 +409,9 @@ static void tls_clear_cipher ( struct tls_session *tls __unused,
struct tls_cipherspec *cipherspec ) {
free ( cipherspec->dynamic );
memset ( cipherspec, 0, sizeof ( cipherspec ) );
cipherspec->pubkey = &crypto_null;
cipherspec->cipher = &crypto_null;
cipherspec->digest = &crypto_null;
cipherspec->pubkey = &pubkey_null;
cipherspec->cipher = &cipher_null;
cipherspec->digest = &digest_null;
}
/**
@@ -427,9 +427,9 @@ static void tls_clear_cipher ( struct tls_session *tls __unused,
*/
static int tls_set_cipher ( struct tls_session *tls,
struct tls_cipherspec *cipherspec,
struct crypto_algorithm *pubkey,
struct crypto_algorithm *cipher,
struct crypto_algorithm *digest,
struct pubkey_algorithm *pubkey,
struct cipher_algorithm *cipher,
struct digest_algorithm *digest,
size_t key_len ) {
size_t total;
void *dynamic;
@@ -473,9 +473,9 @@ static int tls_set_cipher ( struct tls_session *tls,
*/
static int tls_select_cipher ( struct tls_session *tls,
unsigned int cipher_suite ) {
struct crypto_algorithm *pubkey = &crypto_null;
struct crypto_algorithm *cipher = &crypto_null;
struct crypto_algorithm *digest = &crypto_null;
struct pubkey_algorithm *pubkey = &pubkey_null;
struct cipher_algorithm *cipher = &cipher_null;
struct digest_algorithm *digest = &digest_null;
unsigned int key_len = 0;
int rc;
@@ -524,9 +524,9 @@ static int tls_change_cipher ( struct tls_session *tls,
/* Sanity check */
if ( /* FIXME (when pubkey is not hard-coded to RSA):
* ( pending->pubkey == &crypto_null ) || */
( pending->cipher == &crypto_null ) ||
( pending->digest == &crypto_null ) ) {
* ( pending->pubkey == &pubkey_null ) || */
( pending->cipher == &cipher_null ) ||
( pending->digest == &digest_null ) ) {
DBGC ( tls, "TLS %p refusing to use null cipher\n", tls );
return -ENOTSUP;
}
@@ -567,8 +567,8 @@ static void tls_add_handshake ( struct tls_session *tls,
* far.
*/
static void tls_verify_handshake ( struct tls_session *tls, void *out ) {
struct crypto_algorithm *md5 = &md5_algorithm;
struct crypto_algorithm *sha1 = &sha1_algorithm;
struct digest_algorithm *md5 = &md5_algorithm;
struct digest_algorithm *sha1 = &sha1_algorithm;
uint8_t md5_ctx[md5->ctxsize];
uint8_t sha1_ctx[sha1->ctxsize];
void *md5_digest = out;
@@ -1060,7 +1060,7 @@ static void tls_hmac ( struct tls_session *tls __unused,
struct tls_cipherspec *cipherspec,
uint64_t seq, struct tls_header *tlshdr,
const void *data, size_t len, void *hmac ) {
struct crypto_algorithm *digest = cipherspec->digest;
struct digest_algorithm *digest = cipherspec->digest;
uint8_t digest_ctx[digest->ctxsize];
hmac_init ( digest, digest_ctx, cipherspec->mac_secret,