34 #ifndef ATCA_COMMAND_H 35 #define ATCA_COMMAND_H 88 #pragma pack( push, ATCAPacket, 2 ) 118 #pragma pack( pop, ATCAPacket) 152 void atCRC(
size_t length,
const uint8_t *data, uint8_t *crc_le);
160 #define ATCA_CMD_SIZE_MIN ((uint8_t)7) 161 #define ATCA_CMD_SIZE_MAX ((uint8_t)4 * 36 + 7) 163 #define CMD_STATUS_SUCCESS ((uint8_t)0x00) 165 #define CMD_STATUS_WAKEUP ((uint8_t)0x11) 167 #define CMD_STATUS_BYTE_PARSE ((uint8_t)0x03) 169 #define CMD_STATUS_BYTE_ECC ((uint8_t)0x05) 171 #define CMD_STATUS_BYTE_EXEC ((uint8_t)0x0F) 173 #define CMD_STATUS_BYTE_COMM ((uint8_t)0xFF) 178 #define ATCA_CHECKMAC ((uint8_t)0x28) 179 #define ATCA_DERIVE_KEY ((uint8_t)0x1C) 180 #define ATCA_INFO ((uint8_t)0x30) 181 #define ATCA_GENDIG ((uint8_t)0x15) 182 #define ATCA_GENKEY ((uint8_t)0x40) 183 #define ATCA_HMAC ((uint8_t)0x11) 184 #define ATCA_LOCK ((uint8_t)0x17) 185 #define ATCA_MAC ((uint8_t)0x08) 186 #define ATCA_NONCE ((uint8_t)0x16) 187 #define ATCA_PAUSE ((uint8_t)0x01) 188 #define ATCA_PRIVWRITE ((uint8_t)0x46) 189 #define ATCA_RANDOM ((uint8_t)0x1B) 190 #define ATCA_READ ((uint8_t)0x02) 191 #define ATCA_SIGN ((uint8_t)0x41) 192 #define ATCA_UPDATE_EXTRA ((uint8_t)0x20) 193 #define ATCA_VERIFY ((uint8_t)0x45) 194 #define ATCA_WRITE ((uint8_t)0x12) 195 #define ATCA_ECDH ((uint8_t)0x43) 196 #define ATCA_COUNTER ((uint8_t)0x24) 197 #define ATCA_SHA ((uint8_t)0x47) 198 #define ATCA_AES ((uint8_t)0x51) 199 #define ATCA_KDF ((uint8_t)0x56) 200 #define ATCA_SECUREBOOT ((uint8_t)0x80) 201 #define ATCA_SELFTEST ((uint8_t)0x77) 211 #define ATCA_BLOCK_SIZE (32) 212 #define ATCA_WORD_SIZE (4) 213 #define ATCA_PUB_KEY_PAD (4) 214 #define ATCA_SERIAL_NUM_SIZE (9) 215 #define ATCA_RSP_SIZE_VAL ((uint8_t)7) 216 #define ATCA_KEY_COUNT (16) 217 #define ATCA_ECC_CONFIG_SIZE (128) 218 #define ATCA_SHA_CONFIG_SIZE (88) 219 #define ATCA_OTP_SIZE (64) 220 #define ATCA_DATA_SIZE (ATCA_KEY_COUNT * ATCA_KEY_SIZE) 221 #define ATCA_AES_GFM_SIZE ATCA_BLOCK_SIZE 223 #define ATCA_CHIPMODE_OFFSET (19) 224 #define ATCA_CHIPMODE_I2C_ADDRESS_FLAG ((uint8_t)0x01) 225 #define ATCA_CHIPMODE_TTL_ENABLE_FLAG ((uint8_t)0x02) 226 #define ATCA_CHIPMODE_WATCHDOG_MASK ((uint8_t)0x04) 227 #define ATCA_CHIPMODE_WATCHDOG_SHORT ((uint8_t)0x00) 228 #define ATCA_CHIPMODE_WATCHDOG_LONG ((uint8_t)0x04) 229 #define ATCA_CHIPMODE_CLOCK_DIV_MASK ((uint8_t)0xF8) 230 #define ATCA_CHIPMODE_CLOCK_DIV_M0 ((uint8_t)0x00) 231 #define ATCA_CHIPMODE_CLOCK_DIV_M1 ((uint8_t)0x28) 232 #define ATCA_CHIPMODE_CLOCK_DIV_M2 ((uint8_t)0x68) 234 #define ATCA_COUNT_SIZE ((uint8_t)1) 235 #define ATCA_CRC_SIZE ((uint8_t)2) 236 #define ATCA_PACKET_OVERHEAD (ATCA_COUNT_SIZE + ATCA_CRC_SIZE) 238 #define ATCA_PUB_KEY_SIZE (64) 239 #define ATCA_PRIV_KEY_SIZE (32) 240 #define ATCA_SIG_SIZE (64) 241 #define ATCA_KEY_SIZE (32) 242 #define RSA2048_KEY_SIZE (256) 244 #define ATCA_RSP_SIZE_MIN ((uint8_t)4) 245 #define ATCA_RSP_SIZE_4 ((uint8_t)7) 246 #define ATCA_RSP_SIZE_72 ((uint8_t)75) 247 #define ATCA_RSP_SIZE_64 ((uint8_t)67) 248 #define ATCA_RSP_SIZE_32 ((uint8_t)35) 249 #define ATCA_RSP_SIZE_16 ((uint8_t)19) 250 #define ATCA_RSP_SIZE_MAX ((uint8_t)75) 252 #define OUTNONCE_SIZE (32) 256 #define ATCA_KEY_ID_MAX ((uint8_t)15) 257 #define ATCA_OTP_BLOCK_MAX ((uint8_t)1) 262 #define ATCA_COUNT_IDX (0) 263 #define ATCA_OPCODE_IDX (1) 264 #define ATCA_PARAM1_IDX (2) 265 #define ATCA_PARAM2_IDX (3) 266 #define ATCA_DATA_IDX (5) 267 #define ATCA_RSP_DATA_IDX (1) 272 #define ATCA_ZONE_CONFIG ((uint8_t)0x00) 273 #define ATCA_ZONE_OTP ((uint8_t)0x01) 274 #define ATCA_ZONE_DATA ((uint8_t)0x02) 275 #define ATCA_ZONE_MASK ((uint8_t)0x03) 276 #define ATCA_ZONE_ENCRYPTED ((uint8_t)0x40) 277 #define ATCA_ZONE_READWRITE_32 ((uint8_t)0x80) 278 #define ATCA_ADDRESS_MASK_CONFIG (0x001F) 279 #define ATCA_ADDRESS_MASK_OTP (0x000F) 280 #define ATCA_ADDRESS_MASK (0x007F) 281 #define ATCA_TEMPKEY_KEYID (0xFFFF) 286 #define ATCA_B283_KEY_TYPE 0 287 #define ATCA_K283_KEY_TYPE 1 288 #define ATCA_P256_KEY_TYPE 4 289 #define ATCA_AES_KEY_TYPE 6 290 #define ATCA_SHA_KEY_TYPE 7 295 #define AES_MODE_IDX ATCA_PARAM1_IDX 296 #define AES_KEYID_IDX ATCA_PARAM2_IDX 297 #define AES_INPUT_IDX ATCA_DATA_IDX 298 #define AES_COUNT (23) 299 #define AES_MODE_MASK ((uint8_t)0xC7) 300 #define AES_MODE_KEY_BLOCK_MASK ((uint8_t)0xC0) 301 #define AES_MODE_OP_MASK ((uint8_t)0x07) 302 #define AES_MODE_ENCRYPT ((uint8_t)0x00) 303 #define AES_MODE_DECRYPT ((uint8_t)0x01) 304 #define AES_MODE_GFM ((uint8_t)0x03) 305 #define AES_MODE_KEY_BLOCK_POS (6) 306 #define AES_DATA_SIZE (16) 307 #define AES_RSP_SIZE ATCA_RSP_SIZE_16 312 #define CHECKMAC_MODE_IDX ATCA_PARAM1_IDX 313 #define CHECKMAC_KEYID_IDX ATCA_PARAM2_IDX 314 #define CHECKMAC_CLIENT_CHALLENGE_IDX ATCA_DATA_IDX 315 #define CHECKMAC_CLIENT_RESPONSE_IDX (37) 316 #define CHECKMAC_DATA_IDX (69) 317 #define CHECKMAC_COUNT (84) 318 #define CHECKMAC_MODE_CHALLENGE ((uint8_t)0x00) 319 #define CHECKMAC_MODE_BLOCK2_TEMPKEY ((uint8_t)0x01) 320 #define CHECKMAC_MODE_BLOCK1_TEMPKEY ((uint8_t)0x02) 321 #define CHECKMAC_MODE_SOURCE_FLAG_MATCH ((uint8_t)0x04) 322 #define CHECKMAC_MODE_INCLUDE_OTP_64 ((uint8_t)0x20) 323 #define CHECKMAC_MODE_MASK ((uint8_t)0x27) 324 #define CHECKMAC_CLIENT_CHALLENGE_SIZE (32) 325 #define CHECKMAC_CLIENT_RESPONSE_SIZE (32) 326 #define CHECKMAC_OTHER_DATA_SIZE (13) 327 #define CHECKMAC_CLIENT_COMMAND_SIZE (4) 328 #define CHECKMAC_CMD_MATCH (0) 329 #define CHECKMAC_CMD_MISMATCH (1) 330 #define CHECKMAC_RSP_SIZE ATCA_RSP_SIZE_MIN 335 #define COUNTER_COUNT ATCA_CMD_SIZE_MIN 336 #define COUNTER_MODE_IDX ATCA_PARAM1_IDX 337 #define COUNTER_KEYID_IDX ATCA_PARAM2_IDX 338 #define COUNTER_MODE_MASK ((uint8_t)0x01) 339 #define COUNTER_MAX_VALUE ((uint32_t)2097151) 340 #define COUNTER_MODE_READ ((uint8_t)0x00) 341 #define COUNTER_MODE_INCREMENT ((uint8_t)0x01) 342 #define COUNTER_RSP_SIZE ATCA_RSP_SIZE_4 347 #define DERIVE_KEY_RANDOM_IDX ATCA_PARAM1_IDX 348 #define DERIVE_KEY_TARGETKEY_IDX ATCA_PARAM2_IDX 349 #define DERIVE_KEY_MAC_IDX ATCA_DATA_IDX 350 #define DERIVE_KEY_COUNT_SMALL ATCA_CMD_SIZE_MIN 351 #define DERIVE_KEY_MODE ((uint8_t)0x04) 352 #define DERIVE_KEY_COUNT_LARGE (39) 353 #define DERIVE_KEY_RANDOM_FLAG ((uint8_t)4) 354 #define DERIVE_KEY_MAC_SIZE (32) 355 #define DERIVE_KEY_RSP_SIZE ATCA_RSP_SIZE_MIN 360 #define ECDH_PREFIX_MODE ((uint8_t)0x00) 361 #define ECDH_COUNT (ATCA_CMD_SIZE_MIN + ATCA_PUB_KEY_SIZE) 362 #define ECDH_MODE_SOURCE_MASK ((uint8_t)0x01) 363 #define ECDH_MODE_SOURCE_EEPROM_SLOT ((uint8_t)0x00) 364 #define ECDH_MODE_SOURCE_TEMPKEY ((uint8_t)0x01) 365 #define ECDH_MODE_OUTPUT_MASK ((uint8_t)0x02) 366 #define ECDH_MODE_OUTPUT_CLEAR ((uint8_t)0x00) 367 #define ECDH_MODE_OUTPUT_ENC ((uint8_t)0x02) 368 #define ECDH_MODE_COPY_MASK ((uint8_t)0x0C) 369 #define ECDH_MODE_COPY_COMPATIBLE ((uint8_t)0x00) 370 #define ECDH_MODE_COPY_EEPROM_SLOT ((uint8_t)0x04) 371 #define ECDH_MODE_COPY_TEMP_KEY ((uint8_t)0x08) 372 #define ECDH_MODE_COPY_OUTPUT_BUFFER ((uint8_t)0x0C) 373 #define ECDH_KEY_SIZE ATCA_BLOCK_SIZE 374 #define ECDH_RSP_SIZE ATCA_RSP_SIZE_64 379 #define GENDIG_ZONE_IDX ATCA_PARAM1_IDX 380 #define GENDIG_KEYID_IDX ATCA_PARAM2_IDX 381 #define GENDIG_DATA_IDX ATCA_DATA_IDX 382 #define GENDIG_COUNT ATCA_CMD_SIZE_MIN 383 #define GENDIG_ZONE_CONFIG ((uint8_t)0) 384 #define GENDIG_ZONE_OTP ((uint8_t)1) 385 #define GENDIG_ZONE_DATA ((uint8_t)2) 386 #define GENDIG_ZONE_SHARED_NONCE ((uint8_t)3) 387 #define GENDIG_ZONE_COUNTER ((uint8_t)4) 388 #define GENDIG_ZONE_KEY_CONFIG ((uint8_t)5) 389 #define GENDIG_RSP_SIZE ATCA_RSP_SIZE_MIN 394 #define GENKEY_MODE_IDX ATCA_PARAM1_IDX 395 #define GENKEY_KEYID_IDX ATCA_PARAM2_IDX 396 #define GENKEY_DATA_IDX (5) 397 #define GENKEY_COUNT ATCA_CMD_SIZE_MIN 398 #define GENKEY_COUNT_DATA (10) 399 #define GENKEY_OTHER_DATA_SIZE (3) 400 #define GENKEY_MODE_MASK ((uint8_t)0x1C) 401 #define GENKEY_MODE_PRIVATE ((uint8_t)0x04) 402 #define GENKEY_MODE_PUBLIC ((uint8_t)0x00) 403 #define GENKEY_MODE_DIGEST ((uint8_t)0x08) 404 #define GENKEY_MODE_PUBKEY_DIGEST ((uint8_t)0x10) 405 #define GENKEY_PRIVATE_TO_TEMPKEY ((uint16_t)0xFFFF) 406 #define GENKEY_RSP_SIZE_SHORT ATCA_RSP_SIZE_MIN 407 #define GENKEY_RSP_SIZE_LONG ATCA_RSP_SIZE_64 412 #define HMAC_MODE_IDX ATCA_PARAM1_IDX 413 #define HMAC_KEYID_IDX ATCA_PARAM2_IDX 414 #define HMAC_COUNT ATCA_CMD_SIZE_MIN 415 #define HMAC_MODE_FLAG_TK_RAND ((uint8_t)0x00) 416 #define HMAC_MODE_FLAG_TK_NORAND ((uint8_t)0x04) 417 #define HMAC_MODE_FLAG_OTP88 ((uint8_t)0x10) 418 #define HMAC_MODE_FLAG_OTP64 ((uint8_t)0x20) 419 #define HMAC_MODE_FLAG_FULLSN ((uint8_t)0x40) 420 #define HMAC_MODE_MASK ((uint8_t)0x74) 421 #define HMAC_DIGEST_SIZE (32) 422 #define HMAC_RSP_SIZE ATCA_RSP_SIZE_32 427 #define INFO_PARAM1_IDX ATCA_PARAM1_IDX 428 #define INFO_PARAM2_IDX ATCA_PARAM2_IDX 429 #define INFO_COUNT ATCA_CMD_SIZE_MIN 430 #define INFO_MODE_REVISION ((uint8_t)0x00) 431 #define INFO_MODE_KEY_VALID ((uint8_t)0x01) 432 #define INFO_MODE_STATE ((uint8_t)0x02) 433 #define INFO_MODE_GPIO ((uint8_t)0x03) 434 #define INFO_MODE_VOL_KEY_PERMIT ((uint8_t)0x04) 435 #define INFO_MODE_MAX ((uint8_t)0x03) 436 #define INFO_NO_STATE ((uint8_t)0x00) 437 #define INFO_OUTPUT_STATE_MASK ((uint8_t)0x01) 438 #define INFO_DRIVER_STATE_MASK ((uint8_t)0x02) 439 #define INFO_PARAM2_SET_LATCH_STATE ((uint16_t)0x0002) 440 #define INFO_PARAM2_LATCH_SET ((uint16_t)0x0001) 441 #define INFO_PARAM2_LATCH_CLEAR ((uint16_t)0x0000) 442 #define INFO_SIZE ((uint8_t)0x04) 443 #define INFO_RSP_SIZE ATCA_RSP_SIZE_VAL 448 #define KDF_MODE_IDX ATCA_PARAM1_IDX 449 #define KDF_KEYID_IDX ATCA_PARAM2_IDX 450 #define KDF_DETAILS_IDX ATCA_DATA_IDX 451 #define KDF_DETAILS_SIZE 4 452 #define KDF_MESSAGE_IDX (ATCA_DATA_IDX + KDF_DETAILS_SIZE) 454 #define KDF_MODE_SOURCE_MASK ((uint8_t)0x03) 455 #define KDF_MODE_SOURCE_TEMPKEY ((uint8_t)0x00) 456 #define KDF_MODE_SOURCE_TEMPKEY_UP ((uint8_t)0x01) 457 #define KDF_MODE_SOURCE_SLOT ((uint8_t)0x02) 458 #define KDF_MODE_SOURCE_ALTKEYBUF ((uint8_t)0x03) 460 #define KDF_MODE_TARGET_MASK ((uint8_t)0x1C) 461 #define KDF_MODE_TARGET_TEMPKEY ((uint8_t)0x00) 462 #define KDF_MODE_TARGET_TEMPKEY_UP ((uint8_t)0x04) 463 #define KDF_MODE_TARGET_SLOT ((uint8_t)0x08) 464 #define KDF_MODE_TARGET_ALTKEYBUF ((uint8_t)0x0C) 465 #define KDF_MODE_TARGET_OUTPUT ((uint8_t)0x10) 466 #define KDF_MODE_TARGET_OUTPUT_ENC ((uint8_t)0x14) 468 #define KDF_MODE_ALG_MASK ((uint8_t)0x60) 469 #define KDF_MODE_ALG_PRF ((uint8_t)0x00) 470 #define KDF_MODE_ALG_AES ((uint8_t)0x20) 471 #define KDF_MODE_ALG_HKDF ((uint8_t)0x40) 473 #define KDF_DETAILS_PRF_KEY_LEN_MASK ((uint32_t)0x00000003) 474 #define KDF_DETAILS_PRF_KEY_LEN_16 ((uint32_t)0x00000000) 475 #define KDF_DETAILS_PRF_KEY_LEN_32 ((uint32_t)0x00000001) 476 #define KDF_DETAILS_PRF_KEY_LEN_48 ((uint32_t)0x00000002) 477 #define KDF_DETAILS_PRF_KEY_LEN_64 ((uint32_t)0x00000003) 479 #define KDF_DETAILS_PRF_TARGET_LEN_MASK ((uint32_t)0x00000100) 480 #define KDF_DETAILS_PRF_TARGET_LEN_32 ((uint32_t)0x00000000) 481 #define KDF_DETAILS_PRF_TARGET_LEN_64 ((uint32_t)0x00000100) 483 #define KDF_DETAILS_PRF_AEAD_MASK ((uint32_t)0x00000600) 484 #define KDF_DETAILS_PRF_AEAD_MODE0 ((uint32_t)0x00000000) 485 #define KDF_DETAILS_PRF_AEAD_MODE1 ((uint32_t)0x00000200) 487 #define KDF_DETAILS_AES_KEY_LOC_MASK ((uint32_t)0x00000003) 489 #define KDF_DETAILS_HKDF_MSG_LOC_MASK ((uint32_t)0x00000003) 490 #define KDF_DETAILS_HKDF_MSG_LOC_SLOT ((uint32_t)0x00000000) 491 #define KDF_DETAILS_HKDF_MSG_LOC_TEMPKEY ((uint32_t)0x00000001) 492 #define KDF_DETAILS_HKDF_MSG_LOC_INPUT ((uint32_t)0x00000002) 493 #define KDF_DETAILS_HKDF_MSG_LOC_IV ((uint32_t)0x00000003) 494 #define KDF_DETAILS_HKDF_ZERO_KEY ((uint32_t)0x00000004) 499 #define LOCK_ZONE_IDX ATCA_PARAM1_IDX 500 #define LOCK_SUMMARY_IDX ATCA_PARAM2_IDX 501 #define LOCK_COUNT ATCA_CMD_SIZE_MIN 502 #define LOCK_ZONE_CONFIG ((uint8_t)0x00) 503 #define LOCK_ZONE_DATA ((uint8_t)0x01) 504 #define LOCK_ZONE_DATA_SLOT ((uint8_t)0x02) 505 #define LOCK_ZONE_NO_CRC ((uint8_t)0x80) 506 #define LOCK_ZONE_MASK (0xBF) 507 #define ATCA_UNLOCKED (0x55) 508 #define ATCA_LOCKED (0x00) 509 #define LOCK_RSP_SIZE ATCA_RSP_SIZE_MIN 514 #define MAC_MODE_IDX ATCA_PARAM1_IDX 515 #define MAC_KEYID_IDX ATCA_PARAM2_IDX 516 #define MAC_CHALLENGE_IDX ATCA_DATA_IDX 517 #define MAC_COUNT_SHORT ATCA_CMD_SIZE_MIN 518 #define MAC_COUNT_LONG (39) 519 #define MAC_MODE_CHALLENGE ((uint8_t)0x00) 520 #define MAC_MODE_BLOCK2_TEMPKEY ((uint8_t)0x01) 521 #define MAC_MODE_BLOCK1_TEMPKEY ((uint8_t)0x02) 522 #define MAC_MODE_SOURCE_FLAG_MATCH ((uint8_t)0x04) 523 #define MAC_MODE_PTNONCE_TEMPKEY ((uint8_t)0x06) 524 #define MAC_MODE_PASSTHROUGH ((uint8_t)0x07) 525 #define MAC_MODE_INCLUDE_OTP_88 ((uint8_t)0x10) 526 #define MAC_MODE_INCLUDE_OTP_64 ((uint8_t)0x20) 527 #define MAC_MODE_INCLUDE_SN ((uint8_t)0x40) 528 #define MAC_CHALLENGE_SIZE (32) 529 #define MAC_SIZE (32) 530 #define MAC_MODE_MASK ((uint8_t)0x77) 531 #define MAC_RSP_SIZE ATCA_RSP_SIZE_32 536 #define NONCE_MODE_IDX ATCA_PARAM1_IDX 537 #define NONCE_PARAM2_IDX ATCA_PARAM2_IDX 538 #define NONCE_INPUT_IDX ATCA_DATA_IDX 539 #define NONCE_COUNT_SHORT (ATCA_CMD_SIZE_MIN + 20) 540 #define NONCE_COUNT_LONG (ATCA_CMD_SIZE_MIN + 32) 541 #define NONCE_COUNT_LONG_64 (ATCA_CMD_SIZE_MIN + 64) 542 #define NONCE_MODE_MASK ((uint8_t)0x03) 543 #define NONCE_MODE_SEED_UPDATE ((uint8_t)0x00) 544 #define NONCE_MODE_NO_SEED_UPDATE ((uint8_t)0x01) 545 #define NONCE_MODE_INVALID ((uint8_t)0x02) 546 #define NONCE_MODE_PASSTHROUGH ((uint8_t)0x03) 548 #define NONCE_MODE_INPUT_LEN_MASK ((uint8_t)0x20) 549 #define NONCE_MODE_INPUT_LEN_32 ((uint8_t)0x00) 550 #define NONCE_MODE_INPUT_LEN_64 ((uint8_t)0x20) 552 #define NONCE_MODE_TARGET_MASK ((uint8_t)0xC0) 553 #define NONCE_MODE_TARGET_TEMPKEY ((uint8_t)0x00) 554 #define NONCE_MODE_TARGET_MSGDIGBUF ((uint8_t)0x40) 555 #define NONCE_MODE_TARGET_ALTKEYBUF ((uint8_t)0x80) 557 #define NONCE_ZERO_CALC_MASK ((uint16_t)0x8000) 558 #define NONCE_ZERO_CALC_RANDOM ((uint16_t)0x0000) 559 #define NONCE_ZERO_CALC_TEMPKEY ((uint16_t)0x8000) 561 #define NONCE_NUMIN_SIZE (20) 562 #define NONCE_NUMIN_SIZE_PASSTHROUGH (32) 564 #define NONCE_RSP_SIZE_SHORT ATCA_RSP_SIZE_MIN 565 #define NONCE_RSP_SIZE_LONG ATCA_RSP_SIZE_32 570 #define PAUSE_SELECT_IDX ATCA_PARAM1_IDX 571 #define PAUSE_PARAM2_IDX ATCA_PARAM2_IDX 572 #define PAUSE_COUNT ATCA_CMD_SIZE_MIN 573 #define PAUSE_RSP_SIZE ATCA_RSP_SIZE_MIN 578 #define PRIVWRITE_ZONE_IDX ATCA_PARAM1_IDX 579 #define PRIVWRITE_KEYID_IDX ATCA_PARAM2_IDX 580 #define PRIVWRITE_VALUE_IDX ( 5) 581 #define PRIVWRITE_MAC_IDX (41) 582 #define PRIVWRITE_COUNT (75) 583 #define PRIVWRITE_ZONE_MASK ((uint8_t)0x40) 584 #define PRIVWRITE_MODE_ENCRYPT ((uint8_t)0x40) 585 #define PRIVWRITE_RSP_SIZE ATCA_RSP_SIZE_MIN 590 #define RANDOM_MODE_IDX ATCA_PARAM1_IDX 591 #define RANDOM_PARAM2_IDX ATCA_PARAM2_IDX 592 #define RANDOM_COUNT ATCA_CMD_SIZE_MIN 593 #define RANDOM_SEED_UPDATE ((uint8_t)0x00) 594 #define RANDOM_NO_SEED_UPDATE ((uint8_t)0x01) 595 #define RANDOM_NUM_SIZE ((uint8_t)32) 596 #define RANDOM_RSP_SIZE ATCA_RSP_SIZE_32 601 #define READ_ZONE_IDX ATCA_PARAM1_IDX 602 #define READ_ADDR_IDX ATCA_PARAM2_IDX 603 #define READ_COUNT ATCA_CMD_SIZE_MIN 604 #define READ_ZONE_MASK ((uint8_t)0x83) 605 #define READ_4_RSP_SIZE ATCA_RSP_SIZE_VAL 606 #define READ_32_RSP_SIZE ATCA_RSP_SIZE_32 611 #define SECUREBOOT_MODE_IDX ATCA_PARAM1_IDX 612 #define SECUREBOOT_DIGEST_SIZE (32) 613 #define SECUREBOOT_SIGNATURE_SIZE (64) 614 #define SECUREBOOT_COUNT_DIG (ATCA_CMD_SIZE_MIN + SECUREBOOT_DIGEST_SIZE) 615 #define SECUREBOOT_COUNT_DIG_SIG (ATCA_CMD_SIZE_MIN + SECUREBOOT_DIGEST_SIZE + SECUREBOOT_SIGNATURE_SIZE) 616 #define SECUREBOOT_MAC_SIZE (32) 617 #define SECUREBOOT_RSP_SIZE_NO_MAC ATCA_RSP_SIZE_MIN 618 #define SECUREBOOT_RSP_SIZE_MAC (ATCA_PACKET_OVERHEAD + SECUREBOOT_MAC_SIZE) 620 #define SECUREBOOT_MODE_MASK ((uint8_t)0x07) 621 #define SECUREBOOT_MODE_FULL ((uint8_t)0x05) 622 #define SECUREBOOT_MODE_FULL_STORE ((uint8_t)0x06) 623 #define SECUREBOOT_MODE_FULL_COPY ((uint8_t)0x07) 624 #define SECUREBOOT_MODE_PROHIBIT_FLAG ((uint8_t)0x40) 625 #define SECUREBOOT_MODE_ENC_MAC_FLAG ((uint8_t)0x80) 627 #define SECUREBOOTCONFIG_OFFSET (70) 628 #define SECUREBOOTCONFIG_MODE_MASK ((uint16_t)0x0003) 629 #define SECUREBOOTCONFIG_MODE_DISABLED ((uint16_t)0x0000) 630 #define SECUREBOOTCONFIG_MODE_FULL_BOTH ((uint16_t)0x0001) 631 #define SECUREBOOTCONFIG_MODE_FULL_SIG ((uint16_t)0x0002) 632 #define SECUREBOOTCONFIG_MODE_FULL_DIG ((uint16_t)0x0003) 637 #define SELFTEST_MODE_IDX ATCA_PARAM1_IDX 638 #define SELFTEST_COUNT ATCA_CMD_SIZE_MIN 639 #define SELFTEST_MODE_RNG ((uint8_t)0x01) 640 #define SELFTEST_MODE_ECDSA_SIGN_VERIFY ((uint8_t)0x02) 641 #define SELFTEST_MODE_ECDH ((uint8_t)0x08) 642 #define SELFTEST_MODE_AES ((uint8_t)0x10) 643 #define SELFTEST_MODE_SHA ((uint8_t)0x20) 644 #define SELFTEST_MODE_ALL ((uint8_t)0x3B) 645 #define SELFTEST_RSP_SIZE ATCA_RSP_SIZE_MIN 650 #define SHA_COUNT_SHORT ATCA_CMD_SIZE_MIN 651 #define SHA_COUNT_LONG ATCA_CMD_SIZE_MIN 652 #define ATCA_SHA_DIGEST_SIZE (32) 653 #define SHA_DATA_MAX (64) 654 #define ATCA_SHA256_BLOCK_SIZE (64) 655 #define SHA_CONTEXT_MAX_SIZE (99) 657 #define SHA_MODE_MASK ((uint8_t)0x07) 658 #define SHA_MODE_SHA256_START ((uint8_t)0x00) 659 #define SHA_MODE_SHA256_UPDATE ((uint8_t)0x01) 660 #define SHA_MODE_SHA256_END ((uint8_t)0x02) 661 #define SHA_MODE_SHA256_PUBLIC ((uint8_t)0x03) 662 #define SHA_MODE_HMAC_START ((uint8_t)0x04) 663 #define SHA_MODE_HMAC_UPDATE ((uint8_t)0x01) 664 #define SHA_MODE_HMAC_END ((uint8_t)0x05) 665 #define SHA_MODE_608_HMAC_END ((uint8_t)0x02) 666 #define SHA_MODE_READ_CONTEXT ((uint8_t)0x06) 667 #define SHA_MODE_WRITE_CONTEXT ((uint8_t)0x07) 668 #define SHA_MODE_TARGET_MASK ((uint8_t)0xC0) 669 #define SHA_MODE_TARGET_TEMPKEY ((uint8_t)0x00) 670 #define SHA_MODE_TARGET_MSGDIGBUF ((uint8_t)0x40) 671 #define SHA_MODE_TARGET_OUT_ONLY ((uint8_t)0xC0) 673 #define SHA_RSP_SIZE ATCA_RSP_SIZE_32 674 #define SHA_RSP_SIZE_SHORT ATCA_RSP_SIZE_MIN 675 #define SHA_RSP_SIZE_LONG ATCA_RSP_SIZE_32 680 #define SIGN_MODE_IDX ATCA_PARAM1_IDX 681 #define SIGN_KEYID_IDX ATCA_PARAM2_IDX 682 #define SIGN_COUNT ATCA_CMD_SIZE_MIN 683 #define SIGN_MODE_MASK ((uint8_t)0xE1) 684 #define SIGN_MODE_INTERNAL ((uint8_t)0x00) 685 #define SIGN_MODE_INVALIDATE ((uint8_t)0x01) 686 #define SIGN_MODE_INCLUDE_SN ((uint8_t)0x40) 687 #define SIGN_MODE_EXTERNAL ((uint8_t)0x80) 688 #define SIGN_MODE_SOURCE_MASK ((uint8_t)0x20) 689 #define SIGN_MODE_SOURCE_TEMPKEY ((uint8_t)0x00) 690 #define SIGN_MODE_SOURCE_MSGDIGBUF ((uint8_t)0x20) 691 #define SIGN_RSP_SIZE ATCA_RSP_SIZE_MAX 696 #define UPDATE_MODE_IDX ATCA_PARAM1_IDX 697 #define UPDATE_VALUE_IDX ATCA_PARAM2_IDX 698 #define UPDATE_COUNT ATCA_CMD_SIZE_MIN 699 #define UPDATE_MODE_USER_EXTRA ((uint8_t)0x00) 700 #define UPDATE_MODE_SELECTOR ((uint8_t)0x01) 701 #define UPDATE_MODE_USER_EXTRA_ADD UPDATE_MODE_SELECTOR 702 #define UPDATE_MODE_DEC_COUNTER ((uint8_t)0x02) 703 #define UPDATE_RSP_SIZE ATCA_RSP_SIZE_MIN 708 #define VERIFY_MODE_IDX ATCA_PARAM1_IDX 709 #define VERIFY_KEYID_IDX ATCA_PARAM2_IDX 710 #define VERIFY_DATA_IDX ( 5) 711 #define VERIFY_256_STORED_COUNT ( 71) 712 #define VERIFY_283_STORED_COUNT ( 79) 713 #define VERIFY_256_VALIDATE_COUNT ( 90) 714 #define VERIFY_283_VALIDATE_COUNT ( 98) 715 #define VERIFY_256_EXTERNAL_COUNT (135) 716 #define VERIFY_283_EXTERNAL_COUNT (151) 717 #define VERIFY_256_KEY_SIZE ( 64) 718 #define VERIFY_283_KEY_SIZE ( 72) 719 #define VERIFY_256_SIGNATURE_SIZE ( 64) 720 #define VERIFY_283_SIGNATURE_SIZE ( 72) 721 #define VERIFY_OTHER_DATA_SIZE ( 19) 722 #define VERIFY_MODE_MASK ((uint8_t)0x03) 723 #define VERIFY_MODE_STORED ((uint8_t)0x00) 724 #define VERIFY_MODE_VALIDATE_EXTERNAL ((uint8_t)0x01) 725 #define VERIFY_MODE_EXTERNAL ((uint8_t)0x02) 726 #define VERIFY_MODE_VALIDATE ((uint8_t)0x03) 727 #define VERIFY_MODE_INVALIDATE ((uint8_t)0x07) 728 #define VERIFY_MODE_SOURCE_MASK ((uint8_t)0x20) 729 #define VERIFY_MODE_SOURCE_TEMPKEY ((uint8_t)0x00) 730 #define VERIFY_MODE_SOURCE_MSGDIGBUF ((uint8_t)0x20) 731 #define VERIFY_MODE_MAC_FLAG ((uint8_t)0x80) 732 #define VERIFY_KEY_B283 ((uint16_t)0x0000) 733 #define VERIFY_KEY_K283 ((uint16_t)0x0001) 734 #define VERIFY_KEY_P256 ((uint16_t)0x0004) 735 #define VERIFY_RSP_SIZE ATCA_RSP_SIZE_MIN 736 #define VERIFY_RSP_SIZE_MAC ATCA_RSP_SIZE_32 741 #define WRITE_ZONE_IDX ATCA_PARAM1_IDX 742 #define WRITE_ADDR_IDX ATCA_PARAM2_IDX 743 #define WRITE_VALUE_IDX ATCA_DATA_IDX 744 #define WRITE_MAC_VS_IDX ( 9) 745 #define WRITE_MAC_VL_IDX (37) 746 #define WRITE_MAC_SIZE (32) 747 #define WRITE_ZONE_MASK ((uint8_t)0xC3) 748 #define WRITE_ZONE_WITH_MAC ((uint8_t)0x40) 749 #define WRITE_ZONE_OTP ((uint8_t)1) 750 #define WRITE_ZONE_DATA ((uint8_t)2) 751 #define WRITE_RSP_SIZE ATCA_RSP_SIZE_MIN atca_command is the C object backing ATCACommand.
Definition: atca_command.h:52
ATCA_STATUS atCheckMAC(ATCACommand ca_cmd, ATCAPacket *packet)
ATCACommand CheckMAC method.
Definition: atca_command.c:45
ATCA_STATUS atAES(ATCACommand ca_cmd, ATCAPacket *packet)
ATCACommand AES method.
Definition: atca_command.c:490
ATCA_STATUS atInfo(ATCACommand ca_cmd, ATCAPacket *packet)
ATCACommand Info method.
Definition: atca_command.c:175
void atCalcCrc(ATCAPacket *pkt)
This function calculates CRC and adds it to the correct offset in the packet data.
Definition: atca_command.c:647
ATCA_STATUS atSecureBoot(ATCACommand ca_cmd, ATCAPacket *packet)
ATCACommand SecureBoot method.
Definition: atca_command.c:321
ATCA_STATUS atHMAC(ATCACommand ca_cmd, ATCAPacket *packet)
ATCACommand HMAC method.
Definition: atca_command.c:161
uint16_t param2
Definition: atca_command.h:103
ATCA_STATUS atLock(ATCACommand ca_cmd, ATCAPacket *packet)
ATCACommand Lock method.
Definition: atca_command.c:189
ATCA_STATUS isATCAError(uint8_t *data)
checks for basic error frame in data
Definition: atca_command.c:723
ATCA_STATUS
Definition: atca_status.h:41
ATCA_STATUS atPrivWrite(ATCACommand ca_cmd, ATCAPacket *packet)
ATCACommand PrivWrite method.
Definition: atca_command.c:279
ATCA_STATUS atUpdateExtra(ATCACommand ca_cmd, ATCAPacket *packet)
ATCACommand UpdateExtra method.
Definition: atca_command.c:410
ATCA_STATUS atMAC(ATCACommand ca_cmd, ATCAPacket *packet)
ATCACommand MAC method.
Definition: atca_command.c:203
uint8_t _reserved
Definition: atca_command.h:97
ATCA_STATUS atDeriveKey(ATCACommand ca_cmd, ATCAPacket *packet, bool has_mac)
ATCACommand DeriveKey method.
Definition: atca_command.c:74
struct atca_command * ATCACommand
Definition: atca_command.h:60
ATCA_STATUS atGenDig(ATCACommand ca_cmd, ATCAPacket *packet, bool is_no_mac_key)
ATCACommand Generate Digest method.
Definition: atca_command.c:113
ATCA_STATUS atWrite(ATCACommand ca_cmd, ATCAPacket *packet, bool has_mac)
ATCACommand Write method.
Definition: atca_command.c:463
bool atIsSHAFamily(ATCADeviceType device_type)
determines if a given device type is a SHA device or a superset of a SHA device
Definition: atca_command.c:682
bool atIsECCFamily(ATCADeviceType device_type)
determines if a given device type is an ECC device or a superset of a ECC device
Definition: atca_command.c:703
ATCACommand newATCACommand(ATCADeviceType device_type)
constructor for ATCACommand
Definition: atca_command.c:575
ATCA_STATUS atNonce(ATCACommand ca_cmd, ATCAPacket *packet)
ATCACommand Nonce method.
Definition: atca_command.c:225
ATCA_STATUS atPause(ATCACommand ca_cmd, ATCAPacket *packet)
ATCACommand Pause method.
Definition: atca_command.c:265
ATCA_STATUS atKDF(ATCACommand ca_cmd, ATCAPacket *packet)
ATCACommand KDF method.
Definition: atca_command.c:530
ATCA_STATUS atSelfTest(ATCACommand ca_cmd, ATCAPacket *packet)
ATCACommand AES method.
Definition: atca_command.c:513
ATCA_STATUS atRead(ATCACommand ca_cmd, ATCAPacket *packet)
ATCACommand Read method.
Definition: atca_command.c:307
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.
Definition: atca_command.c:617
ATCA_STATUS atCheckCrc(const uint8_t *response)
This function checks the consistency of a response.
Definition: atca_command.c:665
uint8_t execTime
Definition: atca_command.h:111
ATCADeviceType
The supported Device type in Cryptoauthlib library.
Definition: atca_devtypes.h:41
void deleteATCACommand(ATCACommand *ca_cmd)
ATCACommand destructor.
Definition: atca_command.c:597
ATCA_STATUS atRandom(ATCACommand ca_cmd, ATCAPacket *packet)
ATCACommand Random method.
Definition: atca_command.c:293
ATCA_STATUS initATCACommand(ATCADeviceType device_type, ATCACommand ca_cmd)
Initializer for ATCACommand.
Definition: atca_command.c:556
ATCA_STATUS atVerify(ATCACommand ca_cmd, ATCAPacket *packet)
ATCACommand ECDSA Verify method.
Definition: atca_command.c:424
uint8_t opcode
Definition: atca_command.h:101
uint8_t txsize
Definition: atca_command.h:100
uint8_t clock_divider
Definition: atca_command.h:55
ATCA_STATUS atSign(ATCACommand ca_cmd, ATCAPacket *packet)
ATCACommand Sign method.
Definition: atca_command.c:396
ATCA_STATUS atCounter(ATCACommand ca_cmd, ATCAPacket *packet)
ATCACommand Counter method.
Definition: atca_command.c:59
uint16_t execution_time_msec
Definition: atca_command.h:56
ATCA_STATUS atSHA(ATCACommand ca_cmd, ATCAPacket *packet, uint16_t write_context_size)
ATCACommand SHA method.
Definition: atca_command.c:352
ATCADeviceType dt
Definition: atca_command.h:54
ATCA_STATUS atGenKey(ATCACommand ca_cmd, ATCAPacket *packet)
ATCACommand Generate Key method.
Definition: atca_command.c:139
Microchip Crypto Auth status codes.
an ATCA packet structure. This is a superset of the packet transmitted on the wire. It's also used as a buffer for receiving the response
Definition: atca_command.h:93
CryptoAuthLiub is meant to be portable across architectures, even non-Microchip architectures and com...
ATCA_STATUS atECDH(ATCACommand ca_cmd, ATCAPacket *packet)
ATCACommand ECDH method.
Definition: atca_command.c:98
uint8_t param1
Definition: atca_command.h:102