Andres Sabas
Published © CERN-OHL

Data Encryption with ATECC608A and CircuitPython

You want to have security with the information you send from your microcontroller to appk, it is advisable to use an encryptor.

BeginnerFull instructions provided1 hour1,301
Data Encryption with ATECC608A and CircuitPython

Things used in this project

Hardware components

ATECC608A Croquette
Electronic Cats ATECC608A Croquette
×1
Bast Pro Mini M0
Electronic Cats Bast Pro Mini M0
×1

Software apps and online services

CircuitPython

Story

Read more

Code

Code for Encryption Data

Python
import board  # Librera para acceder a los pines de la tarjeta
import busio  # Librera para utilizar el bus i2c
import digitalio  # Librera para configurar pines digitales
import analogio  # Librera para configurar pines anlogos

from adafruit_atecc.adafruit_atecc import ATECC, _WAKE_CLK_FREQ  # Librera y constante de la frecuencia del chip ATECC608

# Contrasea
password = "12345678"
bytes_password = bytes(password+"\r\n",'utf-8')

# Comando para encender y apagar el led
led_switch = "led"
bytes_led = bytes(led_switch+"\r\n",'utf-8')

# Led indicador
led = digitalio.DigitalInOut(board.LED)
led.direction = digitalio.Direction.OUTPUT
led.value = True

# Inicializa el bus I2C con la frecuencia adecuada
i2c = busio.I2C(board.SCL, board.SDA, frequency=_WAKE_CLK_FREQ)

# Inicializa el puerto UART
uart = busio.UART(board.D10, board.D11, baudrate=9600)

# Inicializa un objeto de la librera ATECC
atecc = ATECC(i2c)

# Crea un objeto ADC para leer un sensor
adc = analogio.AnalogIn(board.A0)

# Imprime el nmero serial del encriptador
print("ATECC Serial: ", atecc.serial_number)

# Inicializa el motor de encriptacin SHA256
atecc.sha_start()

# Encripta la contrasea
atecc.sha_update(bytes_password)
sha_password = atecc.sha_digest()

# Variables de control
p = False
data = None

# Espera a que el usuario ingrese la contrasea
while (p==False):

# Reinicia el motor de encriptacin de SHA256
atecc.sha_start()

# Pide la contrasea
print("PASSWORD: ",end="")
uart.write(bytes(PASSWORD,utf-8))
while not(data):

# Lee el bfer del puerto uart
data = uart.read(32)  # read up to 32 bytes

# imprime como texto la contrasea ingresada
print(''.join([chr(b) for b in data]))

# Pone la contrasea ingresada en el motor de encriptacin
atecc.sha_update(data)

# Encripta la contrasea ingresada
sha_sent = atecc.sha_digest()

# Compara la contrasea ingresada con la contrasea guardada, si no coincide vuelve a solicitarla
if (sha_sent==sha_password):
p = True
else:
p = False
data = None

while True:
data = None

while not(data):
# Lee el voltaje anlogo del sensor
pot = (adc.value*3.3)/65536

# Imprime el voltaje anlogo del sensor
print(pot)

# Enva el valor del sensor
uart.write(bytes(pot))

# Lee el bfer del puerto uart
data = uart.read(32)  # read up to 32 bytes

# Si el usuario enva led
if (data==bytes_led):

# Enciende o apaga el led
led.value=not(led.value)

# Indica al usuario el cambio
uart.write(bytes(bytes("Led cambiado",'utf-8')))

Credits

Andres Sabas

Andres Sabas

40 projects • 44 followers
Co-Founder of The Inventor's House Hackerspace, DIY, Workaholic

Comments