Lines Matching full:mcu

3  * CZ.NIC's Turris Omnia MCU ECDSA message signing via keyctl
20 #include <linux/turris-omnia-mcu-interface.h>
22 #include "turris-omnia-mcu.h"
27 struct omnia_mcu *mcu = dev_id; in omnia_msg_signed_irq_handler() local
30 err = omnia_cmd_read(mcu->client, OMNIA_CMD_CRYPTO_COLLECT_SIGNATURE, in omnia_msg_signed_irq_handler()
35 guard(mutex)(&mcu->sign_lock); in omnia_msg_signed_irq_handler()
37 if (mcu->sign_requested) { in omnia_msg_signed_irq_handler()
38 mcu->sign_err = err; in omnia_msg_signed_irq_handler()
40 memcpy(mcu->signature, &reply[1], in omnia_msg_signed_irq_handler()
42 mcu->sign_requested = false; in omnia_msg_signed_irq_handler()
43 complete(&mcu->msg_signed); in omnia_msg_signed_irq_handler()
52 struct omnia_mcu *mcu = dev_get_drvdata(turris_signing_key_get_dev(key)); in omnia_mcu_sign() local
56 scoped_guard(mutex, &mcu->sign_lock) { in omnia_mcu_sign()
57 if (mcu->sign_requested) in omnia_mcu_sign()
63 err = omnia_cmd_write_read(mcu->client, cmd, sizeof(cmd), in omnia_mcu_sign()
71 mcu->sign_requested = true; in omnia_mcu_sign()
74 if (wait_for_completion_interruptible(&mcu->msg_signed)) in omnia_mcu_sign()
77 guard(mutex)(&mcu->sign_lock); in omnia_mcu_sign()
79 if (mcu->sign_err) in omnia_mcu_sign()
80 return mcu->sign_err; in omnia_mcu_sign()
82 memcpy(signature, mcu->signature, OMNIA_MCU_CRYPTO_SIGNATURE_LEN); in omnia_mcu_sign()
85 memzero_explicit(mcu->signature, sizeof(mcu->signature)); in omnia_mcu_sign()
92 struct omnia_mcu *mcu = dev_get_drvdata(turris_signing_key_get_dev(key)); in omnia_mcu_get_public_key() local
94 return mcu->board_public_key; in omnia_mcu_get_public_key()
107 static int omnia_mcu_read_public_key(struct omnia_mcu *mcu) in omnia_mcu_read_public_key() argument
112 err = omnia_cmd_read(mcu->client, OMNIA_CMD_CRYPTO_GET_PUBLIC_KEY, in omnia_mcu_read_public_key()
120 memcpy(mcu->board_public_key, &reply[1], in omnia_mcu_read_public_key()
126 int omnia_mcu_register_keyctl(struct omnia_mcu *mcu) in omnia_mcu_register_keyctl() argument
128 struct device *dev = &mcu->client->dev; in omnia_mcu_register_keyctl()
132 if (!(mcu->features & OMNIA_FEAT_CRYPTO)) in omnia_mcu_register_keyctl()
135 err = omnia_mcu_read_public_key(mcu); in omnia_mcu_register_keyctl()
140 err = devm_mutex_init(dev, &mcu->sign_lock); in omnia_mcu_register_keyctl()
144 init_completion(&mcu->msg_signed); in omnia_mcu_register_keyctl()
146 err = omnia_mcu_request_irq(mcu, OMNIA_INT_MESSAGE_SIGNED, in omnia_mcu_register_keyctl()
148 "turris-omnia-mcu-keyctl"); in omnia_mcu_register_keyctl()
153 sprintf(desc, "Turris Omnia SN %016llX MCU ECDSA key", in omnia_mcu_register_keyctl()
154 mcu->board_serial_number); in omnia_mcu_register_keyctl()