For EAP-FAST key derivation, I need to know the key block size. With
OpenSSL 1.0.0 I used effectively following function to figure this out
after having completed TLS handshake:

int get_block_size(SSL *ssl)
{
    const EVP_CIPHER *c = ssl->enc_read_ctx->cipher;
    const EVP_MD *h = EVP_MD_CTX_md(ssl->read_hash);
    return 2 * (EVP_CIPHER_key_length(c) +
            EVP_MD_size(h) +
            EVP_CIPHER_iv_length(c));
}

This seemed to work fine with OpenSSL 1.0.0, but EVP_MD_CTX_md() returns
NULL in OpenSSL 1.0.1.

Based on tls1_setup_key_block(), the best I came up for 1.0.1 was this:

int get_block_size(SSL *ssl)
{
    const EVP_CIPHER *c = ssl->enc_read_ctx->cipher;
    return 2 * (EVP_CIPHER_key_length(c) +
            ssl->s3->tmp.new_mac_secret_size +
            EVP_CIPHER_iv_length(c));
}

This seems to work, but using ssl->s3->tmp to figure out this outside
the library code does not look exactly clean.. Is there a better way to
figure out the MAC secret size (or even better, full key block size)
with OpenSSL?

-- 
Jouni Malinen                                            PGP id EFC895FA
______________________________________________________________________
OpenSSL Project                                 http://www.openssl.org
User Support Mailing List                    openssl-users@openssl.org
Automated List Manager                           majord...@openssl.org

Reply via email to