CryptoAuthLib
Atmel CryptoAuthentication Library
atca_basic.h
Go to the documentation of this file.
1 
44 #include "cryptoauthlib.h"
45 
46 #ifndef ATCA_BASIC_H_
47 #define ATCA_BASIC_H_
48 
49 #define TBD void
50 
58 #ifdef __cplusplus
59 extern "C" {
60 #endif
61 
62 // basic global device object methods
63 ATCA_STATUS atcab_version( char *verstr );
68 
72 
73 // discovery
75 
76 // basic crypto API
77 ATCA_STATUS atcab_info(uint8_t *revision);
78 ATCA_STATUS atcab_challenge(const uint8_t *challenge);
79 ATCA_STATUS atcab_challenge_seed_update(const uint8_t *seed, uint8_t* rand_out);
80 ATCA_STATUS atcab_nonce(const uint8_t *tempkey);
81 ATCA_STATUS atcab_nonce_rand(const uint8_t *seed, uint8_t* rand_out);
82 ATCA_STATUS atcab_random(uint8_t *rand_out);
83 
84 ATCA_STATUS atcab_is_locked(uint8_t zone, bool *lock_state);
85 ATCA_STATUS atcab_is_slot_locked(uint8_t slot, bool *lock_state);
86 
87 ATCA_STATUS atcab_get_addr(uint8_t zone, uint8_t slot, uint8_t block, uint8_t offset, uint16_t* addr);
88 ATCA_STATUS atcab_read_zone(uint8_t zone, uint8_t slot, uint8_t block, uint8_t offset, uint8_t *data, uint8_t len);
89 ATCA_STATUS atcab_write_zone(uint8_t zone, uint8_t slot, uint8_t block, uint8_t offset, const uint8_t *data, uint8_t len);
90 ATCA_STATUS atcab_write_bytes_slot(uint8_t slot, uint16_t offset, const uint8_t *data, uint8_t len);
91 ATCA_STATUS atcab_write_bytes_zone(ATCADeviceType dev_type, uint8_t zone, uint16_t address, const uint8_t *data, uint8_t len);
92 ATCA_STATUS atcab_read_bytes_zone(ATCADeviceType dev_type, uint8_t zone, uint16_t address, uint8_t len, uint8_t *data);
93 
94 ATCA_STATUS atcab_read_serial_number(uint8_t* serial_number);
95 ATCA_STATUS atcab_read_pubkey(uint8_t slot8toF, uint8_t *pubkey);
96 ATCA_STATUS atcab_read_sig(uint8_t slot8toF, uint8_t *sig);
97 ATCA_STATUS atcab_read_ecc_config_zone(uint8_t* config_data);
98 ATCA_STATUS atcab_write_ecc_config_zone(const uint8_t* config_data);
99 ATCA_STATUS atcab_read_sha_config_zone( uint8_t* config_data);
100 ATCA_STATUS atcab_write_sha_config_zone(const uint8_t* config_data);
101 ATCA_STATUS atcab_read_config_zone(ATCADeviceType dev_type, uint8_t* config_data);
102 ATCA_STATUS atcab_write_config_zone(ATCADeviceType dev_type, const uint8_t* config_data);
103 ATCA_STATUS atcab_cmp_config_zone(uint8_t* config_data, bool* same_config);
104 
105 ATCA_STATUS atcab_read_enc(uint8_t slotid, uint8_t block, uint8_t *data, const uint8_t* enckey, const uint16_t enckeyid);
106 ATCA_STATUS atcab_write_enc(uint8_t slotid, uint8_t block, const uint8_t *data, const uint8_t* enckey, const uint16_t enckeyid);
107 
108 ATCA_STATUS atcab_lock_config_zone(uint8_t* lock_response);
109 ATCA_STATUS atcab_lock_data_zone(uint8_t* lock_response);
110 ATCA_STATUS atcab_lock_data_slot(uint8_t slot, uint8_t* lock_response);
111 
112 ATCA_STATUS atcab_priv_write(uint8_t slot, const uint8_t priv_key[36], uint8_t write_key_slot, const uint8_t write_key[32]);
113 ATCA_STATUS atcab_genkey( int slot, uint8_t *pubkey );
114 ATCA_STATUS atcab_get_pubkey(uint8_t slot, uint8_t *pubkey);
115 ATCA_STATUS atcab_sign(uint16_t slot, const uint8_t *msg, uint8_t *signature);
116 ATCA_STATUS atcab_verify_extern(const uint8_t *message, const uint8_t *signature, const uint8_t *pubkey, bool *verified);
117 ATCA_STATUS atcab_ecdh(uint16_t key_id, const uint8_t* pub_key, uint8_t* ret_ecdh);
118 ATCA_STATUS atcab_ecdh_enc(uint16_t key_id, const uint8_t* pub_key, uint8_t* ret_ecdh, const uint8_t* enckey, const uint8_t enckeyid);
119 ATCA_STATUS atcab_gendig(uint8_t zone, uint16_t key_id);
120 ATCA_STATUS atcab_gendig_host(uint8_t zone, uint16_t key_id, uint8_t *other_data, uint8_t len);
121 ATCA_STATUS atcab_mac( uint8_t mode, uint16_t key_id, const uint8_t* challenge, uint8_t* digest );
122 ATCA_STATUS atcab_checkmac( uint8_t mode, uint16_t key_id, const uint8_t *challenge, const uint8_t *response, const uint8_t *other_data);
123 
125 ATCA_STATUS atcab_sha_update(uint16_t length, const uint8_t *message);
126 ATCA_STATUS atcab_sha_end(uint8_t *digest);
127 ATCA_STATUS atcab_sha(uint16_t length, const uint8_t *message, uint8_t *digest);
128 
129 #ifdef __cplusplus
130 }
131 #endif
132 
135 #endif /* ATCA_BASIC_H_ */
ATCA_STATUS atcab_release(void)
release (free) the global ATCADevice instance. This must be called in order to release or free up the...
Definition: atca_basic.c:130
ATCADevice atcab_getDevice(void)
a way to get the global device object. Generally for more sophisticated users of atca ...
Definition: atca_basic.c:140
ATCA_STATUS atcab_challenge(const uint8_t *challenge)
send a challenge to the device (a pass-through nonce)
Definition: atca_basic.c:467
Definition: atca_iface.h:74
ATCA_STATUS atcab_read_sig(uint8_t slot8toF, uint8_t *sig)
reads a signature found in one of slots 8 through F.
Definition: atca_basic.c:1955
ATCA_STATUS atcab_read_bytes_zone(ATCADeviceType dev_type, uint8_t zone, uint16_t address, uint8_t len, uint8_t *data)
read data from config, otp or data zone with given zone, offset and len
Definition: atca_basic.c:2411
ATCA_STATUS atcab_lock_data_zone(uint8_t *lock_response)
lock the ATCA ECC Data zone.
Definition: atca_basic.c:1693
ATCA_STATUS atcab_version(char *verstr)
returns a version string for the CryptoAuthLib release. The format of the version string returned is ...
Definition: atca_basic.c:62
ATCA_STATUS atcab_nonce_rand(const uint8_t *seed, uint8_t *rand_out)
Initialize TempKey with a random Nonce.
Definition: atca_basic.c:458
ATCA_STATUS atcab_info(uint8_t *revision)
get the device revision information
Definition: atca_basic.c:280
ATCA_STATUS atcab_genkey(int slot, uint8_t *pubkey)
generate a key on given slot
Definition: atca_basic.c:394
ATCA_STATUS atcab_lock_data_slot(uint8_t slot, uint8_t *lock_response)
lock the ATCA ECC Data Slot ConfigZone must be locked and DataZone may or may not be locked for a ind...
Definition: atca_basic.c:1748
ATCA_STATUS atcab_read_pubkey(uint8_t slot8toF, uint8_t *pubkey)
reads a pub key from a readable data slot versus atcab_get_pubkey which generates a pubkey from a pri...
Definition: atca_basic.c:2172
ATCA_STATUS atcab_init_device(ATCADevice cadevice)
atcab_init_device can be used to initialize the global ATCADevice object to point to one of your choo...
Definition: atca_basic.c:108
ATCA_STATUS atcab_write_ecc_config_zone(const uint8_t *config_data)
given an ECC configuration zone buffer, write its parts to the device's config zone ...
Definition: atca_basic.c:1373
ATCA_STATUS atcab_sha_start(void)
Initialize SHA-256 calculation engine.
Definition: atca_basic.c:2639
ATCA_STATUS atcab_gendig(uint8_t zone, uint16_t key_id)
Issues a GenDig command to SHA256 hash the source data indicated by zone with the contents of TempKey...
Definition: atca_basic.c:1866
ATCA_STATUS atcab_get_pubkey(uint8_t slot, uint8_t *pubkey)
returns a public key found in a designated slot. The slot must be configured as a slot with a private...
Definition: atca_basic.c:1999
ATCA_STATUS atcab_is_locked(uint8_t zone, bool *lock_state)
Query to see if the specified zone is locked.
Definition: atca_basic.c:879
ATCA_STATUS atcab_idle(void)
idle the CryptoAuth device
Definition: atca_basic.c:160
ATCA_STATUS atcab_read_serial_number(uint8_t *serial_number)
read the serial number of the device
Definition: atca_basic.c:585
ATCA_STATUS atcab_is_slot_locked(uint8_t slot, bool *lock_state)
Query to see if the specified slot is locked.
Definition: atca_basic.c:829
ATCA_STATUS atcab_read_enc(uint8_t slotid, uint8_t block, uint8_t *data, const uint8_t *enckey, const uint16_t enckeyid)
Read 32 bytes of data from the given slot. The function returns clear text bytes. Encrypted bytes are...
Definition: atca_basic.c:1072
ATCA_STATUS atcab_random(uint8_t *rand_out)
Get a 32 byte random number from the CryptoAuth device.
Definition: atca_basic.c:339
ATCA_STATUS atcab_mac(uint8_t mode, uint16_t key_id, const uint8_t *challenge, uint8_t *digest)
Get a 32 byte MAC from the CryptoAuth device given a key ID and a challenge.
Definition: atca_basic.c:2510
ATCA_STATUS atcab_write_sha_config_zone(const uint8_t *config_data)
given an SHA configuration zone buffer, write its parts to the device's config zone ...
Definition: atca_basic.c:1519
ATCA_STATUS atcab_write_enc(uint8_t slotid, uint8_t block, const uint8_t *data, const uint8_t *enckey, const uint16_t enckeyid)
Write 32 bytes of data into given slot. The function takes clear text bytes, but encrypts them for wr...
Definition: atca_basic.c:1139
ATCA_STATUS atcab_write_bytes_zone(ATCADeviceType dev_type, uint8_t zone, uint16_t address, const uint8_t *data, uint8_t len)
write data into config, otp or data zone with given zone and offset
Definition: atca_basic.c:2284
ATCA_STATUS atcab_gendig_host(uint8_t zone, uint16_t key_id, uint8_t *other_data, uint8_t len)
Similar to atcab_gendig except this method does the operation in software on the host.
Definition: atca_basic.c:1889
ATCA_STATUS atcab_sleep(void)
invoke sleep on the CryptoAuth device
Definition: atca_basic.c:171
Single aggregation point for all CryptoAuthLib header files.
ATCA_STATUS atcab_get_addr(uint8_t zone, uint8_t slot, uint8_t block, uint8_t offset, uint16_t *addr)
Compute the address given the zone, slot, block, and offset.
Definition: atca_basic.c:795
ATCA_STATUS atcab_ecdh_enc(uint16_t key_id, const uint8_t *pub_key, uint8_t *ret_ecdh, const uint8_t *enckey, const uint8_t enckeyid)
issues ecdh command
Definition: atca_basic.c:754
#define max(a, b)
Definition: hal_linux_kit_cdc.c:64
ATCA_STATUS
Definition: atca_status.h:55
ATCA_STATUS atcab_write_config_zone(ATCADeviceType dev_type, const uint8_t *config_data)
given an SHA configuration zone buffer and dev type, write its parts to the device's config zone ...
Definition: atca_basic.c:1573
ATCA_STATUS atcab_write_bytes_slot(uint8_t slot, uint16_t offset, const uint8_t *data, uint8_t len)
write data into given slot of data zone with offset address
Definition: atca_basic.c:2243
ATCA_STATUS atcab_read_zone(uint8_t zone, uint8_t slot, uint8_t block, uint8_t offset, uint8_t *data, uint8_t len)
read either 4 or 32 bytes of data into given slot
Definition: atca_basic.c:997
ATCA_STATUS atcab_wakeup(void)
wakeup the CryptoAuth device
Definition: atca_basic.c:149
ATCA_STATUS atcab_sha(uint16_t length, const uint8_t *message, uint8_t *digest)
Computes a SHA-256 digest.
Definition: atca_basic.c:2820
ATCA_STATUS atcab_challenge_seed_update(const uint8_t *seed, uint8_t *rand_out)
send a challenge to the device (a seed update nonce)
Definition: atca_basic.c:528
ATCA_STATUS atcab_nonce(const uint8_t *tempkey)
Execute a pass-through Nonce command to initialize TempKey to the specified value.
Definition: atca_basic.c:448
ATCA_STATUS atcab_init(ATCAIfaceCfg *cfg)
atcab_init is called once for the life of the application and creates a global ATCADevice object used...
Definition: atca_basic.c:84
ATCA_STATUS atcab_sign(uint16_t slot, const uint8_t *msg, uint8_t *signature)
sign a buffer using private key in given slot, stuff the signature
Definition: atca_basic.c:1803
ATCA_STATUS atcab_cmp_config_zone(uint8_t *config_data, bool *same_config)
This function compares all writable bytes in the configuration zone that is passed in to the bytes on...
Definition: atca_basic.c:1604
ATCADeviceType
Definition: atca_devtypes.h:53
ATCA_STATUS atcab_checkmac(uint8_t mode, uint16_t key_id, const uint8_t *challenge, const uint8_t *response, const uint8_t *other_data)
Compares a MAC response with input values.
Definition: atca_basic.c:2577
ATCA_STATUS atcab_sha_update(uint16_t length, const uint8_t *message)
Adds the message to be digested.
Definition: atca_basic.c:2695
ATCA_STATUS atcab_sha_end(uint8_t *digest)
The SHA-256 calculation is complete.
Definition: atca_basic.c:2756
ATCA_STATUS atcab_verify_extern(const uint8_t *message, const uint8_t *signature, const uint8_t *pubkey, bool *verified)
verify a signature using CryptoAuth hardware (as opposed to an ECDSA software implementation) ...
Definition: atca_basic.c:633
ATCA_STATUS atcab_priv_write(uint8_t slot, const uint8_t priv_key[36], uint8_t write_key_slot, const uint8_t write_key[32])
write a P256 private key in given slot using mac computation
Definition: atca_basic.c:2055
ATCA_STATUS atcab_ecdh(uint16_t key_id, const uint8_t *pub_key, uint8_t *ret_ecdh)
issues ecdh command
Definition: atca_basic.c:697
ATCA_STATUS atcab_write_zone(uint8_t zone, uint8_t slot, uint8_t block, uint8_t offset, const uint8_t *data, uint8_t len)
write either 4 or 32 bytes of data into the device zone
Definition: atca_basic.c:917
ATCA_STATUS atcab_cfg_discover(ATCAIfaceCfg cfgArray[], int max)
Definition: atca_basic.c:194
ATCA_STATUS atcab_read_ecc_config_zone(uint8_t *config_data)
read the config zone by block by block for 32 byte read, offset is ignored data receives the contents...
Definition: atca_basic.c:1246
ATCA_STATUS atcab_read_config_zone(ATCADeviceType dev_type, uint8_t *config_data)
given an SHA configuration zone buffer and dev type, read its parts from the device's config zone ...
Definition: atca_basic.c:1544
ATCA_STATUS atcab_read_sha_config_zone(uint8_t *config_data)
given an SHA configuration zone buffer, read its parts from the device's config zone ...
Definition: atca_basic.c:1494
atca_device is the C object backing ATCADevice. See the atca_device.h file for details on the ATCADev...
Definition: atca_device.c:53
ATCA_STATUS atcab_lock_config_zone(uint8_t *lock_response)
lock the ATCA ECC config zone. config zone must be unlocked for the zone to be successfully locked ...
Definition: atca_basic.c:1638