|
| 1 | +/* |
| 2 | + Software Secure Element Certificate |
| 3 | +
|
| 4 | + This sketch uses the Software Secure Element to store device certificate and read it back. |
| 5 | +
|
| 6 | + Circuit: |
| 7 | + - UNO R4 WiFi |
| 8 | +*/ |
| 9 | + |
| 10 | +#include <SoftwareATSE.h> |
| 11 | + |
| 12 | +const byte certificate[410] = { |
| 13 | + 0x30 ,0x82 ,0x01 ,0x96 ,0x30 ,0x82 ,0x01 ,0x3D ,0xA0 ,0x03 ,0x02 ,0x01 ,0x02 ,0x02 ,0x10 ,0x37, |
| 14 | + 0xFE ,0x48 ,0x92 ,0xE6 ,0xC0 ,0xA0 ,0x64 ,0x68 ,0x91 ,0x66 ,0x5F ,0x7D ,0xE3 ,0x02 ,0xDE ,0x30, |
| 15 | + 0x0A ,0x06 ,0x08 ,0x2A ,0x86 ,0x48 ,0xCE ,0x3D ,0x04 ,0x03 ,0x02 ,0x30 ,0x45 ,0x31 ,0x0B ,0x30, |
| 16 | + 0x09 ,0x06 ,0x03 ,0x55 ,0x04 ,0x06 ,0x13 ,0x02 ,0x55 ,0x53 ,0x31 ,0x17 ,0x30 ,0x15 ,0x06 ,0x03, |
| 17 | + 0x55 ,0x04 ,0x0A ,0x13 ,0x0E ,0x41 ,0x72 ,0x64 ,0x75 ,0x69 ,0x6E ,0x6F ,0x20 ,0x4C ,0x4C ,0x43, |
| 18 | + 0x20 ,0x55 ,0x53 ,0x31 ,0x0B ,0x30 ,0x09 ,0x06 ,0x03 ,0x55 ,0x04 ,0x0B ,0x13 ,0x02 ,0x49 ,0x54, |
| 19 | + 0x31 ,0x10 ,0x30 ,0x0E ,0x06 ,0x03 ,0x55 ,0x04 ,0x03 ,0x13 ,0x07 ,0x41 ,0x72 ,0x64 ,0x75 ,0x69, |
| 20 | + 0x6E ,0x6F ,0x30 ,0x20 ,0x17 ,0x0D ,0x32 ,0x33 ,0x30 ,0x33 ,0x33 ,0x31 ,0x30 ,0x37 ,0x30 ,0x30, |
| 21 | + 0x30 ,0x30 ,0x5A ,0x18 ,0x0F ,0x32 ,0x30 ,0x35 ,0x34 ,0x30 ,0x33 ,0x33 ,0x31 ,0x30 ,0x37 ,0x30, |
| 22 | + 0x30 ,0x30 ,0x30 ,0x5A ,0x30 ,0x2F ,0x31 ,0x2D ,0x30 ,0x2B ,0x06 ,0x03 ,0x55 ,0x04 ,0x03 ,0x13, |
| 23 | + 0x24 ,0x37 ,0x61 ,0x31 ,0x39 ,0x39 ,0x65 ,0x62 ,0x30 ,0x2D ,0x38 ,0x33 ,0x64 ,0x38 ,0x2D ,0x34, |
| 24 | + 0x63 ,0x34 ,0x34 ,0x2D ,0x39 ,0x66 ,0x66 ,0x32 ,0x2D ,0x30 ,0x32 ,0x33 ,0x35 ,0x37 ,0x38 ,0x30, |
| 25 | + 0x31 ,0x35 ,0x64 ,0x33 ,0x39 ,0x30 ,0x59 ,0x30 ,0x13 ,0x06 ,0x07 ,0x2A ,0x86 ,0x48 ,0xCE ,0x3D, |
| 26 | + 0x02 ,0x01 ,0x06 ,0x08 ,0x2A ,0x86 ,0x48 ,0xCE ,0x3D ,0x03 ,0x01 ,0x07 ,0x03 ,0x42 ,0x00 ,0x04, |
| 27 | + 0x60 ,0x53 ,0x94 ,0x10 ,0x8C ,0xA6 ,0xB6 ,0xC8 ,0xD2 ,0x05 ,0x22 ,0x61 ,0xD9 ,0x5D ,0xF8 ,0xDB, |
| 28 | + 0xD1 ,0xF4 ,0xE4 ,0xAC ,0xC9 ,0x96 ,0x8E ,0xFF ,0xB8 ,0x7E ,0x0D ,0xDC ,0xA1 ,0xB8 ,0x0F ,0x4C, |
| 29 | + 0xF5 ,0x66 ,0x68 ,0xF0 ,0xF4 ,0xF0 ,0x70 ,0xF3 ,0xF6 ,0xFD ,0x70 ,0xD2 ,0x7A ,0xFB ,0x20 ,0x70, |
| 30 | + 0x30 ,0x82 ,0x5F ,0x34 ,0xF8 ,0x2A ,0x1B ,0xC5 ,0xB1 ,0x38 ,0xE5 ,0xA5 ,0xF7 ,0xC7 ,0xB4 ,0x62, |
| 31 | + 0xA3 ,0x23 ,0x30 ,0x21 ,0x30 ,0x1F ,0x06 ,0x03 ,0x55 ,0x1D ,0x23 ,0x04 ,0x18 ,0x30 ,0x16 ,0x80, |
| 32 | + 0x14 ,0x5B ,0x3E ,0x2A ,0x6B ,0x8E ,0xC9 ,0xB0 ,0x1A ,0xA8 ,0x54 ,0xE6 ,0x36 ,0x9B ,0x8C ,0x09, |
| 33 | + 0xF9 ,0xFC ,0xE1 ,0xB9 ,0x80 ,0x30 ,0x0A ,0x06 ,0x08 ,0x2A ,0x86 ,0x48 ,0xCE ,0x3D ,0x04 ,0x03, |
| 34 | + 0x02 ,0x03 ,0x47 ,0x00 ,0x30 ,0x44 ,0x02 ,0x20 ,0x16 ,0x85 ,0x8A ,0x58 ,0x07 ,0x28 ,0xEF ,0x6D, |
| 35 | + 0x93 ,0x86 ,0xA0 ,0x0E ,0xC8 ,0xB0 ,0x0A ,0xAD ,0x3B ,0xCE ,0xBB ,0x6A ,0x19 ,0x94 ,0xF9 ,0xD3, |
| 36 | + 0x05 ,0x2E ,0x15 ,0xF1 ,0x5E ,0x9F ,0x59 ,0xD2 ,0x02 ,0x20 ,0x45 ,0x30 ,0x88 ,0x1D ,0x24 ,0xDA, |
| 37 | + 0xE4 ,0x60 ,0xE2 ,0xD0 ,0x6E ,0x02 ,0xB0 ,0x7D ,0x65 ,0xA8 ,0x09 ,0x63 ,0x0B ,0x44 ,0xBC ,0x24, |
| 38 | + 0x1A ,0xE2 ,0xEC ,0x64 ,0x19 ,0xB4 ,0x59 ,0xB8 ,0x09 ,0x78 |
| 39 | +}; |
| 40 | + |
| 41 | +void printBufferHex(const byte input[], size_t inputLength) { |
| 42 | + Serial.println(inputLength); |
| 43 | + for (size_t i = 0; i < inputLength; i++) { |
| 44 | + Serial.print(input[i] >> 4, HEX); |
| 45 | + Serial.print(input[i] & 0x0f, HEX); |
| 46 | + } |
| 47 | + Serial.println(); |
| 48 | +} |
| 49 | + |
| 50 | +void setup() { |
| 51 | + Serial.begin(9600); |
| 52 | + while (!Serial); |
| 53 | + |
| 54 | + if (!SATSE.begin()) { |
| 55 | + Serial.println("Failed to communicate with Software Secure Element!"); |
| 56 | + Serial.println("Make sure your WiFi firmware version is greater than 0.3.0"); |
| 57 | + while (1); |
| 58 | + } |
| 59 | + |
| 60 | + const int certId = 799; |
| 61 | + |
| 62 | + if(SATSE.writeSlot(certId, certificate, sizeof(certificate))) { |
| 63 | + Serial.println("Data stored"); |
| 64 | + } else { |
| 65 | + Serial.println("Failed to store data"); |
| 66 | + return; |
| 67 | + } |
| 68 | + |
| 69 | + byte buf[512]; |
| 70 | + int ret = 0; |
| 71 | + |
| 72 | + if((ret = SATSE.readSlot(certId, buf, sizeof(buf))) > 0) { |
| 73 | + Serial.print("Readback data is: "); |
| 74 | + int len = (buf[2] << 8) + buf[3] + 4; |
| 75 | + printBufferHex(buf, len); |
| 76 | + } else { |
| 77 | + Serial.println("Failed to read data"); |
| 78 | + return; |
| 79 | + } |
| 80 | + |
| 81 | +} |
| 82 | + |
| 83 | +void loop() { |
| 84 | + |
| 85 | +} |
0 commit comments