2017-01-26 5 views
3

Ich habe ein Projekt, das DTLS über Verbindungen verwendet. Für jetzt habe ich erfolgreich WolfSSL auf Controllern mit nur Software-Implementierung ausgeführt, aber die Zeit für die Einrichtung der ersten Verbindung ist abscheulich und ich bin jetzt auf der Suche nach HW-Krypto in der MCU, um die Leistung zu beschleunigen. Von der Implementierung, die von WolfSSL zur Verfügung gestellt wird, habe ich nur einige Krypto-Algorithmen gesehen, die auf die Hardware-Krypto neu ausgerichtet werden. In meiner DTLS-Implementierung nutze ich einige verschiedene Algos von WolfCrypt. Da ich ziemlich unerfahren bin mit sehr niedrigen Details der SSL-Bibliothek, brauche ich etwas Hilfe, um fast alle Verschlüsselungsalgorithmen, die in WolfSSL vorhanden sind, von der Software-Implementierung zu STM32 Crypto Hardware zu retargetieren.STM32F437 Hardware Crypto-Funktionen Integration mit WolfSSL

Nach Cube HAL Rahmen der ST, die von HW encrytion unterstützt algos sind

STM32F437x/439x 
– AES: CFB, OFB, XTS, CCM, GCM, CMAC, KeyWrap 
Key size: 128, 192, 256 bit Crypto accelerator 
– ECC: Key generation, Scalar multiplication, ECDSA Random number 
generator (RNG) – RSA encryption/decryption functions with PKCS#1v1.5 

So würde ich brauche Hilfe, um diese algos in WolfSSL so geändert wird, dass sie STM32 HW Acc verwenden. Wenn jemand eine Probe von diesem zur Verfügung stellen kann, würde das am meisten geschätzt werden.

Ich habe das auch in den WolfSSL Foren gefragt. Für den Fall, dass ich dort etwas Interessantes finde, werde ich hier zum Vorteil des anderen updaten. Danke!

Antwort

2

Mit welcher Version von wolfSSL arbeiten Sie? wolfSSL hat kürzlich Unterstützung für CubeMX HAL hinzugefügt. Wenn Sie nicht wolfSSLv3.10.0 haben Sie es bitte von der Download-Seite herunterladen: https://wolfssl.com/wolfSSL/download/downloadForm.php oder aus dem wolfSSL Github-Repository erhalten: https://github.com/wolfSSL/wolfssl.git

Es gibt eine neue für WOLFSSL_STM32_CUBEMX im Abschnitt/wolfssl/wolfcrypt/Einstellungen STM32F2 definieren .h

#ifdef WOLFSSL_STM32F2 
    #define SIZEOF_LONG_LONG 8 
    #define NO_DEV_RANDOM 
    #define NO_WOLFSSL_DIR 
    #undef NO_RABBIT 
    #define NO_RABBIT 
    #undef NO_64BIT 
    #define NO_64BIT 
    #define STM32F2_RNG 
    #define STM32F2_CRYPTO 
    #if !defined(__GNUC__) && !defined(__ICCARM__) 
     #define KEIL_INTRINSICS 
    #endif 
    #define NO_OLD_RNGNAME 
    #ifdef WOLFSSL_STM32_CUBEMX // <--- New section for HAL support in version 3.10.0 
     #include "stm32f2xx_hal.h" 
     #ifndef STM32_HAL_TIMEOUT 
      #define STM32_HAL_TIMEOUT 0xFF 
     #endif 
    #else 
     #include "stm32f2xx.h" 
     #include "stm32f2xx_cryp.h" 
     #include "stm32f2xx_hash.h" 
    #endif /* WOLFSSL_STM32_CUBEMX */ 
#endif 

Diese Definition fügt Unterstützung für das Auslagern von AES-, DES3- und RANDOM-Operationen auf Hardware hinzu. Wenn Sie zusätzliche Algorithmen portieren möchten, verwenden Sie bitte die Abschnitte in /wolfcrypt/src/aes.c, die von der Definition für WOLFSSL_STM32_CUBEMX als Referenz umgeben sind. Hier ist ein kurzes Beispiel für das Hinzufügen von HAL API in der Funktion wc_AesEncrypt. Quellcode wurde aus https://github.com/wolfSSL/wolfssl/blob/master/wolfcrypt/src/aes.c#L208:

static int wc_AesEncrypt(Aes* aes, const byte* inBlock, byte* outBlock) 
{ 
    int ret = 0; 
#ifdef WOLFSSL_STM32_CUBEMX 
    CRYP_HandleTypeDef hcryp; 

    /* load key into correct registers */ 
    switch(aes->rounds) { 
     case 10: /* 128-bit key */ 
      hcryp.Init.KeySize = CRYP_KEYSIZE_128B; 
      break; 
     case 12: /* 192-bit key */ 
      hcryp.Init.KeySize = CRYP_KEYSIZE_192B; 
      break; 
     case 14: /* 256-bit key */ 
      hcryp.Init.KeySize = CRYP_KEYSIZE_256B; 
      break; 
     default: 
      break; 
    } 

    XMEMSET(&hcryp, 0, sizeof(CRYP_HandleTypeDef)); 
    hcryp.Instance = CRYP; 
    hcryp.Init.DataType = CRYP_DATATYPE_8B; 
    hcryp.Init.pKey = (uint8_t*)aes->key; 

    HAL_CRYP_Init(&hcryp); 

    if (HAL_CRYP_AESECB_Encrypt(&hcryp, (uint8_t*)inBlock, AES_BLOCK_SIZE, 
              outBlock, STM32_HAL_TIMEOUT) != HAL_OK) { 
     ret = WC_TIMEOUT_E; 
    } 

    HAL_CRYP_DeInit(&hcryp); 
#else 
... other non-cubemx support implementations below 
+1

Danke gezogen. Ich werde mir die CubeMX-Definitionen in der Bibliothek ansehen –

Verwandte Themen