Commit 5e07021e authored by Dai Shuibing's avatar Dai Shuibing Committed by Kalle Valo

ath6kl: Add support for configuring SMS4 keys

Indicate support for WPI-SMS4 cipher and allow SMS4 keys to be
configured.
Signed-off-by: default avatarDai Shuibing <shuibing@qca.qualcomm.com>
Signed-off-by: default avatarJouni Malinen <jouni@qca.qualcomm.com>
Signed-off-by: default avatarKalle Valo <kvalo@qca.qualcomm.com>
parent 8cb6d991
...@@ -203,6 +203,10 @@ static int ath6kl_set_cipher(struct ath6kl_vif *vif, u32 cipher, bool ucast) ...@@ -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, ...@@ -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, ...@@ -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[] = { ...@@ -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 { ...@@ -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;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment