registration: remove key generation (#23111)

* registration: remove key generation

* add test
pull/23128/head
Adeeb Shihadeh 3 years ago committed by GitHub
parent 6951b3271d
commit 9ceb1a15eb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 23
      selfdrive/athena/registration.py
  2. 11
      selfdrive/athena/tests/test_registration.py

@ -1,14 +1,13 @@
#!/usr/bin/env python3 #/!/usr/bin/env python3
import os
import time import time
import json import json
import jwt import jwt
from pathlib import Path
from datetime import datetime, timedelta from datetime import datetime, timedelta
from common.api import api_get from common.api import api_get
from common.params import Params from common.params import Params
from common.spinner import Spinner from common.spinner import Spinner
from common.file_helpers import mkdirs_exists_ok
from common.basedir import PERSIST from common.basedir import PERSIST
from selfdrive.controls.lib.alertmanager import set_offroad_alert from selfdrive.controls.lib.alertmanager import set_offroad_alert
from selfdrive.hardware import HARDWARE from selfdrive.hardware import HARDWARE
@ -27,19 +26,11 @@ def register(show_spinner=False) -> str:
dongle_id = params.get("DongleId", encoding='utf8') dongle_id = params.get("DongleId", encoding='utf8')
needs_registration = None in (IMEI, HardwareSerial, dongle_id) needs_registration = None in (IMEI, HardwareSerial, dongle_id)
# create a key for auth pubkey = Path(PERSIST+"/comma/id_rsa.pub")
# your private key is kept on your device persist partition and never sent to our servers if not pubkey.is_file():
# do not erase your persist partition dongle_id = UNREGISTERED_DONGLE_ID
if not os.path.isfile(PERSIST+"/comma/id_rsa.pub"): cloudlog.warning(f"missing public key: {pubkey}")
needs_registration = True elif needs_registration:
cloudlog.warning("generating your personal RSA key")
mkdirs_exists_ok(PERSIST+"/comma")
assert os.system("openssl genrsa -out "+PERSIST+"/comma/id_rsa.tmp 2048") == 0
assert os.system("openssl rsa -in "+PERSIST+"/comma/id_rsa.tmp -pubout -out "+PERSIST+"/comma/id_rsa.tmp.pub") == 0
os.rename(PERSIST+"/comma/id_rsa.tmp", PERSIST+"/comma/id_rsa")
os.rename(PERSIST+"/comma/id_rsa.tmp.pub", PERSIST+"/comma/id_rsa.pub")
if needs_registration:
if show_spinner: if show_spinner:
spinner = Spinner() spinner = Spinner()
spinner.update("registering device") spinner.update("registering device")

@ -50,6 +50,14 @@ class TestRegistration(unittest.TestCase):
self.assertEqual(register(), dongle) self.assertEqual(register(), dongle)
self.assertFalse(m.called) self.assertFalse(m.called)
def test_no_keys(self):
# missing pubkey
with mock.patch("selfdrive.athena.registration.api_get", autospec=True) as m:
dongle = register()
self.assertEqual(m.call_count, 0)
self.assertEqual(dongle, UNREGISTERED_DONGLE_ID)
self.assertEqual(self.params.get("DongleId", encoding='utf-8'), dongle)
def test_missing_cache(self): def test_missing_cache(self):
# keys exist but no dongle id # keys exist but no dongle id
self._generate_keys() self._generate_keys()
@ -65,7 +73,8 @@ class TestRegistration(unittest.TestCase):
self.assertEqual(self.params.get("DongleId", encoding='utf-8'), dongle) self.assertEqual(self.params.get("DongleId", encoding='utf-8'), dongle)
def test_unregistered(self): def test_unregistered(self):
# no keys, no dongle id # keys exist, but unregistered
self._generate_keys()
with mock.patch("selfdrive.athena.registration.api_get", autospec=True) as m: with mock.patch("selfdrive.athena.registration.api_get", autospec=True) as m:
m.return_value = MockResponse(None, 402) m.return_value = MockResponse(None, 402)
dongle = register() dongle = register()

Loading…
Cancel
Save