Compare commits

...

24 Commits

Author SHA1 Message Date
5affbb0043 Merge pull request 'gpio' (#2) from test into main
Reviewed-on: #2
2024-05-14 05:45:25 -07:00
EggMan20339
cfb618134e gpio 2024-05-14 12:44:23 -04:00
cfea64d258 Merge pull request 'gpio' (#1) from test into main
Reviewed-on: #1
2024-05-14 05:42:29 -07:00
e86a794582 Merge branch 'main' into test 2024-05-14 05:42:08 -07:00
EggMan20339
bb9f650edd gpio 2024-05-14 12:40:55 -04:00
EggMan
54eeebdb0f removed NFC 2024-05-14 07:43:22 -04:00
EggMan
f63cb0f92a made 3 second door unlock instead of 5 2024-05-14 07:35:46 -04:00
EggMan20339
165df2de5a gpio 2024-05-09 23:28:50 -04:00
EggMan20339
40df6174a9 Merge remote-tracking branch 'origin/main'
# Conflicts:
#	main.py
2024-05-10 03:23:57 -04:00
EggMan20339
bd6903b7a2 more nfc 2024-05-10 03:23:40 -04:00
EggMan
7e3b6678d6 revert to before nfc 2024-05-09 23:14:52 -04:00
EggMan20339
51cdc8d4e2 more nfc 2024-05-09 22:46:21 -04:00
EggMan20339
fdb0e045f8 more nfc 2024-05-09 22:36:28 -04:00
EggMan20339
eabd40db41 more nfc 2024-05-09 22:34:53 -04:00
EggMan20339
b42085c6ef more nfc 2024-05-09 22:26:26 -04:00
EggMan20339
e800879339 more nfc 2024-05-09 22:13:00 -04:00
EggMan20339
5c4b97fb59 more nfc 2024-05-09 22:02:50 -04:00
EggMan20339
be315e85aa more nfc 2024-05-09 21:59:18 -04:00
EggMan20339
9a55dec5f2 more nfc 2024-05-09 21:53:18 -04:00
EggMan20339
386cbc2c0a try nfc 2024-05-09 21:47:06 -04:00
EggMan20339
88e02f1fee test2 2024-05-09 21:39:07 -04:00
EggMan20339
9a75b7a1e3 test 2024-05-09 21:36:55 -04:00
EggMan20339
0b5197e546 modified script storage path 2024-05-09 21:32:22 -04:00
EggMan20339
002ab064b7 gpio true 2024-05-09 21:25:06 -04:00
5 changed files with 55 additions and 44 deletions

2
.idea/CNSA-276-FP.iml generated
View File

@@ -5,7 +5,7 @@
<excludeFolder url="file://$MODULE_DIR$/.venv" />
<excludeFolder url="file://$MODULE_DIR$/venv" />
</content>
<orderEntry type="jdk" jdkName="Python 3.12 (CNSA-276-FP)" jdkType="Python SDK" />
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

View File

@@ -5,20 +5,25 @@ sudo apt-get upgrade -y
sudo apt-get update
sudo apt-get install python3-psycopg2 -y
sudo apt-get install python3-fido2 -y
sudo apt-get install python3-nfcpy -y
sudo apt-get install screen -y
sudo apt-get update
sudo apt-get upgrade -y
sudo mkdir /user/CNSA
# Define crontab job
JOB="@reboot /bin/sh /user/CNSA/CNSA-276-FP/startup.sh"
JOB="@reboot /bin/sh /user/CNSA/script/startup.sh"
# Check if the job is already in the crontab and add it if it's not
( crontab -l | grep -F "$JOB" || echo "$JOB" ) | crontab -
sudo git clone https://gitea.eggtech.net/eggman20339/CNSA-276-FP.git /user/CNSA/CNSA-276-FP
sudo chmod 777 /user/CNSA/CNSA-276-FP/startup.sh
sudo mkdir /user/CNSA/script
sudo cp /user/CNSA/CNSA-276-FP/startup.sh /user/CNSA/script/startup.sh
sudo chmod 777 /user/CNSA/script/startup.sh
pip3 install --upgrade fido2 --break-system-packages
pip3 install nfcpy --break-system-packages

25
main.py
View File

@@ -33,7 +33,7 @@ On Windows, the native WebAuthn API will be used.
"""
import time
import configparser
gpie = False
gpie = True
if gpie:
import RPi.GPIO as GPIO
import pickle
@@ -46,13 +46,13 @@ from getpass import getpass
import sys
import ctypes
from fido2.ctap2 import Ctap2
import nfc
from fido2 import cbor
# from fido2 import CtapNfcDevice
config = configparser.ConfigParser()
config.read('config.ini')
# test
dbusername = config.get('Setup', 'dbusername')
dbpassword = config.get('Setup', 'dbpassword')
dbname = config.get('Setup', 'dbname')
@@ -70,8 +70,6 @@ redLed = 7
door = 40
if gpie:
# badCredentials = False
GPIO.setup(greenLed, GPIO.OUT)
@@ -105,26 +103,20 @@ class CliInteraction(UserInteraction):
print("User Verification required.")
return True
try:
clf = nfc.ContactlessFrontend('usb') # Ensure this matches your connection
print("NFC reader initialized.")
except Exception as e:
print("Failed to initialize NFC reader:", e)
while True:
# isNfc = False
if gpie:
GPIO.output(door, GPIO.LOW)
# GPIO.output(14, GPIO.LOW)
print("Waiting for device...")
badCredentials = False
if gpie:
GPIO.output(redLed, GPIO.HIGH)
while True:
try:
# GPIO.output(14, GPIO.LOW)
dev = next(CtapHidDevice.list_devices(), None)
if dev:
@@ -235,6 +227,7 @@ while True:
request_options, state = server.authenticate_begin(credentials, user_verification=uv)
# Authenticate the credential
result = client.get_assertion(request_options["publicKey"])
# Only one cred in allowCredentials, only one response.
@@ -334,7 +327,7 @@ while True:
GPIO.output(greenLed, GPIO.HIGH)
GPIO.output(door, GPIO.HIGH)
time.sleep(5)
time.sleep(3)
GPIO.output(greenLed, GPIO.LOW)

View File

@@ -3,7 +3,6 @@ sudo cp /user/CNSA/CNSA-276-FP/config.ini /config.bak
sudo rm -R /user/CNSA/CNSA-276-FP
# Function to check internet connectivity
check_internet_connection() {
ping -c 1 1.1.1.1 > /dev/null 2>&1
@@ -28,3 +27,5 @@ sudo chmod 777 /user/CNSA/CNSA-276-FP/startup.sh
sudo cp /config.bak /user/CNSA/CNSA-276-FP/config.ini
screen -dmS DoorAuth bash -c "cd /user/CNSA/CNSA-276-FP/ && python3 main.py"
sudo cp /user/CNSA/CNSA-276-FP/startup.sh /user/CNSA/script/startup.sh

56
test.py
View File

@@ -1,26 +1,38 @@
import nfc
import time
from fido2.pcsc import CtapPcscDevice
from fido2.utils import sha256
from fido2.ctap1 import Ctap1
import sys
def connected(tag):
print("Tag detected:", tag)
return True
def read_nfc():
try:
clf = nfc.ContactlessFrontend('usb') # Ensure this matches your connection
print("NFC reader initialized.")
except Exception as e:
print("Failed to initialize NFC reader:", e)
return
dev = next(CtapPcscDevice.list_devices(), None)
if not dev:
print("No NFC u2f device found")
sys.exit(1)
try:
while True:
print("Waiting for NFC tag...")
clf.connect(rdwr={'on-connect': connected})
time.sleep(1)
except Exception as e:
print("Error reading NFC tag:", e)
finally:
clf.close()
chal = sha256(b"AAA")
appid = sha256(b"BBB")
read_nfc()
ctap1 = Ctap1(dev)
print("version:", ctap1.get_version())
# True - make extended APDU and send it to key
# ISO 7816-3:2006. page 33, 12.1.3 Decoding conventions for command APDUs
# ISO 7816-3:2006. page 34, 12.2 Command-response pair transmission by T=0
# False - make group of short (less than 255 bytes length) APDU
# and send them to key. ISO 7816-3:2005, page 9, 5.1.1.1 Command chaining
dev.use_ext_apdu = False
reg = ctap1.register(chal, appid)
print("register:", reg)
reg.verify(appid, chal)
print("Register message verify OK")
auth = ctap1.authenticate(chal, appid, reg.key_handle)
print("authenticate result: ", auth)
res = auth.verify(appid, chal, reg.public_key)
print("Authenticate message verify OK")