Microchip Crypto Auth device command object - this is a command builder only, it does not send the command. The result of a command method is a fully formed packet, ready to send to the ATCAIFace object to dispatch. More...
Data Structures | |
| struct | ATCAPacket |
Macros | |
| #define | ATCA_CMD_SIZE_MIN (7u) |
| minimum number of bytes in command (from count byte to second CRC byte) | |
| #define | ATCA_CMD_SIZE_MAX ((uint8_t)4 * 36 + 7) |
| maximum size of command packet (Verify) | |
| #define | CMD_STATUS_SUCCESS ((uint8_t)0x00) |
| status byte for success | |
| #define | CMD_STATUS_WAKEUP ((uint8_t)0x11) |
| status byte after wake-up | |
| #define | CMD_STATUS_BYTE_PARSE ((uint8_t)0x03) |
| command parse error | |
| #define | CMD_STATUS_BYTE_ECC ((uint8_t)0x05) |
| command ECC error | |
| #define | CMD_STATUS_BYTE_EXEC ((uint8_t)0x0F) |
| command execution error | |
| #define | CMD_STATUS_BYTE_COMM ((uint8_t)0xFF) |
| communication error | |
Opcodes for Crypto Authentication device commands | |
| #define | ATCA_CHECKMAC ((uint8_t)0x28) |
| CheckMac command op-code. | |
| #define | ATCA_DERIVE_KEY ((uint8_t)0x1C) |
| DeriveKey command op-code. | |
| #define | ATCA_INFO ((uint8_t)0x30) |
| Info command op-code. | |
| #define | ATCA_GENDIG ((uint8_t)0x15) |
| GenDig command op-code. | |
| #define | ATCA_GENKEY ((uint8_t)0x40) |
| GenKey command op-code. | |
| #define | ATCA_HMAC ((uint8_t)0x11) |
| HMAC command op-code. | |
| #define | ATCA_LOCK ((uint8_t)0x17) |
| Lock command op-code. | |
| #define | ATCA_MAC ((uint8_t)0x08) |
| MAC command op-code. | |
| #define | ATCA_NONCE ((uint8_t)0x16) |
| Nonce command op-code. | |
| #define | ATCA_PAUSE ((uint8_t)0x01) |
| Pause command op-code. | |
| #define | ATCA_PRIVWRITE ((uint8_t)0x46) |
| PrivWrite command op-code. | |
| #define | ATCA_RANDOM ((uint8_t)0x1B) |
| Random command op-code. | |
| #define | ATCA_READ ((uint8_t)0x02) |
| Read command op-code. | |
| #define | ATCA_SIGN ((uint8_t)0x41) |
| Sign command op-code. | |
| #define | ATCA_UPDATE_EXTRA ((uint8_t)0x20) |
| UpdateExtra command op-code. | |
| #define | ATCA_VERIFY ((uint8_t)0x45) |
| GenKey command op-code. | |
| #define | ATCA_WRITE ((uint8_t)0x12) |
| Write command op-code. | |
| #define | ATCA_ECDH ((uint8_t)0x43) |
| ECDH command op-code. | |
| #define | ATCA_COUNTER ((uint8_t)0x24) |
| Counter command op-code. | |
| #define | ATCA_DELETE ((uint8_t)0x13) |
| Delete command op-code. | |
| #define | ATCA_SHA ((uint8_t)0x47) |
| SHA command op-code. | |
| #define | ATCA_AES ((uint8_t)0x51) |
| AES command op-code. | |
| #define | ATCA_KDF ((uint8_t)0x56) |
| KDF command op-code. | |
| #define | ATCA_SECUREBOOT ((uint8_t)0x80) |
| Secure Boot command op-code. | |
| #define | ATCA_SELFTEST ((uint8_t)0x77) |
| Self test command op-code. | |
Definitions of Data and Packet Sizes | |
| #define | ATCA_BLOCK_SIZE (32u) |
| size of a block | |
| #define | ATCA_WORD_SIZE (4u) |
| size of a word | |
| #define | ATCA_PUB_KEY_PAD (4u) |
| size of the public key pad | |
| #define | ATCA_SERIAL_NUM_SIZE (9u) |
| number of bytes in the device serial number | |
| #define | ATCA_RSP_SIZE_VAL ((uint8_t)7) |
| size of response packet containing four bytes of data | |
| #define | ATCA_KEY_COUNT (16u) |
| number of keys | |
| #define | ATCA_ECC_CONFIG_SIZE (128u) |
| size of configuration zone | |
| #define | ATCA_SHA_CONFIG_SIZE (88u) |
| size of configuration zone | |
| #define | ATCA_CA2_CONFIG_SIZE (64u) |
| size of ECC204 configuration zone | |
| #define | ATCA_CA2_CONFIG_SLOT_SIZE (16u) |
| size of ECC204 configuration slot size | |
| #define | ATCA_OTP_SIZE (64u) |
| size of OTP zone | |
| #define | ATCA_DATA_SIZE (ATCA_KEY_COUNT * ATCA_KEY_SIZE) |
| size of data zone | |
| #define | ATCA_AES_GFM_SIZE ATCA_BLOCK_SIZE |
| size of GFM data | |
| #define | ATCA_CHIPMODE_OFFSET (19u) |
| ChipMode byte offset within the configuration zone. | |
| #define | ATCA_CHIPMODE_I2C_ADDRESS_FLAG ((uint8_t)0x01) |
| ChipMode I2C Address in UserExtraAdd flag. | |
| #define | ATCA_CHIPMODE_TTL_ENABLE_FLAG ((uint8_t)0x02) |
| ChipMode TTLenable flag. | |
| #define | ATCA_CHIPMODE_WATCHDOG_MASK ((uint8_t)0x04) |
| ChipMode watchdog duration mask. | |
| #define | ATCA_CHIPMODE_WATCHDOG_SHORT ((uint8_t)0x00) |
| ChipMode short watchdog (~1.3s) | |
| #define | ATCA_CHIPMODE_WATCHDOG_LONG ((uint8_t)0x04) |
| ChipMode long watchdog (~13s) | |
| #define | ATCA_CHIPMODE_CLOCK_DIV_MASK ((uint8_t)0xF8) |
| ChipMode clock divider mask. | |
| #define | ATCA_CHIPMODE_CLOCK_DIV_M0 ((uint8_t)0x00) |
| ChipMode clock divider M0. | |
| #define | ATCA_CHIPMODE_CLOCK_DIV_M1 ((uint8_t)0x28) |
| ChipMode clock divider M1. | |
| #define | ATCA_CHIPMODE_CLOCK_DIV_M2 ((uint8_t)0x68) |
| ChipMode clock divider M2. | |
| #define | ATCA_COUNT_SIZE (1u) |
| Number of bytes in the command packet Count. | |
| #define | ATCA_CRC_SIZE (2u) |
| Number of bytes in the command packet CRC. | |
| #define | ATCA_PACKET_OVERHEAD (ATCA_COUNT_SIZE + ATCA_CRC_SIZE) |
| Number of bytes in the command packet. | |
| #define | ATCA_PUB_KEY_SIZE (64u) |
| size of a p256 public key | |
| #define | ATCA_PRIV_KEY_SIZE (32u) |
| size of a p256 private key | |
| #define | ATCA_SIG_SIZE (64u) |
| size of a p256 signature | |
| #define | ATCA_KEY_SIZE (32u) |
| size of a symmetric SHA key | |
| #define | RSA2048_KEY_SIZE (256u) |
| size of a RSA private key | |
| #define | ATCA_RSP_SIZE_MIN ((uint8_t)4) |
| minimum number of bytes in response | |
| #define | ATCA_RSP_SIZE_4 ((uint8_t)7) |
| size of response packet containing 4 bytes data | |
| #define | ATCA_RSP_SIZE_72 ((uint8_t)75) |
| size of response packet containing 64 bytes data | |
| #define | ATCA_RSP_SIZE_64 ((uint8_t)67) |
| size of response packet containing 64 bytes data | |
| #define | ATCA_RSP_SIZE_32 (35u) |
| size of response packet containing 32 bytes data | |
| #define | ATCA_RSP_SIZE_16 ((uint8_t)19) |
| size of response packet containing 16 bytes data | |
| #define | ATCA_RSP_SIZE_MAX ((uint8_t)75) |
| maximum size of response packet (GenKey and Verify command) | |
| #define | OUTNONCE_SIZE (32u) |
| Size of the OutNonce response expected from several commands. | |
Definitions for Command Parameter Ranges | |
| #define | ATCA_KEY_ID_MAX ((uint8_t)15) |
| maximum value for key id | |
| #define | ATCA_OTP_BLOCK_MAX ((uint8_t)1) |
| maximum value for OTP block | |
Definitions for Indexes Common to All Commands | |
| #define | ATCA_COUNT_IDX (0) |
| command packet index for count | |
| #define | ATCA_OPCODE_IDX (1) |
| command packet index for op-code | |
| #define | ATCA_PARAM1_IDX (2) |
| command packet index for first parameter | |
| #define | ATCA_PARAM2_IDX (3) |
| command packet index for second parameter | |
| #define | ATCA_DATA_IDX (5) |
| command packet index for data load | |
| #define | ATCA_RSP_DATA_IDX (1u) |
| buffer index of data in response | |
Definitions for Zone and Address Parameters | |
| #define | ATCA_ZONE_MASK ((uint8_t)0x03) |
| Zone mask. | |
| #define | ATCA_ZONE_ENCRYPTED ((uint8_t)0x40) |
| Zone bit 6 set: Write is encrypted with an unlocked data zone. | |
| #define | ATCA_ZONE_READWRITE_32 ((uint8_t)0x80) |
| Zone bit 7 set: Access 32 bytes, otherwise 4 bytes. | |
| #define | ATCA_ADDRESS_MASK_CONFIG ((uint16_t)0x001F) |
| Address bits 5 to 7 are 0 for Configuration zone. | |
| #define | ATCA_ADDRESS_MASK_OTP ((uint16_t)0x000F) |
| Address bits 4 to 7 are 0 for OTP zone. | |
| #define | ATCA_ADDRESS_MASK ((uint16_t)0x007F) |
| Address bit 7 to 15 are always 0. | |
| #define | ATCA_TEMPKEY_KEYID ((uint16_t)0xFFFF) |
| KeyID when referencing TempKey. | |
Definitions for Key types | |
| #define | ATCA_B283_KEY_TYPE 0 |
| B283 NIST ECC key. | |
| #define | ATCA_K283_KEY_TYPE 1 |
| K283 NIST ECC key. | |
| #define | ATCA_P256_KEY_TYPE 4 |
| P256 NIST ECC key. | |
| #define | ATCA_AES_KEY_TYPE 6 |
| AES-128 Key. | |
| #define | ATCA_SHA_KEY_TYPE 7 |
| SHA key or other data. | |
Definitions for the AES Command | |
| #define | AES_MODE_IDX ATCA_PARAM1_IDX |
| AES command index for mode. | |
| #define | AES_KEYID_IDX ATCA_PARAM2_IDX |
| AES command index for key id. | |
| #define | AES_INPUT_IDX ATCA_DATA_IDX |
| AES command index for input data. | |
| #define | AES_COUNT (23u) |
| AES command packet size. | |
| #define | AES_MODE_MASK ((uint8_t)0xC7) |
| AES mode bits 3 to 5 are 0. | |
| #define | AES_MODE_KEY_BLOCK_MASK ((uint8_t)0xC0) |
| AES mode mask for key block field. | |
| #define | AES_MODE_OP_MASK ((uint8_t)0x07) |
| AES mode operation mask. | |
| #define | AES_MODE_ENCRYPT ((uint8_t)0x00) |
| AES mode: Encrypt. | |
| #define | AES_MODE_DECRYPT ((uint8_t)0x01) |
| AES mode: Decrypt. | |
| #define | AES_MODE_GFM ((uint8_t)0x03) |
| AES mode: GFM calculation. | |
| #define | AES_MODE_KEY_BLOCK_POS (6u) |
| Bit shift for key block in mode. | |
| #define | AES_DATA_SIZE (16u) |
| size of AES encrypt/decrypt data | |
| #define | AES_RSP_SIZE ATCA_RSP_SIZE_16 |
| AES command response packet size. | |
Definitions for the CheckMac Command | |
| #define | CHECKMAC_MODE_IDX ATCA_PARAM1_IDX |
| CheckMAC command index for mode. | |
| #define | CHECKMAC_KEYID_IDX ATCA_PARAM2_IDX |
| CheckMAC command index for key identifier. | |
| #define | CHECKMAC_CLIENT_CHALLENGE_IDX ATCA_DATA_IDX |
| CheckMAC command index for client challenge. | |
| #define | CHECKMAC_CLIENT_RESPONSE_IDX (37u) |
| CheckMAC command index for client response. | |
| #define | CHECKMAC_DATA_IDX (69u) |
| CheckMAC command index for other data. | |
| #define | CHECKMAC_COUNT (84u) |
| CheckMAC command packet size. | |
| #define | CHECKMAC_MODE_CHALLENGE ((uint8_t)0x00) |
| CheckMAC mode 0: first SHA block from key id. | |
| #define | CHECKMAC_MODE_BLOCK2_TEMPKEY ((uint8_t)0x01) |
| CheckMAC mode bit 0: second SHA block from TempKey. | |
| #define | CHECKMAC_MODE_BLOCK1_TEMPKEY ((uint8_t)0x02) |
| CheckMAC mode bit 1: first SHA block from TempKey. | |
| #define | CHECKMAC_MODE_SOURCE_FLAG_MATCH ((uint8_t)0x04) |
| CheckMAC mode bit 2: match TempKey.SourceFlag. | |
| #define | CHECKMAC_MODE_INCLUDE_OTP_64 ((uint8_t)0x20) |
| CheckMAC mode bit 5: include first 64 OTP bits. | |
| #define | CHECKMAC_MODE_MASK ((uint8_t)0x27) |
| CheckMAC mode bits 3, 4, 6, and 7 are 0. | |
| #define | CHECKMAC_MODE_OUTPUT_MAC_RESPONSE ((uint8_t)0x08) |
| CheckMAC mode bit 3: Single byte boolean response + 32 bytes mac in SHA105 device. | |
| #define | CHECKMAC_CLIENT_CHALLENGE_SIZE (32u) |
| CheckMAC size of client challenge. | |
| #define | CHECKMAC_CLIENT_RESPONSE_SIZE (32u) |
| CheckMAC size of client response. | |
| #define | CHECKMAC_OTHER_DATA_SIZE (13u) |
| CheckMAC size of "other data". | |
| #define | CHECKMAC_CLIENT_COMMAND_SIZE (4u) |
| CheckMAC size of client command header size inside "other data". | |
| #define | CHECKMAC_CMD_MATCH (0u) |
| CheckMAC return value when there is a match. | |
| #define | CHECKMAC_CMD_MISMATCH (1u) |
| CheckMAC return value when there is a mismatch. | |
| #define | CHECKMAC_RSP_SIZE ATCA_RSP_SIZE_MIN |
| CheckMAC response packet size. | |
| #define | CHECKMAC_SINGLE_BYTE_BOOL_RESP (1u) |
| #define | CHECKMAC_SHA105_DEFAULT_KEYID ((uint16_t)0x0003) |
Definitions for the Counter command | |
| #define | COUNTER_COUNT ATCA_CMD_SIZE_MIN |
| #define | COUNTER_MODE_IDX ATCA_PARAM1_IDX |
| Counter command index for mode. | |
| #define | COUNTER_KEYID_IDX ATCA_PARAM2_IDX |
| Counter command index for key id. | |
| #define | COUNTER_MODE_MASK ((uint8_t)0x01) |
| Counter mode bits 1 to 7 are 0. | |
| #define | COUNTER_MAX_VALUE ((uint32_t)2097151) |
| Counter maximum value of the counter. | |
| #define | COUNTER_MODE_READ ((uint8_t)0x00) |
| Counter command mode for reading. | |
| #define | COUNTER_MODE_INCREMENT ((uint8_t)0x01) |
| Counter command mode for incrementing. | |
| #define | COUNTER_RSP_SIZE ATCA_RSP_SIZE_4 |
| Counter command response packet size. | |
| #define | COUNTER_SIZE ATCA_RSP_SIZE_MIN |
| Counter size in binary. | |
| #define | COUNTER_MAX_VALUE_CA2 ((uint16_t)10000) |
| Counter maximum value of the counter for ECC204. | |
Definitions for the Delete command | |
| #define | DELETE_COUNT (39u) |
| #define | DELETE_MODE ((uint8_t)0x00) |
| #define | DELETE_MAC_SIZE (32u) |
| #define | DELETE_NONCE_KEY_ID ((uint16_t)0x8000) |
Definitions for the DeriveKey Command | |
| #define | DERIVE_KEY_RANDOM_IDX ATCA_PARAM1_IDX |
| DeriveKey command index for random bit. | |
| #define | DERIVE_KEY_TARGETKEY_IDX ATCA_PARAM2_IDX |
| DeriveKey command index for target slot. | |
| #define | DERIVE_KEY_MAC_IDX ATCA_DATA_IDX |
| DeriveKey command index for optional MAC. | |
| #define | DERIVE_KEY_COUNT_SMALL ATCA_CMD_SIZE_MIN |
| DeriveKey command packet size without MAC. | |
| #define | DERIVE_KEY_MODE ((uint8_t)0x04) |
| DeriveKey command mode set to 4 as in datasheet. | |
| #define | DERIVE_KEY_COUNT_LARGE (39u) |
| DeriveKey command packet size with MAC. | |
| #define | DERIVE_KEY_RANDOM_FLAG ((uint8_t)4) |
| DeriveKey 1. parameter; has to match TempKey.SourceFlag. | |
| #define | DERIVE_KEY_MAC_SIZE (32u) |
| DeriveKey MAC size. | |
| #define | DERIVE_KEY_RSP_SIZE ATCA_RSP_SIZE_MIN |
| DeriveKey response packet size. | |
Definitions for the ECDH Command | |
| #define | ECDH_PREFIX_MODE ((uint8_t)0x00) |
| #define | ECDH_COUNT (ATCA_CMD_SIZE_MIN + ATCA_PUB_KEY_SIZE) |
| #define | ECDH_MODE_SOURCE_MASK ((uint8_t)0x01) |
| #define | ECDH_MODE_SOURCE_EEPROM_SLOT ((uint8_t)0x00) |
| #define | ECDH_MODE_SOURCE_TEMPKEY ((uint8_t)0x01) |
| #define | ECDH_MODE_OUTPUT_MASK ((uint8_t)0x02) |
| #define | ECDH_MODE_OUTPUT_CLEAR ((uint8_t)0x00) |
| #define | ECDH_MODE_OUTPUT_ENC ((uint8_t)0x02) |
| #define | ECDH_MODE_COPY_MASK ((uint8_t)0x0C) |
| #define | ECDH_MODE_COPY_COMPATIBLE ((uint8_t)0x00) |
| #define | ECDH_MODE_COPY_EEPROM_SLOT ((uint8_t)0x04) |
| #define | ECDH_MODE_COPY_TEMP_KEY ((uint8_t)0x08) |
| #define | ECDH_MODE_COPY_OUTPUT_BUFFER ((uint8_t)0x0C) |
| #define | ECDH_KEY_SIZE ATCA_BLOCK_SIZE |
| ECDH output data size. | |
| #define | ECDH_RSP_SIZE ATCA_RSP_SIZE_64 |
| ECDH command packet size. | |
Definitions for the GenDig Command | |
| #define | GENDIG_ZONE_IDX ATCA_PARAM1_IDX |
| GenDig command index for zone. | |
| #define | GENDIG_KEYID_IDX ATCA_PARAM2_IDX |
| GenDig command index for key id. | |
| #define | GENDIG_DATA_IDX ATCA_DATA_IDX |
| GenDig command index for optional data. | |
| #define | GENDIG_COUNT ATCA_CMD_SIZE_MIN |
| GenDig command packet size without "other data". | |
| #define | GENDIG_ZONE_CONFIG ((uint8_t)0) |
| GenDig zone id config. Use KeyID to specify any of the four 256-bit blocks of the Configuration zone. | |
| #define | GENDIG_ZONE_OTP ((uint8_t)1) |
| GenDig zone id OTP. Use KeyID to specify either the first or second 256-bit block of the OTP zone. | |
| #define | GENDIG_ZONE_DATA ((uint8_t)2) |
| GenDig zone id data. Use KeyID to specify a slot in the Data zone or a transport key in the hardware array. | |
| #define | GENDIG_ZONE_SHARED_NONCE ((uint8_t)3) |
| GenDig zone id shared nonce. KeyID specifies the location of the input value in the message generation. | |
| #define | GENDIG_ZONE_COUNTER ((uint8_t)4) |
| GenDig zone id counter. KeyID specifies the monotonic counter ID to be included in the message generation. | |
| #define | GENDIG_ZONE_KEY_CONFIG ((uint8_t)5) |
| GenDig zone id key config. KeyID specifies the slot for which the configuration information is to be included in the message generation. | |
| #define | GENDIG_RSP_SIZE ATCA_RSP_SIZE_MIN |
| GenDig command response packet size. | |
| #define | GENDIG_USE_TEMPKEY_BIT ((uint16_t)0x8000) |
| Use temp key for GenDig command if bit 15 is 1. | |
Definitions for the GenDivKey Command | |
| #define | GENDIVKEY_MODE ((uint8_t)2) |
| #define | GENDIVKEY_OTHER_DATA_SIZE ((uint8_t)4) |
| #define | GENDIVKEY_DEFAULT_KEYID ((uint16_t)0x0003) |
Definitions for the GenKey Command | |
| #define | GENKEY_MODE_IDX ATCA_PARAM1_IDX |
| GenKey command index for mode. | |
| #define | GENKEY_KEYID_IDX ATCA_PARAM2_IDX |
| GenKey command index for key id. | |
| #define | GENKEY_DATA_IDX (5u) |
| GenKey command index for other data. | |
| #define | GENKEY_COUNT ATCA_CMD_SIZE_MIN |
| GenKey command packet size without "other data". | |
| #define | GENKEY_COUNT_DATA (10u) |
| GenKey command packet size with "other data". | |
| #define | GENKEY_OTHER_DATA_SIZE (3u) |
| GenKey size of "other data". | |
| #define | GENKEY_MODE_MASK ((uint8_t)0x1C) |
| GenKey mode bits 0 to 1 and 5 to 7 are 0. | |
| #define | GENKEY_MODE_PRIVATE ((uint8_t)0x04) |
| GenKey mode: private key generation. | |
| #define | GENKEY_MODE_PUBLIC ((uint8_t)0x00) |
| GenKey mode: public key calculation. | |
| #define | GENKEY_MODE_DIGEST ((uint8_t)0x08) |
| GenKey mode: PubKey digest will be created after the public key is calculated. | |
| #define | GENKEY_MODE_PUBKEY_DIGEST ((uint8_t)0x10) |
| GenKey mode: Calculate PubKey digest on the public key in KeyId. | |
| #define | GENKEY_MODE_MAC ((uint8_t)0x20) |
| Genkey mode: Calculate MAC of public key + session key. | |
| #define | GENKEY_PRIVATE_TO_TEMPKEY ((uint16_t)0xFFFF) |
| GenKey Create private key and store to tempkey (608 only) | |
| #define | GENKEY_RSP_SIZE_SHORT ATCA_RSP_SIZE_MIN |
| GenKey response packet size in Digest mode. | |
| #define | GENKEY_RSP_SIZE_LONG ATCA_RSP_SIZE_64 |
| GenKey response packet size when returning a public key. | |
Definitions for the HMAC Command | |
| #define | HMAC_MODE_IDX ATCA_PARAM1_IDX |
| HMAC command index for mode. | |
| #define | HMAC_KEYID_IDX ATCA_PARAM2_IDX |
| HMAC command index for key id. | |
| #define | HMAC_COUNT ATCA_CMD_SIZE_MIN |
| HMAC command packet size. | |
| #define | HMAC_MODE_FLAG_TK_RAND ((uint8_t)0x00) |
| HMAC mode bit 2: The value of this bit must match the value in TempKey.SourceFlag or the command will return an error. | |
| #define | HMAC_MODE_FLAG_TK_NORAND ((uint8_t)0x04) |
| HMAC mode bit 2: The value of this bit must match the value in TempKey.SourceFlag or the command will return an error. | |
| #define | HMAC_MODE_FLAG_OTP88 ((uint8_t)0x10) |
| HMAC mode bit 4: Include the first 88 OTP bits (OTP[0] through OTP[10]) in the message.; otherwise, the corresponding message bits are set to zero. Not applicable for ATECC508A. | |
| #define | HMAC_MODE_FLAG_OTP64 ((uint8_t)0x20) |
| HMAC mode bit 5: Include the first 64 OTP bits (OTP[0] through OTP[7]) in the message.; otherwise, the corresponding message bits are set to zero. If Mode[4] is set, the value of this mode bit is ignored. Not applicable for ATECC508A. | |
| #define | HMAC_MODE_FLAG_FULLSN ((uint8_t)0x40) |
| HMAC mode bit 6: If set, include the 48 bits SN[2:3] and SN[4:7] in the message.; otherwise, the corresponding message bits are set to zero. | |
| #define | HMAC_MODE_MASK ((uint8_t)0x74) |
| HMAC mode bits 0, 1, 3, and 7 are 0. | |
| #define | HMAC_DIGEST_SIZE (32u) |
| HMAC size of digest response. | |
| #define | HMAC_RSP_SIZE ATCA_RSP_SIZE_32 |
| HMAC command response packet size. | |
Definitions for the Info Command | |
| #define | INFO_PARAM1_IDX ATCA_PARAM1_IDX |
| Info command index for 1. parameter. | |
| #define | INFO_PARAM2_IDX ATCA_PARAM2_IDX |
| Info command index for 2. parameter. | |
| #define | INFO_COUNT ATCA_CMD_SIZE_MIN |
| Info command packet size. | |
| #define | INFO_MODE_REVISION ((uint8_t)0x00) |
| Info mode Revision. | |
| #define | INFO_MODE_KEY_VALID ((uint8_t)0x01) |
| Info mode KeyValid. | |
| #define | INFO_MODE_STATE ((uint8_t)0x02) |
| Info mode State. | |
| #define | INFO_MODE_LOCK_STATUS ((uint8_t)0x02) |
| Info mode Lock status for ECC204,TA010,SHA10x devices. | |
| #define | INFO_MODE_CHIP_STATUS ((uint8_t)0xC5) |
| Info mode Chip status for ECC204,TA010,SHA10x devices. | |
| #define | INFO_MODE_GPIO ((uint8_t)0x03) |
| Info mode GPIO. | |
| #define | INFO_MODE_VOL_KEY_PERMIT ((uint8_t)0x04) |
| Info mode GPIO. | |
| #define | INFO_MODE_MAX ((uint8_t)0x03) |
| Info mode maximum value. | |
| #define | INFO_NO_STATE ((uint8_t)0x00) |
| Info mode is not the state mode. | |
| #define | INFO_OUTPUT_STATE_MASK ((uint8_t)0x01) |
| Info output state mask. | |
| #define | INFO_DRIVER_STATE_MASK ((uint8_t)0x02) |
| Info driver state mask. | |
| #define | INFO_PARAM2_SET_LATCH_STATE ((uint16_t)0x0002) |
| Info param2 to set the persistent latch state. | |
| #define | INFO_PARAM2_LATCH_SET ((uint16_t)0x0001) |
| Info param2 to set the persistent latch. | |
| #define | INFO_PARAM2_LATCH_CLEAR ((uint16_t)0x0000) |
| Info param2 to clear the persistent latch. | |
| #define | INFO_SIZE ((uint8_t)0x04) |
| Info return size. | |
| #define | INFO_RSP_SIZE ATCA_RSP_SIZE_VAL |
| Info command response packet size. | |
Definitions for the KDF Command | |
| #define | KDF_MODE_IDX ATCA_PARAM1_IDX |
| KDF command index for mode. | |
| #define | KDF_KEYID_IDX ATCA_PARAM2_IDX |
| KDF command index for key id. | |
| #define | KDF_DETAILS_IDX ATCA_DATA_IDX |
| KDF command index for details. | |
| #define | KDF_DETAILS_SIZE (4u) |
| KDF details (param3) size. | |
| #define | KDF_MESSAGE_IDX (ATCA_DATA_IDX + KDF_DETAILS_SIZE) |
| #define | KDF_MODE_SOURCE_MASK ((uint8_t)0x03) |
| KDF mode source key mask. | |
| #define | KDF_MODE_SOURCE_TEMPKEY ((uint8_t)0x00) |
| KDF mode source key in TempKey. | |
| #define | KDF_MODE_SOURCE_TEMPKEY_UP ((uint8_t)0x01) |
| KDF mode source key in upper TempKey. | |
| #define | KDF_MODE_SOURCE_SLOT ((uint8_t)0x02) |
| KDF mode source key in a slot. | |
| #define | KDF_MODE_SOURCE_ALTKEYBUF ((uint8_t)0x03) |
| KDF mode source key in alternate key buffer. | |
| #define | KDF_MODE_TARGET_MASK ((uint8_t)0x1C) |
| KDF mode target key mask. | |
| #define | KDF_MODE_TARGET_TEMPKEY ((uint8_t)0x00) |
| KDF mode target key in TempKey. | |
| #define | KDF_MODE_TARGET_TEMPKEY_UP ((uint8_t)0x04) |
| KDF mode target key in upper TempKey. | |
| #define | KDF_MODE_TARGET_SLOT ((uint8_t)0x08) |
| KDF mode target key in slot. | |
| #define | KDF_MODE_TARGET_ALTKEYBUF ((uint8_t)0x0C) |
| KDF mode target key in alternate key buffer. | |
| #define | KDF_MODE_TARGET_OUTPUT ((uint8_t)0x10) |
| KDF mode target key in output buffer. | |
| #define | KDF_MODE_TARGET_OUTPUT_ENC ((uint8_t)0x14) |
| KDF mode target key encrypted in output buffer. | |
| #define | KDF_MODE_ALG_MASK ((uint8_t)0x60) |
| KDF mode algorithm mask. | |
| #define | KDF_MODE_ALG_PRF ((uint8_t)0x00) |
| KDF mode PRF algorithm. | |
| #define | KDF_MODE_ALG_AES ((uint8_t)0x20) |
| KDF mode AES algorithm. | |
| #define | KDF_MODE_ALG_HKDF ((uint8_t)0x40) |
| KDF mode HKDF algorithm. | |
| #define | KDF_DETAILS_PRF_KEY_LEN_MASK ((uint32_t)0x00000003) |
| KDF details for PRF, source key length mask. | |
| #define | KDF_DETAILS_PRF_KEY_LEN_16 ((uint32_t)0x00000000) |
| KDF details for PRF, source key length is 16 bytes. | |
| #define | KDF_DETAILS_PRF_KEY_LEN_32 ((uint32_t)0x00000001) |
| KDF details for PRF, source key length is 32 bytes. | |
| #define | KDF_DETAILS_PRF_KEY_LEN_48 ((uint32_t)0x00000002) |
| KDF details for PRF, source key length is 48 bytes. | |
| #define | KDF_DETAILS_PRF_KEY_LEN_64 ((uint32_t)0x00000003) |
| KDF details for PRF, source key length is 64 bytes. | |
| #define | KDF_DETAILS_PRF_TARGET_LEN_MASK ((uint32_t)0x00000100) |
| KDF details for PRF, target length mask. | |
| #define | KDF_DETAILS_PRF_TARGET_LEN_32 ((uint32_t)0x00000000) |
| KDF details for PRF, target length is 32 bytes. | |
| #define | KDF_DETAILS_PRF_TARGET_LEN_64 ((uint32_t)0x00000100) |
| KDF details for PRF, target length is 64 bytes. | |
| #define | KDF_DETAILS_PRF_AEAD_MASK ((uint32_t)0x00000600) |
| KDF details for PRF, AEAD processing mask. | |
| #define | KDF_DETAILS_PRF_AEAD_MODE0 ((uint32_t)0x00000000) |
| KDF details for PRF, AEAD no processing. | |
| #define | KDF_DETAILS_PRF_AEAD_MODE1 ((uint32_t)0x00000200) |
| KDF details for PRF, AEAD First 32 go to target, second 32 go to output buffer. | |
| #define | KDF_DETAILS_AES_KEY_LOC_MASK ((uint32_t)0x00000003) |
| KDF details for AES, key location mask. | |
| #define | KDF_DETAILS_HKDF_MSG_LOC_MASK ((uint32_t)0x00000003) |
| KDF details for HKDF, message location mask. | |
| #define | KDF_DETAILS_HKDF_MSG_LOC_SLOT ((uint32_t)0x00000000) |
| KDF details for HKDF, message location in slot. | |
| #define | KDF_DETAILS_HKDF_MSG_LOC_TEMPKEY ((uint32_t)0x00000001) |
| KDF details for HKDF, message location in TempKey. | |
| #define | KDF_DETAILS_HKDF_MSG_LOC_INPUT ((uint32_t)0x00000002) |
| KDF details for HKDF, message location in input parameter. | |
| #define | KDF_DETAILS_HKDF_MSG_LOC_IV ((uint32_t)0x00000003) |
| KDF details for HKDF, message location is a special IV function. | |
| #define | KDF_DETAILS_HKDF_ZERO_KEY ((uint32_t)0x00000004) |
| KDF details for HKDF, key is 32 bytes of zero. | |
Definitions for the Lock Command | |
| #define | LOCK_ZONE_IDX ATCA_PARAM1_IDX |
| Lock command index for zone. | |
| #define | LOCK_SUMMARY_IDX ATCA_PARAM2_IDX |
| Lock command index for summary. | |
| #define | LOCK_COUNT ATCA_CMD_SIZE_MIN |
| Lock command packet size. | |
| #define | LOCK_ZONE_CONFIG ((uint8_t)0x00) |
| Lock zone is Config. | |
| #define | LOCK_ZONE_DATA ((uint8_t)0x01) |
| Lock zone is OTP or Data. | |
| #define | LOCK_ZONE_DATA_SLOT ((uint8_t)0x02) |
| Lock slot of Data. | |
| #define | LOCK_ZONE_CA2_DATA ((uint8_t)0x00) |
| Lock second gen Data zone by slot. | |
| #define | LOCK_ZONE_CA2_CONFIG ((uint8_t)0x01) |
| Lock second gen configuration zone by slot. | |
| #define | LOCK_ZONE_NO_CRC ((uint8_t)0x80) |
| Lock command: Ignore summary. | |
| #define | LOCK_ZONE_MASK ((uint8_t)0xBF) |
| Lock parameter 1 bits 6 are 0. | |
| #define | ATCA_UNLOCKED ((uint8_t)0x55) |
| Value indicating an unlocked zone. | |
| #define | ATCA_LOCKED ((uint8_t)0x00) |
| Value indicating a locked zone. | |
| #define | LOCK_RSP_SIZE ATCA_RSP_SIZE_MIN |
| Lock command response packet size. | |
Definitions for the MAC Command | |
| #define | MAC_MODE_IDX ATCA_PARAM1_IDX |
| MAC command index for mode. | |
| #define | MAC_KEYID_IDX ATCA_PARAM2_IDX |
| MAC command index for key id. | |
| #define | MAC_CHALLENGE_IDX ATCA_DATA_IDX |
| MAC command index for optional challenge. | |
| #define | MAC_COUNT_SHORT ATCA_CMD_SIZE_MIN |
| MAC command packet size without challenge. | |
| #define | MAC_COUNT_LONG (39u) |
| MAC command packet size with challenge. | |
| #define | MAC_MODE_CHALLENGE ((uint8_t)0x00) |
| MAC mode 0: first SHA block from data slot. | |
| #define | MAC_MODE_BLOCK2_TEMPKEY ((uint8_t)0x01) |
| MAC mode bit 0: second SHA block from TempKey. | |
| #define | MAC_MODE_BLOCK1_TEMPKEY ((uint8_t)0x02) |
| MAC mode bit 1: first SHA block from TempKey. | |
| #define | MAC_MODE_SOURCE_FLAG_MATCH ((uint8_t)0x04) |
| MAC mode bit 2: match TempKey.SourceFlag. | |
| #define | MAC_MODE_PTNONCE_TEMPKEY ((uint8_t)0x06) |
| MAC mode bit 0: second SHA block from TempKey. | |
| #define | MAC_MODE_PASSTHROUGH ((uint8_t)0x07) |
| MAC mode bit 0-2: pass-through mode. | |
| #define | MAC_MODE_INCLUDE_OTP_88 ((uint8_t)0x10) |
| MAC mode bit 4: include first 88 OTP bits. | |
| #define | MAC_MODE_INCLUDE_OTP_64 ((uint8_t)0x20) |
| MAC mode bit 5: include first 64 OTP bits. | |
| #define | MAC_MODE_INCLUDE_SN ((uint8_t)0x40) |
| MAC mode bit 6: include serial number. | |
| #define | MAC_CHALLENGE_SIZE (32u) |
| MAC size of challenge. | |
| #define | MAC_SIZE (32u) |
| MAC size of response. | |
| #define | MAC_MODE_MASK ((uint8_t)0x77) |
| MAC mode bits 3 and 7 are 0. | |
| #define | MAC_RSP_SIZE ATCA_RSP_SIZE_32 |
| MAC command response packet size. | |
| #define | MAC_SHA104_DEFAULT_KEYID ((uint16_t)0x0003) |
Definitions for the Nonce Command | |
| #define | NONCE_MODE_IDX ATCA_PARAM1_IDX |
| Nonce command index for mode. | |
| #define | NONCE_PARAM2_IDX ATCA_PARAM2_IDX |
| Nonce command index for 2. parameter. | |
| #define | NONCE_INPUT_IDX ATCA_DATA_IDX |
| Nonce command index for input data. | |
| #define | NONCE_COUNT_SHORT (ATCA_CMD_SIZE_MIN + 20u) |
| Nonce command packet size for 20 bytes of NumIn. | |
| #define | NONCE_COUNT_LONG (ATCA_CMD_SIZE_MIN + 32u) |
| Nonce command packet size for 32 bytes of NumIn. | |
| #define | NONCE_COUNT_LONG_64 (ATCA_CMD_SIZE_MIN + 64u) |
| Nonce command packet size for 64 bytes of NumIn. | |
| #define | NONCE_MODE_MASK ((uint8_t)0x03) |
| Nonce mode bits 2 to 7 are 0. | |
| #define | NONCE_MODE_SEED_UPDATE ((uint8_t)0x00) |
| Nonce mode: update seed. | |
| #define | NONCE_MODE_NO_SEED_UPDATE ((uint8_t)0x01) |
| Nonce mode: do not update seed. | |
| #define | NONCE_MODE_INVALID ((uint8_t)0x02) |
| Nonce mode 2 is invalid. | |
| #define | NONCE_MODE_PASSTHROUGH ((uint8_t)0x03) |
| Nonce mode: pass-through. | |
| #define | NONCE_MODE_GEN_SESSION_KEY ((uint8_t)0x02) |
| NOnce mode: Generate session key in ECC204 device. | |
| #define | NONCE_MODE_INPUT_LEN_MASK ((uint8_t)0x20) |
| Nonce mode: input size mask. | |
| #define | NONCE_MODE_INPUT_LEN_32 ((uint8_t)0x00) |
| Nonce mode: input size is 32 bytes. | |
| #define | NONCE_MODE_INPUT_LEN_64 ((uint8_t)0x20) |
| Nonce mode: input size is 64 bytes. | |
| #define | NONCE_MODE_TARGET_MASK ((uint8_t)0xC0) |
| Nonce mode: target mask. | |
| #define | NONCE_MODE_TARGET_TEMPKEY ((uint8_t)0x00) |
| Nonce mode: target is TempKey. | |
| #define | NONCE_MODE_TARGET_MSGDIGBUF ((uint8_t)0x40) |
| Nonce mode: target is Message Digest Buffer. | |
| #define | NONCE_MODE_TARGET_ALTKEYBUF ((uint8_t)0x80) |
| Nonce mode: target is Alternate Key Buffer. | |
| #define | NONCE_ZERO_CALC_MASK ((uint16_t)0x8000) |
| Nonce zero (param2): calculation mode mask. | |
| #define | NONCE_ZERO_CALC_RANDOM ((uint16_t)0x0000) |
| Nonce zero (param2): calculation mode random, use RNG in calculation and return RNG output. | |
| #define | NONCE_ZERO_CALC_TEMPKEY ((uint16_t)0x8000) |
| Nonce zero (param2): calculation mode TempKey, use TempKey in calculation and return new TempKey value. | |
| #define | NONCE_NUMIN_SIZE (20) |
| Nonce NumIn size for random modes. | |
| #define | NONCE_NUMIN_SIZE_PASSTHROUGH (32) |
| Nonce NumIn size for 32-byte pass-through mode. | |
| #define | NONCE_RSP_SIZE_SHORT ATCA_RSP_SIZE_MIN |
| Nonce command response packet size with no output. | |
| #define | NONCE_RSP_SIZE_LONG ATCA_RSP_SIZE_32 |
| Nonce command response packet size with output. | |
Definitions for the Pause Command | |
| #define | PAUSE_SELECT_IDX ATCA_PARAM1_IDX |
| Pause command index for Selector. | |
| #define | PAUSE_PARAM2_IDX ATCA_PARAM2_IDX |
| Pause command index for 2. parameter. | |
| #define | PAUSE_COUNT ATCA_CMD_SIZE_MIN |
| Pause command packet size. | |
| #define | PAUSE_RSP_SIZE ATCA_RSP_SIZE_MIN |
| Pause command response packet size. | |
Definitions for the PrivWrite Command | |
| #define | PRIVWRITE_ZONE_IDX ATCA_PARAM1_IDX |
| PrivWrite command index for zone. | |
| #define | PRIVWRITE_KEYID_IDX ATCA_PARAM2_IDX |
| PrivWrite command index for KeyID. | |
| #define | PRIVWRITE_VALUE_IDX ( 5) |
| PrivWrite command index for value. | |
| #define | PRIVWRITE_MAC_IDX (41) |
| PrivWrite command index for MAC. | |
| #define | PRIVWRITE_COUNT (75) |
| PrivWrite command packet size. | |
| #define | PRIVWRITE_ZONE_MASK ((uint8_t)0x40) |
| PrivWrite zone bits 0 to 5 and 7 are 0. | |
| #define | PRIVWRITE_MODE_ENCRYPT ((uint8_t)0x40) |
| PrivWrite mode: encrypted. | |
| #define | PRIVWRITE_RSP_SIZE ATCA_RSP_SIZE_MIN |
| PrivWrite command response packet size. | |
Definitions for the Random Command | |
| #define | RANDOM_MODE_IDX ATCA_PARAM1_IDX |
| Random command index for mode. | |
| #define | RANDOM_PARAM2_IDX ATCA_PARAM2_IDX |
| Random command index for 2. parameter. | |
| #define | RANDOM_COUNT ATCA_CMD_SIZE_MIN |
| Random command packet size. | |
| #define | RANDOM_SEED_UPDATE ((uint8_t)0x00) |
| Random mode for automatic seed update. | |
| #define | RANDOM_NO_SEED_UPDATE ((uint8_t)0x01) |
| Random mode for no seed update. | |
| #define | RANDOM_NUM_SIZE ((uint8_t)32) |
| Number of bytes in the data packet of a random command. | |
| #define | RANDOM_RSP_SIZE ATCA_RSP_SIZE_32 |
| Random command response packet size. | |
Definitions for the Read Command | |
| #define | READ_ZONE_IDX ATCA_PARAM1_IDX |
| Read command index for zone. | |
| #define | READ_ADDR_IDX ATCA_PARAM2_IDX |
| Read command index for address. | |
| #define | READ_COUNT ATCA_CMD_SIZE_MIN |
| Read command packet size. | |
| #define | READ_ZONE_MASK ((uint8_t)0x83) |
| Read zone bits 2 to 6 are 0. | |
| #define | READ_4_RSP_SIZE ATCA_RSP_SIZE_VAL |
| Read command response packet size when reading 4 bytes. | |
| #define | READ_32_RSP_SIZE ATCA_RSP_SIZE_32 |
| Read command response packet size when reading 32 bytes. | |
Definitions for the SecureBoot Command | |
| #define | SECUREBOOT_MODE_IDX ATCA_PARAM1_IDX |
| SecureBoot command index for mode. | |
| #define | SECUREBOOT_DIGEST_SIZE (32u) |
| SecureBoot digest input size. | |
| #define | SECUREBOOT_SIGNATURE_SIZE (64u) |
| SecureBoot signature input size. | |
| #define | SECUREBOOT_COUNT_DIG (ATCA_CMD_SIZE_MIN + SECUREBOOT_DIGEST_SIZE) |
| SecureBoot command packet size for just a digest. | |
| #define | SECUREBOOT_COUNT_DIG_SIG (ATCA_CMD_SIZE_MIN + SECUREBOOT_DIGEST_SIZE + SECUREBOOT_SIGNATURE_SIZE) |
| SecureBoot command packet size for a digest and signature. | |
| #define | SECUREBOOT_MAC_SIZE (32u) |
| SecureBoot MAC output size. | |
| #define | SECUREBOOT_RSP_SIZE_NO_MAC ATCA_RSP_SIZE_MIN |
| SecureBoot response packet size for no MAC. | |
| #define | SECUREBOOT_RSP_SIZE_MAC (ATCA_PACKET_OVERHEAD + SECUREBOOT_MAC_SIZE) |
| SecureBoot response packet size with MAC. | |
| #define | SECUREBOOT_MODE_MASK ((uint8_t)0x07) |
| SecureBoot mode mask. | |
| #define | SECUREBOOT_MODE_FULL ((uint8_t)0x05) |
| SecureBoot mode Full. | |
| #define | SECUREBOOT_MODE_FULL_STORE ((uint8_t)0x06) |
| SecureBoot mode FullStore. | |
| #define | SECUREBOOT_MODE_FULL_COPY ((uint8_t)0x07) |
| SecureBoot mode FullCopy. | |
| #define | SECUREBOOT_MODE_PROHIBIT_FLAG ((uint8_t)0x40) |
| SecureBoot mode flag to prohibit SecureBoot until next power cycle. | |
| #define | SECUREBOOT_MODE_ENC_MAC_FLAG ((uint8_t)0x80) |
| SecureBoot mode flag for encrypted digest and returning validating MAC. | |
| #define | SECUREBOOTCONFIG_OFFSET (70) |
| SecureBootConfig byte offset into the configuration zone. | |
| #define | SECUREBOOTCONFIG_MODE_MASK ((uint16_t)0x0003) |
| Mask for SecureBootMode field in SecureBootConfig value. | |
| #define | SECUREBOOTCONFIG_MODE_DISABLED ((uint16_t)0x0000) |
| Disabled SecureBootMode in SecureBootConfig value. | |
| #define | SECUREBOOTCONFIG_MODE_FULL_BOTH ((uint16_t)0x0001) |
| Both digest and signature always required SecureBootMode in SecureBootConfig value. | |
| #define | SECUREBOOTCONFIG_MODE_FULL_SIG ((uint16_t)0x0002) |
| Signature stored SecureBootMode in SecureBootConfig value. | |
| #define | SECUREBOOTCONFIG_MODE_FULL_DIG ((uint16_t)0x0003) |
| Digest stored SecureBootMode in SecureBootConfig value. | |
Definitions for the SelfTest Command | |
| #define | SELFTEST_MODE_IDX ATCA_PARAM1_IDX |
| SelfTest command index for mode. | |
| #define | SELFTEST_COUNT ATCA_CMD_SIZE_MIN |
| SelfTest command packet size. | |
| #define | SELFTEST_MODE_RNG ((uint8_t)0x01) |
| SelfTest mode RNG DRBG function. | |
| #define | SELFTEST_MODE_ECDSA_SIGN_VERIFY ((uint8_t)0x04) |
| SelfTest mode ECDSA verify function. | |
| #define | SELFTEST_MODE_ECDH ((uint8_t)0x08) |
| SelfTest mode ECDH function. | |
| #define | SELFTEST_MODE_AES ((uint8_t)0x10) |
| SelfTest mode AES encrypt function. | |
| #define | SELFTEST_MODE_SHA ((uint8_t)0x20) |
| SelfTest mode SHA function. | |
| #define | SELFTEST_MODE_ALL ((uint8_t)0x3B) |
| SelfTest mode all algorithms. | |
| #define | SELFTEST_RSP_SIZE ATCA_RSP_SIZE_MIN |
| SelfTest command response packet size. | |
Definitions for the SHA Command | |
| #define | SHA_COUNT_SHORT ATCA_CMD_SIZE_MIN |
| #define | SHA_COUNT_LONG ATCA_CMD_SIZE_MIN |
| Just a starting size. | |
| #define | ATCA_SHA_DIGEST_SIZE (32u) |
| #define | SHA_DATA_MAX (64) |
| #define | SHA_MODE_MASK ((uint8_t)0x07) |
| Mask the bit 0-2. | |
| #define | SHA_MODE_SHA256_START ((uint8_t)0x00) |
| Initialization, does not accept a message. | |
| #define | SHA_MODE_SHA256_UPDATE ((uint8_t)0x01) |
| Add 64 bytes in the meesage to the SHA context. | |
| #define | SHA_MODE_SHA256_END ((uint8_t)0x02) |
| Complete the calculation and return the digest. | |
| #define | SHA_MODE_SHA256_PUBLIC ((uint8_t)0x03) |
| Add 64 byte ECC public key in the slot to the SHA context. | |
| #define | SHA_MODE_HMAC_START ((uint8_t)0x04) |
| Initialization, HMAC calculation. | |
| #define | SHA_MODE_ECC204_HMAC_START ((uint8_t)0x03) |
| Initialization, HMAC calculation for ECC204. | |
| #define | SHA_MODE_HMAC_UPDATE ((uint8_t)0x01) |
| Add 64 bytes in the meesage to the SHA context. | |
| #define | SHA_MODE_HMAC_END ((uint8_t)0x05) |
| Complete the HMAC computation and return digest. | |
| #define | SHA_MODE_608_HMAC_END ((uint8_t)0x02) |
| Complete the HMAC computation and return digest... Different command on 608. | |
| #define | SHA_MODE_ECC204_HMAC_END ((uint8_t)0x02) |
| Complete the HMAC computation and return digest... Different mode on ECC204. | |
| #define | SHA_MODE_READ_CONTEXT ((uint8_t)0x06) |
| Read current SHA-256 context out of the device. | |
| #define | SHA_MODE_WRITE_CONTEXT ((uint8_t)0x07) |
| Restore a SHA-256 context into the device. | |
| #define | SHA_MODE_TARGET_MASK ((uint8_t)0xC0) |
| Resulting digest target location mask. | |
| #define | SHA_RSP_SIZE ATCA_RSP_SIZE_32 |
| SHA command response packet size. | |
| #define | SHA_RSP_SIZE_SHORT ATCA_RSP_SIZE_MIN |
| SHA command response packet size only status code. | |
| #define | SHA_RSP_SIZE_LONG ATCA_RSP_SIZE_32 |
| SHA command response packet size. | |
Definitions for the Sign Command | |
| #define | SIGN_MODE_IDX ATCA_PARAM1_IDX |
| Sign command index for mode. | |
| #define | SIGN_KEYID_IDX ATCA_PARAM2_IDX |
| Sign command index for key id. | |
| #define | SIGN_COUNT ATCA_CMD_SIZE_MIN |
| Sign command packet size. | |
| #define | SIGN_MODE_MASK ((uint8_t)0xE1) |
| Sign mode bits 1 to 4 are 0. | |
| #define | SIGN_MODE_INTERNAL ((uint8_t)0x00) |
| Sign mode 0: internal. | |
| #define | SIGN_MODE_INVALIDATE ((uint8_t)0x01) |
| Sign mode bit 1: Signature will be used for Verify(Invalidate) | |
| #define | SIGN_MODE_INCLUDE_SN ((uint8_t)0x40) |
| Sign mode bit 6: include serial number. | |
| #define | SIGN_MODE_EXTERNAL ((uint8_t)0x80) |
| Sign mode bit 7: external. | |
| #define | SIGN_MODE_SOURCE_MASK ((uint8_t)0x20) |
| Sign mode message source mask. | |
| #define | SIGN_MODE_SOURCE_TEMPKEY ((uint8_t)0x00) |
| Sign mode message source is TempKey. | |
| #define | SIGN_MODE_SOURCE_MSGDIGBUF ((uint8_t)0x20) |
| Sign mode message source is the Message Digest Buffer. | |
| #define | SIGN_RSP_SIZE ATCA_RSP_SIZE_MAX |
| Sign command response packet size. | |
Definitions for the UpdateExtra Command | |
| #define | UPDATE_MODE_IDX ATCA_PARAM1_IDX |
| UpdateExtra command index for mode. | |
| #define | UPDATE_VALUE_IDX ATCA_PARAM2_IDX |
| UpdateExtra command index for new value. | |
| #define | UPDATE_COUNT ATCA_CMD_SIZE_MIN |
| UpdateExtra command packet size. | |
| #define | UPDATE_MODE_USER_EXTRA ((uint8_t)0x00) |
| UpdateExtra mode update UserExtra (config byte 84) | |
| #define | UPDATE_MODE_SELECTOR ((uint8_t)0x01) |
| UpdateExtra mode update Selector (config byte 85) | |
| #define | UPDATE_MODE_USER_EXTRA_ADD UPDATE_MODE_SELECTOR |
| UpdateExtra mode update UserExtraAdd (config byte 85) | |
| #define | UPDATE_MODE_DEC_COUNTER ((uint8_t)0x02) |
| UpdateExtra mode: decrement counter. | |
| #define | UPDATE_RSP_SIZE ATCA_RSP_SIZE_MIN |
| UpdateExtra command response packet size. | |
Definitions for the Verify Command | |
| #define | VERIFY_MODE_IDX ATCA_PARAM1_IDX |
| Verify command index for mode. | |
| #define | VERIFY_KEYID_IDX ATCA_PARAM2_IDX |
| Verify command index for key id. | |
| #define | VERIFY_DATA_IDX ( 5) |
| Verify command index for data. | |
| #define | VERIFY_256_STORED_COUNT ( 71) |
| Verify command packet size for 256-bit key in stored mode. | |
| #define | VERIFY_283_STORED_COUNT ( 79) |
| Verify command packet size for 283-bit key in stored mode. | |
| #define | VERIFY_256_VALIDATE_COUNT ( 90) |
| Verify command packet size for 256-bit key in validate mode. | |
| #define | VERIFY_283_VALIDATE_COUNT ( 98) |
| Verify command packet size for 283-bit key in validate mode. | |
| #define | VERIFY_256_EXTERNAL_COUNT (135) |
| Verify command packet size for 256-bit key in external mode. | |
| #define | VERIFY_283_EXTERNAL_COUNT (151) |
| Verify command packet size for 283-bit key in external mode. | |
| #define | VERIFY_256_KEY_SIZE ( 64) |
| Verify key size for 256-bit key. | |
| #define | VERIFY_283_KEY_SIZE ( 72) |
| Verify key size for 283-bit key. | |
| #define | VERIFY_256_SIGNATURE_SIZE ( 64) |
| Verify signature size for 256-bit key. | |
| #define | VERIFY_283_SIGNATURE_SIZE ( 72) |
| Verify signature size for 283-bit key. | |
| #define | VERIFY_OTHER_DATA_SIZE ( 19u) |
| Verify size of "other data". | |
| #define | VERIFY_MODE_MASK ((uint8_t)0x07) |
| Verify mode bits 3 to 7 are 0. | |
| #define | VERIFY_MODE_STORED ((uint8_t)0x00) |
| Verify mode: stored. | |
| #define | VERIFY_MODE_VALIDATE_EXTERNAL ((uint8_t)0x01) |
| Verify mode: validate external. | |
| #define | VERIFY_MODE_EXTERNAL ((uint8_t)0x02) |
| Verify mode: external. | |
| #define | VERIFY_MODE_VALIDATE ((uint8_t)0x03) |
| Verify mode: validate. | |
| #define | VERIFY_MODE_INVALIDATE ((uint8_t)0x07) |
| Verify mode: invalidate. | |
| #define | VERIFY_MODE_SOURCE_MASK ((uint8_t)0x20) |
| Verify mode message source mask. | |
| #define | VERIFY_MODE_SOURCE_TEMPKEY ((uint8_t)0x00) |
| Verify mode message source is TempKey. | |
| #define | VERIFY_MODE_SOURCE_MSGDIGBUF ((uint8_t)0x20) |
| Verify mode message source is the Message Digest Buffer. | |
| #define | VERIFY_MODE_MAC_FLAG ((uint8_t)0x80) |
| Verify mode: MAC. | |
| #define | VERIFY_KEY_B283 ((uint16_t)0x0000) |
| Verify key type: B283. | |
| #define | VERIFY_KEY_K283 ((uint16_t)0x0001) |
| Verify key type: K283. | |
| #define | VERIFY_KEY_P256 ((uint16_t)0x0004) |
| Verify key type: P256. | |
| #define | VERIFY_RSP_SIZE ATCA_RSP_SIZE_MIN |
| Verify command response packet size. | |
| #define | VERIFY_RSP_SIZE_MAC ATCA_RSP_SIZE_32 |
| Verify command response packet size with validating MAC. | |
Definitions for the Write Command | |
| #define | WRITE_ZONE_IDX ATCA_PARAM1_IDX |
| Write command index for zone. | |
| #define | WRITE_ADDR_IDX ATCA_PARAM2_IDX |
| Write command index for address. | |
| #define | WRITE_VALUE_IDX ATCA_DATA_IDX |
| Write command index for data. | |
| #define | WRITE_MAC_VS_IDX ( 9) |
| Write command index for MAC following short data. | |
| #define | WRITE_MAC_VL_IDX (37) |
| Write command index for MAC following long data. | |
| #define | WRITE_MAC_SIZE (32u) |
| Write MAC size. | |
| #define | WRITE_ZONE_MASK ((uint8_t)0xC3) |
| Write zone bits 2 to 5 are 0. | |
| #define | WRITE_ZONE_WITH_MAC ((uint8_t)0x40) |
| Write zone bit 6: write encrypted with MAC. | |
| #define | WRITE_ZONE_OTP ((uint8_t)1) |
| Write zone id OTP. | |
| #define | WRITE_ZONE_DATA ((uint8_t)2) |
| Write zone id data. | |
| #define | WRITE_RSP_SIZE ATCA_RSP_SIZE_MIN |
| Write command response packet size. | |
Functions | |
| ATCA_STATUS | atInfo (ATCADeviceType device_type, ATCAPacket *packet) |
| ATCACommand Info method. | |
| ATCA_STATUS | atPause (ATCADeviceType device_type, ATCAPacket *packet) |
| ATCACommand Pause method. | |
| bool | atIsSHAFamily (ATCADeviceType device_type) |
| determines if a given device type is a SHA device or a superset of a SHA device | |
| bool | atIsECCFamily (ATCADeviceType device_type) |
| determines if a given device type is an ECC device or a superset of a ECC device | |
| ATCA_STATUS | isATCAError (uint8_t *data) |
| checks for basic error frame in data | |
| void | atCRC (size_t length, const uint8_t *data, uint8_t *crc_le) |
| Calculates CRC over the given raw data and returns the CRC in little-endian byte order. | |
| void | atCalcCrc (ATCAPacket *packet) |
| This function calculates CRC and adds it to the correct offset in the packet data. | |
| ATCA_STATUS | atCheckCrc (const uint8_t *response) |
| This function checks the consistency of a response. | |
Microchip Crypto Auth device command object - this is a command builder only, it does not send the command. The result of a command method is a fully formed packet, ready to send to the ATCAIFace object to dispatch.
This command object supports the ATSHA and ATECC device family. The command list is a superset of all device commands for this family. The command object differentiates the packet contents based on specific device type within the family.
| void atCalcCrc | ( | ATCAPacket * | packet | ) |
This function calculates CRC and adds it to the correct offset in the packet data.
| [in] | packet | Packet to calculate CRC data for |
| ATCA_STATUS atCheckCrc | ( | const uint8_t * | response | ) |
This function checks the consistency of a response.
| [in] | response | pointer to response |
| void atCRC | ( | size_t | length, |
| const uint8_t * | data, | ||
| uint8_t * | crc_le | ||
| ) |
Calculates CRC over the given raw data and returns the CRC in little-endian byte order.
| [in] | length | Size of data not including the CRC byte positions |
| [in] | data | Pointer to the data over which to compute the CRC |
| [out] | crc_le | Pointer to the place where the two-bytes of CRC will be returned in little-endian byte order. |
| ATCA_STATUS atInfo | ( | ATCADeviceType | device_type, |
| ATCAPacket * | packet | ||
| ) |
ATCACommand Info method.
| [in] | ca_cmd | instance |
| [in] | packet | pointer to the packet containing the command being built |
| bool atIsECCFamily | ( | ATCADeviceType | device_type | ) |
determines if a given device type is an ECC device or a superset of a ECC device
| [in] | device_type | Type of device to check for family type |
| bool atIsSHAFamily | ( | ATCADeviceType | device_type | ) |
determines if a given device type is a SHA device or a superset of a SHA device
| [in] | device_type | Type of device to check for family type |
| ATCA_STATUS atPause | ( | ATCADeviceType | device_type, |
| ATCAPacket * | packet | ||
| ) |
ATCACommand Pause method.
| [in] | ca_cmd | instance |
| [in] | packet | pointer to the packet containing the command being built |
| ATCA_STATUS isATCAError | ( | uint8_t * | data | ) |
checks for basic error frame in data
| [in] | data | pointer to received data - expected to be in the form of a CA device response frame |