Exemple #1
0
/* Generic Hashing Wrapper */
int wc_Hash(enum wc_HashType hash_type, const byte* data,
    word32 data_len, byte* hash, word32 hash_len)
{
    int ret = HASH_TYPE_E; /* Default to hash type error */
    word32 dig_size;

    /* Validate hash buffer size */
    dig_size = wc_HashGetDigestSize(hash_type);
    if (hash_len < dig_size) {
        return BUFFER_E;
    }
    
    /* Suppress possible unused arg if all hashing is disabled */
    (void)data;
    (void)data_len;
    (void)hash;
    (void)hash_len;

    switch(hash_type)
    {
        case WC_HASH_TYPE_MD5:
#ifndef NO_MD5
            ret = wc_Md5Hash(data, data_len, hash);
#endif
            break;
        case WC_HASH_TYPE_SHA:
#ifndef NO_SHA
            ret = wc_ShaHash(data, data_len, hash);
#endif
            break;
        case WC_HASH_TYPE_SHA224:
#ifdef WOLFSSL_SHA224
            ret = wc_Sha224Hash(data, data_len, hash);
#endif
            break;
        case WC_HASH_TYPE_SHA256:
#ifndef NO_SHA256
            ret = wc_Sha256Hash(data, data_len, hash);
#endif
            break;
        case WC_HASH_TYPE_SHA384:
#if defined(WOLFSSL_SHA512) && defined(WOLFSSL_SHA384)
            ret = wc_Sha384Hash(data, data_len, hash);
#endif
            break;
        case WC_HASH_TYPE_SHA512:
#ifdef WOLFSSL_SHA512
            ret = wc_Sha512Hash(data, data_len, hash);
#endif
            break;
        case WC_HASH_TYPE_MD5_SHA:
#if !defined(NO_MD5) && !defined(NO_SHA)
            ret = wc_Md5Hash(data, data_len, hash);
            if (ret == 0) {
                ret = wc_ShaHash(data, data_len, &hash[MD5_DIGEST_SIZE]);
            }
#endif
            break;

        /* Not Supported */
        case WC_HASH_TYPE_MD2:
        case WC_HASH_TYPE_MD4:
        case WC_HASH_TYPE_NONE:
        default:
            ret = BAD_FUNC_ARG;
            break;
    }
    return ret;
}
Exemple #2
0
/* Generic Hashing Wrapper */
int wc_Hash(enum wc_HashType hash_type, const byte* data,
    word32 data_len, byte* hash, word32 hash_len)
{
    int ret = BAD_FUNC_ARG;
    word32 dig_size;

    /* Validate hash buffer size */
    dig_size = wc_HashGetDigestSize(hash_type);
    if (hash_len < dig_size) {
        return BUFFER_E;
    }
    
    /* Supress possible unused arg if all hashing is disabled */
    (void)data;
    (void)data_len;
    (void)hash;
    (void)hash_len;

    switch(hash_type)
    {
#ifndef NO_MD5
        case WC_HASH_TYPE_MD5:
            ret = wc_Md5Hash(data, data_len, hash);
            break;
#endif
#ifndef NO_SHA
        case WC_HASH_TYPE_SHA:
            ret = wc_ShaHash(data, data_len, hash);
            break;
#endif
#ifndef NO_SHA256
        case WC_HASH_TYPE_SHA256:
            ret = wc_Sha256Hash(data, data_len, hash);
            break;
#endif
#ifdef WOLFSSL_SHA512
#ifdef WOLFSSL_SHA384
        case WC_HASH_TYPE_SHA384:
            ret = wc_Sha384Hash(data, data_len, hash);
            break;
#endif /* WOLFSSL_SHA384 */
        case WC_HASH_TYPE_SHA512:
            ret = wc_Sha512Hash(data, data_len, hash);
            break;
#endif /* WOLFSSL_SHA512 */

        /* Not Supported */
#ifdef WOLFSSL_MD2
        case WC_HASH_TYPE_MD2:
#endif
#ifndef NO_MD4
        case WC_HASH_TYPE_MD4:
#endif
        case WC_HASH_TYPE_NONE:
        default:
            WOLFSSL_MSG("wc_Hash: Bad hash type");
            ret = BAD_FUNC_ARG;
            break;
    }
    return ret;
}