dey-examples: add example to use the Atmel ATECC508A
https://jira.digi.com/browse/DEL-4371 Signed-off-by: Diaz de Grenu, Jose <Jose.DiazdeGrenu@digi.com>
This commit is contained in:
parent
bffdbe88f6
commit
2302b7c2e2
|
|
@ -0,0 +1,39 @@
|
||||||
|
#
|
||||||
|
# Copyright (c) 2017 Digi International Inc.
|
||||||
|
#
|
||||||
|
# Permission to use, copy, modify, and/or distribute this software for any
|
||||||
|
# purpose with or without fee is hereby granted, provided that the above
|
||||||
|
# copyright notice and this permission notice appear in all copies.
|
||||||
|
#
|
||||||
|
# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||||
|
# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||||
|
# AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||||
|
# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||||
|
# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||||
|
# OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||||
|
# PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
#
|
||||||
|
#
|
||||||
|
|
||||||
|
PROGRAM := cryptochip-gen-random
|
||||||
|
|
||||||
|
CFLAGS += -Wall
|
||||||
|
|
||||||
|
CFLAGS += $(shell pkg-config --cflags cryptoauthlib)
|
||||||
|
LDLIBS += $(shell pkg-config --libs --static cryptoauthlib)
|
||||||
|
|
||||||
|
all: $(PROGRAM)
|
||||||
|
|
||||||
|
OBJS = main.o
|
||||||
|
|
||||||
|
$(PROGRAM): $(OBJS)
|
||||||
|
$(CC) $(LDFLAGS) $^ $(LDLIBS) -o $@
|
||||||
|
|
||||||
|
.PHONY: install
|
||||||
|
install: $(PROGRAM)
|
||||||
|
install -d $(DESTDIR)/usr/bin
|
||||||
|
install -m 0755 $(PROGRAM) $(DESTDIR)/usr/bin/
|
||||||
|
|
||||||
|
.PHONY: clean
|
||||||
|
clean:
|
||||||
|
-rm -f *.o $(PROGRAM)
|
||||||
|
|
@ -0,0 +1,86 @@
|
||||||
|
Cryptochip Demo Application
|
||||||
|
===================================
|
||||||
|
|
||||||
|
This application produces random output using the internal high-quality
|
||||||
|
FIPS Random Number Generator (RNG) from the ATECC508A Atmel Cryptochip.
|
||||||
|
|
||||||
|
The random data is written in binary to the standard output, allowing to
|
||||||
|
easily use any data analysis tool (using a pipe, or redirecting the output
|
||||||
|
to a file for later analysis).
|
||||||
|
|
||||||
|
This tool is provided as a simple example application to use the CryptoAuthLib
|
||||||
|
software, which provides an interface to the Atmel cryptochip. It can also be
|
||||||
|
used to validate the cryptochip and the I2C communication.
|
||||||
|
|
||||||
|
A final application that needs to use the Atmel Cryptochip RNG should integrate
|
||||||
|
calls to the cryptoauth library, as shown in this example application source
|
||||||
|
code.
|
||||||
|
|
||||||
|
Running the application
|
||||||
|
-----------------------
|
||||||
|
The output of this application mimics what you would get by reading from a
|
||||||
|
standard random number generator, like /dev/random.
|
||||||
|
|
||||||
|
For example, you can get hexdump to display a random sample on the standard
|
||||||
|
output:
|
||||||
|
```
|
||||||
|
root@ccimx6ulstarter:~# ./cryptochip-gen-random | hexdump
|
||||||
|
0000000 6239 ddd4 b378 693f 14ed bfa1 447b cff1
|
||||||
|
0000010 275e fd14 e392 2b4a c2ff ac93 0f5e cbab
|
||||||
|
0000020 16c1 e6b7 a458 c5ea c96f 59c9 776a 41c5
|
||||||
|
0000030 a656 ffa8 2076 6917 f18a e9ad 9ea1 7915
|
||||||
|
0000040 b677 aec3 a0a2 c7b6 c8ce 2a1f aa6c d9fc
|
||||||
|
0000050 f75c 3b57 eea4 051b 3a5f 7bd9 523f 4544
|
||||||
|
0000060 cb1a 388c b655 e8ca d6eb e459 8a43 cd2f
|
||||||
|
(...)
|
||||||
|
```
|
||||||
|
|
||||||
|
You can also save the random data to a random file for later analysis:
|
||||||
|
```
|
||||||
|
root@ccimx6ulstarter:~# ./cryptochip-gen-random | pv --rate > data.bin
|
||||||
|
[ 912 B/s]
|
||||||
|
```
|
||||||
|
|
||||||
|
And then run an entropy test:
|
||||||
|
```
|
||||||
|
root@ccimx6ulstarter:~# ent data.bin
|
||||||
|
Entropy = 7.998261 bits per byte.
|
||||||
|
|
||||||
|
Optimum compression would reduce the size
|
||||||
|
of this 291808 byte file by 0 percent.
|
||||||
|
|
||||||
|
Chi square distribution for 291808 samples is 706.41, and randomly
|
||||||
|
would exceed this value less than 0.01 percent of the times.
|
||||||
|
|
||||||
|
Arithmetic mean value of data bytes is 127.0582 (127.5 = random).
|
||||||
|
Monte Carlo value for Pi is 3.149895135 (error 0.26 percent).
|
||||||
|
Serial correlation coefficient is 0.000944 (totally uncorrelated = 0.0).
|
||||||
|
```
|
||||||
|
|
||||||
|
Compiling the application
|
||||||
|
-------------------------
|
||||||
|
This demo can be compiled using a Digi Embedded Yocto based toolchain. Make
|
||||||
|
sure to source the corresponding toolchain of the platform you are using, e.g:
|
||||||
|
|
||||||
|
```
|
||||||
|
$> . <DEY-toolchain-path>/environment-setup-cortexa7hf-vfp-neon-dey-linux-gnueabi
|
||||||
|
$> make
|
||||||
|
```
|
||||||
|
|
||||||
|
More information about [Digi Embedded Yocto](https://github.com/digi-embedded/meta-digi).
|
||||||
|
|
||||||
|
License
|
||||||
|
-------
|
||||||
|
Copyright 2017, Digi International Inc.
|
||||||
|
|
||||||
|
Permission to use, copy, modify, and/or distribute this software for any purpose
|
||||||
|
with or without fee is hereby granted, provided that the above copyright notice
|
||||||
|
and this permission notice appear in all copies.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||||
|
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||||
|
FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||||
|
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
|
||||||
|
OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
||||||
|
TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
|
||||||
|
THIS SOFTWARE.
|
||||||
|
|
@ -0,0 +1,32 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2017 Digi International Inc.
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, and/or distribute this software for any
|
||||||
|
* purpose with or without fee is hereby granted, provided that the above
|
||||||
|
* copyright notice and this permission notice appear in all copies.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||||
|
* REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||||
|
* AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||||
|
* INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||||
|
* LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||||
|
* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||||
|
* PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
* =======================================================================
|
||||||
|
*/
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
#include <cryptoauthlib.h>
|
||||||
|
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
uint8_t random_number[32];
|
||||||
|
|
||||||
|
atcab_init(&cfg_ateccx08a_i2c_default);
|
||||||
|
|
||||||
|
while (true) {
|
||||||
|
atcab_random(random_number);
|
||||||
|
write(STDOUT_FILENO, random_number, sizeof(random_number));
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue