| /* 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 <xc.h> |
| #include <sys/endian.h> |
| #include <sys/kmem.h> |
| |
| 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 */ |