Hi @adafruit_support_mike This is the code
Code: Select all
# SPDX-FileCopyrightText: 2021 ladyada for Adafruit Industries
# SPDX-License-Identifier: MIT
import board
import busio
from adafruit_atecc.adafruit_atecc import ATECC, _WAKE_CLK_FREQ, CFG_TLS
import adafruit_atecc.adafruit_atecc_cert_util as cert_utils
# -- Enter your configuration below -- #
# Lock the ATECC module when the code is run?
LOCK_ATECC = True
# 2-letter country code
MY_COUNTRY = "US"
# State or Province Name
MY_STATE = "CA"
# City Name
MY_CITY = "LA"
# Organization Name
MY_ORG = "IT"
# Organizational Unit Name
MY_SECTION = "Security"
# Which ATECC slot (0-4) to use
ATECC_SLOT = 0
# Generate new private key, or use existing key
GENERATE_PRIVATE_KEY = False
# -- END Configuration, code below -- #
# Initialize the i2c bus
i2c = busio.I2C(board.SCL, board.SDA, frequency=_WAKE_CLK_FREQ)
# Initialize a new atecc object
atecc = ATECC(i2c, address=0x35)
print("ATECC Serial Number: ", atecc.serial_number)
if not atecc.locked:
if not LOCK_ATECC:
raise RuntimeError(
"The ATECC is not locked, set LOCK_ATECC to True in code.py."
)
print("Writing default configuration to the device...")
atecc.write_config(CFG_TLS)
print("Wrote configuration, locking ATECC module...")
# Lock ATECC config, data, and otp zones
atecc.lock_all_zones()
print("ATECC locked!")
print("Generating Certificate Signing Request...")
# Initialize a certificate signing request with provided info
csr = cert_utils.CSR(
atecc,
ATECC_SLOT,
GENERATE_PRIVATE_KEY,
MY_COUNTRY,
MY_STATE,
MY_CITY,
MY_ORG,
MY_SECTION,
)
# Generate CSR
my_csr = csr.generate_csr()
print("-----BEGIN CERTIFICATE REQUEST-----\n")
print(my_csr.decode("utf-8"))
print("-----END CERTIFICATE REQUEST-----")
With this result:
ATECC Serial Number: 012301230123012312
Generating Certificate Signing Request...
-----BEGIN CERTIFICATE REQUEST-----
Traceback (most recent call last):
File "/home/pi/selfSignedCert.py", line 67, in <module>
print(csr.generate_csr())
File "/usr/local/lib/python3.9/dist-packages/adafruit_atecc/adafruit_atecc_cert_util.py", line 77, in generate_csr
csr = self._csr_end()
File "/usr/local/lib/python3.9/dist-packages/adafruit_atecc/adafruit_atecc_cert_util.py", line 120, in _csr_end
asn1.get_issuer_or_subject(
File "/usr/local/lib/python3.9/dist-packages/adafruit_atecc/adafruit_atecc_asn1.py", line 97, in get_issuer_or_subject
get_name(country, 0x06, data)
File "/usr/local/lib/python3.9/dist-packages/adafruit_atecc/adafruit_atecc_asn1.py", line 125, in get_name
data.extend(name)
TypeError: 'str' object cannot be interpreted as an integer
I tried updating these:
Code: Select all
# Which ATECC slot (0-4) to use
ATECC_SLOT = 1
# Generate new private key, or use existing key
GENERATE_PRIVATE_KEY = True
With this result:
ATECC Serial Number: 012301230123012312
Generating Certificate Signing Request...
-----BEGIN CERTIFICATE REQUEST-----
Traceback (most recent call last):
File "/home/pi/selfSignedCert.py", line 67, in <module>
print(csr.generate_csr())
File "/usr/local/lib/python3.9/dist-packages/adafruit_atecc/adafruit_atecc_cert_util.py", line 76, in generate_csr
self._csr_begin()
File "/usr/local/lib/python3.9/dist-packages/adafruit_atecc/adafruit_atecc_cert_util.py", line 86, in _csr_begin
self._atecc.gen_key(self._key, self._slot, self.private_key)
File "/usr/local/lib/python3.9/dist-packages/adafruit_atecc/adafruit_atecc.py", line 438, in gen_key
self._get_response(key)
File "/usr/local/lib/python3.9/dist-packages/adafruit_atecc/adafruit_atecc.py", line 556, in _get_response
raise RuntimeError("CRC Mismatch")
RuntimeError: CRC Mismatch