ath6kl: Add support for configuring SMS4 keys
Indicate support for WPI-SMS4 cipher and allow SMS4 keys to be configured. Signed-off-by: Dai Shuibing <shuibing@qca.qualcomm.com> Signed-off-by: Jouni Malinen <jouni@qca.qualcomm.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
This commit is contained in:
@@ -203,6 +203,10 @@ static int ath6kl_set_cipher(struct ath6kl_vif *vif, u32 cipher, bool ucast)
|
|||||||
*ar_cipher = AES_CRYPT;
|
*ar_cipher = AES_CRYPT;
|
||||||
*ar_cipher_len = 0;
|
*ar_cipher_len = 0;
|
||||||
break;
|
break;
|
||||||
|
case WLAN_CIPHER_SUITE_SMS4:
|
||||||
|
*ar_cipher = WAPI_CRYPT;
|
||||||
|
*ar_cipher_len = 0;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
ath6kl_err("cipher 0x%x not supported\n", cipher);
|
ath6kl_err("cipher 0x%x not supported\n", cipher);
|
||||||
return -ENOTSUPP;
|
return -ENOTSUPP;
|
||||||
@@ -935,13 +939,19 @@ static int ath6kl_cfg80211_add_key(struct wiphy *wiphy, struct net_device *ndev,
|
|||||||
key_usage = GROUP_USAGE;
|
key_usage = GROUP_USAGE;
|
||||||
|
|
||||||
if (params) {
|
if (params) {
|
||||||
|
int seq_len = params->seq_len;
|
||||||
|
if (params->cipher == WLAN_CIPHER_SUITE_SMS4 &&
|
||||||
|
seq_len > ATH6KL_KEY_SEQ_LEN) {
|
||||||
|
/* Only first half of the WPI PN is configured */
|
||||||
|
seq_len = ATH6KL_KEY_SEQ_LEN;
|
||||||
|
}
|
||||||
if (params->key_len > WLAN_MAX_KEY_LEN ||
|
if (params->key_len > WLAN_MAX_KEY_LEN ||
|
||||||
params->seq_len > sizeof(key->seq))
|
seq_len > sizeof(key->seq))
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
key->key_len = params->key_len;
|
key->key_len = params->key_len;
|
||||||
memcpy(key->key, params->key, key->key_len);
|
memcpy(key->key, params->key, key->key_len);
|
||||||
key->seq_len = params->seq_len;
|
key->seq_len = seq_len;
|
||||||
memcpy(key->seq, params->seq, key->seq_len);
|
memcpy(key->seq, params->seq, key->seq_len);
|
||||||
key->cipher = params->cipher;
|
key->cipher = params->cipher;
|
||||||
}
|
}
|
||||||
@@ -959,6 +969,9 @@ static int ath6kl_cfg80211_add_key(struct wiphy *wiphy, struct net_device *ndev,
|
|||||||
case WLAN_CIPHER_SUITE_CCMP:
|
case WLAN_CIPHER_SUITE_CCMP:
|
||||||
key_type = AES_CRYPT;
|
key_type = AES_CRYPT;
|
||||||
break;
|
break;
|
||||||
|
case WLAN_CIPHER_SUITE_SMS4:
|
||||||
|
key_type = WAPI_CRYPT;
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return -ENOTSUPP;
|
return -ENOTSUPP;
|
||||||
@@ -1451,6 +1464,7 @@ static const u32 cipher_suites[] = {
|
|||||||
WLAN_CIPHER_SUITE_TKIP,
|
WLAN_CIPHER_SUITE_TKIP,
|
||||||
WLAN_CIPHER_SUITE_CCMP,
|
WLAN_CIPHER_SUITE_CCMP,
|
||||||
CCKM_KRK_CIPHER_SUITE,
|
CCKM_KRK_CIPHER_SUITE,
|
||||||
|
WLAN_CIPHER_SUITE_SMS4,
|
||||||
};
|
};
|
||||||
|
|
||||||
static bool is_rate_legacy(s32 rate)
|
static bool is_rate_legacy(s32 rate)
|
||||||
|
@@ -71,6 +71,7 @@ enum crypto_type {
|
|||||||
WEP_CRYPT = 0x02,
|
WEP_CRYPT = 0x02,
|
||||||
TKIP_CRYPT = 0x04,
|
TKIP_CRYPT = 0x04,
|
||||||
AES_CRYPT = 0x08,
|
AES_CRYPT = 0x08,
|
||||||
|
WAPI_CRYPT = 0x10,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct htc_endpoint_credit_dist;
|
struct htc_endpoint_credit_dist;
|
||||||
|
Reference in New Issue
Block a user