| /****************************************************************************** |
| * |
| * Copyright(c) 2017 Intel Deutschland GmbH |
| * All rights reserved. |
| * |
| * Redistribution and use in source and binary forms, with or without |
| * modification, are permitted provided that the following conditions |
| * are met: |
| * |
| * * Redistributions of source code must retain the above copyright |
| * notice, this list of conditions and the following disclaimer. |
| * * Redistributions in binary form must reproduce the above copyright |
| * notice, this list of conditions and the following disclaimer in |
| * the documentation and/or other materials provided with the |
| * distribution. |
| * * Neither the name Intel Corporation nor the names of its |
| * contributors may be used to endorse or promote products derived |
| * from this software without specific prior written permission. |
| * |
| * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
| * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
| * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
| * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
| * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
| * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
| * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
| * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
| * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| * |
| *****************************************************************************/ |
| |
| #ifndef SRC_CONNECTIVITY_WLAN_DRIVERS_THIRD_PARTY_INTEL_IWLWIFI_FW_API_TESTING_H_ |
| #define SRC_CONNECTIVITY_WLAN_DRIVERS_THIRD_PARTY_INTEL_IWLWIFI_FW_API_TESTING_H_ |
| |
| #include "third_party/iwlwifi/platform/compiler.h" |
| |
| #define FIPS_KEY_LEN_128 16 |
| #define FIPS_KEY_LEN_256 32 |
| #define FIPS_MAX_KEY_LEN FIPS_KEY_LEN_256 |
| |
| #define FIPS_CCM_NONCE_LEN 13 |
| #define FIPS_GCM_NONCE_LEN 12 |
| #define FIPS_MAX_NONCE_LEN FIPS_CCM_NONCE_LEN |
| |
| #define FIPS_MAX_AAD_LEN 30 |
| |
| /** |
| * enum iwl_fips_test_vector_flags - flags for FIPS test vector |
| * @IWL_FIPS_TEST_VECTOR_FLAGS_AES: use AES algorithm |
| * @IWL_FIPS_TEST_VECTOR_FLAGS_CCM: use CCM algorithm |
| * @IWL_FIPS_TEST_VECTOR_FLAGS_GCM: use GCM algorithm |
| * @IWL_FIPS_TEST_VECTOR_FLAGS_ENC: if set, the requested operation is |
| * encryption. Otherwise, the requested operation is decryption. |
| * @IWL_FIPS_TEST_VECTOR_FLAGS_KEY_256: if set, the test vector uses a |
| * 256 bit key. Otherwise 128 bit key is used. |
| */ |
| enum iwl_fips_test_vector_flags { |
| IWL_FIPS_TEST_VECTOR_FLAGS_AES = BIT(0), |
| IWL_FIPS_TEST_VECTOR_FLAGS_CCM = BIT(1), |
| IWL_FIPS_TEST_VECTOR_FLAGS_GCM = BIT(2), |
| IWL_FIPS_TEST_VECTOR_FLAGS_ENC = BIT(3), |
| IWL_FIPS_TEST_VECTOR_FLAGS_KEY_256 = BIT(5), |
| }; |
| |
| /** |
| * struct iwl_fips_test_cmd - FIPS test command for AES/CCM/GCM tests |
| * @flags: test vector flags from &enum iwl_fips_test_vector_flags. |
| * @payload_len: the length of the @payload field in bytes. |
| * @aad_len: the length of the @aad field in bytes. |
| * @key: the key used for encryption/decryption. In case a 128-bit key is used, |
| * pad with zero. |
| * @aad: AAD. If the AAD is shorter than the buffer, pad with zero. Only valid |
| * for CCM/GCM tests. |
| * @reserved: for alignment. |
| * @nonce: nonce. Only valid for CCM/GCM tests. |
| * @reserved2: for alignment. |
| * @payload: the plaintext to encrypt or the cipher text to decrypt + MIC. |
| */ |
| struct iwl_fips_test_cmd { |
| __le32 flags; |
| __le32 payload_len; |
| __le32 aad_len; |
| uint8_t key[FIPS_MAX_KEY_LEN]; |
| uint8_t aad[FIPS_MAX_AAD_LEN]; |
| __le16 reserved; |
| uint8_t nonce[FIPS_MAX_NONCE_LEN]; |
| uint8_t reserved2[3]; |
| uint8_t payload[0]; |
| } __packed; /* AES_SEC_TEST_VECTOR_HDR_API_S_VER_1 */ |
| |
| /** |
| * enum iwl_fips_test_status - FIPS test result status |
| * @IWL_FIPS_TEST_STATUS_FAILURE: the requested operation failed. |
| * @IWL_FIPS_TEST_STATUS_SUCCESS: the requested operation was completed |
| * successfully. The result buffer is valid. |
| */ |
| enum iwl_fips_test_status { |
| IWL_FIPS_TEST_STATUS_FAILURE, |
| IWL_FIPS_TEST_STATUS_SUCCESS, |
| }; |
| |
| /** |
| * struct iwl_fips_test_resp - FIPS test response |
| * @len: the length of the result in bytes. |
| * @payload: @len bytes of response followed by status code (uint32_t, one of |
| * &enum iwl_fips_test_status). |
| */ |
| struct iwl_fips_test_resp { |
| __le32 len; |
| uint8_t payload[0]; |
| } __packed; /* AES_SEC_TEST_VECTOR_RESP_API_S_VER_1 */ |
| |
| #endif // SRC_CONNECTIVITY_WLAN_DRIVERS_THIRD_PARTY_INTEL_IWLWIFI_FW_API_TESTING_H_ |