/* pic32mz-crypt.h * * Copyright (C) 2006-2015 wolfSSL Inc. * * This file is part of wolfSSL. (formerly known as CyaSSL) * * wolfSSL 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. * * wolfSSL 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 */ #ifndef PIC32MZ_CRYPT_H #define PIC32MZ_CRYPT_H #ifdef WOLFSSL_MICROCHIP_PIC32MZ #define MICROCHIP_PIC32 #include #include #include typedef struct saCtrl { unsigned int CRYPTOALGO : 4; unsigned int MULTITASK : 3; unsigned int KEYSIZE : 2; unsigned int ENCTYPE : 1; unsigned int ALGO : 7; unsigned int : 3; unsigned int FLAGS : 1; unsigned int FB : 1; unsigned int LOADIV : 1; unsigned int LNC : 1; unsigned int IRFLAG : 1; unsigned int ICVONLY : 1; unsigned int OR_EN : 1; unsigned int NO_RX : 1; unsigned int : 1; unsigned int VERIFY : 1; unsigned int : 2; } saCtrl; typedef struct securityAssociation { saCtrl SA_CTRL; unsigned int SA_AUTHKEY[8]; unsigned int SA_ENCKEY[8]; unsigned int SA_AUTHIV[8]; unsigned int SA_ENCIV[4]; } securityAssociation; typedef struct bdCtrl { unsigned int BUFLEN : 16; unsigned int CBD_INT_EN : 1; unsigned int PKT_INT_EN : 1; unsigned int LIFM : 1; unsigned int LAST_BD: 1; unsigned int : 2; unsigned int SA_FETCH_EN : 1; unsigned int : 8; unsigned int DESC_EN : 1; } bdCtrl; typedef struct bufferDescriptor { bdCtrl BD_CTRL; unsigned int SA_ADDR; unsigned int SRCADDR; unsigned int DSTADDR; unsigned int NXTPTR; unsigned int UPDPTR; unsigned int MSGLEN; unsigned int ENCOFF; } bufferDescriptor; #define PIC32_ENCRYPTION 0b1 #define PIC32_DECRYPTION 0b0 #define PIC32_ALGO_HMAC1 0b01000000 #define PIC32_ALGO_SHA256 0b00100000 #define PIC32_ALGO_SHA1 0b00010000 #define PIC32_ALGO_MD5 0b00001000 #define PIC32_ALGO_AES 0b00000100 #define PIC32_ALGO_TDES 0b00000010 #define PIC32_ALGO_DES 0b00000001 #define PIC32_CRYPTOALGO_AES_GCM 0b1110 #define PIC32_CRYPTOALGO_RCTR 0b1101 #define PIC32_CRYPTOALGO_RCBC 0b1001 #define PIC32_CRYPTOALGO_REBC 0b1000 #define PIC32_CRYPTOALGO_TCBC 0b0101 #define PIC32_CRYPTOALGO_CBC 0b0001 #define PIC32_AES_KEYSIZE_256 0b10 #define PIC32_AES_KEYSIZE_192 0b01 #define PIC32_AES_KEYSIZE_128 0b00 #define PIC32_AES_BLOCK_SIZE 16 #define MD5_HASH_SIZE 16 #define SHA1_HASH_SIZE 20 #define SHA256_HASH_SIZE 32 #define PIC32_HASH_SIZE 32 #define PIC32MZ_MAX_BD 2 typedef struct { /* Crypt Engine descripter */ int bdCount ; int err ; volatile bufferDescriptor bd[PIC32MZ_MAX_BD] __attribute__((aligned (8), coherent)); securityAssociation sa __attribute__((aligned (8), coherent)); } pic32mz_desc ; #define PIC32MZ_IF_RAM(addr) (KVA_TO_PA(addr) < 0x80000) #define WAIT_ENGINE \ { volatile int v ; while (CESTATbits.ACTIVE) ; for(v=0; v<100; v++) ; } #ifdef DEBUG_CYASSL static void print_mem(const unsigned char *p, int size) { for(; size>0; size--, p++) { if(size%4 == 0)printf(" ") ; printf("%02x", (int)*p) ; } puts("") ; } #endif #endif #endif /* PIC32MZ_CRYPT_H */