From 3f047fba12e656d7621311a8072e053a4bfdaa2d Mon Sep 17 00:00:00 2001 From: Geovane Fedrecheski Date: Fri, 30 Aug 2024 11:46:39 +0200 Subject: [PATCH 1/2] python: emit logs up from rust --- .gitignore | 1 + lakers-python/Cargo.toml | 6 ++++-- lakers-python/README.md | 7 +++++++ lakers-python/src/ead_authz/authenticator.rs | 2 ++ lakers-python/src/ead_authz/device.rs | 2 ++ lakers-python/src/ead_authz/server.rs | 3 +++ lakers-python/src/initiator.rs | 2 ++ lakers-python/src/lib.rs | 7 +++++++ lakers-python/src/responder.rs | 2 ++ 9 files changed, 30 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 25204e79..bf6e3d0a 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,7 @@ bin .pytest_cache __pycache__ .venv* +wheelhouse # hax *.fst diff --git a/lakers-python/Cargo.toml b/lakers-python/Cargo.toml index 5d24f5b7..c1e653ba 100644 --- a/lakers-python/Cargo.toml +++ b/lakers-python/Cargo.toml @@ -9,10 +9,12 @@ license.workspace = true [dependencies] pyo3 = { version = "0.22", features = ["extension-module"] } -lakers = { package = "lakers", path = "../lib", default-features = false } -lakers-ead-authz = { path = "../ead/lakers-ead-authz" } +lakers = { package = "lakers", path = "../lib", default-features = false, features = [ "log" ] } +lakers-ead-authz = { path = "../ead/lakers-ead-authz", features = [ "log" ] } lakers-shared = { path = "../shared", features = ["python-bindings", "quadruple_sizes"] } lakers-crypto = { path = "../crypto", default-features = false, features = ["rustcrypto"] } +log = "0.4" +env_logger = "0.9" [dev-dependencies] # We don't need it to build, but it is listed in the manifest Cargo.toml, and diff --git a/lakers-python/README.md b/lakers-python/README.md index 4784312a..abc0eabd 100644 --- a/lakers-python/README.md +++ b/lakers-python/README.md @@ -20,6 +20,13 @@ message_1 = initiator.prepare_message_1(c_i=None, ead_1=None) # for more examples, see the tests in the repository ``` +## Logs +To show logs emitted by the wrapped Rust implementation, set the `RUST_LOG` variable, e.g.: + +```bash +RUST_LOG=trace python -c "import lakers" +``` + # Development To build and test: diff --git a/lakers-python/src/ead_authz/authenticator.rs b/lakers-python/src/ead_authz/authenticator.rs index 5d020632..df19d57b 100644 --- a/lakers-python/src/ead_authz/authenticator.rs +++ b/lakers-python/src/ead_authz/authenticator.rs @@ -1,5 +1,6 @@ use lakers::*; use lakers_ead_authz::*; +use log::trace; use pyo3::{ prelude::*, types::{PyBytes, PyString}, @@ -15,6 +16,7 @@ pub struct PyAuthzAutenticator { impl PyAuthzAutenticator { #[new] fn new() -> Self { + trace!("Initializing AuthzAutenticator"); Self { authenticator: ZeroTouchAuthenticator::default(), authenticator_wait: ZeroTouchAuthenticatorWaitVoucherResp::default(), diff --git a/lakers-python/src/ead_authz/device.rs b/lakers-python/src/ead_authz/device.rs index e9b6ec62..3d7c5ed8 100644 --- a/lakers-python/src/ead_authz/device.rs +++ b/lakers-python/src/ead_authz/device.rs @@ -1,6 +1,7 @@ use lakers::*; use lakers_crypto::default_crypto; use lakers_ead_authz::*; +use log::trace; use pyo3::{exceptions::PyBaseException, prelude::*, types::PyBytes}; #[pyclass(name = "AuthzDevice")] @@ -14,6 +15,7 @@ pub struct PyAuthzDevice { impl PyAuthzDevice { #[new] fn new(id_u: Vec, g_w: Vec, loc_w: &str) -> Self { + trace!("Initializing AuthzDevice"); let id_u = EdhocMessageBuffer::new_from_slice(id_u.as_slice()).unwrap(); let loc_w = EdhocMessageBuffer::new_from_slice(loc_w.as_bytes()).unwrap(); let mut g_w_arr = BytesP256ElemLen::default(); diff --git a/lakers-python/src/ead_authz/server.rs b/lakers-python/src/ead_authz/server.rs index 99022528..3edf297d 100644 --- a/lakers-python/src/ead_authz/server.rs +++ b/lakers-python/src/ead_authz/server.rs @@ -1,6 +1,7 @@ use lakers::*; use lakers_crypto::default_crypto; use lakers_ead_authz::*; +use log::trace; use pyo3::{prelude::*, types::PyBytes}; #[pyclass(name = "AuthzEnrollmentServer")] @@ -13,6 +14,7 @@ impl PyAuthzEnrollmentServer { #[new] #[pyo3(signature = (w, cred_v, acl=None))] pub fn new(w: Vec, cred_v: Vec, acl: Option>) -> Self { + trace!("Initializing AuthzEnrollmentServer"); let mut w_arr = BytesP256ElemLen::default(); w_arr.copy_from_slice(&w.as_slice()); let acl = if let Some(acl) = acl { @@ -51,6 +53,7 @@ pub struct PyAuthzServerUserAcl { impl PyAuthzServerUserAcl { #[new] pub fn new(w: Vec, cred_v: Vec) -> Self { + trace!("Initializing AuthzServerUserAcl"); let mut w_arr = BytesP256ElemLen::default(); w_arr.copy_from_slice(&w.as_slice()); diff --git a/lakers-python/src/initiator.rs b/lakers-python/src/initiator.rs index 1687f82c..c9e080b0 100644 --- a/lakers-python/src/initiator.rs +++ b/lakers-python/src/initiator.rs @@ -1,5 +1,6 @@ use lakers::*; use lakers_crypto::{default_crypto, CryptoTrait}; +use log::trace; use pyo3::{prelude::*, types::PyBytes}; #[pyclass(name = "EdhocInitiator")] @@ -16,6 +17,7 @@ pub struct PyEdhocInitiator { impl PyEdhocInitiator { #[new] fn new() -> Self { + trace!("Initializing EdhocInitiator"); let mut crypto = default_crypto(); let suites_i = prepare_suites_i(&crypto.supported_suites(), EDHOCSuite::CipherSuite2.into()).unwrap(); diff --git a/lakers-python/src/lib.rs b/lakers-python/src/lib.rs index 4406e1bc..89309ef2 100644 --- a/lakers-python/src/lib.rs +++ b/lakers-python/src/lib.rs @@ -2,7 +2,9 @@ /// Note that this module is not restricted by no_std. use lakers::*; // use lakers_ead_authz::consts::*; +use env_logger; use lakers_crypto::{default_crypto, CryptoTrait}; +use log::trace; use pyo3::wrap_pyfunction; use pyo3::{prelude::*, types::PyBytes}; @@ -69,6 +71,11 @@ impl AutoCredential { #[pymodule] #[pyo3(name = "lakers")] fn lakers_python(_py: Python, m: &Bound<'_, PyModule>) -> PyResult<()> { + // initialize the logger once when the module is imported + if env_logger::try_init().is_ok() { + trace!("lakers-python initialized from Rust side."); + } + m.add_function(wrap_pyfunction!(p256_generate_key_pair, m)?)?; m.add_function(wrap_pyfunction!(py_credential_check_or_fetch, m)?)?; // edhoc items diff --git a/lakers-python/src/responder.rs b/lakers-python/src/responder.rs index 396ef442..5c1d09d1 100644 --- a/lakers-python/src/responder.rs +++ b/lakers-python/src/responder.rs @@ -1,5 +1,6 @@ use lakers::*; use lakers_crypto::{default_crypto, CryptoTrait}; +use log::trace; use pyo3::{prelude::*, types::PyBytes}; #[pyclass(name = "EdhocResponder")] @@ -17,6 +18,7 @@ pub struct PyEdhocResponder { impl PyEdhocResponder { #[new] fn new(r: Vec, cred_r: super::AutoCredential) -> PyResult { + trace!("Initializing EdhocResponder"); let (y, g_y) = default_crypto().p256_generate_key_pair(); let cred_r = cred_r.to_credential()?; From e08c64629dd2c22e094e8578ca7896d16fc3654f Mon Sep 17 00:00:00 2001 From: Geovane Fedrecheski Date: Fri, 30 Aug 2024 16:37:54 +0200 Subject: [PATCH 2/2] authz: configure logs --- ead/lakers-ead-authz/Cargo.toml | 3 +++ ead/lakers-ead-authz/src/authenticator.rs | 3 +++ ead/lakers-ead-authz/src/device.rs | 5 +++++ ead/lakers-ead-authz/src/server.rs | 6 ++++++ examples/coap/Cargo.toml | 2 +- 5 files changed, 18 insertions(+), 1 deletion(-) diff --git a/ead/lakers-ead-authz/Cargo.toml b/ead/lakers-ead-authz/Cargo.toml index c45a4fd4..c56a32d3 100644 --- a/ead/lakers-ead-authz/Cargo.toml +++ b/ead/lakers-ead-authz/Cargo.toml @@ -9,6 +9,9 @@ repository.workspace = true [dependencies] lakers-shared.workspace = true +defmt-or-log = { version = "0.2.1", default-features = false } +log = { version = "0.4", optional = true } +defmt = { version = "0.3", optional = true } [dev-dependencies] lakers-crypto.workspace = true diff --git a/ead/lakers-ead-authz/src/authenticator.rs b/ead/lakers-ead-authz/src/authenticator.rs index e460314d..b2692d85 100644 --- a/ead/lakers-ead-authz/src/authenticator.rs +++ b/ead/lakers-ead-authz/src/authenticator.rs @@ -1,5 +1,6 @@ use crate::consts::*; use crate::shared::*; +use defmt_or_log::trace; use lakers_shared::*; #[derive(Debug, Default)] @@ -20,6 +21,7 @@ impl ZeroTouchAuthenticator { ), EDHOCError, > { + trace!("Enter process_ead_1"); let opaque_state: Option = None; // TODO: receive as parameter if ead_1.label != EAD_AUTHZ_LABEL || ead_1.value.is_none() { @@ -42,6 +44,7 @@ impl ZeroTouchAuthenticatorWaitVoucherResp { &self, voucher_response: &EdhocMessageBuffer, ) -> Result { + trace!("Enter prepare_ead_2"); let (_message_1, voucher, _opaque_state) = parse_voucher_response(&voucher_response)?; Ok(EADItem { diff --git a/ead/lakers-ead-authz/src/device.rs b/ead/lakers-ead-authz/src/device.rs index f878ef3b..8c7f5dd9 100644 --- a/ead/lakers-ead-authz/src/device.rs +++ b/ead/lakers-ead-authz/src/device.rs @@ -1,6 +1,7 @@ use crate::consts::*; use crate::shared::*; use crate::ZeroTouchError; +use defmt_or_log::trace; use lakers_shared::{Crypto as CryptoTrait, *}; #[derive(Default, Debug)] @@ -26,6 +27,7 @@ pub struct ZeroTouchDeviceDone { impl ZeroTouchDevice { pub fn new(id_u: EdhocMessageBuffer, g_w: BytesP256ElemLen, loc_w: EdhocMessageBuffer) -> Self { + trace!("Initializing ZeroTouchDevice"); ZeroTouchDevice { id_u, g_w, loc_w } } @@ -35,6 +37,7 @@ impl ZeroTouchDevice { secret: BytesP256ElemLen, ss: u8, ) -> (ZeroTouchDeviceWaitEAD2, EADItem) { + trace!("Enter prepare_ead_1"); // PRK = EDHOC-Extract(salt, IKM) let prk = compute_prk_from_secret(crypto, &secret); @@ -61,6 +64,7 @@ impl ZeroTouchDevice { impl ZeroTouchDeviceWaitEAD2 { pub fn set_h_message_1(&mut self, h_message_1: BytesHashLen) { + trace!("Enter set_h_message_1"); self.h_message_1 = h_message_1; } @@ -70,6 +74,7 @@ impl ZeroTouchDeviceWaitEAD2 { ead_2: EADItem, cred_v: &[u8], ) -> Result { + trace!("Enter process_ead_2"); if ead_2.label != EAD_AUTHZ_LABEL { return Err(ZeroTouchError::InvalidEADLabel); } diff --git a/ead/lakers-ead-authz/src/server.rs b/ead/lakers-ead-authz/src/server.rs index 60f3c3fd..f8c2ae13 100644 --- a/ead/lakers-ead-authz/src/server.rs +++ b/ead/lakers-ead-authz/src/server.rs @@ -1,4 +1,5 @@ use crate::shared::*; +use defmt_or_log::trace; use lakers_shared::{Crypto as CryptoTrait, *}; /// This server also stores an ACL @@ -12,6 +13,7 @@ pub struct ZeroTouchServer { impl ZeroTouchServer { pub fn new(w: BytesP256ElemLen, cred_v: &[u8], acl: Option) -> Self { + trace!("Initializing ZeroTouchServer"); let cred_v: EdhocMessageBuffer = cred_v.try_into().unwrap(); ZeroTouchServer { w, cred_v, acl } } @@ -30,6 +32,7 @@ impl ZeroTouchServer { crypto: &mut Crypto, vreq: &EdhocMessageBuffer, ) -> Result { + trace!("Enter handle_voucher_request"); let (message_1, opaque_state) = parse_voucher_request(vreq)?; let (_method, _suites_i, g_x, _c_i, ead_1) = parse_message_1(&message_1)?; let prk = compute_prk(crypto, &self.w, &g_x); @@ -62,6 +65,7 @@ pub struct ZeroTouchServerUserAcl { impl ZeroTouchServerUserAcl { pub fn new(w: BytesP256ElemLen, cred_v: &[u8]) -> Self { + trace!("Initializing ZeroTouchServerUserAcl"); let cred_v: EdhocMessageBuffer = cred_v.try_into().unwrap(); Self { w, cred_v } } @@ -71,6 +75,7 @@ impl ZeroTouchServerUserAcl { crypto: &mut Crypto, vreq: &EdhocMessageBuffer, ) -> Result { + trace!("Enter decode_voucher_request"); let (message_1, _opaque_state) = parse_voucher_request(vreq)?; let (_method, _suites_i, g_x, _c_i, ead_1) = parse_message_1(&message_1)?; let prk = compute_prk(crypto, &self.w, &g_x); @@ -86,6 +91,7 @@ impl ZeroTouchServerUserAcl { crypto: &mut Crypto, vreq: &EdhocMessageBuffer, ) -> Result { + trace!("Enter prepare_voucher"); let (message_1, opaque_state) = parse_voucher_request(vreq)?; let (_method, _suites_i, g_x, _c_i, _ead_1) = parse_message_1(&message_1)?; let prk = compute_prk(crypto, &self.w, &g_x); diff --git a/examples/coap/Cargo.toml b/examples/coap/Cargo.toml index 649ecb10..8c34ba80 100644 --- a/examples/coap/Cargo.toml +++ b/examples/coap/Cargo.toml @@ -5,7 +5,7 @@ edition = "2021" [dependencies] lakers = { package = "lakers", path = "../../lib", features = [ "log" ] } -lakers-ead-authz = { path = "../../ead/lakers-ead-authz" } +lakers-ead-authz = { path = "../../ead/lakers-ead-authz", features = [ "log" ] } lakers-crypto = { path = "../../crypto/", features = [ "rustcrypto" ] } hexlit = "0.5.3" coap = { version = "0.13" }