diff --git a/umac/cmn_services/crypto/inc/wlan_crypto_fils_api.h b/umac/cmn_services/crypto/inc/wlan_crypto_fils_api.h index ae402422b0..b7a936663f 100644 --- a/umac/cmn_services/crypto/inc/wlan_crypto_fils_api.h +++ b/umac/cmn_services/crypto/inc/wlan_crypto_fils_api.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017 The Linux Foundation. All rights reserved. + * Copyright (c) 2017-2018 The Linux Foundation. All rights reserved. * * Permission to use, copy, modify, and/or distribute this software for * any purpose with or without fee is hereby granted, provided that the @@ -19,6 +19,12 @@ #ifndef _WLAN_CRYPTO_FILS_API_H_ #define _WLAN_CRYPTO_FILS_API_H_ +#ifdef WLAN_CRYPTO_FILS_OS_DERIVATIVE +static inline const struct wlan_crypto_cipher *fils_register(void) +{ + return NULL; +} +#else /** * fils_register() - Register all callback functions to Crypto manager * @@ -28,6 +34,7 @@ * Return: Pointer to wlan_crypto_cipher Object */ const struct wlan_crypto_cipher *fils_register(void); +#endif #ifdef WLAN_SUPPORT_FILS /** diff --git a/umac/cmn_services/crypto/src/wlan_crypto_aes_i.h b/umac/cmn_services/crypto/src/wlan_crypto_aes_i.h index de55210a9d..ac6c4372d9 100644 --- a/umac/cmn_services/crypto/src/wlan_crypto_aes_i.h +++ b/umac/cmn_services/crypto/src/wlan_crypto_aes_i.h @@ -231,10 +231,19 @@ int wlan_crypto_aes_gcm_ad(const uint8_t *key, size_t key_len, const uint8_t *aad, size_t aad_len, const uint8_t *tag, uint8_t *plain); - +#ifdef WLAN_CRYPTO_GCM_OS_DERIVATIVE +static inline int wlan_crypto_aes_gmac(const uint8_t *key, size_t key_len, + const uint8_t *iv, size_t iv_len, + const uint8_t *aad, size_t aad_len, + uint8_t *tag) +{ + return 0; +} +#else int wlan_crypto_aes_gmac(const uint8_t *key, size_t key_len, - const uint8_t *iv, size_t iv_len, - const uint8_t *aad, size_t aad_len, uint8_t *tag); + const uint8_t *iv, size_t iv_len, + const uint8_t *aad, size_t aad_len, uint8_t *tag); +#endif int wlan_crypto_aes_ccm_ae(const uint8_t *key, size_t key_len, const uint8_t *nonce, size_t M, const uint8_t *plain, size_t plain_len, const uint8_t *aad, size_t aad_len, @@ -251,10 +260,24 @@ void wlan_crypto_aes_encrypt_deinit(void *ctx); void *wlan_crypto_aes_decrypt_init(const uint8_t *key, size_t len); void wlan_crypto_aes_decrypt(void *ctx, const uint8_t *crypt, uint8_t *plain); void wlan_crypto_aes_decrypt_deinit(void *ctx); +#ifdef WLAN_CRYPTO_OMAC1_OS_DERIVATIVE +static inline int omac1_aes_128(const uint8_t *key, const uint8_t *data, + size_t data_len, uint8_t *mac) +{ + return 0; +} + +static inline int omac1_aes_256(const uint8_t *key, const uint8_t *data, + size_t data_len, uint8_t *mac) +{ + return 0; +} +#else int omac1_aes_128(const uint8_t *key, const uint8_t *data, - size_t data_len, uint8_t *mac); + size_t data_len, uint8_t *mac); int omac1_aes_256(const uint8_t *key, const uint8_t *data, - size_t data_len, uint8_t *mac); + size_t data_len, uint8_t *mac); +#endif int omac1_aes_vector(const uint8_t *key, size_t key_len, size_t num_elem, const uint8_t *addr[], const size_t *len, uint8_t *mac); #endif /* WLAN_CRYPTO_AES_I_H */ diff --git a/umac/cmn_services/crypto/src/wlan_crypto_def_i.h b/umac/cmn_services/crypto/src/wlan_crypto_def_i.h index f377fa6f22..809334feeb 100644 --- a/umac/cmn_services/crypto/src/wlan_crypto_def_i.h +++ b/umac/cmn_services/crypto/src/wlan_crypto_def_i.h @@ -93,6 +93,9 @@ #define WLAN_TID_SIZE 17 #define WLAN_NONQOS_SEQ 16 +/* Number of bits per byte */ +#define CRYPTO_NBBY 8 + /* Macros for handling unaligned memory accesses */ static inline uint16_t wlan_crypto_get_be16(const uint8_t *a) diff --git a/umac/cmn_services/crypto/src/wlan_crypto_global_api.c b/umac/cmn_services/crypto/src/wlan_crypto_global_api.c index 71d19434c2..4097cb1028 100644 --- a/umac/cmn_services/crypto/src/wlan_crypto_global_api.c +++ b/umac/cmn_services/crypto/src/wlan_crypto_global_api.c @@ -386,7 +386,7 @@ QDF_STATUS wlan_crypto_setkey(struct wlan_objmgr_vdev *vdev, if (cipher && (!IS_FILS_CIPHER(req_key->type)) && (!IS_MGMT_CIPHER(req_key->type)) && - ((req_key->keylen != (cipher->keylen / NBBY)) && + ((req_key->keylen != (cipher->keylen / CRYPTO_NBBY)) && (req_key->type != WLAN_CRYPTO_CIPHER_WEP))) { qdf_print("%s[%d] cipher invalid\n", __func__, __LINE__); return QDF_STATUS_E_INVAL; @@ -466,8 +466,7 @@ QDF_STATUS wlan_crypto_setkey(struct wlan_objmgr_vdev *vdev, crypto_priv->def_igtk_tx_keyid = igtk_idx; } else { if (IS_FILS_CIPHER(req_key->type)) { - qdf_print(FL( - "FILS key is not for BroadCast packet\n")); + qdf_print("FILS key is not for BroadCast pkt"); return QDF_STATUS_E_INVAL; } if (!HAS_MCAST_CIPHER(crypto_params, req_key->type) @@ -3091,13 +3090,13 @@ uint8_t wlan_crypto_get_peer_fils_aead(struct wlan_objmgr_peer *peer) struct wlan_crypto_comp_priv *crypto_priv = NULL; if (!peer) { - qdf_print(FL("Invalid Input\n")); + qdf_print("Invalid Input"); return 0; } crypto_priv = wlan_get_peer_crypto_obj(peer); if (!crypto_priv) { - qdf_print(FL("crypto_priv NULL\n")); + qdf_print("crypto_priv NULL"); return 0; } @@ -3110,13 +3109,13 @@ wlan_crypto_set_peer_fils_aead(struct wlan_objmgr_peer *peer, uint8_t value) struct wlan_crypto_comp_priv *crypto_priv = NULL; if (!peer) { - qdf_print(FL("Invalid Input\n")); + qdf_print("Invalid Input"); return; } crypto_priv = wlan_get_peer_crypto_obj(peer); if (!crypto_priv) { - qdf_print(FL("crypto_priv NULL\n")); + qdf_print("crypto_priv NULL"); return; } diff --git a/umac/cmn_services/crypto/src/wlan_crypto_obj_mgr.c b/umac/cmn_services/crypto/src/wlan_crypto_obj_mgr.c index a65a28da18..fcdc8d8749 100644 --- a/umac/cmn_services/crypto/src/wlan_crypto_obj_mgr.c +++ b/umac/cmn_services/crypto/src/wlan_crypto_obj_mgr.c @@ -37,14 +37,6 @@ #include "wlan_crypto_fils_api.h" -extern const struct wlan_crypto_cipher *wep_register(void); -extern const struct wlan_crypto_cipher *tkip_register(void); -extern const struct wlan_crypto_cipher *ccmp_register(void); -extern const struct wlan_crypto_cipher *ccmp256_register(void); -extern const struct wlan_crypto_cipher *gcmp_register(void); -extern const struct wlan_crypto_cipher *gcmp256_register(void); -extern const struct wlan_crypto_cipher *wapi_register(void); - extern const struct wlan_crypto_cipher *wlan_crypto_cipher_ops[WLAN_CRYPTO_CIPHER_MAX]; @@ -82,20 +74,6 @@ static QDF_STATUS wlan_crypto_register_all_ciphers( return QDF_STATUS_SUCCESS; } -static QDF_STATUS wlan_crypto_psoc_obj_create_handler( - struct wlan_objmgr_psoc *psoc, - void *arg) -{ - return QDF_STATUS_SUCCESS; -} - -static QDF_STATUS wlan_crypto_pdev_obj_create_handler( - struct wlan_objmgr_pdev *pdev, - void *arg) -{ - return QDF_STATUS_SUCCESS; -} - static QDF_STATUS wlan_crypto_vdev_obj_create_handler( struct wlan_objmgr_vdev *vdev, void *arg) @@ -193,20 +171,6 @@ static QDF_STATUS wlan_crypto_peer_obj_create_handler( return status; } -static QDF_STATUS wlan_crypto_psoc_obj_destroy_handler( - struct wlan_objmgr_psoc *psoc, - void *arg){ - - return QDF_STATUS_COMP_DISABLED; -} - -static QDF_STATUS wlan_crypto_pdev_obj_destroy_handler( - struct wlan_objmgr_pdev *pdev, - void *arg){ - - return QDF_STATUS_SUCCESS; -} - static void wlan_crypto_free_key(struct wlan_crypto_comp_priv *crypto_priv) { uint8_t i; @@ -296,7 +260,7 @@ QDF_STATUS __wlan_crypto_init(void) WLAN_UMAC_COMP_CRYPTO, wlan_crypto_vdev_obj_create_handler, NULL); if (status != QDF_STATUS_SUCCESS) - goto err_vdev_create; + return status; status = wlan_objmgr_register_peer_create_handler( WLAN_UMAC_COMP_CRYPTO, @@ -326,9 +290,7 @@ err_vdev_delete: err_peer_create: wlan_objmgr_unregister_vdev_create_handler(WLAN_UMAC_COMP_CRYPTO, wlan_crypto_vdev_obj_create_handler, NULL); -err_vdev_create: - wlan_objmgr_unregister_pdev_create_handler(WLAN_UMAC_COMP_CRYPTO, - wlan_crypto_pdev_obj_create_handler, NULL); + register_success: return status; } diff --git a/umac/cmn_services/crypto/src/wlan_crypto_obj_mgr_i.h b/umac/cmn_services/crypto/src/wlan_crypto_obj_mgr_i.h index 013df9c46c..9626e753a9 100644 --- a/umac/cmn_services/crypto/src/wlan_crypto_obj_mgr_i.h +++ b/umac/cmn_services/crypto/src/wlan_crypto_obj_mgr_i.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017 The Linux Foundation. All rights reserved. + * Copyright (c) 2017-2018 The Linux Foundation. All rights reserved. * * Permission to use, copy, modify, and/or distribute this software for * any purpose with or without fee is hereby granted, provided that the @@ -23,6 +23,63 @@ #ifndef __WLAN_CRYPTO_OBJ_MGR_I_ #define __WLAN_CRYPTO_OBJ_MGR_I_ +#ifdef WLAN_CRYPTO_WEP_OS_DERIVATIVE +static inline const struct wlan_crypto_cipher *wep_register(void) +{ + return NULL; +} +#else +const struct wlan_crypto_cipher *wep_register(void); +#endif + +#ifdef WLAN_CRYPTO_TKIP_OS_DERIVATIVE +static inline const struct wlan_crypto_cipher *tkip_register(void) +{ + return NULL; +} +#else +const struct wlan_crypto_cipher *tkip_register(void); +#endif + +#ifdef WLAN_CRYPTO_CCMP_OS_DERIVATIVE +static inline const struct wlan_crypto_cipher *ccmp_register(void) +{ + return NULL; +} + +static inline const struct wlan_crypto_cipher *ccmp256_register(void) +{ + return NULL; +} +#else +const struct wlan_crypto_cipher *ccmp_register(void); +const struct wlan_crypto_cipher *ccmp256_register(void); +#endif + +#ifdef WLAN_CRYPTO_GCMP_OS_DERIVATIVE +static inline const struct wlan_crypto_cipher *gcmp_register(void) +{ + return NULL; +} + +static inline const struct wlan_crypto_cipher *gcmp256_register(void) +{ + return NULL; +} +#else +const struct wlan_crypto_cipher *gcmp_register(void); +const struct wlan_crypto_cipher *gcmp256_register(void); +#endif + +#ifdef WLAN_CRYPTO_WAPI_OS_DERIVATIVE +static inline const struct wlan_crypto_cipher *wapi_register(void) +{ + return NULL; +} +#else +const struct wlan_crypto_cipher *wapi_register(void); +#endif + static inline void *wlan_get_vdev_crypto_obj(struct wlan_objmgr_vdev *vdev) {