Programmation Keil ?
Répondre à la discussion
Affichage des résultats 1 à 20 sur 20

Programmation Keil ?



  1. #1
    invite0ae9a443

    Programmation Keil ?


    ------

    je cherche a trouver le programme en c pour transmettre une donnée quelconque avec le logiciel KEIl uvision 5 et lumplémenter sur la carte stm32f4 discovery et realiser la transmission

    -----

  2. #2
    invitee05a3fcc

    Re : programation keil

    Tu as les lettres J i c u e o b m n et r sur ton clavier ?

  3. #3
    invite0ae9a443

    Re : programation keil

    jai pas bien compris ce que vous vouliez dire

  4. #4
    spown

    Re : programation keil

    Bonjour/Bonsoir est bienvenue sur FUTURA,

    T'as question n'a/aura pas de réponse. pourquoi? parce que tu sais pas ce que tu veux. Keil est un IDE, transmettre une donnée de KEIL vers ta F4 ( arm ) ne demande pas de programme mais un programmateur ( qui est déjà inclu dans ta carte). Bref, réfléchis un peu avant de poser une question .

    Note: DAUDET78, voulait te dire un <bonjour > va pas saturer ta DDR ( tu connais ?), et il est nécessaire pour échanger le respect entre nous les humais.

  5. A voir en vidéo sur Futura
  6. #5
    invite0ae9a443

    Re : programation keil

    bonjour, je suis tellement désolé j'ai pas fait attention a ces simples code de communication je suis tellement désolé Spown et DAUDET78 et si vous pourriez m'aider a trouver ce programmateur qui assure la transmission d'une donnée qque d'une carte a une autre ou a l'aide de pc je suis débutant et merci bien d'avance

  7. #6
    invite0ae9a443

    Re : programation keil

    jai deja une carte stm32f4-discovery mais je sais pas comment acceder a activer cette commande de transmission de donnée merci bien d'avance

  8. #7
    spown

    Re : programation keil

    Mais de quelle commande tu parles ? est ce que t'as déjà programmer un uC avant? allumer une LED ?

    Avec ton niveau je te conseille soit de changer la F4 (ARM) ou prendre le temps à bien lire les tuto/manuel et pratiquer les exemples chez ST , Keil c'est pas arduino ( désole pour les fun d'arduino ), c'est un environnement pro.

    Je répète le programmateur est intégré dans ta carte ( tu as 2 USB( mini et micro ) un pour User(micro) et l'autre (ST-LINK/V2) pour programmer (mini).
    Bref, qu'est ce que tu veux faire exactement avec ta carte ?

  9. #8
    invite0ae9a443

    Re : programation keil

    salut spawn jai jamais programmer un µC je cherche a implémenter un algorithme de cryptographie elliptique grace a lusage de KEIL uvision5 et STM32f4 et je suis coincé il ya presque 2 semaine a lire jai pas pu rien faire pour avancer je penser a essayer savoir comment transmettre une info ( donnée) apartir de dune carte stm32f4 a une autre les faire dialoguer et ensuite essayer la cryptographie si vous pourriez maider merci bien davance

  10. #9
    spown

    Re : programation keil

    Bon, tout d'abord c'est quoi ton niveau en C ou C++ ? ( tu connais d'autre langage ? ) . C'est un devoir à rendre pour quand ?

    Tu connais un peu visuel studio 2012 ~ 14 ? ( tu peux la faire avec, c'est moins compliquer par rapport à KEIL )

    Note: transmission entre 2 F4 peut se faire via plusieurs protocole ( ex: SPI, I2C, CAN, USB, UART), mais c'est pas ça le problème. qu'est ce que tu veux transmettre entre ces 2 cartes ? Peux tu donner la version complète de ta carte? parce qu'il existe plusieurs type F4.

    Je rajoute, essaye de COMPRENDRE et de résumer ce que tu veux faire, c'est pas intelligent de nous communiquer l'information via la goutte à goutte.

  11. #10
    invite0ae9a443

    Re : programation keil

    salut merci pour votre effort a me comprendre et m'aider
    le type de carte c'est f407-discovery
    pour mon niveau au C c'est moyen, le C++ je le connais pas et de meme pour visuel studio 2012 ~ 14 je ne le connais pas
    mon devoir a rendre avant le mi- du mois prrochain
    mon prof exige que je travaille avec KEIL et j'ai pas meme encore etudié les microcontrôleurs et jai meme pas pas compris c'est quoi ces protocoles
    mon travail consiste a faire un cryptage dune donnée et l'a transmet a une autre carte pour décrypté cette donnée
    je voulais savoir comment se faire la transmission et ensuite comment assurer le cryptage dune donné qque et la décrypter mais je suis coincé je sais pas meme pas les abc si vous pourriez m'aider et merci bien d'anvance

  12. #11
    spown

    Re : programation keil

    Bonsoir/bonjour,

    Bon, ta situation est malheureusement grave ( je suis une personne optimiste, mais réaliste ). Si on croit à ta version, ton prof doit arrêter son métier et chercher ailleurs. Un tel devoir avec un tel niveau, ça se colle pas.

    Bon, on commence toujours par le niveau bas. Pour t'aider un peu, ici : ==> http://www.keil.com/appnotes/docs/apnt_261.asp il y a un exemple ( blinky led ) essaye de l’implémenter à l'aide du datasheet http://www.st.com/web/en/resource/te...DM00031020.pdf ( 1700 pages, mais pas besoin de tout lire )
    GPIO a partir 268, et SYSCFG 298.

    Pour configurer avec Keil : http://www.keil.com/appnotes/files/apnt_261.pdf
    Lien utile : http://www.keil.com/pack/doc/mw/General/html/index.html
    http://www2.keil.com/docs/default-so...d.pdf?sfvrsn=0
    STM32CUBE contient un package d'exemples : http://www.st.com/web/en/catalog/tools/PF257904

    C'est quoi abc ?? cryptage NSA ?

  13. #12
    invite0ae9a443

    Re : programation keil

    salut merci bien pour l'aide fourni je fairais de mon mieux et sil ya qq pb je vous contacterais
    les abc des choses c'est a dire les 1ers pas les 1ers etapes

  14. #13
    invite0ae9a443

    Re : programation keil

    salut aviez vous un lien pour telecharger gratuitement le STM32F40x_Encryption_Lib_V1.0. 0

  15. #14
    spown

    Re : programation keil

    Toutes les libraires pour STM32Fx sont gratuit. Non, je connais pas cette librairie.

  16. #15
    invite0ae9a443

    Re : programation keil

    bonjour spown
    jaime bien vous consulter sur le branchement d'un port COM avec la carte stm32f407-dis
    comment utiliser PUTTY sur pc pour mettre le pc comme terminal
    et jaime bien aussi vous demander comment creer un tableau sur c et une chaine de caractere et remplir cette chaine de caractere dans le tableau
    merci bien d'avance

  17. #16
    luc_1049

    Re : programation keil

    Bonsoir

    Mettre en oeuvre un algo de cryptographie clé symétrique ou à clé publique soit, vous trouverez un algo je pense.
    Mais si vous ne savez pas initialiser un tableau en C et une chaîne de caractère Aie !
    Il vous faut savoir comment faire une boucle en C (do, while, for...) et comment initialiser une variable. Une chaîne de caractère c'est un tableau de caractère qui se termine par 0.
    Charger une chaîne de caractère dans un tableau c'est recopier un à un chacun des caractères dans les espaces consécutifs du tableau.
    Je passe les problèmes de réservation de mémoire mais ce sera indispensable.

    cdlt

  18. #17
    spown

    Re : programation keil

    J'ai pas bien compris ta première demande. tu veux communiquer avec la F4 via putty terminal ? Si oui, il faut faire fonctionner le uart ( serial line ) . ( voir les exemples de STM32CUBE ) Mais avec le niveau de question, je crains que ça va être très difficile pour le voir en marche.
    Pourquoi tu veux communiquer avec le pc ? échanger quelle donnée ?

    Bref, déclarer une chaîne ou un tableau ( pareil ) , c'est les bases du C et tu peux trouver ça dans n'importe quel livre de C. ( google )

    Tiens: http://public.iutenligne.net/informa...geC/index.html

    Surtout prend le temps de lire, lire et lire . L'apprentissage vient après la lecture et faire pratiquer la matière grise.

  19. #18
    invite0ae9a443

    Re : Programmation Keil ?

    salutation !!
    jaime bien que qq'un m'aide a comprendre ce code et comment l'utiliser et merci bien davance c'est de code de l'algorithme de cryptage AES
    Code:
     @file aes.c
     * @brief AES (Advanced Encryption Standard)
     *
     * @section License
     *
     * Copyright (C) 2010-2015 Oryx Embedded SARL. All rights reserved.
     *
     * This file is part of CycloneCrypto Open.
     *
     * This program is free software; you can redistribute it and/or
     * modify it under the terms of the GNU General Public License
     * as published by the Free Software Foundation; either version 2
     * of the License, or (at your option) any later version.
     *
     * This program is distributed in the hope that it will be useful,
     * but WITHOUT ANY WARRANTY; without even the implied warranty of
     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     * GNU General Public License for more details.
     *
     * You should have received a copy of the GNU General Public License
     * along with this program; if not, write to the Free Software Foundation,
     * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
     *
     * @section Description
     *
     * AES is an encryption standard based on Rijndael algorithm, a symmetric block
     * cipher that can process data blocks of 128 bits, using cipher keys with
     * lengths of 128, 192, and 256 bits. Refer to FIPS 197 for more details
     *
     * @author Oryx Embedded SARL (www.oryx-embedded.com)
     * @version 1.6.0
     **/
    
    //Switch to the appropriate trace level
    #define TRACE_LEVEL CRYPTO_TRACE_LEVEL
    
    //Dependencies
    #include <string.h>
    #include "crypto.h"
    #include "aes.h"
    
    //Check crypto library configuration
    #if (AES_SUPPORT == ENABLED)
    
    //Substitution table used by encryption algorithm (S-box)
    static const uint8_t sbox[256] =
    {
       0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5, 0x30, 0x01, 0x67, 0x2B, 0xFE, 0xD7, 0xAB, 0x76,
       0xCA, 0x82, 0xC9, 0x7D, 0xFA, 0x59, 0x47, 0xF0, 0xAD, 0xD4, 0xA2, 0xAF, 0x9C, 0xA4, 0x72, 0xC0,
       0xB7, 0xFD, 0x93, 0x26, 0x36, 0x3F, 0xF7, 0xCC, 0x34, 0xA5, 0xE5, 0xF1, 0x71, 0xD8, 0x31, 0x15,
       0x04, 0xC7, 0x23, 0xC3, 0x18, 0x96, 0x05, 0x9A, 0x07, 0x12, 0x80, 0xE2, 0xEB, 0x27, 0xB2, 0x75,
       0x09, 0x83, 0x2C, 0x1A, 0x1B, 0x6E, 0x5A, 0xA0, 0x52, 0x3B, 0xD6, 0xB3, 0x29, 0xE3, 0x2F, 0x84,
       0x53, 0xD1, 0x00, 0xED, 0x20, 0xFC, 0xB1, 0x5B, 0x6A, 0xCB, 0xBE, 0x39, 0x4A, 0x4C, 0x58, 0xCF,
       0xD0, 0xEF, 0xAA, 0xFB, 0x43, 0x4D, 0x33, 0x85, 0x45, 0xF9, 0x02, 0x7F, 0x50, 0x3C, 0x9F, 0xA8,
       0x51, 0xA3, 0x40, 0x8F, 0x92, 0x9D, 0x38, 0xF5, 0xBC, 0xB6, 0xDA, 0x21, 0x10, 0xFF, 0xF3, 0xD2,
       0xCD, 0x0C, 0x13, 0xEC, 0x5F, 0x97, 0x44, 0x17, 0xC4, 0xA7, 0x7E, 0x3D, 0x64, 0x5D, 0x19, 0x73,
       0x60, 0x81, 0x4F, 0xDC, 0x22, 0x2A, 0x90, 0x88, 0x46, 0xEE, 0xB8, 0x14, 0xDE, 0x5E, 0x0B, 0xDB,
       0xE0, 0x32, 0x3A, 0x0A, 0x49, 0x06, 0x24, 0x5C, 0xC2, 0xD3, 0xAC, 0x62, 0x91, 0x95, 0xE4, 0x79,
       0xE7, 0xC8, 0x37, 0x6D, 0x8D, 0xD5, 0x4E, 0xA9, 0x6C, 0x56, 0xF4, 0xEA, 0x65, 0x7A, 0xAE, 0x08,
       0xBA, 0x78, 0x25, 0x2E, 0x1C, 0xA6, 0xB4, 0xC6, 0xE8, 0xDD, 0x74, 0x1F, 0x4B, 0xBD, 0x8B, 0x8A,
       0x70, 0x3E, 0xB5, 0x66, 0x48, 0x03, 0xF6, 0x0E, 0x61, 0x35, 0x57, 0xB9, 0x86, 0xC1, 0x1D, 0x9E,
       0xE1, 0xF8, 0x98, 0x11, 0x69, 0xD9, 0x8E, 0x94, 0x9B, 0x1E, 0x87, 0xE9, 0xCE, 0x55, 0x28, 0xDF,
       0x8C, 0xA1, 0x89, 0x0D, 0xBF, 0xE6, 0x42, 0x68, 0x41, 0x99, 0x2D, 0x0F, 0xB0, 0x54, 0xBB, 0x16
    };
    
    //Substitution table used by decryption algorithm (inverse S-box)
    static const uint8_t isbox[256] =
    {
       0x52, 0x09, 0x6A, 0xD5, 0x30, 0x36, 0xA5, 0x38, 0xBF, 0x40, 0xA3, 0x9E, 0x81, 0xF3, 0xD7, 0xFB,
       0x7C, 0xE3, 0x39, 0x82, 0x9B, 0x2F, 0xFF, 0x87, 0x34, 0x8E, 0x43, 0x44, 0xC4, 0xDE, 0xE9, 0xCB,
       0x54, 0x7B, 0x94, 0x32, 0xA6, 0xC2, 0x23, 0x3D, 0xEE, 0x4C, 0x95, 0x0B, 0x42, 0xFA, 0xC3, 0x4E,
       0x08, 0x2E, 0xA1, 0x66, 0x28, 0xD9, 0x24, 0xB2, 0x76, 0x5B, 0xA2, 0x49, 0x6D, 0x8B, 0xD1, 0x25,
       0x72, 0xF8, 0xF6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xD4, 0xA4, 0x5C, 0xCC, 0x5D, 0x65, 0xB6, 0x92,
       0x6C, 0x70, 0x48, 0x50, 0xFD, 0xED, 0xB9, 0xDA, 0x5E, 0x15, 0x46, 0x57, 0xA7, 0x8D, 0x9D, 0x84,
       0x90, 0xD8, 0xAB, 0x00, 0x8C, 0xBC, 0xD3, 0x0A, 0xF7, 0xE4, 0x58, 0x05, 0xB8, 0xB3, 0x45, 0x06,
       0xD0, 0x2C, 0x1E, 0x8F, 0xCA, 0x3F, 0x0F, 0x02, 0xC1, 0xAF, 0xBD, 0x03, 0x01, 0x13, 0x8A, 0x6B,
       0x3A, 0x91, 0x11, 0x41, 0x4F, 0x67, 0xDC, 0xEA, 0x97, 0xF2, 0xCF, 0xCE, 0xF0, 0xB4, 0xE6, 0x73,
       0x96, 0xAC, 0x74, 0x22, 0xE7, 0xAD, 0x35, 0x85, 0xE2, 0xF9, 0x37, 0xE8, 0x1C, 0x75, 0xDF, 0x6E,
       0x47, 0xF1, 0x1A, 0x71, 0x1D, 0x29, 0xC5, 0x89, 0x6F, 0xB7, 0x62, 0x0E, 0xAA, 0x18, 0xBE, 0x1B,
       0xFC, 0x56, 0x3E, 0x4B, 0xC6, 0xD2, 0x79, 0x20, 0x9A, 0xDB, 0xC0, 0xFE, 0x78, 0xCD, 0x5A, 0xF4,
       0x1F, 0xDD, 0xA8, 0x33, 0x88, 0x07, 0xC7, 0x31, 0xB1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xEC, 0x5F,
       0x60, 0x51, 0x7F, 0xA9, 0x19, 0xB5, 0x4A, 0x0D, 0x2D, 0xE5, 0x7A, 0x9F, 0x93, 0xC9, 0x9C, 0xEF,
       0xA0, 0xE0, 0x3B, 0x4D, 0xAE, 0x2A, 0xF5, 0xB0, 0xC8, 0xEB, 0xBB, 0x3C, 0x83, 0x53, 0x99, 0x61,
       0x17, 0x2B, 0x04, 0x7E, 0xBA, 0x77, 0xD6, 0x26, 0xE1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0C, 0x7D
    };
    
    //Precalculated table (encryption)
    static const uint32_t te[256] =
    {
       0xA56363C6, 0x847C7CF8, 0x997777EE, 0x8D7B7BF6, 0x0DF2F2FF, 0xBD6B6BD6, 0xB16F6FDE, 0x54C5C591,
       0x50303060, 0x03010102, 0xA96767CE, 0x7D2B2B56, 0x19FEFEE7, 0x62D7D7B5, 0xE6ABAB4D, 0x9A7676EC,
       0x45CACA8F, 0x9D82821F, 0x40C9C989, 0x877D7DFA, 0x15FAFAEF, 0xEB5959B2, 0xC947478E, 0x0BF0F0FB,
       0xECADAD41, 0x67D4D4B3, 0xFDA2A25F, 0xEAAFAF45, 0xBF9C9C23, 0xF7A4A453, 0x967272E4, 0x5BC0C09B,
       0xC2B7B775, 0x1CFDFDE1, 0xAE93933D, 0x6A26264C, 0x5A36366C, 0x413F3F7E, 0x02F7F7F5, 0x4FCCCC83,
       0x5C343468, 0xF4A5A551, 0x34E5E5D1, 0x08F1F1F9, 0x937171E2, 0x73D8D8AB, 0x53313162, 0x3F15152A,
       0x0C040408, 0x52C7C795, 0x65232346, 0x5EC3C39D, 0x28181830, 0xA1969637, 0x0F05050A, 0xB59A9A2F,
       0x0907070E, 0x36121224, 0x9B80801B, 0x3DE2E2DF, 0x26EBEBCD, 0x6927274E, 0xCDB2B27F, 0x9F7575EA,
       0x1B090912, 0x9E83831D, 0x742C2C58, 0x2E1A1A34, 0x2D1B1B36, 0xB26E6EDC, 0xEE5A5AB4, 0xFBA0A05B,
       0xF65252A4, 0x4D3B3B76, 0x61D6D6B7, 0xCEB3B37D, 0x7B292952, 0x3EE3E3DD, 0x712F2F5E, 0x97848413,
       0xF55353A6, 0x68D1D1B9, 0x00000000, 0x2CEDEDC1, 0x60202040, 0x1FFCFCE3, 0xC8B1B179, 0xED5B5BB6,
       0xBE6A6AD4, 0x46CBCB8D, 0xD9BEBE67, 0x4B393972, 0xDE4A4A94, 0xD44C4C98, 0xE85858B0, 0x4ACFCF85,
       0x6BD0D0BB, 0x2AEFEFC5, 0xE5AAAA4F, 0x16FBFBED, 0xC5434386, 0xD74D4D9A, 0x55333366, 0x94858511,
       0xCF45458A, 0x10F9F9E9, 0x06020204, 0x817F7FFE, 0xF05050A0, 0x443C3C78, 0xBA9F9F25, 0xE3A8A84B,
       0xF35151A2, 0xFEA3A35D, 0xC0404080, 0x8A8F8F05, 0xAD92923F, 0xBC9D9D21, 0x48383870, 0x04F5F5F1,
       0xDFBCBC63, 0xC1B6B677, 0x75DADAAF, 0x63212142, 0x30101020, 0x1AFFFFE5, 0x0EF3F3FD, 0x6DD2D2BF,
       0x4CCDCD81, 0x140C0C18, 0x35131326, 0x2FECECC3, 0xE15F5FBE, 0xA2979735, 0xCC444488, 0x3917172E,
       0x57C4C493, 0xF2A7A755, 0x827E7EFC, 0x473D3D7A, 0xAC6464C8, 0xE75D5DBA, 0x2B191932, 0x957373E6,
       0xA06060C0, 0x98818119, 0xD14F4F9E, 0x7FDCDCA3, 0x66222244, 0x7E2A2A54, 0xAB90903B, 0x8388880B,
       0xCA46468C, 0x29EEEEC7, 0xD3B8B86B, 0x3C141428, 0x79DEDEA7, 0xE25E5EBC, 0x1D0B0B16, 0x76DBDBAD,
       0x3BE0E0DB, 0x56323264, 0x4E3A3A74, 0x1E0A0A14, 0xDB494992, 0x0A06060C, 0x6C242448, 0xE45C5CB8,
       0x5DC2C29F, 0x6ED3D3BD, 0xEFACAC43, 0xA66262C4, 0xA8919139, 0xA4959531, 0x37E4E4D3, 0x8B7979F2,
       0x32E7E7D5, 0x43C8C88B, 0x5937376E, 0xB76D6DDA, 0x8C8D8D01, 0x64D5D5B1, 0xD24E4E9C, 0xE0A9A949,
       0xB46C6CD8, 0xFA5656AC, 0x07F4F4F3, 0x25EAEACF, 0xAF6565CA, 0x8E7A7AF4, 0xE9AEAE47, 0x18080810,
       0xD5BABA6F, 0x887878F0, 0x6F25254A, 0x722E2E5C, 0x241C1C38, 0xF1A6A657, 0xC7B4B473, 0x51C6C697,
       0x23E8E8CB, 0x7CDDDDA1, 0x9C7474E8, 0x211F1F3E, 0xDD4B4B96, 0xDCBDBD61, 0x868B8B0D, 0x858A8A0F,
       0x907070E0, 0x423E3E7C, 0xC4B5B571, 0xAA6666CC, 0xD8484890, 0x05030306, 0x01F6F6F7, 0x120E0E1C,
       0xA36161C2, 0x5F35356A, 0xF95757AE, 0xD0B9B969, 0x91868617, 0x58C1C199, 0x271D1D3A, 0xB99E9E27,
       0x38E1E1D9, 0x13F8F8EB, 0xB398982B, 0x33111122, 0xBB6969D2, 0x70D9D9A9, 0x898E8E07, 0xA7949433,
       0xB69B9B2D, 0x221E1E3C, 0x92878715, 0x20E9E9C9, 0x49CECE87, 0xFF5555AA, 0x78282850, 0x7ADFDFA5,
       0x8F8C8C03, 0xF8A1A159, 0x80898909, 0x170D0D1A, 0xDABFBF65, 0x31E6E6D7, 0xC6424284, 0xB86868D0,
       0xC3414182, 0xB0999929, 0x772D2D5A, 0x110F0F1E, 0xCBB0B07B, 0xFC5454A8, 0xD6BBBB6D, 0x3A16162C
    };
    
    //Precalculated table (decryption)
    static const uint32_t td[256] =
    {
       0x50A7F451, 0x5365417E, 0xC3A4171A, 0x965E273A, 0xCB6BAB3B, 0xF1459D1F, 0xAB58FAAC, 0x9303E34B,
       0x55FA3020, 0xF66D76AD, 0x9176CC88, 0x254C02F5, 0xFCD7E54F, 0xD7CB2AC5, 0x80443526, 0x8FA362B5,
       0x495AB1DE, 0x671BBA25, 0x980EEA45, 0xE1C0FE5D, 0x02752FC3, 0x12F04C81, 0xA397468D, 0xC6F9D36B,
       0xE75F8F03, 0x959C9215, 0xEB7A6DBF, 0xDA595295, 0x2D83BED4, 0xD3217458, 0x2969E049, 0x44C8C98E,
       0x6A89C275, 0x78798EF4, 0x6B3E5899, 0xDD71B927, 0xB64FE1BE, 0x17AD88F0, 0x66AC20C9, 0xB43ACE7D,
       0x184ADF63, 0x82311AE5, 0x60335197, 0x457F5362, 0xE07764B1, 0x84AE6BBB, 0x1CA081FE, 0x942B08F9,
       0x58684870, 0x19FD458F, 0x876CDE94, 0xB7F87B52, 0x23D373AB, 0xE2024B72, 0x578F1FE3, 0x2AAB5566,
       0x0728EBB2, 0x03C2B52F, 0x9A7BC586, 0xA50837D3, 0xF2872830, 0xB2A5BF23, 0xBA6A0302, 0x5C8216ED,
       0x2B1CCF8A, 0x92B479A7, 0xF0F207F3, 0xA1E2694E, 0xCDF4DA65, 0xD5BE0506, 0x1F6234D1, 0x8AFEA6C4,
       0x9D532E34, 0xA055F3A2, 0x32E18A05, 0x75EBF6A4, 0x39EC830B, 0xAAEF6040, 0x069F715E, 0x51106EBD,
       0xF98A213E, 0x3D06DD96, 0xAE053EDD, 0x46BDE64D, 0xB58D5491, 0x055DC471, 0x6FD40604, 0xFF155060,
       0x24FB9819, 0x97E9BDD6, 0xCC434089, 0x779ED967, 0xBD42E8B0, 0x888B8907, 0x385B19E7, 0xDBEEC879,
       0x470A7CA1, 0xE90F427C, 0xC91E84F8, 0x00000000, 0x83868009, 0x48ED2B32, 0xAC70111E, 0x4E725A6C,
       0xFBFF0EFD, 0x5638850F, 0x1ED5AE3D, 0x27392D36, 0x64D90F0A, 0x21A65C68, 0xD1545B9B, 0x3A2E3624,
       0xB1670A0C, 0x0FE75793, 0xD296EEB4, 0x9E919B1B, 0x4FC5C080, 0xA220DC61, 0x694B775A, 0x161A121C,
       0x0ABA93E2, 0xE52AA0C0, 0x43E0223C, 0x1D171B12, 0x0B0D090E, 0xADC78BF2, 0xB9A8B62D, 0xC8A91E14,
       0x8519F157, 0x4C0775AF, 0xBBDD99EE, 0xFD607FA3, 0x9F2601F7, 0xBCF5725C, 0xC53B6644, 0x347EFB5B,
       0x7629438B, 0xDCC623CB, 0x68FCEDB6, 0x63F1E4B8, 0xCADC31D7, 0x10856342, 0x40229713, 0x2011C684,
       0x7D244A85, 0xF83DBBD2, 0x1132F9AE, 0x6DA129C7, 0x4B2F9E1D, 0xF330B2DC, 0xEC52860D, 0xD0E3C177,
       0x6C16B32B, 0x99B970A9, 0xFA489411, 0x2264E947, 0xC48CFCA8, 0x1A3FF0A0, 0xD82C7D56, 0xEF903322,
       0xC74E4987, 0xC1D138D9, 0xFEA2CA8C, 0x360BD498, 0xCF81F5A6, 0x28DE7AA5, 0x268EB7DA, 0xA4BFAD3F,
       0xE49D3A2C, 0x0D927850, 0x9BCC5F6A, 0x62467E54, 0xC2138DF6, 0xE8B8D890, 0x5EF7392E, 0xF5AFC382,
       0xBE805D9F, 0x7C93D069, 0xA92DD56F, 0xB31225CF, 0x3B99ACC8, 0xA77D1810, 0x6E639CE8, 0x7BBB3BDB,
       0x097826CD, 0xF418596E, 0x01B79AEC, 0xA89A4F83, 0x656E95E6, 0x7EE6FFAA, 0x08CFBC21, 0xE6E815EF,
       0xD99BE7BA, 0xCE366F4A, 0xD4099FEA, 0xD67CB029, 0xAFB2A431, 0x31233F2A, 0x3094A5C6, 0xC066A235,
       0x37BC4E74, 0xA6CA82FC, 0xB0D090E0, 0x15D8A733, 0x4A9804F1, 0xF7DAEC41, 0x0E50CD7F, 0x2FF69117,
       0x8DD64D76, 0x4DB0EF43, 0x544DAACC, 0xDF0496E4, 0xE3B5D19E, 0x1B886A4C, 0xB81F2CC1, 0x7F516546,
       0x04EA5E9D, 0x5D358C01, 0x737487FA, 0x2E410BFB, 0x5A1D67B3, 0x52D2DB92, 0x335610E9, 0x1347D66D,
       0x8C61D79A, 0x7A0CA137, 0x8E14F859, 0x893C13EB, 0xEE27A9CE, 0x35C961B7, 0xEDE51CE1, 0x3CB1477A,
       0x59DFD29C, 0x3F73F255, 0x79CE1418, 0xBF37C773, 0xEACDF753, 0x5BAAFD5F, 0x146F3DDF, 0x86DB4478,
       0x81F3AFCA, 0x3EC468B9, 0x2C342438, 0x5F40A3C2, 0x72C31D16, 0x0C25E2BC, 0x8B493C28, 0x41950DFF,
       0x7101A839, 0xDEB30C08, 0x9CE4B4D8, 0x90C15664, 0x6184CB7B, 0x70B632D5, 0x745C6C48, 0x4257B8D0
    };
    Dernière modification par Antoane ; 20/05/2015 à 15h59. Motif: Ajout balises [/code]

  20. #19
    invite0ae9a443

    Re : Programmation Keil ?

    Code:
    //Round constant word array
    static const uint32_t rcon[11] =
    {
       0x00000000,
       0x00000001,
       0x00000002,
       0x00000004,
       0x00000008,
       0x00000010,
       0x00000020,
       0x00000040,
       0x00000080,
       0x0000001B,
       0x00000036
    };
    
    //Common interface for encryption algorithms
    const CipherAlgo aesCipherAlgo =
    {
       "AES",
       sizeof(AesContext),
       CIPHER_ALGO_TYPE_BLOCK,
       AES_BLOCK_SIZE,
       (CipherAlgoInit) aesInit,
       NULL,
       NULL,
       (CipherAlgoEncryptBlock) aesEncryptBlock,
       (CipherAlgoDecryptBlock) aesDecryptBlock
    };
    
    
    /**
     * @brief Key expansion
     * @param[in] context Pointer to the AES context to initialize
     * @param[in] key Pointer to the key
     * @param[in] keyLength Length of the key
     * @return Error code
     **/
    
    error_t aesInit(AesContext *context, const uint8_t *key, size_t keyLength)
    {
       uint_t i;
       uint32_t temp;
       size_t keyScheduleSize;
    
       //10 rounds are required for 128-bit key
       if(keyLength == 16)
          context->nr = 10;
       //12 rounds are required for 192-bit key
       else if(keyLength == 24)
          context->nr = 12;
       //14 rounds are required for 256-bit key
       else if(keyLength == 32)
          context->nr = 14;
       //Key length is not supported...
       else
          return ERROR_INVALID_KEY_LENGTH;
    
       //Determine the number of 32-bit words in the key
       keyLength /= 4;
    
       //Copy the original key
       for(i = 0; i < keyLength; i++)
          context->ek[i] = LOAD32LE(key + (i * 4));
    
       //The size of the key schedule depends on the number of rounds
       keyScheduleSize = 4 * (context->nr + 1);
    
       //Generate the key schedule (encryption)
       for(i = keyLength; i < keyScheduleSize; i++)
       {
          //Save previous word
          temp = context->ek[i - 1];
    
          //Apply transformation
          if((i % keyLength) == 0)
          {
             context->ek[i] = sbox[(temp >> 8) & 0xFF];
             context->ek[i] |= (sbox[(temp >> 16) & 0xFF] << 8);
             context->ek[i] |= (sbox[(temp >> 24) & 0xFF] << 16);
             context->ek[i] |= (sbox[temp & 0xFF] << 24);
             context->ek[i] ^= rcon[i / keyLength];
          }
          else if(keyLength > 6 && (i % keyLength) == 4)
          {
             context->ek[i] = sbox[temp & 0xFF];
             context->ek[i] |= (sbox[(temp >> 8) & 0xFF] << 8);
             context->ek[i] |= (sbox[(temp >> 16) & 0xFF] << 16);
             context->ek[i] |= (sbox[(temp >> 24) & 0xFF] << 24);
          }
          else
          {
             context->ek[i] = temp;
          }
    
          //Update the key schedule
          context->ek[i] ^= context->ek[i - keyLength];
       }
    
       //Generate the key schedule (decryption)
       for(i = 0; i < keyScheduleSize; i++)
       {
          //Apply the InVMI®®xColumns transformation to all round keys
          //but the first and the last
          if(i < 4 || i >= (keyScheduleSize - 4))
          {
             context->dk[i] = context->ek[i];
          }
          else
          {
             context->dk[i] = td[sbox[context->ek[i] & 0xFF]];
             temp = td[sbox[(context->ek[i] >> 8) & 0xFF]];
             context->dk[i] ^= ROL32(temp, 8);
             temp = td[sbox[(context->ek[i] >> 16) & 0xFF]];
             context->dk[i] ^= ROL32(temp, 16);
             temp = td[sbox[(context->ek[i] >> 24) & 0xFF]];
             context->dk[i] ^= ROL32(temp, 24);
          }
       }
    
       //No error to report
       return NO_ERROR;
    }
    
    
    /**
     * @brief Encrypt a 16-byte block using AES algorithm
     * @param[in] context Pointer to the AES context
     * @param[in] input Plaintext block to encrypt
     * @param[out] output Ciphertext block resulting from encryption
     **/
    
    void aesEncryptBlock(AesContext *context, const uint8_t *input, uint8_t *output)
    {
       uint_t i;
       uint32_t s0;
       uint32_t s1;
       uint32_t s2;
       uint32_t s3;
       uint32_t t0;
       uint32_t t1;
       uint32_t t2;
       uint32_t t3;
       uint32_t temp;
    
       //Copy the plaintext to the state array
       s0 = LOAD32LE(input + 0);
       s1 = LOAD32LE(input + 4);
       s2 = LOAD32LE(input + 8);
       s3 = LOAD32LE(input + 12);
    
       //Initial round key addition
       s0 ^= context->ek[0];
       s1 ^= context->ek[1];
       s2 ^= context->ek[2];
       s3 ^= context->ek[3];
    
       //The number of rounds depends on the key length
       for(i = 1; i < context->nr; i++)
       {
          //Apply round function
          t0 = te[s0 & 0xFF];
          temp = te[(s1 >> 8) & 0xFF];
          t0 ^= ROL32(temp, 8);
          temp = te[(s2 >> 16) & 0xFF];
          t0 ^= ROL32(temp, 16);
          temp = te[(s3 >> 24) & 0xFF];
          t0 ^= ROL32(temp, 24);
    
          t1 = te[s1 & 0xFF];
          temp = te[(s2 >> 8) & 0xFF];
          t1 ^= ROL32(temp, 8);
          temp = te[(s3 >> 16) & 0xFF];
          t1 ^= ROL32(temp, 16);
          temp = te[(s0 >> 24) & 0xFF];
          t1 ^= ROL32(temp, 24);
    
          t2 = te[s2 & 0xFF];
          temp = te[(s3 >> 8) & 0xFF];
          t2 ^= ROL32(temp, 8);
          temp = te[(s0 >> 16) & 0xFF];
          t2 ^= ROL32(temp, 16);
          temp = te[(s1 >> 24) & 0xFF];
          t2 ^= ROL32(temp, 24);
    
          t3 = te[s3 & 0xFF];
          temp = te[(s0 >> 8) & 0xFF];
          t3 ^= ROL32(temp, 8);
          temp = te[(s1 >> 16) & 0xFF];
          t3 ^= ROL32(temp, 16);
          temp = te[(s2 >> 24) & 0xFF];
          t3 ^= ROL32(temp, 24);
    
          //Round key addition
          s0 = t0 ^ context->ek[i * 4];
          s1 = t1 ^ context->ek[i * 4 + 1];
          s2 = t2 ^ context->ek[i * 4 + 2];
          s3 = t3 ^ context->ek[i * 4 + 3];
       }
    
       //The last round differs slightly from the first rounds
       t0 = sbox[s0 & 0xFF];
       t0 |= sbox[(s1 >> 8) & 0xFF] << 8;
       t0 |= sbox[(s2 >> 16) & 0xFF] << 16;
       t0 |= sbox[(s3 >> 24) & 0xFF] << 24;
    
       t1 = sbox[s1 & 0xFF];
       t1 |= sbox[(s2 >> 8) & 0xFF] << 8;
       t1 |= sbox[(s3 >> 16) & 0xFF] << 16;
       t1 |= sbox[(s0 >> 24) & 0xFF] << 24;
    
       t2 = sbox[s2 & 0xFF];
       t2 |= sbox[(s3 >> 8) & 0xFF] << 8;
       t2 |= sbox[(s0 >> 16) & 0xFF] << 16;
       t2 |= sbox[(s1 >> 24) & 0xFF] << 24;
    
       t3 = sbox[s3 & 0xFF];
       t3 |= sbox[(s0 >> 8) & 0xFF] << 8;
       t3 |= sbox[(s1 >> 16) & 0xFF] << 16;
       t3 |= sbox[(s2 >> 24) & 0xFF] << 24;
    
       //Last round key addition
       s0 = t0 ^ context->ek[context->nr * 4];
       s1 = t1 ^ context->ek[context->nr * 4 + 1];
       s2 = t2 ^ context->ek[context->nr * 4 + 2];
       s3 = t3 ^ context->ek[context->nr * 4 + 3];
    
       //The final state is then copied to the output
       STORE32LE(s0, output + 0);
       STORE32LE(s1, output + 4);
       STORE32LE(s2, output + 8);
       STORE32LE(s3, output + 12);
    }
    
    
    /**
     * @brief Decrypt a 16-byte block using AES algorithm
     * @param[in] context Pointer to the AES context
     * @param[in] input Ciphertext block to decrypt
     * @param[out] output Plaintext block resulting from decryption
     **/
    
    void aesDecryptBlock(AesContext *context, const uint8_t *input, uint8_t *output)
    {
       uint_t i;
       uint32_t s0;
       uint32_t s1;
       uint32_t s2;
       uint32_t s3;
       uint32_t t0;
       uint32_t t1;
       uint32_t t2;
       uint32_t t3;
       uint32_t temp;
    
       //Copy the ciphertext to the state array
       s0 = LOAD32LE(input + 0);
       s1 = LOAD32LE(input + 4);
       s2 = LOAD32LE(input + 8);
       s3 = LOAD32LE(input + 12);
    
       //Initial round key addition
       s0 ^= context->dk[context->nr * 4];
       s1 ^= context->dk[context->nr * 4 + 1];
       s2 ^= context->dk[context->nr * 4 + 2];
       s3 ^= context->dk[context->nr * 4 + 3];
    
       //The number of rounds depends on the key length
       for(i = context->nr - 1; i >= 1; i--)
       {
          //Apply round function
          t0 = td[s0 & 0xFF];
          temp = td[(s3 >> 8) & 0xFF];
          t0 ^= ROL32(temp, 8);
          temp = td[(s2 >> 16) & 0xFF];
          t0 ^= ROL32(temp, 16);
          temp = td[(s1 >> 24) & 0xFF];
          t0 ^= ROL32(temp, 24);
    
          t1 = td[s1 & 0xFF];
          temp = td[(s0 >> 8) & 0xFF];
          t1 ^= ROL32(temp, 8);
          temp = td[(s3 >> 16) & 0xFF];
          t1 ^= ROL32(temp, 16);
          temp = td[(s2 >> 24) & 0xFF];
          t1 ^= ROL32(temp, 24);
    
          t2 = td[s2 & 0xFF];
          temp = td[(s1 >> 8) & 0xFF];
          t2 ^= ROL32(temp, 8);
          temp = td[(s0 >> 16) & 0xFF];
          t2 ^= ROL32(temp, 16);
          temp = td[(s3 >> 24) & 0xFF];
          t2 ^= ROL32(temp, 24);
    
          t3 = td[s3 & 0xFF];
          temp = td[(s2 >> 8) & 0xFF];
          t3 ^= ROL32(temp, 8);
          temp = td[(s1 >> 16) & 0xFF];
          t3 ^= ROL32(temp, 16);
          temp = td[(s0 >> 24) & 0xFF];
          t3 ^= ROL32(temp, 24);
    
          //Round key addition
          s0 = t0 ^ context->dk[i * 4];
          s1 = t1 ^ context->dk[i * 4 + 1];
          s2 = t2 ^ context->dk[i * 4 + 2];
          s3 = t3 ^ context->dk[i * 4 + 3];
       }
    
       //The last round differs slightly from the first rounds
       t0 = isbox[s0 & 0xFF];
       t0 |= isbox[(s3 >> 8) & 0xFF] << 8;
       t0 |= isbox[(s2 >> 16) & 0xFF] << 16;
       t0 |= isbox[(s1 >> 24) & 0xFF] << 24;
    
       t1 = isbox[s1 & 0xFF];
       t1 |= isbox[(s0 >> 8) & 0xFF] << 8;
       t1 |= isbox[(s3 >> 16) & 0xFF] << 16;
       t1 |= isbox[(s2 >> 24) & 0xFF] << 24;
    
       t2 = isbox[s2 & 0xFF];
       t2 |= isbox[(s1 >> 8) & 0xFF] << 8;
       t2 |= isbox[(s0 >> 16) & 0xFF] << 16;
       t2 |= isbox[(s3 >> 24) & 0xFF] << 24;
    
       t3 = isbox[s3 & 0xFF];
       t3 |= isbox[(s2 >> 8) & 0xFF] << 8;
       t3 |= isbox[(s1 >> 16) & 0xFF] << 16;
       t3 |= isbox[(s0 >> 24) & 0xFF] << 24;
    
       //Last round key addition
       s0 = t0 ^ context->dk[0];
       s1 = t1 ^ context->dk[1];
       s2 = t2 ^ context->dk[2];
       s3 = t3 ^ context->dk[3];
    
       //The final state is then copied to the output
       STORE32LE(s0, output + 0);
       STORE32LE(s1, output + 4);
       STORE32LE(s2, output + 8);
       STORE32LE(s3, output + 12);
    }
    
    #endif
    Dernière modification par Antoane ; 20/05/2015 à 16h00. Motif: Ajout balises [/code]

  21. #20
    invite0ae9a443

    Re : programation keil

    salutation j'aime bien trouver qq1 qui peut m'aider a comprendre un code source de la cryptage AES et crée apartir de ce code source un program main et merci bien d'avance

Discussions similaires

  1. quelle est la difference entre programmation procedurale et la programmation orientee objet
    Par invite430abc62 dans le forum Programmation et langages, Algorithmique
    Réponses: 9
    Dernier message: 27/01/2016, 13h34
  2. Configuration ARM Cortex M3 + Erreur 137 dans KEIL
    Par invite5bf08831 dans le forum Électronique
    Réponses: 3
    Dernier message: 30/05/2011, 15h32
  3. programmation avec keil
    Par invite9270d74a dans le forum Électronique
    Réponses: 2
    Dernier message: 07/05/2011, 20h15
  4. Programmation des PIC 18F en C
    Par invitef5766415 dans le forum Électronique
    Réponses: 18
    Dernier message: 19/04/2010, 22h23
  5. Programmation Pic
    Par invite8d3101d7 dans le forum Électronique
    Réponses: 1
    Dernier message: 21/09/2006, 02h18
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...