Secure 3 click carries the ATSHA204A, a cryptographic coprocessor with secure hardware-based key storage from Microchip. The click is designed to run on either 3.3V or 5V power supply. Secure 3 click communicates with the target microcontroller over an I2C interface. 
It is ideal to use for:
- Secure download and boot - authentication and protect code in-transit
- Ecosystem control - ensure only OEM/licensed nodes and accessories work
- Anti-cloning - prevent building with identical BOM or stolen code
- Message security - authentication, message integrity, and confidentiality of network nodes (IoT)
NOTE: The click comes with stacking headers which allow you to combine it with other clicks more easily by using just one mikroBUS™ socket.
 
 
 
 
ATSHA204A features
The ATSHA204A is a member of the Microchip CryptoAuthentication™ family of high-security hardware authentication devices, which uses Secure Hash Algorithm (SHA-256) with 256-bit key length, message authentication code (MAC) and hash-based message authentication code (HMAC) options. It has a flexible command set that allows use in many applications.

The ATSHA204A device includes an Electrically Erasable Programmable Read-Only Memory (EEPROM) array that can be used for key storage, miscellaneous read/write data, read-only, secret data, consumption logging, and security configuration. Access to the various sections of memory can be restricted in a variety of ways, and the configuration can then be locked to prevent changes.
Specifications
| Type | Encryption | 
| Applications | Used for storage of certificates, miscellaneous read/write, read-only or secret data, consumption logging, and security configurations | 
| On-board modules | ATSHA204A - a cryptographic coprocessor with secure hardware-based key storage | 
| Key Features | Superior SHA-256 hash algorithm with 256-bit key length, message authentication code (MAC) and hash-based message authentication code (HMAC) options, storage for up to sixteen keys | 
| Interface | I2C | 
| Feature | No ClickID | 
| Compatibility | mikroBUS™ | 
| Click board size | M (42.9 x 25.4 mm) | 
| Input Voltage | 3.3V or 5V | 
Pinout diagram
This table shows how the pinout on Secure 3 click corresponds to the pinout on the mikroBUS™ socket (the latter shown in the two middle columns).
| Notes | Pin |  | Pin | Notes | 
|---|
|  | NC | 1 | AN | PWM | 16 | NC |  | 
|  | NC | 2 | RST | INT | 15 | NC |  | 
|  | NC | 3 | CS | TX | 14 | NC |  | 
|  | NC | 4 | SCK | RX | 13 | NC |  | 
|  | NC | 5 | MISO | SCL | 12 | SCL | I2C clock | 
|  | NC | 6 | MOSI | SDA | 11 | SDA | I2C data | 
| Power supply | +3.3V | 7 | 3.3V | 5V | 10 | +5V | Power supply | 
| Ground | GND | 8 | GND | GND | 9 | GND | Ground | 
Jumpers and settings
| Designator | Name | Default Position | Default Option | Description | 
|---|
| JP1 | VIO SEL. | Left | 3V3 | Power Supply Voltage Selection 3V3/5V, left position 3V3, right position 5V | 
 
Programming
 
Code examples for Secure 3 click, written for MikroElektronika hardware and compilers are available on Libstock.
Code snippet
The following code snippet creates a MAC for a given input and then checks if it is valid using verify function.
01 static void MACTest ()
02 {
03     //Generates nonce for use in MAC generation
04     memset (bufferIn, 0x45, 128);
05     if (atcab_nonce(bufferIn) == ATCA_SUCCESS)
06     {
07         LOG( "rnrn Nonce generated." );
08     }
09     else  LOG( "rnrn Nonce generation failed..." );
10     delay_ms (1500);
11 
12    //Generates MAC for given input
13     memset (bufferOut, 0x00, 128);
14     memset (bufferIn, 0x14, 128);
15     if (atcab_mac( 0, 0, bufferIn, bufferOut ) == ATCA_SUCCESS)
16     {
17         LOG( "rnrn MAC generated: " );
18         outputHex (bufferOut, 32);
19     }
20     else  LOG( "rnrn Mac generation failed..." );
21      delay_ms (1500);
22 
23    //Checks if the generated MAC is valid
24     memset (bufferIn, 0x14, 128);
25     if (atcab_checkmac( 0, 0, bufferIn, bufferOut, otherData) == ATCA_SUCCESS)
26     {
27         LOG( "rnrn Check MAC successful. " );
28     }
29     else  LOG( "rnrn Check MAC failed..." );
30 }