From 2302b7c2e2ba46ce3e1b8481a551e33f55c65255 Mon Sep 17 00:00:00 2001 From: "Diaz de Grenu, Jose" Date: Wed, 28 Jun 2017 10:41:31 +0200 Subject: [PATCH] dey-examples: add example to use the Atmel ATECC508A https://jira.digi.com/browse/DEL-4371 Signed-off-by: Diaz de Grenu, Jose --- cryptochip-get-random/Makefile | 39 +++++++++++++++ cryptochip-get-random/README.md | 86 +++++++++++++++++++++++++++++++++ cryptochip-get-random/main.c | 32 ++++++++++++ 3 files changed, 157 insertions(+) create mode 100644 cryptochip-get-random/Makefile create mode 100644 cryptochip-get-random/README.md create mode 100644 cryptochip-get-random/main.c diff --git a/cryptochip-get-random/Makefile b/cryptochip-get-random/Makefile new file mode 100644 index 0000000..32e7655 --- /dev/null +++ b/cryptochip-get-random/Makefile @@ -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) diff --git a/cryptochip-get-random/README.md b/cryptochip-get-random/README.md new file mode 100644 index 0000000..5f72ca2 --- /dev/null +++ b/cryptochip-get-random/README.md @@ -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: + +``` +$> . /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. diff --git a/cryptochip-get-random/main.c b/cryptochip-get-random/main.c new file mode 100644 index 0000000..c3e30c9 --- /dev/null +++ b/cryptochip-get-random/main.c @@ -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 +#include + +#include + +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)); + } +}