 Maintenant, c'est temps de créer notre application d'utilisation qui sera créée par le manager de sécurité. Le but de cette partie est de démonstrer comment le manager de sécurité est intégré dans l'écosystème STM32. Nous allons utiliser Cubamix pour créer cette application d'utilisation sur STM32 Q by D pour faire l'implémentation. Tout d'abord, j'aimerais décrire l'application d'un point de vue fonctionnel. Le but est la détection d'intrusion de timestamp. Nous simulons l'intrusion de presser le bouton bleu du STM32 H573 DK. associé à cet événement, une trace avec le temps et le date sera envoyée à notre computer grâce à la connexion USB-VCP. Le principe de cette application est assez simple. Le calendrier RTC est clocked sans LSI. Le bouton bleu est mappé sur PC13, qui est aussi un pin de timestamp RTC. Donc, quand nous pressons le bouton bleu et le QRQ est créé par RTC, le code read le RTC registre pour obtenir la valeur de timestamp et s'éteint un flag de détect. Dans le main loop, le flag de détect est installé. Une trace avec le timestamp est envoyée à l'utilisateur. Cette application sera l'application d'utilisateur qui sera envoyée par le manager de sécurité, donc elle sera locée dans la partie non-sacré de l'application. Donc, l'Ouch STM32 Cubemix, et nous allons créer notre application. Tout d'abord, j'aimerais vérifier l'installation de l'installation de l'application, si c'est correct ou pas. Dans le menu de l'aide, je vais dans Manage Embedit Software Package. Je peux scroller jusqu'à la fin de l'H5. Et s'il vous plaît, vous avez la version 1.1.1. Je peux ouvrir. Je vais aller dans l'accès au sélecteur MCU, parce que j'aimerais commencer mon projet former MCU. Ici, j'aimerais utiliser STM32H573IIK3Q. Comme vous pouvez le voir, c'est un correspondant au bord. Je vais juste cliquer sur la ligne et commencer le projet. Ici, j'ai une question, Marc. Vous voulez avoir une zone de trésorité activée? Dans le contexte du manager SQ, oui. La zone de trésorité est activée. Vous devez sélectionner avec la zone de trésorité activée. La première chose à faire, c'est d'aller dans le tab de manager projet. Ensuite, nous allons sélectionner le nom de projet, le location de projet et le changement des deux. Pour le nom de projet, j'ai suggéré la détection de timestamp. Bien sûr, vous pouvez sélectionner le nom que vous voulez, mais n'oubliez pas de l'espace dans le nom de projet ou dans le location de projet. Régardant le location de projet, j'utilise la zone de trésorité activée STM32H573. Et j'aimerais utiliser la zone de trésorité STM32QID. Ensuite, je vais spécifier que ce projet est seulement pour ma application d'utilisation, elle sera partie dans la zone de trésorité. Je ne genererai pas partie dans la zone de trésorité. J'utilise la zone de trésorité STM32QID. Je dis ok, ou la zone de trésorité STM32QID sera générée, mais la zone de trésorité STM32QID ne sera pas générée. C'est ce que j'aimerais faire. Et ceci est terminé. L'important à faire maintenant, c'est de sauver le projet. Vous devez faire ça pour avoir la capacité de sélectionner le bon pass correct, ce qui est une nouvelle fonctionnalité avec Cubamix. Si je vais dans le pas de pas et la détection de debug, vous pouvez voir le début de la débug authentication, s'il vous plaît, cliquez et générez le folder de GA. Cela va permettre le projet d'être généré avec tous les scripts qui seront nécessaires dans le futur usage pour réopérer la débuggingling quand il est besoin. Pour la sélection de pas de pas, cliquez en sélection et maintenant, nous avons sélectionné la configuration correspondant à le manager de sécurité. En fait, nous avons un loader le 1er stage, donc je vais juste cliquer sur le suivant. Et puis, un 2er stage bootloader, juste cliquer sur le suivant. Et enfin, le manager de sécurité et l'application de sécurité. En fait, nous n'avons pas de choix en regardant la configuration que nous avons, mais dans le futur, peut-être que nous allons avoir des modifications. Donc, ici, cliquez et finissons. Ici, vous avez un sub-map de la configuration, la image de pas de pas. Vous pouvez voir que le script link sera réveillé pour aligner avec la configuration de la manager de sécurité. Nous allons signer les binaries de script chaque fois que nous générons elles. Et nous avons ici le mapping pour notre adresse. Je voudrais remercier l'application du manager de sécurité. Dans ce contexte, nous avons deux loaders de stage. Le 1er stage, le Irot STI. Le I stands pour immeutable, ce qui est un loader de sécurité avec des capacités de firmware. Et nous avons un 2er stage le loader STI U. U stands pour updateable. Cela signifie que nous avons une capacité d'updater le 2er stage le loader, mais aussi le manager de sécurité, le module de sécurité et l'application si nécessaire. Et tous ces updates seraient faits en une façon sécuritaire. Qu'est le processus de boot? Après la récente, le 1er stage, le Irot STI va vérifier l'authenticité sur l'intégrité du 2er stage, le loader STI. Namedi STI U. Si cela est bien, il va loucher le Irot STI. Puis le Irot STI va vérifier l'intégrité et l'authenticité de l'application de sécurité, les services et les modules. Puis il va vérifier l'intégrité et l'authenticité de l'application de l'utilisation. Si tout est bien, il va loucher le Irot STI. Ceci va initialiser et puis tomber à l'application de l'utilisation. La sélection de bootpass a été intégrée dans le Irot STI 32 Cubamix. Ce salu pour générer un projet avec tous les matériaux nécessaires. Je veux dire que la manager de l'ifiété est une abeille de script associée pour le installer, mais il a également installé toutes les sources et des scriptes nécessaires sous la débarcation de débargue. Il va aussi adapter l'application de l'interplication de l'application pour ancrer la course à la map de memo associée avec la sélection de bootpass. D'une configuration de la passée de boot whites Emmettant à la base la application de notre app. Je vais le configurer dans la configuration de l'application et je veux speed to 250 MHz, so I just click on H-Clock, change to 250 and just press enter, then you have a pop-up which ask you if you want to use another source, just click on OK and wait that the clock configuration find how to achieve such a speed. Onces this down, then I go in a pin out and configuration tab. First thing, I would like to initialize my user that will be used to send traces, so I go in the category connectivity I scroll down to find user art 1, and here I will select the context of execution. All our application is in non-secure context so for sure I assign user art 1 to non-secure word. Then I will modify the mode to say it's asynchronous. And this setup by default select the pin PB6 and PB7 which is not the one that is on my board. I need to remap those GPIOs. To do so I will just press the control button of my keyboard and then I can click on the pin. As you can see there is some blinking for the pin to show the alternate possible function. So drag and drop this one to PA9. Then you can release and you have changed the mapping for the user art 1 ticks. Do the same for PB7 so you press the control button on your keyboard, keep it pressed. Then left click on it, drag and drop to PA10. Now we are in line with the hardware configuration of my board. The user art mapping for the GPIO are PN9 and PA10 for the user art 1. On this is done, I will now configure my RTC. So it will be in the category timer. And you can click on RTC. And the first thing is to say I activate the clock source. I will activate the calendar and then I will activate timestamp functionality. On this is done, I have to specify that RTC is owned by the non-secure. This can't be done thanks to this button. You need to go in the tab RTC security. Here for the moment, RTC is full secure. I have to disable this. So in the RTC tab, RTC full secure, disable. I need to have an interrupt. You remember when there is a timestamp and yeah, it should be generated. So in the Envix settings, I have to enable the RTC non-secure interrupt. Just click on enable. Less detail to avoid to have some warning when generated. We will activate the high cache. So in the system core category, you go in high cache. You assign it to non-secure for initialization and just select one way. And that's it. I will say configured all what is needed for our project. So let's generate the code. So click on generate code here. Now I will launch QID and open this generated project. So here I will close and I will now use QID. So please launch QID for you on your side also. And let's open the generated project. For this, I will go in file, open project from file system. Here, I will put the path of my hands on. And I will go in the, I will untick on zone and just keep timestamp event detection, timestamp event detection non secure. And just click on finish. What is the structure of my project generated? As you can see, there is different things. The high OC, which corresponding to my Cubamics project, my non-secure project, or really my user application, but also the root provisioning folder. With one folder with SM, which is a secure manager. So you've got the binaries, which is an encrypted sign of the secure manager on all what is needed to install it. You also have the DA debug authentication folder with an associated script, which allows to reopen the device or to control the debugging link. But we will have detailed in the dedicated part in this training. On here, we've got our application. Non-secure. So there are things we can just try to compile it. So I will just select the project and play the hammer. Just to remark, you can see after compilation, there is some possible script that is lodged. This one will conclude with TPC success. TPC stands for Trusted Package Creator, which is a tool which allows to handle all the encryption and signature generation of this binary. For the moment, we will use a debugger, so we don't use a version encrypted in sign, but we will use it when we do some secure firmware update. I would like also to show you with a build analyzer. So we're just coming. Yes. Here, automatically, you can see the start address. I've been adapt to ensure that it has been compiled to the execution slot where the secure manager will load this application. So now we're ready to add our code. To do so, first, we'll go in the material that you receive. Please, in the workshop on-zone material you receive, you should have a folder timestamp event detection. If you open this one, you find project patch files. Click on it. I've got a structures with include and source folder. In the source folder, you will see that you have different source, and I would like you to drag and drop detection and trace. I take them from the folder and just drag and drop in the source folder. He asked me if I want to copy the file. Yes. This is a way to import some source inside your project. Then we will do something similar, I will say with include folder. So, still in the project patch file, include. This time, I would like you to drag and drop detection.h in the ink folder. And you copy the file. Now we'll modify the main.c. And to avoid any mistyping issue, I will ask you to go in the timestamp event detection in the material and here you've got a code to add.txt. You can open it and just copy past the code needed. So, we have first to include the detection.h and then just in the user code beginning to user code end to we just do some printf. So, when the application is started, we will receive from the user these logs. And then in the one-one loop, we will have the process event detection. So, take care where you put this code. It should be always after user code beginning. It's just to be kept regarding computation. Oh, you can put it also there. The result should be the same. Then we saved and we can compile. So, I will say we have done all the implementation for you and you can have a look in it. It's quite simple just to show what is behind. If I open detection.c, here you can find the timestamp callback with the flags to indicate that we have an event that have been detected. Here, we get from the RTC register the timestamp, the date and the time. And in the one-one loop, we just process event detection. Even event is detected, we just implement a function to send the traces over the user code. Compilation is finished. So, now we need to download our application to the target. And we can do this directly with Kube ID. On the project, I will right click on this debug as STM32C C++ application. Then I have a pop-up for the configuration and you need to do one modification in the debugger tabs. Here, you can see we've got by default a reset behavior connected under reset. This configuration can be used with a secure manager because you remember the boot scheme. First, we got a first stage bootloader that execute a second stage bootloader, blah, blah, blah. So, that's mean we started in secure. But now, we've got all this part that is, I will say close because we are in chosen close. That mean we cannot use connect under reset, but software system reset. So, just do this modification and then you can launch the debugging. It will recompile everything. The debugger will connect. We switch automatically to debug configuration. You can see the flash is ongoing. And finally, we stop in our program. That mean I can debug it and go on. So, we've got a secure manager that is installed in the secure part and you can see that on your ID there is no impact. I will say you can still download and debug your application. So, let's test our application. I will just resume it. And I will open my terra term. So, launch terra term. File, new connection. Here, you should find the steling comports. So, it's probably another number for you. Click on OK. Regarding the setup for the serial ports, you should find the serial port. So, let's test our application. So, let's test our application. So, let's test our application. For the serial ports, you should be with such speed. So, 115,200. The rest is correct by default. OK. So, this is ready. If I press reset button, I can still see my timestamp event detection. And now, if I press the blue button, I have an event detected and you can see that the time de date change. C'est correct. OK. C'est à dire qu'on a fini de développer notre application. Maintenant, let's close the debugging session. Just click on the red square here. This concludes this first part of application development. We have created the basic application in the secure manager context. Some integration of the boot pass in the STM32 Cubemix. All the needed adaptation of the memory mapping has been done for you. And then, we are able to download and debug our application without any specific constraints in the IDE. Except, you write a connect under reset behaviors, but that's all. So, it's somehow transparent for developers just to deal with this application using Cubemix on its usual IDE. If we put this in perspective of the 12 securities function, we have in place now a secure boot but also an isolation. Isolation between our application on all the security stuff that is handled by the secure manager. So, in the next part, we will add some other function in our application. Thank you.