Ignore:
Timestamp:
Jun 22, 2021, 9:00:19 PM (3 years ago)
Author:
coas-nagasima
Message:

WolfSSLとAzure IoT SDKを更新

Location:
azure_iot_hub_f767zi/trunk/wolfssl-4.7.0
Files:
2 added
25 edited
1 moved

Legend:

Unmodified
Added
Removed
  • azure_iot_hub_f767zi/trunk/wolfssl-4.7.0/wolfssl/wolfcrypt/aes.h

    r457 r464  
    2323    \file wolfssl/wolfcrypt/aes.h
    2424*/
    25 
    26 
     25/*
     26
     27DESCRIPTION
     28This library provides the interfaces to the Advanced Encryption Standard (AES)
     29for encrypting and decrypting data. AES is the standard known for a symmetric
     30block cipher mechanism that uses n-bit binary string parameter key with 128-bits,
     31192-bits, and 256-bits of key sizes.
     32
     33*/
    2734#ifndef WOLF_CRYPT_AES_H
    2835#define WOLF_CRYPT_AES_H
     
    5663#endif
    5764
    58 #ifdef WOLFSSL_AESNI
    59 
    60 #include <wmmintrin.h>
    61 #include <emmintrin.h>
    62 #include <smmintrin.h>
    63 
    64 #endif /* WOLFSSL_AESNI */
    65 
     65#ifdef WOLFSSL_IMXRT_DCP
     66    #include "fsl_dcp.h"
     67#endif
    6668
    6769#ifdef WOLFSSL_XILINX_CRYPT
     
    7779#include <wolfssl/wolfcrypt/port/devcrypto/wc_devcrypto.h>
    7880#endif
     81
     82#ifdef WOLFSSL_SILABS_SE_ACCEL
     83    #include <wolfssl/wolfcrypt/port/silabs/silabs_aes.h>
     84#endif
     85
    7986
    8087#if defined(HAVE_AESGCM) && !defined(WC_NO_RNG)
     
    142149
    143150#ifdef HAVE_PKCS11
    144     AES_MAX_ID_LEN   = 32,
     151    AES_MAX_ID_LEN      = 32,
     152    AES_MAX_LABEL_LEN   = 32,
    145153#endif
    146154};
     
    170178    /* key-based fast multiplication table. */
    171179    ALIGN16 byte M0[256][AES_BLOCK_SIZE];
     180#elif defined(GCM_TABLE_4BIT)
     181    #if defined(BIG_ENDIAN_ORDER) || defined(WC_16BIT_CPU)
     182        ALIGN16 byte M0[16][AES_BLOCK_SIZE];
     183    #else
     184        ALIGN16 byte M0[32][AES_BLOCK_SIZE];
     185    #endif
    172186#endif /* GCM_TABLE */
    173187#ifdef HAVE_CAVIUM_OCTEON_SYNC
     
    185199    byte id[AES_MAX_ID_LEN];
    186200    int  idLen;
     201    char label[AES_MAX_LABEL_LEN];
     202    int  labelLen;
    187203#endif
    188204#ifdef WOLFSSL_ASYNC_CRYPT
     
    227243    defined(WOLFSSL_RENESAS_TSIP_TLS_AES_CRYPT)
    228244    TSIP_AES_CTX ctx;
     245#endif
     246#if defined(WOLFSSL_IMXRT_DCP)
     247    dcp_handle_t handle;
     248#endif
     249#if defined(WOLFSSL_SILABS_SE_ACCEL)
     250    silabs_aes_t ctx;
    229251#endif
    230252    void*  heap; /* memory hint to use */
     
    370392#endif /* HAVE_AESGCM */
    371393#ifdef HAVE_AESCCM
     394 WOLFSSL_LOCAL int wc_AesCcmCheckTagSize(int sz);
    372395 WOLFSSL_API int  wc_AesCcmSetKey(Aes* aes, const byte* key, word32 keySz);
    373396 WOLFSSL_API int  wc_AesCcmEncrypt(Aes* aes, byte* out,
     
    426449WOLFSSL_API int  wc_AesInit_Id(Aes* aes, unsigned char* id, int len, void* heap,
    427450        int devId);
     451WOLFSSL_API int  wc_AesInit_Label(Aes* aes, const char* label, void* heap,
     452        int devId);
    428453#endif
    429454WOLFSSL_API void wc_AesFree(Aes* aes);
  • azure_iot_hub_f767zi/trunk/wolfssl-4.7.0/wolfssl/wolfcrypt/asn.h

    r457 r464  
    2424*/
    2525
     26/*
     27
     28DESCRIPTION
     29This library provides the interface to Abstract Syntax Notation One (ASN.1) objects.
     30ASN.1 is a standard interface description language for defining data structures
     31that can be serialized and deserialized in a cross-platform way.
     32
     33*/
    2634#ifndef WOLF_CRYPT_ASN_H
    2735#define WOLF_CRYPT_ASN_H
     
    93101    ASN_SET               = 0x11,
    94102    ASN_PRINTABLE_STRING  = 0x13,
     103    ASN_IA5_STRING        = 0x16,
    95104    ASN_UTC_TIME          = 0x17,
    96105    ASN_OTHER_TYPE        = 0x00,
     
    134143    ASN_DOMAIN_COMPONENT = 0x19  /* DC */
    135144};
     145
     146/* This is the size of the smallest possible PEM header and footer */
     147extern const int pem_struct_min_sz;
    136148
    137149#if defined(OPENSSL_EXTRA) || defined(OPENSSL_EXTRA_X509_SMALL)
     
    195207    NID_sha384 = 673,
    196208    NID_sha512 = 674,
     209    NID_pkcs9_challengePassword = 54,
    197210    NID_hw_name_oid = 73,
    198211    NID_id_pkix_OCSP_basic = 74,
     
    221234    NID_tlsfeature = 1020,             /* id-pe 24 */
    222235    NID_commonName = 0x03,             /* matches ASN_COMMON_NAME in asn.h */
     236    NID_buildingName = 1494,
    223237
    224238
     
    234248    NID_businessCategory = ASN_BUS_CAT,
    235249    NID_domainComponent = ASN_DOMAIN_COMPONENT,
     250    NID_userId = 458,
    236251    NID_emailAddress = 0x30,           /* emailAddress */
    237252    NID_id_on_dnsSRV = 82,             /* 1.3.6.1.5.5.7.8.7 */
     
    292307    RSA_INTS            =   8,     /* RSA ints in private key */
    293308    DSA_INTS            =   5,     /* DSA ints in private key */
    294     MIN_DATE_SIZE       =  13,
     309    MIN_DATE_SIZE       =  12,
    295310    MAX_DATE_SIZE       =  32,
    296311    ASN_GEN_TIME_SZ     =  15,     /* 7 numbers * 2 + Zulu tag */
     
    327342    MAX_DER_DIGEST_ASN_SZ = MAX_ENCODED_DIG_ASN_SZ + MAX_ALGO_SZ + MAX_SEQ_SZ,
    328343                            /* Maximum DER digest ASN header size */
     344                            /* Max X509 header length indicates the max length + 2 ('\n', '\0') */
     345    MAX_X509_HEADER_SZ  = (37 + 2), /* Maximum PEM Header/Footer Size */
    329346#ifdef WOLFSSL_CERT_GEN
    330347    #ifdef WOLFSSL_CERT_REQ
     
    340357                                   /* Max total extensions, id + len + others */
    341358#endif
    342 #if defined(WOLFSSL_CERT_EXT) || defined(OPENSSL_EXTRA) || defined(HAVE_PKCS7)
     359#if defined(WOLFSSL_CERT_EXT) || defined(OPENSSL_EXTRA) || \
     360        defined(HAVE_PKCS7) || defined(OPENSSL_EXTRA_X509_SMALL)
    343361    MAX_OID_SZ          = 32,      /* Max DER length of OID*/
    344362    MAX_OID_STRING_SZ   = 64,      /* Max string length representation of OID*/
     
    355373#endif
    356374    MAX_AIA_SZ          = 2,       /* Max Authority Info Access extension size*/
    357     MAX_NAME_ENTRIES    = 5,       /* extra entries added to x509 name struct */
    358375    OCSP_NONCE_EXT_SZ   = 35,      /* OCSP Nonce Extension size */
    359376    MAX_OCSP_EXT_SZ     = 58,      /* Max OCSP Extension length */
     
    370387    ASN_TAG_SZ          = 1,       /* single byte ASN.1 tag */
    371388    MIN_VERSION_SZ      = 3,       /* Min bytes needed for GetMyVersion */
     389    MAX_X509_VERSION    = 3,       /* Max X509 version allowed */
     390    MIN_X509_VERSION    = 0,       /* Min X509 version allowed */
     391    WOLFSSL_X509_V1     = 0,
     392    WOLFSSL_X509_V2     = 1,
     393    WOLFSSL_X509_V3     = 2,
    372394#if defined(OPENSSL_ALL)  || defined(WOLFSSL_MYSQL_COMPATIBLE) || \
    373395    defined(WOLFSSL_NGINX) || defined(WOLFSSL_HAPROXY) || \
     
    378400    PKCS5_SALT_SZ       = 8,
    379401
    380     PEM_LINE_LEN       = 80,       /* PEM line max + fudge */
    381 };
     402    PEM_LINE_SZ        = 64,               /* Length of Base64 encoded line, not including new line */
     403    PEM_LINE_LEN       = PEM_LINE_SZ + 12, /* PEM line max + fudge */
     404};
     405
     406#ifndef WC_MAX_NAME_ENTRIES
     407    /* entries added to x509 name struct */
     408    #define WC_MAX_NAME_ENTRIES 13
     409#endif
     410#define MAX_NAME_ENTRIES WC_MAX_NAME_ENTRIES
    382411
    383412
     
    403432    oidTlsExtType       = 18,
    404433    oidCrlExtType       = 19,
     434    oidCsrAttrType      = 20,
    405435    oidIgnoreType
    406436};
     
    519549    ISSUE_ALT_NAMES_OID       = 132,
    520550    TLS_FEATURE_OID           = 92,  /* id-pe 24 */
    521     NETSCAPE_CT_OID           = 753  /* 2.16.840.1.113730.1.1 */
     551    NETSCAPE_CT_OID           = 753, /* 2.16.840.1.113730.1.1 */
     552    OCSP_NOCHECK_OID          = 121  /* 1.3.6.1.5.5.7.48.1.5
     553                                         id-pkix-ocsp-nocheck */
    522554};
    523555
     
    564596    SKID_TYPE = 0,
    565597    AKID_TYPE = 1
     598};
     599#endif
     600
     601#ifdef WOLFSSL_CERT_REQ
     602enum CsrAttrType {
     603    CHALLENGE_PASSWORD_OID = 659,
     604    SERIAL_NUMBER_OID = 94,
     605    EXTENSION_REQUEST_OID = 666,
    566606};
    567607#endif
     
    607647};
    608648
    609 #define DOMAIN_COMPONENT_MAX 10
    610 #define DN_NAMES_MAX 9
    611 
    612 struct DecodedName {
    613     char*   fullName;
    614     int     fullNameLen;
    615     int     entryCount;
    616     int     cnIdx;
    617     int     cnLen;
    618     int     cnNid;
    619     int     snIdx;
    620     int     snLen;
    621     int     snNid;
    622     int     cIdx;
    623     int     cLen;
    624     int     cNid;
    625     int     lIdx;
    626     int     lLen;
    627     int     lNid;
    628     int     stIdx;
    629     int     stLen;
    630     int     stNid;
    631     int     oIdx;
    632     int     oLen;
    633     int     oNid;
    634     int     ouIdx;
    635     int     ouLen;
    636 #ifdef WOLFSSL_CERT_EXT
    637     int     bcIdx;
    638     int     bcLen;
    639     int     jcIdx;
    640     int     jcLen;
    641     int     jsIdx;
    642     int     jsLen;
    643 #endif
    644     int     ouNid;
    645     int     emailIdx;
    646     int     emailLen;
    647     int     emailNid;
    648     int     uidIdx;
    649     int     uidLen;
    650     int     uidNid;
    651     int     serialIdx;
    652     int     serialLen;
    653     int     serialNid;
    654     int     dcIdx[DOMAIN_COMPONENT_MAX];
    655     int     dcLen[DOMAIN_COMPONENT_MAX];
    656     int     dcNum;
    657     int     dcMode;
    658 #if defined(OPENSSL_EXTRA) || defined(OPENSSL_EXTRA_X509_SMALL)
    659     /* hold the location / order with which each of the DN tags was found
    660      *
    661      * example of ASN_DOMAIN_COMPONENT at index 0 if first found and so on.
    662      */
    663     int     loc[DOMAIN_COMPONENT_MAX + DN_NAMES_MAX];
    664     int     locSz;
    665 #endif
    666 };
    667649
    668650enum SignatureState {
     
    697679#ifndef NO_RSA
    698680    byte* out;
    699     byte* plain;
    700 #endif
    701 #if defined(HAVE_ECC) || defined(HAVE_ED25519) || defined(HAVE_ED448)
     681#endif
     682#if !(defined(NO_RSA) && defined(NO_DSA))
     683    byte* sigCpy;
     684#endif
     685#if defined(HAVE_ECC) || defined(HAVE_ED25519) || defined(HAVE_ED448) || \
     686    !defined(NO_DSA)
    702687    int verify;
    703688#endif
     
    705690    #ifndef NO_RSA
    706691        struct RsaKey*      rsa;
     692    #endif
     693    #ifndef NO_DSA
     694        struct DsaKey*      dsa;
    707695    #endif
    708696    #ifdef HAVE_ECC
     
    782770
    783771typedef struct DecodedCert DecodedCert;
    784 typedef struct DecodedName DecodedName;
    785772typedef struct Signer      Signer;
    786773#ifdef WOLFSSL_TRUST_PEER_CERT
     
    804791#ifndef IGNORE_NAME_CONSTRAINTS
    805792    DNS_entry* altEmailNames;        /* alt names list of RFC822 entries */
     793    DNS_entry* altDirNames;          /* alt names list of DIR entries    */
    806794    Base_entry* permittedNames;      /* Permitted name bases             */
    807795    Base_entry* excludedNames;       /* Excluded name bases              */
     
    909897#endif /* WOLFSSL_CERT_GEN */
    910898#if defined(OPENSSL_EXTRA) || defined(OPENSSL_EXTRA_X509_SMALL)
    911     DecodedName issuerName;
    912     DecodedName subjectName;
     899    /* WOLFSSL_X509_NAME structures (used void* to avoid including ssl.h) */
     900    void* issuerName;
     901    void* subjectName;
    913902#endif /* OPENSSL_EXTRA */
    914903#ifdef WOLFSSL_SEP
     
    925914#endif /* defined(WOLFSSL_CERT_GEN) || defined(WOLFSSL_CERT_EXT) */
    926915
     916#ifdef WOLFSSL_CERT_REQ
     917    /* CSR attributes */
     918    char*   cPwd; /* challengePassword */
     919    int     cPwdLen;
     920    char*   sNum; /* Serial Number */
     921    int     sNumLen;
     922#endif /* WOLFSSL_CERT_REQ */
     923
    927924    Signer* ca;
    928925#ifndef NO_CERTS
     
    948945    byte extKeyUsageSet : 1;
    949946    byte extExtKeyUsageSet : 1;    /* Extended Key Usage set */
     947#ifdef HAVE_OCSP
     948    byte ocspNoCheckSet : 1;       /* id-pkix-ocsp-nocheck set */
     949#endif
    950950    byte extCRLdistSet : 1;
    951951    byte extAuthInfoSet : 1;
     
    973973    byte extCertPolicyCrit : 1;
    974974#endif
    975 
     975#ifdef WOLFSSL_CERT_REQ
     976    byte isCSR : 1;                /* Do we intend on parsing a CSR? */
     977#endif
    976978};
    977979
     
    10491051#endif
    10501052
     1053#ifdef HAVE_SMIME
     1054#define MIME_HEADER_ASCII_MIN   33
     1055#define MIME_HEADER_ASCII_MAX   126
     1056
     1057typedef struct MimeParam MimeParam;
     1058typedef struct MimeHdr MimeHdr;
     1059
     1060struct MimeParam
     1061{
     1062    MimeParam*  next;
     1063    char*       attribute;
     1064    char*       value;
     1065};
     1066
     1067struct MimeHdr
     1068{
     1069    MimeHdr*    next;
     1070    MimeParam*  params;
     1071    char*       name;
     1072    char*       body;
     1073};
     1074
     1075typedef enum MimeTypes
     1076{
     1077    MIME_HDR,
     1078    MIME_PARAM
     1079} MimeTypes;
     1080
     1081typedef enum MimeStatus
     1082{
     1083    MIME_NAMEATTR,
     1084    MIME_BODYVAL
     1085} MimeStatus;
     1086#endif /* HAVE_SMIME */
     1087
     1088
    10511089WOLFSSL_LOCAL int CalcHashId(const byte* data, word32 len, byte* hash);
     1090WOLFSSL_LOCAL int GetName(DecodedCert* cert, int nameType, int maxIdx);
    10521091
    10531092WOLFSSL_ASN_API int wc_BerToDer(const byte* ber, word32 berSz, byte* der,
     
    10691108WOLFSSL_LOCAL int CheckCertSignaturePubKey(const byte* cert, word32 certSz,
    10701109        void* heap, const byte* pubKey, word32 pubKeySz, int pubKeyOID);
     1110#ifdef WOLFSSL_CERT_REQ
     1111WOLFSSL_LOCAL int CheckCSRSignaturePubKey(const byte* cert, word32 certSz, void* heap,
     1112        const byte* pubKey, word32 pubKeySz, int pubKeyOID);
     1113#endif /* WOLFSSL_CERT_REQ */
     1114WOLFSSL_LOCAL int AddSignature(byte* buf, int bodySz, const byte* sig, int sigSz,
     1115                        int sigAlgoType);
    10711116WOLFSSL_LOCAL int ParseCertRelative(DecodedCert*,int type,int verify,void* cm);
    10721117WOLFSSL_LOCAL int DecodeToKey(DecodedCert*, int verify);
     
    11161161                                                 wolfssl_tm* certTime, int* idx);
    11171162WOLFSSL_LOCAL int DateGreaterThan(const struct tm* a, const struct tm* b);
    1118 WOLFSSL_LOCAL int ValidateDate(const byte* date, byte format, int dateType);
     1163WOLFSSL_LOCAL int wc_ValidateDate(const byte* date, byte format, int dateType);
    11191164WOLFSSL_LOCAL int wc_OBJ_sn2nid(const char *sn);
    11201165
     
    11221167#ifdef WOLFSSL_CERT_GEN
    11231168WOLFSSL_ASN_API int SetName(byte* output, word32 outputSz, CertName* name);
     1169WOLFSSL_LOCAL const char* GetOneCertName(CertName* name, int idx);
     1170WOLFSSL_LOCAL byte GetCertNameId(int idx);
    11241171#endif
    11251172WOLFSSL_LOCAL int GetShortInt(const byte* input, word32* inOutIdx, int* number,
     
    11391186WOLFSSL_LOCAL int GetOctetString(const byte* input, word32* inOutIdx, int* len,
    11401187                         word32 maxIdx);
     1188WOLFSSL_LOCAL int CheckBitString(const byte* input, word32* inOutIdx, int* len,
     1189                          word32 maxIdx, int zeroBits, byte* unusedBits);
    11411190WOLFSSL_LOCAL int GetSet(const byte* input, word32* inOutIdx, int* len,
    11421191                        word32 maxIdx);
     
    11731222WOLFSSL_LOCAL int wc_DhPrivKeyToDer(DhKey* key, byte* out, word32* outSz);
    11741223#endif
     1224WOLFSSL_LOCAL int SetASNInt(int len, byte firstByte, byte* output);
    11751225WOLFSSL_LOCAL word32 SetBitString(word32 len, byte unusedBits, byte* output);
    11761226WOLFSSL_LOCAL word32 SetImplicit(byte tag,byte number,word32 len,byte* output);
     
    11851235WOLFSSL_LOCAL int GetNameHash(const byte* source, word32* idx, byte* hash,
    11861236                             int maxIdx);
    1187 WOLFSSL_LOCAL int wc_CheckPrivateKey(byte* key, word32 keySz, DecodedCert* der);
     1237WOLFSSL_LOCAL int wc_CheckPrivateKeyCert(const byte* key, word32 keySz, DecodedCert* der);
     1238WOLFSSL_LOCAL int wc_CheckPrivateKey(const byte* privKey, word32 privKeySz,
     1239                                     const byte* pubKey, word32 pubKeySz, enum Key_Sum ks);
    11881240WOLFSSL_LOCAL int StoreDHparams(byte* out, word32* outLen, mp_int* p, mp_int* g);
    11891241WOLFSSL_LOCAL int FlattenAltNames( byte*, word32, const DNS_entry*);
     
    11931245    WOLFSSL_LOCAL int StoreECC_DSA_Sig(byte* out, word32* outLen, mp_int* r,
    11941246                                      mp_int* s);
     1247    WOLFSSL_LOCAL int StoreECC_DSA_Sig_Bin(byte* out, word32* outLen,
     1248        const byte* r, word32 rLen, const byte* s, word32 sLen);
     1249    WOLFSSL_LOCAL int DecodeECC_DSA_Sig_Bin(const byte* sig, word32 sigLen,
     1250        byte* r, word32* rLen, byte* s, word32* sLen);
     1251#endif
     1252#if defined(HAVE_ECC) || !defined(NO_DSA)
    11951253    WOLFSSL_LOCAL int DecodeECC_DSA_Sig(const byte* sig, word32 sigLen,
    11961254                                       mp_int* r, mp_int* s);
     
    12151273
    12161274#endif /* !NO_CERTS */
     1275
     1276#ifdef HAVE_SMIME
     1277WOLFSSL_LOCAL int wc_MIME_parse_headers(char* in, int inLen, MimeHdr** hdrs);
     1278WOLFSSL_LOCAL int wc_MIME_header_strip(char* in, char** out, size_t start, size_t end);
     1279WOLFSSL_LOCAL int wc_MIME_create_header(char* name, char* body, MimeHdr** hdr);
     1280WOLFSSL_LOCAL int wc_MIME_create_parameter(char* attribute, char* value, MimeParam** param);
     1281WOLFSSL_LOCAL MimeHdr* wc_MIME_find_header_name(const char* name, MimeHdr* hdr);
     1282WOLFSSL_LOCAL MimeParam* wc_MIME_find_param_attr(const char* attribute, MimeParam* param);
     1283WOLFSSL_LOCAL int wc_MIME_free_hdrs(MimeHdr* head);
     1284#endif /* HAVE_SMIME */
    12171285
    12181286#ifdef WOLFSSL_CERT_GEN
     
    12311299    ECC_KEY         = 12,
    12321300    ED25519_KEY     = 13,
    1233     ED448_KEY       = 14
     1301    ED448_KEY       = 14,
     1302    DSA_KEY         = 15
    12341303};
    12351304
     
    12821351    byte serial[EXTERNAL_SERIAL_SIZE];
    12831352    int serialSz;
     1353#ifdef OPENSSL_EXTRA
     1354    WOLFSSL_ASN1_INTEGER* serialInt;
     1355#endif
    12841356
    12851357    int status;
     
    12891361    byte thisDateFormat;
    12901362    byte nextDateFormat;
    1291 #if defined(OPENSSL_ALL) || defined(WOLFSSL_NGINX) || defined(WOLFSSL_HAPROXY)
     1363#if defined(OPENSSL_ALL) || defined(WOLFSSL_NGINX) || defined(WOLFSSL_HAPROXY) || defined(HAVE_LIGHTY)
    12921364    WOLFSSL_ASN1_TIME thisDateParsed;
    12931365    WOLFSSL_ASN1_TIME nextDateParsed;
     
    13001372};
    13011373
    1302 
     1374typedef struct OcspEntry OcspEntry;
     1375
     1376#ifdef NO_SHA
     1377#define OCSP_DIGEST_SIZE WC_SHA256_DIGEST_SIZE
     1378#else
     1379#define OCSP_DIGEST_SIZE WC_SHA_DIGEST_SIZE
     1380#endif
     1381
     1382struct OcspEntry
     1383{
     1384    OcspEntry *next;                      /* next entry                */
     1385    word32 hashAlgoOID;                   /* hash algo ID              */
     1386    byte issuerHash[OCSP_DIGEST_SIZE];    /* issuer hash               */
     1387    byte issuerKeyHash[OCSP_DIGEST_SIZE]; /* issuer public key hash    */
     1388    CertStatus *status;                   /* OCSP response list        */
     1389    int totalStatus;                      /* number on list            */
     1390    byte* rawCertId;                      /* raw bytes of the CertID   */
     1391    int rawCertIdSize;                    /* num bytes in raw CertID   */
     1392    /* option bits - using 32-bit for alignment */
     1393    word32 isDynamic:1;                   /* was dynamically allocated */
     1394
     1395};
     1396
     1397/* TODO: Long-term, it would be helpful if we made this struct and other OCSP
     1398         structs conform to the ASN spec as described in RFC 6960. It will help
     1399         with readability and with implementing OpenSSL compatibility API
     1400         functions, because OpenSSL's OCSP data structures conform to the
     1401         RFC. */
    13031402struct OcspResponse {
    13041403    int     responseStatus;  /* return code from Responder */
     
    13101409                             /* Date at which this response was signed */
    13111410    byte    producedDateFormat; /* format of the producedDate */
    1312     byte*   issuerHash;
    1313     byte*   issuerKeyHash;
    13141411
    13151412    byte*   cert;
     
    13201417    word32  sigOID;          /* OID for hash used for sig */
    13211418
    1322     CertStatus* status;      /* certificate status to fill out */
     1419    OcspEntry* single;       /* chain of OCSP single responses */
    13231420
    13241421    byte*   nonce;           /* pointer to nonce inside ASN.1 response */
     
    13311428    int     verifyError;
    13321429#endif
     1430    void*  heap;
    13331431};
    13341432
     
    13511449};
    13521450
    1353 typedef struct OcspEntry OcspEntry;
    1354 
    1355 #ifdef NO_SHA
    1356 #define OCSP_DIGEST_SIZE WC_SHA256_DIGEST_SIZE
    1357 #else
    1358 #define OCSP_DIGEST_SIZE WC_SHA_DIGEST_SIZE
    1359 #endif
    1360 
    1361 struct OcspEntry
    1362 {
    1363     OcspEntry *next;                      /* next entry             */
    1364     byte issuerHash[OCSP_DIGEST_SIZE];    /* issuer hash            */
    1365     byte issuerKeyHash[OCSP_DIGEST_SIZE]; /* issuer public key hash */
    1366     CertStatus *status;                   /* OCSP response list     */
    1367     int totalStatus;                      /* number on list         */
    1368 };
    1369 
    1370 WOLFSSL_LOCAL void InitOcspResponse(OcspResponse*, CertStatus*, byte*, word32);
    1371 WOLFSSL_LOCAL int  OcspResponseDecode(OcspResponse*, void*, void* heap, int);
     1451WOLFSSL_LOCAL void InitOcspResponse(OcspResponse*, OcspEntry*, CertStatus*, byte*, word32, void*);
     1452WOLFSSL_LOCAL void FreeOcspResponse(OcspResponse*);
     1453WOLFSSL_LOCAL int OcspResponseDecode(OcspResponse*, void*, void* heap, int);
    13721454
    13731455WOLFSSL_LOCAL int    InitOcspRequest(OcspRequest*, DecodedCert*, byte, void*);
     
    14471529
    14481530enum PBESTypes {
    1449     PBE_MD5_DES      = 0,
    1450     PBE_SHA1_RC4_128 = 1,
    1451     PBE_SHA1_DES     = 2,
    1452     PBE_SHA1_DES3    = 3,
    1453     PBE_AES256_CBC   = 4,
    1454     PBE_AES128_CBC   = 5,
     1531    PBE_MD5_DES        = 0,
     1532    PBE_SHA1_RC4_128   = 1,
     1533    PBE_SHA1_DES       = 2,
     1534    PBE_SHA1_DES3      = 3,
     1535    PBE_AES256_CBC     = 4,
     1536    PBE_AES128_CBC     = 5,
     1537    PBE_SHA1_40RC2_CBC = 6,
    14551538
    14561539    PBE_SHA1_RC4_128_SUM = 657,
  • azure_iot_hub_f767zi/trunk/wolfssl-4.7.0/wolfssl/wolfcrypt/asn_public.h

    r457 r464  
    2424*/
    2525
     26/*
     27DESCRIPTION
     28This library defines the interface APIs for X509 certificates.
     29
     30*/
    2631#ifndef WOLF_CRYPT_ASN_PUBLIC_H
    2732#define WOLF_CRYPT_ASN_PUBLIC_H
     
    122127enum Ctc_SigType {
    123128    CTC_SHAwDSA      = 517,
     129    CTC_SHA256wDSA   = 416,
    124130    CTC_MD2wRSA      = 646,
    125131    CTC_MD5wRSA      = 648,
     
    326332    char    certPolicies[CTC_MAX_CERTPOL_NB][CTC_MAX_CERTPOL_SZ];
    327333    word16  certPoliciesNb;              /* Number of Cert Policy */
     334#endif
     335#if defined(WOLFSSL_CERT_EXT) || defined(OPENSSL_EXTRA) || \
     336    defined(WOLFSSL_CERT_REQ)
    328337    byte     issRaw[sizeof(CertName)];   /* raw issuer info */
    329338    byte     sbjRaw[sizeof(CertName)];   /* raw subject info */
     
    510519    WOLFSSL_API int wc_EccPrivateKeyToPKCS8(ecc_key* key, byte* output,
    511520                                            word32* outLen);
     521    WOLFSSL_API int wc_EccKeyToPKCS8(ecc_key* key, byte* output,
     522                                     word32* outLen);
    512523
    513524    /* public key helper */
  • azure_iot_hub_f767zi/trunk/wolfssl-4.7.0/wolfssl/wolfcrypt/chacha.h

    r457 r464  
    1919 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA
    2020 */
     21/*
    2122
     23DESCRIPTION
     24This library contains implementation for the ChaCha20 stream cipher.
     25
     26*/
    2227/*!
    2328    \file wolfssl/wolfcrypt/chacha.h
     
    3641#endif
    3742
     43/*
     44Initialization vector starts at 13 with zero being the index origin of a matrix.
     45Block counter is located at index 12.
     46  0   1   2   3
     47  4   5   6   7
     48  8   9   10  11
     49  12  13  14  15
     50*/
     51#define CHACHA_MATRIX_CNT_IV 12
     52
    3853/* Size of the IV */
    3954#define CHACHA_IV_WORDS    3
    40 #define CHACHA_IV_BYTES    (CHACHA_IV_WORDS * sizeof(word32))
     55
     56/* Size of IV in bytes*/
     57#define CHACHA_IV_BYTES 12
     58#ifdef HAVE_XCHACHA
     59#define XCHACHA_NONCE_BYTES 24
     60#endif
    4161
    4262/* Size of ChaCha chunks */
     
    5878typedef struct ChaCha {
    5979    word32 X[CHACHA_CHUNK_WORDS];           /* state of cipher */
    60     word32 left;                            /* number of bytes leftover */
    6180#ifdef HAVE_INTEL_AVX1
    6281    /* vpshufd reads 16 bytes but we only use bottom 4. */
    6382    byte extra[12];
     83#endif
     84    word32 left;                            /* number of bytes leftover */
     85#if defined(USE_INTEL_CHACHA_SPEEDUP) || defined(WOLFSSL_ARMASM)
     86    word32 over[CHACHA_CHUNK_WORDS];
    6487#endif
    6588} ChaCha;
     
    7396WOLFSSL_API int wc_Chacha_Process(ChaCha* ctx, byte* cipher, const byte* plain,
    7497                              word32 msglen);
     98
     99WOLFSSL_LOCAL void wc_Chacha_purge_current_block(ChaCha* ctx);
     100
    75101WOLFSSL_API int wc_Chacha_SetKey(ChaCha* ctx, const byte* key, word32 keySz);
     102
     103#ifdef HAVE_XCHACHA
     104WOLFSSL_API int wc_XChacha_SetKey(ChaCha *ctx, const byte *key, word32 keySz,
     105                                  const byte *nonce, word32 nonceSz,
     106                                  word32 counter);
     107#endif
    76108
    77109#ifdef __cplusplus
  • azure_iot_hub_f767zi/trunk/wolfssl-4.7.0/wolfssl/wolfcrypt/cpuid.h

    r457 r464  
    3535#if defined(WOLFSSL_X86_64_BUILD) || defined(USE_INTEL_SPEEDUP) || \
    3636    defined(WOLFSSL_AESNI)
     37
    3738    #define CPUID_AVX1   0x0001
    3839    #define CPUID_AVX2   0x0002
     
    4243    #define CPUID_AESNI  0x0020
    4344    #define CPUID_ADX    0x0040   /* ADCX, ADOX */
     45    #define CPUID_MOVBE  0x0080   /* Move and byte swap */
    4446
    4547    #define IS_INTEL_AVX1(f)    ((f) & CPUID_AVX1)
     
    5052    #define IS_INTEL_AESNI(f)   ((f) & CPUID_AESNI)
    5153    #define IS_INTEL_ADX(f)     ((f) & CPUID_ADX)
     54    #define IS_INTEL_MOVBE(f)   ((f) & CPUID_MOVBE)
    5255
    5356    void cpuid_set_flags(void);
    5457    word32 cpuid_get_flags(void);
     58
     59    /* Public APIs to modify flags. */
     60    WOLFSSL_API void cpuid_select_flags(word32 flags);
     61    WOLFSSL_API void cpuid_set_flag(word32 flag);
     62    WOLFSSL_API void cpuid_clear_flag(word32 flag);
     63
    5564#endif
    5665
  • azure_iot_hub_f767zi/trunk/wolfssl-4.7.0/wolfssl/wolfcrypt/curve25519.h

    r457 r464  
    8888
    8989WOLFSSL_API
     90int wc_curve25519_make_pub(int public_size, byte* pub, int private_size,
     91                           const byte* priv);
     92
     93WOLFSSL_API
     94int wc_curve25519_generic(int public_size, byte* pub,
     95                          int private_size, const byte* priv,
     96                          int basepoint_size, const byte* basepoint);
     97
     98WOLFSSL_API
     99int wc_curve25519_make_priv(WC_RNG* rng, int keysize, byte* priv);
     100
     101WOLFSSL_API
    90102int wc_curve25519_make_key(WC_RNG* rng, int keysize, curve25519_key* key);
    91103
  • azure_iot_hub_f767zi/trunk/wolfssl-4.7.0/wolfssl/wolfcrypt/dh.h

    r457 r464  
    4646    #include <wolfssl/wolfcrypt/async.h>
    4747#endif
     48
     49/* Optional support extended DH public / private keys */
     50#if !defined(WOLFSSL_DH_EXTRA) && (defined(WOLFSSL_QT) || \
     51        defined(OPENSSL_ALL) || defined(WOLFSSL_OPENSSH) || \
     52        defined(WOLFSSL_STATIC_EPHEMERAL))
     53    #define WOLFSSL_DH_EXTRA
     54#endif
     55
    4856typedef struct DhParams {
    49     #ifdef HAVE_FFDHE_Q
     57#ifdef HAVE_FFDHE_Q
    5058    const byte* q;
    5159    word32      q_len;
    52     #endif /* HAVE_FFDHE_Q */
     60#endif /* HAVE_FFDHE_Q */
    5361    const byte* p;
    5462    word32      p_len;
     
    5967/* Diffie-Hellman Key */
    6068struct DhKey {
    61     mp_int p, g, q;                         /* group parameters */
    62 #if defined(WOLFSSL_QT) || defined(OPENSSL_ALL) || defined(WOLFSSL_OPENSSH)
     69    mp_int p, g, q; /* group parameters */
     70#ifdef WOLFSSL_DH_EXTRA
    6371    mp_int pub;
    6472    mp_int priv;
     
    102110
    103111WOLFSSL_API int wc_DhKeyDecode(const byte* input, word32* inOutIdx, DhKey* key,
    104                            word32);
     112                           word32); /* wc_DhKeyDecode is in asn.c */
     113
    105114WOLFSSL_API int wc_DhSetKey(DhKey* key, const byte* p, word32 pSz, const byte* g,
    106115                        word32 gSz);
    107116WOLFSSL_API int wc_DhSetKey_ex(DhKey* key, const byte* p, word32 pSz,
    108117                        const byte* g, word32 gSz, const byte* q, word32 qSz);
    109 #if defined(WOLFSSL_QT) || defined(OPENSSL_ALL)
    110 WOLFSSL_LOCAL int wc_DhSetFullKeys(DhKey* key,const byte* priv_key,word32 privSz,
    111                                    const byte* pub_key, word32 pubSz);
     118
     119#ifdef WOLFSSL_DH_EXTRA
     120WOLFSSL_API int wc_DhImportKeyPair(DhKey* key, const byte* priv, word32 privSz,
     121                                   const byte* pub, word32 pubSz);
     122WOLFSSL_API int wc_DhExportKeyPair(DhKey* key, byte* priv, word32* pPrivSz,
     123                                   byte* pub, word32* pPubSz);
     124WOLFSSL_LOCAL int wc_DhKeyCopy(DhKey* src, DhKey* dst);
    112125#endif
    113126WOLFSSL_API int wc_DhSetCheckKey(DhKey* key, const byte* p, word32 pSz,
     
    137150#endif /* NO_DH */
    138151#endif /* WOLF_CRYPT_DH_H */
    139 
  • azure_iot_hub_f767zi/trunk/wolfssl-4.7.0/wolfssl/wolfcrypt/ecc.h

    r457 r464  
    5151#endif
    5252
    53 #ifdef WOLFSSL_ATECC508A
     53#if defined(WOLFSSL_ATECC508A) || defined(WOLFSSL_ATECC608A)
    5454    #include <wolfssl/wolfcrypt/port/atmel/atmel.h>
    5555#endif /* WOLFSSL_ATECC508A */
     
    5858    #include <wolfssl/wolfcrypt/port/arm/cryptoCell.h>
    5959#endif
     60
     61#ifdef WOLFSSL_SILABS_SE_ACCEL
     62    #include <wolfssl/wolfcrypt/port/silabs/silabs_ecc.h>
     63#endif
     64
     65#ifdef WOLFSSL_HAVE_SP_ECC
     66    #include <wolfssl/wolfcrypt/sp_int.h>
     67#endif
     68
    6069
    6170#ifdef __cplusplus
     
    121130    SIG_HEADER_SZ   =  7,   /* ECC signature header size (30 81 87 02 42 [R] 02 42 [S]) */
    122131    ECC_BUFSIZE     = 256,  /* for exported keys temp buffer */
    123     ECC_MINSIZE     = 20,   /* MIN Private Key size */
     132    ECC_MINSIZE     = ECC_MIN_KEY_SZ/8,   /* MIN Private Key size */
    124133    ECC_MAXSIZE     = 66,   /* MAX Private Key size */
    125134    ECC_MAXSIZE_GEN = 74,   /* MAX Buffer size required when generating ECC keys*/
     
    128137
    129138    /* max crypto hardware size */
    130 #ifdef WOLFSSL_ATECC508A
     139#if defined(WOLFSSL_ATECC508A) || defined(WOLFSSL_ATECC608A)
    131140    ECC_MAX_CRYPTO_HW_SIZE = ATECC_KEY_SIZE, /* from port/atmel/atmel.h */
    132141    ECC_MAX_CRYPTO_HW_PUBKEY_SIZE = (ATECC_KEY_SIZE*2),
    133142#elif defined(PLUTON_CRYPTO_ECC)
     143    ECC_MAX_CRYPTO_HW_SIZE = 32,
     144#elif defined(WOLFSSL_SILABS_SE_ACCEL)
    134145    ECC_MAX_CRYPTO_HW_SIZE = 32,
    135146#elif defined(WOLFSSL_CRYPTOCELL)
     
    148159    SHAMIR_PRECOMP_SZ = 16,
    149160
    150 #ifdef HAVE_PKCS11
     161#ifdef WOLF_CRYPTO_CB
    151162    ECC_MAX_ID_LEN    = 32,
     163    ECC_MAX_LABEL_LEN = 32,
    152164#endif
    153165};
     
    204216    ECC_CURVE_CUSTOM,
    205217#endif
     218    ECC_CURVE_MAX
    206219} ecc_curve_id;
    207220
     
    279292 * of the point are pointers that are set to each of a three item array of
    280293 * alt_fp_ints. While an mp_int will have 4096 bits of digit inside the
    281  * structure, the alt_fp_int will only have 528 bits. A size value was added
    282  * in the ALT case, as well, and is set by mp_init() and alt_fp_init(). The
    283  * functions fp_zero() and fp_copy() use the size parameter. An int needs to
    284  * be initialized before using it instead of just fp_zeroing it, the init will
    285  * call zero. FP_MAX_BITS_ECC defaults to 528, but can be set to change the
    286  * number of bits used in the alternate FP_INT.
     294 * structure, the alt_fp_int will only have 512 bits for ECC 256-bit and
     295 * 1056-bits for ECC 521-bit. A size value was added in the ALT case, as well,
     296 * and is set by mp_init() and alt_fp_init(). The functions fp_zero() and
     297 * fp_copy() use the size parameter. An int needs to be initialized before
     298 * using it instead of just fp_zeroing it, the init will call zero. The
     299 * FP_MAX_BITS_ECC defaults to calculating based on MAX_ECC_BITS, but
     300 * can be set to change the number of bits used in the alternate FP_INT.
    287301 *
    288  * Do not enable ALT_ECC_SIZE and disable fast math in the configuration.
     302 * The ALT_ECC_SIZE option only applies to stack based fast math USE_FAST_MATH.
    289303 */
    290304
     
    295309/* determine max bits required for ECC math */
    296310#ifndef FP_MAX_BITS_ECC
    297     /* check alignment */
    298     #if ((MAX_ECC_BITS * 2) % DIGIT_BIT) == 0
    299         /* max bits is double */
    300         #define FP_MAX_BITS_ECC     (MAX_ECC_BITS * 2)
    301     #else
    302         /* max bits is doubled, plus one digit of fudge */
    303         #define FP_MAX_BITS_ECC     ((MAX_ECC_BITS * 2) + DIGIT_BIT)
    304     #endif
    305 #else
    306     /* verify alignment */
    307     #if FP_MAX_BITS_ECC % CHAR_BIT
    308        #error FP_MAX_BITS_ECC must be a multiple of CHAR_BIT
    309     #endif
     311    /* max bits rounded up by 8 then doubled */
     312    /* (ROUND8(MAX_ECC_BITS) * 2) */
     313    #define FP_MAX_BITS_ECC (2 * \
     314        ((MAX_ECC_BITS + DIGIT_BIT - 1) / DIGIT_BIT) * DIGIT_BIT)
     315
     316    /* Note: For ECC verify only FP_MAX_BITS_ECC can be reduced to:
     317             ROUND8(MAX_ECC_BITS) + ROUND8(DIGIT_BIT) */
     318#endif
     319
     320/* verify alignment */
     321#if FP_MAX_BITS_ECC % CHAR_BIT
     322    #error FP_MAX_BITS_ECC must be a multiple of CHAR_BIT
    310323#endif
    311324
    312325/* determine buffer size */
    313 #define FP_SIZE_ECC    (FP_MAX_BITS_ECC/DIGIT_BIT)
     326/* Add one to accommodate extra digit used by sp_mul(), sp_mulmod(), sp_sqr(), and sp_sqrmod(). */
     327#define FP_SIZE_ECC    ((FP_MAX_BITS_ECC/DIGIT_BIT) + 1)
    314328
    315329
     
    348362/* ECC Flags */
    349363enum {
    350     WC_ECC_FLAG_NONE = 0x00,
     364    WC_ECC_FLAG_NONE     = 0x00,
    351365#ifdef HAVE_ECC_CDH
    352366    WC_ECC_FLAG_COFACTOR = 0x01,
    353367#endif
     368    WC_ECC_FLAG_DEC_SIGN = 0x02,
    354369};
     370
     371/* ECC non-blocking */
     372#ifdef WC_ECC_NONBLOCK
     373    typedef struct ecc_nb_ctx {
     374    #if defined(WOLFSSL_HAVE_SP_ECC) && defined(WOLFSSL_SP_NONBLOCK)
     375        sp_ecc_ctx_t sp_ctx;
     376    #else
     377        /* build configuration not supported */
     378        #error ECC non-blocking only supports SP (--enable-sp=nonblock)
     379    #endif
     380    } ecc_nb_ctx_t;
     381#endif /* WC_ECC_NONBLOCK */
     382
    355383
    356384/* An ECC Key */
     
    370398    ecc_point pubkey;   /* public key */
    371399    mp_int    k;        /* private key */
    372 #ifdef WOLFSSL_ATECC508A
     400#if defined(WOLFSSL_ATECC508A) || defined(WOLFSSL_ATECC608A)
    373401    int  slot;        /* Key Slot Number (-1 unknown) */
    374402    byte pubkey_raw[ECC_MAX_CRYPTO_HW_PUBKEY_SIZE];
     
    377405    int devId;
    378406#endif
     407#ifdef WOLFSSL_SILABS_SE_ACCEL
     408    sl_se_command_context_t  cmd_ctx;
     409    sl_se_key_descriptor_t   key;
     410    /* Used for SiLabs "plaintext" with public X, public Y, and
     411     * private D concatenated. These are respectively at offset `0`,
     412     * offset `keysize`, and offset `2 * keysize`.
     413     */
     414    byte key_raw[3 * ECC_MAX_CRYPTO_HW_SIZE];
     415#endif
     416
    379417#ifdef WOLFSSL_ASYNC_CRYPT
    380418    mp_int* r;          /* sign/verify temps */
     
    389427    #endif
    390428#endif /* WOLFSSL_ASYNC_CRYPT */
    391 #ifdef HAVE_PKCS11
     429#ifdef WOLF_CRYPTO_CB
    392430    byte id[ECC_MAX_ID_LEN];
    393431    int  idLen;
     432    char label[ECC_MAX_LABEL_LEN];
     433    int  labelLen;
    394434#endif
    395435#if defined(WOLFSSL_CRYPTOCELL)
     
    414454    remote_handle64 handle;
    415455#endif
     456#ifdef ECC_TIMING_RESISTANT
     457    WC_RNG* rng;
     458#endif
     459#ifdef WC_ECC_NONBLOCK
     460    ecc_nb_ctx_t* nb_ctx;
     461#endif
    416462};
    417463
     
    428474const char* wc_ecc_get_name(int curve_id);
    429475
    430 #ifndef WOLFSSL_ATECC508A
     476#if !defined(WOLFSSL_ATECC508A) && !defined(WOLFSSL_ATECC608A)
    431477
    432478#ifdef WOLFSSL_PUBLIC_ECC_ADD_DBL
     
    447493                                     mp_int* modulus, mp_digit mp);
    448494
     495WOLFSSL_LOCAL
     496int ecc_projective_add_point_safe(ecc_point* A, ecc_point* B, ecc_point* R,
     497    mp_int* a, mp_int* modulus, mp_digit mp, int* infinity);
     498WOLFSSL_LOCAL
     499int ecc_projective_dbl_point_safe(ecc_point* P, ecc_point* R, mp_int* a,
     500                                  mp_int* modulus, mp_digit mp);
     501
    449502#endif
    450503
     
    454507int wc_ecc_make_key_ex(WC_RNG* rng, int keysize, ecc_key* key, int curve_id);
    455508WOLFSSL_API
     509int wc_ecc_make_key_ex2(WC_RNG* rng, int keysize, ecc_key* key, int curve_id,
     510                        int flags);
     511WOLFSSL_API
    456512int wc_ecc_make_pub(ecc_key* key, ecc_point* pubOut);
     513WOLFSSL_API
     514int wc_ecc_make_pub_ex(ecc_key* key, ecc_point* pubOut, WC_RNG* rng);
    457515WOLFSSL_API
    458516int wc_ecc_check_key(ecc_key* key);
     
    473531                             byte* out, word32 *outlen);
    474532
    475 #if defined(WOLFSSL_ATECC508A) || defined(PLUTON_CRYPTO_ECC) || defined(WOLFSSL_CRYPTOCELL)
     533#if defined(WOLFSSL_ATECC508A) || defined(WOLFSSL_ATECC608A) || \
     534    defined(PLUTON_CRYPTO_ECC) || defined(WOLFSSL_CRYPTOCELL)
    476535#define wc_ecc_shared_secret_ssh wc_ecc_shared_secret
    477536#else
     
    507566WOLFSSL_ABI WOLFSSL_API
    508567int wc_ecc_init_ex(ecc_key* key, void* heap, int devId);
    509 #ifdef HAVE_PKCS11
     568#ifdef WOLF_CRYPTO_CB
    510569WOLFSSL_API
    511570int wc_ecc_init_id(ecc_key* key, unsigned char* id, int len, void* heap,
    512571                   int devId);
     572WOLFSSL_API
     573int wc_ecc_init_label(ecc_key* key, const char* label, void* heap, int devId);
    513574#endif
    514575#ifdef WOLFSSL_CUSTOM_CURVES
     
    522583WOLFSSL_API
    523584void wc_ecc_fp_free(void);
     585WOLFSSL_LOCAL
     586void wc_ecc_fp_init(void);
     587#ifdef ECC_TIMING_RESISTANT
     588WOLFSSL_API
     589int wc_ecc_set_rng(ecc_key* key, WC_RNG* rng);
     590#endif
    524591
    525592WOLFSSL_API
     
    569636WOLFSSL_API
    570637int wc_ecc_point_is_at_infinity(ecc_point *p);
    571 
    572 #ifndef WOLFSSL_ATECC508A
     638WOLFSSL_API
     639int wc_ecc_point_is_on_curve(ecc_point *p, int curve_idx);
     640
     641#if !defined(WOLFSSL_ATECC508A) && !defined(WOLFSSL_ATECC608A)
    573642WOLFSSL_API
    574643int wc_ecc_mulmod(mp_int* k, ecc_point *G, ecc_point *R,
     
    577646int wc_ecc_mulmod_ex(mp_int* k, ecc_point *G, ecc_point *R,
    578647                  mp_int* a, mp_int* modulus, int map, void* heap);
     648WOLFSSL_LOCAL
     649int wc_ecc_mulmod_ex2(mp_int* k, ecc_point *G, ecc_point *R, mp_int* a,
     650                      mp_int* modulus, mp_int* order, WC_RNG* rng, int map,
     651                      void* heap);
    579652#endif /* !WOLFSSL_ATECC508A */
    580653
     
    755828#endif
    756829
     830#ifdef WC_ECC_NONBLOCK
     831    WOLFSSL_API int wc_ecc_set_nonblock(ecc_key *key, ecc_nb_ctx_t* ctx);
     832#endif
     833
    757834#ifdef __cplusplus
    758835    }    /* extern "C" */
  • azure_iot_hub_f767zi/trunk/wolfssl-4.7.0/wolfssl/wolfcrypt/error-crypt.h

    r457 r464  
    2222/*!
    2323    \file wolfssl/wolfcrypt/error-crypt.h
     24*/
     25/*
     26DESCRIPTION
     27This library defines error codes and contians routines for setting and examining
     28the error status.
    2429*/
    2530
     
    228233    PKCS7_SIGNEEDS_CHECK= -272,  /* signature needs verified by caller */
    229234    PSS_SALTLEN_RECOVER_E=-273,  /* PSS slat length not recoverable */
    230 
    231     ASN_SELF_SIGNED_E   = -274, /* ASN self-signed certificate error */
    232 
    233     WC_LAST_E           = -274,  /* Update this to indicate last error */
     235    CHACHA_POLY_OVERFLOW =-274,  /* ChaCha20Poly1305 limit overflow */
     236    ASN_SELF_SIGNED_E   = -275, /* ASN self-signed certificate error */
     237
     238    WC_LAST_E           = -275,  /* Update this to indicate last error */
    234239    MIN_CODE_E          = -300   /* errors -101 - -299 */
    235240
  • azure_iot_hub_f767zi/trunk/wolfssl-4.7.0/wolfssl/wolfcrypt/hmac.h

    r457 r464  
    9595#endif
    9696#ifdef HAVE_PKCS11
    97     HMAC_MAX_ID_LEN = 32,
     97    HMAC_MAX_ID_LEN    = 32,
     98    HMAC_MAX_LABEL_LEN = 32,
    9899#endif
    99100};
     
    132133    wc_Sha3 sha3;
    133134#endif
    134 } Hash;
     135} wc_Hmac_Hash;
    135136
    136137/* Hmac digest */
    137138struct Hmac {
    138     Hash    hash;
     139    wc_Hmac_Hash    hash;
    139140    word32  ipad[WC_HMAC_BLOCK_SIZE  / sizeof(word32)];  /* same block size all*/
    140141    word32  opad[WC_HMAC_BLOCK_SIZE  / sizeof(word32)];
     
    154155    byte    id[HMAC_MAX_ID_LEN];
    155156    int     idLen;
     157    char    label[HMAC_MAX_LABEL_LEN];
     158    int     labelLen;
    156159#endif
    157160#if defined(WOLFSSL_ASYNC_CRYPT) || defined(WOLF_CRYPTO_CB)
     
    175178
    176179WOLFSSL_API int wc_HmacInit(Hmac* hmac, void* heap, int devId);
     180#ifdef HAVE_PKCS11
    177181WOLFSSL_API int wc_HmacInit_Id(Hmac* hmac, byte* id, int len, void* heap,
    178182                               int devId);
     183WOLFSSL_API int wc_HmacInit_Label(Hmac* hmac, const char* label, void* heap,
     184                                  int devId);
     185#endif
    179186WOLFSSL_API void wc_HmacFree(Hmac*);
    180187
  • azure_iot_hub_f767zi/trunk/wolfssl-4.7.0/wolfssl/wolfcrypt/integer.h

    r457 r464  
    3434*/
    3535#include <wolfssl/wolfcrypt/types.h>       /* will set MP_xxBIT if not default */
    36 #ifdef WOLFSSL_SP_MATH
     36#if defined(WOLFSSL_SP_MATH) || defined(WOLFSSL_SP_MATH_ALL)
    3737    #include <wolfssl/wolfcrypt/sp_int.h>
    3838#elif defined(USE_FAST_MATH)
     
    4343
    4444#ifndef CHAR_BIT
    45     #include <limits.h>
     45    #if defined(WOLFSSL_LINUXKM)
     46        #include <linux/limits.h>
     47    #else
     48        #include <limits.h>
     49    #endif
    4650#endif
    4751
     
    6973
    7074/* detect 64-bit mode if possible */
    71 #if defined(__x86_64__) && !(defined (_MSC_VER) && defined(__clang__))
     75#if (defined(__x86_64__) || defined(__aarch64__)) && !(defined (_MSC_VER) && defined(__clang__))
    7276   #if !(defined(MP_64BIT) && defined(MP_16BIT) && defined(MP_8BIT))
    7377      #define MP_64BIT
     
    158162#define MP_MEM        -2  /* out of mem */
    159163#define MP_VAL        -3  /* invalid input */
    160 #define MP_NOT_INF        -4  /* point not at infinity */
     164#define MP_NOT_INF    -4  /* point not at infinity */
    161165#define MP_RANGE      MP_NOT_INF
    162166
     
    302306MP_API void mp_clamp (mp_int * a);
    303307MP_API void mp_exch (mp_int * a, mp_int * b);
     308MP_API int  mp_cond_swap_ct (mp_int * a, mp_int * b, int c, int m);
    304309MP_API void mp_rshd (mp_int * a, int b);
    305310MP_API void mp_rshb (mp_int * a, int b);
     
    319324MP_API int  mp_div(mp_int * a, mp_int * b, mp_int * c, mp_int * d);
    320325MP_API int  mp_div_2(mp_int * a, mp_int * b);
     326MP_API int  mp_div_2_mod_ct (mp_int* a, mp_int* b, mp_int* c);
    321327MP_API int  mp_add (mp_int * a, mp_int * b, mp_int * c);
    322328int  s_mp_add (mp_int * a, mp_int * b, mp_int * c);
     
    333339int  fast_mp_montgomery_reduce (mp_int * x, mp_int * n, mp_digit rho);
    334340MP_API int  mp_montgomery_reduce (mp_int * x, mp_int * n, mp_digit rho);
     341#define mp_montgomery_reduce_ex(x, n, rho, ct) mp_montgomery_reduce (x, n, rho)
    335342MP_API void mp_dr_setup(mp_int *a, mp_digit *d);
    336343MP_API int  mp_dr_reduce (mp_int * x, mp_int * n, mp_digit k);
     
    356363MP_API int  mp_submod (mp_int* a, mp_int* b, mp_int* c, mp_int* d);
    357364MP_API int  mp_addmod (mp_int* a, mp_int* b, mp_int* c, mp_int* d);
     365MP_API int  mp_submod_ct (mp_int* a, mp_int* b, mp_int* c, mp_int* d);
     366MP_API int  mp_addmod_ct (mp_int* a, mp_int* b, mp_int* c, mp_int* d);
    358367MP_API int  mp_mul_d (mp_int * a, mp_digit b, mp_int * c);
    359368MP_API int  mp_2expt (mp_int * a, int b);
  • azure_iot_hub_f767zi/trunk/wolfssl-4.7.0/wolfssl/wolfcrypt/logging.h

    r457 r464  
    101101WOLFSSL_API void wolfSSL_Debugging_OFF(void);
    102102
     103#ifdef HAVE_WC_INTROSPECTION
     104    WOLFSSL_API const char *wolfSSL_configure_args(void);
     105    WOLFSSL_API const char *wolfSSL_global_cflags(void);
     106#endif
    103107
    104108#if defined(OPENSSL_EXTRA) || defined(DEBUG_WOLFSSL_VERBOSE)
     
    188192#endif
    189193
     194#ifdef HAVE_STACK_SIZE_VERBOSE
     195    extern WOLFSSL_API THREAD_LS_T unsigned char *StackSizeCheck_myStack;
     196    extern WOLFSSL_API THREAD_LS_T size_t StackSizeCheck_stackSize;
     197    extern WOLFSSL_API THREAD_LS_T size_t StackSizeCheck_stackSizeHWM;
     198    extern WOLFSSL_API THREAD_LS_T size_t *StackSizeCheck_stackSizeHWM_ptr;
     199    extern WOLFSSL_API THREAD_LS_T void *StackSizeCheck_stackOffsetPointer;
     200#endif
     201
    190202#ifdef __cplusplus
    191203}
  • azure_iot_hub_f767zi/trunk/wolfssl-4.7.0/wolfssl/wolfcrypt/memory.h

    r457 r464  
    3030#define WOLFSSL_MEMORY_H
    3131
    32 #ifndef STRING_USER
     32#if !defined(STRING_USER) && !defined(WOLFSSL_LINUXKM)
    3333#include <stdlib.h>
    3434#endif
     
    111111            /* extra storage in structs for multiple attributes and order */
    112112            #ifndef LARGEST_MEM_BUCKET
    113                 #define LARGEST_MEM_BUCKET 25600
     113                #ifdef WOLFSSL_TLS13
     114                    #define LARGEST_MEM_BUCKET 30400
     115                #else
     116                    #define LARGEST_MEM_BUCKET 25600
     117                #endif
    114118            #endif
    115119            #define WOLFMEM_BUCKETS 64,128,256,512,1024,2432,3360,4480,\
  • azure_iot_hub_f767zi/trunk/wolfssl-4.7.0/wolfssl/wolfcrypt/misc.h

    r457 r464  
    1919 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA
    2020 */
     21/*
    2122
     23DESCRIPTION
     24This module implements the arithmetic-shift right, left, byte swapping, XOR,
     25masking and clearing memory logic.
    2226
    23 
     27*/
    2428#ifndef WOLF_CRYPT_MISC_H
    2529#define WOLF_CRYPT_MISC_H
     
    4044word32 rotrFixed(word32, word32);
    4145
     46#ifdef WC_RC2
     47WOLFSSL_LOCAL
     48word16 rotlFixed16(word16, word16);
     49WOLFSSL_LOCAL
     50word16 rotrFixed16(word16, word16);
     51#endif
     52
    4253WOLFSSL_LOCAL
    4354word32 ByteReverseWord32(word32);
     
    4556void   ByteReverseWords(word32*, const word32*, word32);
    4657
     58WOLFSSL_LOCAL
     59void XorWordsOut(wolfssl_word* r, const wolfssl_word* a, const wolfssl_word* b,
     60                 word32 n);
     61WOLFSSL_LOCAL
     62void xorbufout(void*, const void*, const void*, word32);
    4763WOLFSSL_LOCAL
    4864void XorWords(wolfssl_word*, const wolfssl_word*, word32);
     
    100116WOLFSSL_LOCAL byte ctMaskEq(int a, int b);
    101117WOLFSSL_LOCAL word16 ctMask16GT(int a, int b);
     118WOLFSSL_LOCAL word16 ctMask16GTE(int a, int b);
    102119WOLFSSL_LOCAL word16 ctMask16LT(int a, int b);
     120WOLFSSL_LOCAL word16 ctMask16LTE(int a, int b);
    103121WOLFSSL_LOCAL word16 ctMask16Eq(int a, int b);
    104122WOLFSSL_LOCAL byte ctMaskNotEq(int a, int b);
  • azure_iot_hub_f767zi/trunk/wolfssl-4.7.0/wolfssl/wolfcrypt/pkcs12.h

    r457 r464  
    5454        byte** pkey, word32* pkeySz, byte** cert, word32* certSz,
    5555        WC_DerCertList** ca);
     56WOLFSSL_LOCAL int wc_PKCS12_verify_ex(WC_PKCS12* pkcs12,
     57        const byte* psw, word32 pswSz);
    5658WOLFSSL_API WC_PKCS12* wc_PKCS12_create(char* pass, word32 passSz,
    5759        char* name, byte* key, word32 keySz, byte* cert, word32 certSz,
  • azure_iot_hub_f767zi/trunk/wolfssl-4.7.0/wolfssl/wolfcrypt/random.h

    r457 r464  
    150150#endif
    151151
     152#ifdef HAVE_HASHDRBG
     153struct DRBG_internal {
     154    word32 reseedCtr;
     155    word32 lastBlock;
     156    byte V[DRBG_SEED_LEN];
     157    byte C[DRBG_SEED_LEN];
     158#if defined(WOLFSSL_ASYNC_CRYPT) || defined(WOLF_CRYPTO_CB)
     159    void* heap;
     160    int devId;
     161#endif
     162    byte   matchCount;
     163#ifdef WOLFSSL_SMALL_STACK_CACHE
     164    wc_Sha256 sha256;
     165#endif
     166};
     167#endif
     168
    152169/* RNG context */
    153170struct WC_RNG {
     
    158175    struct DRBG* drbg;
    159176#if defined(WOLFSSL_NO_MALLOC) && !defined(WOLFSSL_STATIC_MEMORY)
    160     #define DRBG_STRUCT_SZ ((sizeof(word32)*3) + (DRBG_SEED_LEN*2))
    161     #ifdef WOLFSSL_SMALL_STACK_CACHE
    162         #define DRBG_STRUCT_SZ_SHA256 (sizeof(wc_Sha256))
    163     #else
    164         #define DRBG_STRUCT_SZ_SHA256 0
    165     #endif
    166     #if defined(WOLFSSL_ASYNC_CRYPT) || defined(WOLF_CRYPTO_CB)
    167         #define DRBG_STRUCT_SZ_ASYNC (sizeof(void*) + sizeof(int))
    168     #else
    169         #define DRBG_STRUCT_SZ_ASYNC 0
    170     #endif
    171     byte drbg_data[DRBG_STRUCT_SZ + DRBG_STRUCT_SZ_SHA256 + DRBG_STRUCT_SZ_ASYNC];
     177    struct DRBG_internal drbg_data;
    172178#endif
    173179    byte status;
     
    220226#define wc_InitRngNonce(rng, n, s) NOT_COMPILED_IN
    221227#define wc_InitRngNonce_ex(rng, n, s, h, d) NOT_COMPILED_IN
     228#if defined(__ghs__) || defined(WC_NO_RNG_SIMPLE)
     229/* some older compilers do not like macro function in expression */
    222230#define wc_RNG_GenerateBlock(rng, b, s) NOT_COMPILED_IN
     231#else
     232#define wc_RNG_GenerateBlock(rng, b, s) ({(void)rng; (void)b; (void)s; NOT_COMPILED_IN;})
     233#endif
    223234#define wc_RNG_GenerateByte(rng, b) NOT_COMPILED_IN
    224235#define wc_FreeRng(rng) (void)NOT_COMPILED_IN
  • azure_iot_hub_f767zi/trunk/wolfssl-4.7.0/wolfssl/wolfcrypt/rsa.h

    r457 r464  
    2424*/
    2525
    26 
     26/*
     27
     28DESCRIPTION
     29This library provides the interface to the RSA.
     30RSA keys can be used to encrypt, decrypt, sign and verify data.
     31
     32*/
    2733#ifndef WOLF_CRYPT_RSA_H
    2834#define WOLF_CRYPT_RSA_H
     
    136142#endif
    137143
    138 #ifdef HAVE_PKCS11
     144#ifdef WOLF_CRYPTO_CB
    139145    RSA_MAX_ID_LEN      = 32,
     146    RSA_MAX_LABEL_LEN   = 32,
    140147#endif
    141148};
     
    179186    XSecure_Rsa xRsa;
    180187#endif
    181 #ifdef HAVE_PKCS11
     188#ifdef WOLF_CRYPTO_CB
    182189    byte id[RSA_MAX_ID_LEN];
    183190    int  idLen;
     191    char label[RSA_MAX_LABEL_LEN];
     192    int  labelLen;
    184193#endif
    185194#if defined(WOLFSSL_ASYNC_CRYPT) || !defined(WOLFSSL_RSA_VERIFY_INLINE)
     
    208217WOLFSSL_API int  wc_InitRsaKey_ex(RsaKey* key, void* heap, int devId);
    209218WOLFSSL_API int  wc_FreeRsaKey(RsaKey* key);
    210 #ifdef HAVE_PKCS11
     219#ifdef WOLF_CRYPTO_CB
    211220WOLFSSL_API int wc_InitRsaKey_Id(RsaKey* key, unsigned char* id, int len,
    212221                                 void* heap, int devId);
     222WOLFSSL_API int wc_InitRsaKey_Label(RsaKey* key, const char* label, void* heap,
     223                                    int devId);
    213224#endif
    214225WOLFSSL_API int  wc_CheckRsaKey(RsaKey* key);
     
    241252WOLFSSL_API int  wc_RsaSSL_Verify_ex(const byte* in, word32 inLen, byte* out,
    242253                              word32 outLen, RsaKey* key, int pad_type);
     254WOLFSSL_API int  wc_RsaSSL_Verify_ex2(const byte* in, word32 inLen, byte* out,
     255                              word32 outLen, RsaKey* key, int pad_type,
     256                              enum wc_HashType hash);
    243257WOLFSSL_API int  wc_RsaPSS_VerifyInline(byte* in, word32 inLen, byte** out,
    244258                                        enum wc_HashType hash, int mgf,
     
    281295WOLFSSL_API int  wc_RsaPublicKeyDecodeRaw(const byte* n, word32 nSz,
    282296                                        const byte* e, word32 eSz, RsaKey* key);
    283 WOLFSSL_API int wc_RsaKeyToDer(RsaKey*, byte* output, word32 inLen);
    284 
     297#ifdef WOLFSSL_KEY_GEN
     298    WOLFSSL_API int wc_RsaKeyToDer(RsaKey*, byte* output, word32 inLen);
     299#endif
    285300
    286301#ifdef WC_RSA_BLINDING
     
    361376                                   int bits, void* heap);
    362377
     378WOLFSSL_LOCAL int wc_hash2mgf(enum wc_HashType hType);
     379
    363380#endif /* HAVE_USER_RSA */
    364381
  • azure_iot_hub_f767zi/trunk/wolfssl-4.7.0/wolfssl/wolfcrypt/settings.h

    r457 r464  
    6363/* #define MICROCHIP_TCPIP */
    6464
     65/* Uncomment next line if using above Microchip TCP/IP defines with BSD API */
     66/* #define MICROCHIP_TCPIP_BSD_API */
     67
    6568/* Uncomment next line if using PIC32MZ Crypto Engine */
    6669/* #define WOLFSSL_MICROCHIP_PIC32MZ */
     
    210213/* #define WOLFSSL_RENESAS_RX65N */
    211214
     215/* Uncomment next line if using Solaris OS*/
     216/* #define WOLFSSL_SOLARIS */
     217
     218/* Uncomment next line if building for Linux Kernel Module */
     219/* #define WOLFSSL_LINUXKM */
     220
     221
    212222#include <wolfssl/wolfcrypt/visibility.h>
    213223
    214224#ifdef WOLFSSL_USER_SETTINGS
    215225    #include "user_settings.h"
    216 #endif
    217 
     226#elif defined(USE_HAL_DRIVER) && !defined(HAVE_CONFIG_H)
     227    /* STM Configuration File (generated by CubeMX) */
     228    #include "wolfSSL.I-CUBE-wolfSSL_conf.h"
     229#endif
    218230
    219231/* make sure old RNG name is used with CTaoCrypt FIPS */
     
    293305#endif
    294306
    295 #if defined(WOLFSSL_RENESAS_RA6M3G)
     307#if defined(WOLFSSL_RENESAS_RA6M3G) || defined(WOLFSSL_RENESAS_RA6M3)
    296308    /* settings in user_settings.h */
    297309#endif
     
    338350    #define SIZEOF_LONG_LONG 8
    339351    #define SINGLE_THREADED
    340     #define WOLFSSL_USER_IO
     352    #ifndef MICROCHIP_TCPIP_BSD_API
     353        #define WOLFSSL_USER_IO
     354    #endif
    341355    #define NO_WRITEV
    342356    #define NO_DEV_RANDOM
     
    344358    #define USE_FAST_MATH
    345359    #define TFM_TIMING_RESISTANT
     360    #define NO_BIG_INT
     361#endif
     362
     363#ifdef WOLFSSL_MICROCHIP_PIC32MZ
    346364    #define WOLFSSL_HAVE_MIN
    347365    #define WOLFSSL_HAVE_MAX
    348     #define NO_BIG_INT
    349 #endif
    350 
    351 #ifdef WOLFSSL_MICROCHIP_PIC32MZ
     366
    352367    #ifndef NO_PIC32MZ_CRYPT
    353368        #define WOLFSSL_PIC32MZ_CRYPT
     
    373388        #include "system/system_services.h"
    374389        #include "tcpip/sntp.h"
     390    #endif
     391#endif
     392
     393#ifdef WOLFSSL_ATECC508A
     394    /* backwards compatibility */
     395#ifndef WOLFSSL_ATECC_NO_ECDH_ENC
     396    #define WOLFSSL_ATECC_ECDH_ENC
     397#endif
     398    #ifdef WOLFSSL_ATECC508A_DEBUG
     399        #define WOLFSSL_ATECC_DEBUG
    375400    #endif
    376401#endif
     
    602627        #define SIZEOF_LONG 4
    603628        #define SIZEOF_LONG_LONG 8
    604         #define NO_ASN_TIME
    605629        #define NO_DEV_RANDOM
    606630        #define NO_FILESYSTEM
     
    610634        #define USE_FAST_MATH
    611635        #define TFM_TIMING_RESISTANT
    612         #define USE_WOLFSSL_MEMORY
    613636        #define WOLFSSL_NRF51
    614637        #define WOLFSSL_USER_IO
     
    656679    /* static char* gets(char *buff); */
    657680    static char* fgets(char *buff, int sz, XFILE fp) {
    658         char * p = buff;
    659         *p = '\0';
     681        char * s = buff;
     682        *s = '\0';
    660683        while (1) {
    661             *p = tm_getchar(-1);
    662             tm_putchar(*p);
    663             if (*p == '\r') {
     684            *s = tm_getchar(-1);
     685            tm_putchar(*s);
     686            if (*s == '\r') {
    664687                tm_putchar('\n');
    665                 *p = '\0';
     688                *s = '\0';
    666689                break;
    667690            }
    668             p++;
     691            s++;
    669692        }
    670693        return buff;
     
    699722        #define XMALLOC(s, h, type)  pvPortMalloc((s))
    700723        #define XFREE(p, h, type)    vPortFree((p))
    701     #endif
    702     /* FreeRTOS pvPortRealloc() implementation can be found here:
    703         https://github.com/wolfSSL/wolfssl-freertos/pull/3/files */
    704     #if !defined(USE_FAST_MATH) || defined(HAVE_ED25519) || defined(HAVE_ED448)
    705         #if defined(WOLFSSL_ESPIDF)
    706             /*In IDF, realloc(p, n) is equivalent to
    707             heap_caps_realloc(p, s, MALLOC_CAP_8BIT) */
    708             #define XREALLOC(p, n, h, t) realloc((p), (n))
    709         #else
    710             #define XREALLOC(p, n, h, t) pvPortRealloc((p), (n))
    711         #endif
    712     #endif
     724        /* FreeRTOS pvPortRealloc() implementation can be found here:
     725            https://github.com/wolfSSL/wolfssl-freertos/pull/3/files */
     726        #if !defined(USE_FAST_MATH) || defined(HAVE_ED25519) || \
     727            defined(HAVE_ED448)
     728            #if defined(WOLFSSL_ESPIDF)
     729                /*In IDF, realloc(p, n) is equivalent to
     730                heap_caps_realloc(p, s, MALLOC_CAP_8BIT) */
     731                #define XREALLOC(p, n, h, t) realloc((p), (n))
     732            #else
     733                #define XREALLOC(p, n, h, t) pvPortRealloc((p), (n))
     734            #endif
     735        #endif
     736    #endif
     737
    713738    #ifndef NO_WRITEV
    714739        #define NO_WRITEV
     
    813838        #define SIZEOF_LONG_LONG 8
    814839    #else
    815         #error settings.h - please implement SIZEOF_LONG and SIZEOF_LONG_LONG
     840        #if !defined(SIZEOF_LONG) && !defined(SIZEOF_LONG_LONG)
     841            #error settings.h - please implement SIZEOF_LONG and SIZEOF_LONG_LONG
     842        #endif
    816843    #endif
    817844
     
    823850        #define XSTRNCASECMP(s1,s2,n)  _strnicmp((s1),(s2),(n))
    824851    #else
    825         #sslpro: settings.h - please implement XSTRNCASECMP - needed for HAVE_ECC
     852        #ifndef XSTRNCASECMP
     853            #error settings.h - please implement XSTRNCASECMP - needed for HAVE_ECC
     854        #endif
    826855    #endif
    827856
     
    884913        #define XMALLOC(s, h, type)  pvPortMalloc((s))
    885914        #define XFREE(p, h, type)    vPortFree((p))
    886     #endif
    887     /* FreeRTOS pvPortRealloc() implementation can be found here:
    888         https://github.com/wolfSSL/wolfssl-freertos/pull/3/files */
    889     #if !defined(USE_FAST_MATH) || defined(HAVE_ED25519) || defined(HAVE_ED448)
    890         #define XREALLOC(p, n, h, t) pvPortRealloc((p), (n))
     915
     916        /* FreeRTOS pvPortRealloc() implementation can be found here:
     917            https://github.com/wolfSSL/wolfssl-freertos/pull/3/files */
     918        #if !defined(USE_FAST_MATH) || defined(HAVE_ED25519) || \
     919            defined(HAVE_ED448)
     920            #define XREALLOC(p, n, h, t) pvPortRealloc((p), (n))
     921        #endif
    891922    #endif
    892923#endif
     
    899930    #undef  TFM_TIMING_RESISTANT
    900931    #define TFM_TIMING_RESISTANT
     932#endif
     933
     934/* To support storing some of the large constant tables in flash memory rather than SRAM.
     935   Useful for processors that have limited SRAM, such as the AVR family of microtrollers. */
     936#ifdef WOLFSSL_USE_FLASHMEM
     937    /* This is supported on the avr-gcc compiler, for more information see:
     938         https://gcc.gnu.org/onlinedocs/gcc/Named-Address-Spaces.html */
     939    #define FLASH_QUALIFIER __flash
     940
     941    /* Copy data out of flash memory and into SRAM */
     942    #define XMEMCPY_P(pdest, psrc, size) memcpy_P((pdest), (psrc), (size))
     943#else
     944    #define FLASH_QUALIFIER
    901945#endif
    902946
     
    934978        /* Note: MQX has no realloc, using fastmath above */
    935979    #endif
     980    #ifdef USE_FAST_MATH
     981        /* Undef first to avoid re-definition if user_settings.h defines */
     982        #undef TFM_TIMING_RESISTANT
     983        #define TFM_TIMING_RESISTANT
     984        #undef ECC_TIMING_RESISTANT
     985        #define ECC_TIMING_RESISTANT
     986        #undef WC_RSA_BLINDING
     987        #define WC_RSA_BLINDING
     988    #endif
    936989#endif
    937990
     
    10221075
    10231076    #undef  HAVE_ECC
     1077    #ifndef WOLFCRYPT_FIPS_RAND
    10241078    #define HAVE_ECC
     1079    #endif
    10251080    #ifndef NO_AES
    10261081        #undef  HAVE_AESCCM
     
    10431098    /* random seed */
    10441099    #define NO_OLD_RNGNAME
    1045     #if defined(FSL_FEATURE_SOC_TRNG_COUNT) && (FSL_FEATURE_SOC_TRNG_COUNT > 0)
     1100    #if   defined(FREESCALE_NO_RNG)
     1101        /* nothing to define */
     1102    #elif defined(FSL_FEATURE_SOC_TRNG_COUNT) && (FSL_FEATURE_SOC_TRNG_COUNT > 0)
    10461103        #define FREESCALE_KSDK_2_0_TRNG
    10471104    #elif defined(FSL_FEATURE_SOC_RNG_COUNT) && (FSL_FEATURE_SOC_RNG_COUNT > 0)
     
    11151172
    11161173        #if defined(FSL_FEATURE_LTC_HAS_PKHA) && FSL_FEATURE_LTC_HAS_PKHA
     1174            #ifndef WOLFCRYPT_FIPS_RAND
    11171175            #define FREESCALE_LTC_ECC
     1176            #endif
    11181177            #define FREESCALE_LTC_TFM
    11191178
     
    11651224    #undef  FP_MAX_BITS
    11661225    #define FP_MAX_BITS (8192)
     1226    #undef  SP_INT_BITS
     1227    #define SP_INT_BITS (4096)
    11671228
    11681229    #undef  NO_DH
     
    11791240#if defined(WOLFSSL_STM32F2) || defined(WOLFSSL_STM32F4) || \
    11801241    defined(WOLFSSL_STM32F7) || defined(WOLFSSL_STM32F1) || \
    1181     defined(WOLFSSL_STM32L4)
     1242    defined(WOLFSSL_STM32L4) || defined(WOLFSSL_STM32L5) || \
     1243    defined(WOLFSSL_STM32WB) || defined(WOLFSSL_STM32H7)
    11821244
    11831245    #define SIZEOF_LONG_LONG 8
     
    12001262        #define STM32_CRYPTO
    12011263
    1202         #ifdef WOLFSSL_STM32L4
     1264        #if defined(WOLFSSL_STM32L4) || defined(WOLFSSL_STM32L5) || \
     1265            defined(WOLFSSL_STM32WB)
    12031266            #define NO_AES_192 /* hardware does not support 192-bit */
    12041267        #endif
     
    12131276    #define NO_OLD_RNGNAME
    12141277    #ifdef WOLFSSL_STM32_CUBEMX
    1215         #if defined(WOLFSSL_STM32F2)
     1278        #if defined(WOLFSSL_STM32F1)
     1279            #include "stm32f1xx_hal.h"
     1280        #elif defined(WOLFSSL_STM32F2)
    12161281            #include "stm32f2xx_hal.h"
     1282        #elif defined(WOLFSSL_STM32L5)
     1283            #include "stm32l5xx_hal.h"
    12171284        #elif defined(WOLFSSL_STM32L4)
    12181285            #include "stm32l4xx_hal.h"
     
    12231290        #elif defined(WOLFSSL_STM32F1)
    12241291            #include "stm32f1xx_hal.h"
     1292        #elif defined(WOLFSSL_STM32H7)
     1293            #include "stm32h7xx_hal.h"
     1294        #elif defined(WOLFSSL_STM32WB)
     1295            #include "stm32wbxx_hal.h"
    12251296        #endif
    12261297        #if defined(WOLFSSL_CUBEMX_USE_LL) && defined(WOLFSSL_STM32L4)
     
    12481319                #include "stm32f4xx_hash.h"
    12491320            #endif
     1321        #elif defined(WOLFSSL_STM32L5)
     1322            #include "stm32l5xx.h"
     1323            #ifdef STM32_CRYPTO
     1324                #include "stm32l5xx_cryp.h"
     1325            #endif
     1326            #ifdef STM32_HASH
     1327                #include "stm32l5xx_hash.h"
     1328            #endif
    12501329        #elif defined(WOLFSSL_STM32L4)
    12511330            #include "stm32l4xx.h"
     
    12581337        #elif defined(WOLFSSL_STM32F7)
    12591338            #include "stm32f7xx.h"
     1339        #elif defined(WOLFSSL_STM32H7)
     1340            #include "stm32h7xx.h"
    12601341        #elif defined(WOLFSSL_STM32F1)
    12611342            #include "stm32f1xx.h"
    12621343        #endif
    12631344    #endif /* WOLFSSL_STM32_CUBEMX */
    1264 #endif /* WOLFSSL_STM32F2 || WOLFSSL_STM32F4 || WOLFSSL_STM32L4 || WOLFSSL_STM32F7 */
     1345#endif /* WOLFSSL_STM32F2 || WOLFSSL_STM32F4 || WOLFSSL_STM32L4 ||
     1346          WOLFSSL_STM32L5 || WOLFSSL_STM32F7 || WOLFSSL_STMWB || WOLFSSL_STM32H7 */
    12651347#ifdef WOLFSSL_DEOS
    12661348    #include <deos.h>
     
    13161398    #include <stdlib.h>
    13171399    #include <os.h>
    1318     #include <net_cfg.h>
    1319     #include <net_sock.h>
    1320     #include <net_err.h>
     1400    #if defined(RTOS_MODULE_NET_AVAIL) || (APP_CFG_TCPIP_EN == DEF_ENABLED)
     1401        #include <net_cfg.h>
     1402        #include <net_sock.h>
     1403        #if (OS_VERSION < 50000)
     1404            #include <net_err.h>
     1405        #endif
     1406    #endif
    13211407    #include <lib_mem.h>
    13221408    #include <lib_math.h>
     1409    #include <lib_str.h>
     1410    #include  <stdio.h>
     1411    #include <string.h>
    13231412
    13241413    #define USE_FAST_MATH
     
    13441433    #define NO_WRITEV
    13451434
    1346     #ifndef CUSTOM_RAND_GENERATE
     1435    #if ! defined(WOLFSSL_SILABS_SE_ACCEL) && !defined(CUSTOM_RAND_GENERATE)
    13471436        #define CUSTOM_RAND_TYPE     RAND_NBR
    13481437        #define CUSTOM_RAND_GENERATE Math_Rand
     
    13741463    #define XMEMCPY(pdest, psrc, size) ((void)Mem_Copy((void *)(pdest), \
    13751464                     (void *)(psrc), (CPU_SIZE_T)(size)))
    1376     #define XMEMCMP(pmem_1, pmem_2, size) \
    1377                    (((CPU_BOOLEAN)Mem_Cmp((void *)(pmem_1), \
    1378                                           (void *)(pmem_2), \
     1465
     1466    #if (OS_VERSION < 50000)
     1467        #define XMEMCMP(pmem_1, pmem_2, size)                   \
     1468                   (((CPU_BOOLEAN)Mem_Cmp((void *)(pmem_1),     \
     1469                                          (void *)(pmem_2),     \
    13791470                     (CPU_SIZE_T)(size))) ? DEF_NO : DEF_YES)
     1471    #else
     1472      /* Work around for Micrium OS version 5.8 change in behavior
     1473       * that returns DEF_NO for 0 size compare
     1474       */
     1475        #define XMEMCMP(pmem_1, pmem_2, size)                           \
     1476            (( (size < 1 ) ||                                           \
     1477               ((CPU_BOOLEAN)Mem_Cmp((void *)(pmem_1),                  \
     1478                                     (void *)(pmem_2),                  \
     1479                                     (CPU_SIZE_T)(size)) == DEF_YES))   \
     1480             ? 0 : 1)
     1481        #define XSNPRINTF snprintf
     1482    #endif
     1483
    13801484    #define XMEMMOVE XMEMCPY
    13811485
     
    13911495    #endif
    13921496#endif /* MICRIUM */
     1497
     1498#if defined(sun) || defined(__sun)
     1499# if defined(__SVR4) || defined(__svr4__)
     1500    /* Solaris */
     1501    #ifndef WOLFSSL_SOLARIS
     1502        #define WOLFSSL_SOLARIS
     1503    #endif
     1504# else
     1505    /* SunOS */
     1506# endif
     1507#endif
     1508
     1509#ifdef WOLFSSL_SOLARIS
     1510    /* Avoid naming clash with fp_zero from math.h > ieefp.h */
     1511    #define WOLFSSL_DH_CONST
     1512#endif
    13931513
    13941514#ifdef WOLFSSL_MCF5441X
     
    15341654    #define HAVE_AES_ECB
    15351655#endif
     1656#endif
     1657
     1658/* If DCP is used without SINGLE_THREADED, enforce WOLFSSL_CRYPT_HW_MUTEX */
     1659#if defined(WOLFSSL_IMXRT_DCP) && !defined(SINGLE_THREADED)
     1660    #undef WOLFSSL_CRYPT_HW_MUTEX
     1661    #define WOLFSSL_CRYPT_HW_MUTEX 1
    15361662#endif
    15371663
     
    16531779#endif
    16541780
     1781/* The minimum allowed ECC key size */
     1782/* Note: 224-bits is equivelant to 2048-bit RSA */
     1783#ifndef ECC_MIN_KEY_SZ
     1784    #ifdef WOLFSSL_MIN_ECC_BITS
     1785        #define ECC_MIN_KEY_SZ WOLFSSL_MIN_ECC_BITS
     1786    #else
     1787        #if defined(HAVE_FIPS) && defined(HAVE_FIPS_VERSION) && HAVE_FIPS_VERSION >= 2
     1788            /* FIPSv2 and ready (for now) includes 192-bit support */
     1789            #define ECC_MIN_KEY_SZ 192
     1790        #else
     1791            #define ECC_MIN_KEY_SZ 224
     1792        #endif
     1793    #endif
     1794#endif
     1795
    16551796/* ECC Configs */
    16561797#ifdef HAVE_ECC
     
    18361977    #endif
    18371978#endif
     1979#if defined(HAVE_FFDHE) && defined(SP_INT_BITS)
     1980    #if MIN_FFDHE_FP_MAX_BITS > SP_INT_BITS * 2
     1981        #error "FFDHE parameters are too large for SP_INT_BIT as set"
     1982    #endif
     1983#endif
    18381984
    18391985/* if desktop type system and fastmath increase default max bits */
    1840 #ifdef WOLFSSL_X86_64_BUILD
     1986#if defined(WOLFSSL_X86_64_BUILD) || defined(WOLFSSL_AARCH64_BUILD)
    18411987    #if defined(USE_FAST_MATH) && !defined(FP_MAX_BITS)
    18421988        #if MIN_FFDHE_FP_MAX_BITS <= 8192
     
    18441990        #else
    18451991            #define FP_MAX_BITS MIN_FFDHE_FP_MAX_BITS
     1992        #endif
     1993    #endif
     1994    #if defined(WOLFSSL_SP_MATH_ALL) && !defined(SP_INT_BITS)
     1995        #if MIN_FFDHE_FP_MAX_BITS <= 8192
     1996            #define SP_INT_BITS 4096
     1997        #else
     1998            #define PS_INT_BITS MIN_FFDHE_FP_MAX_BITS / 2
    18461999        #endif
    18472000    #endif
     
    20002153
    20012154
     2155#ifdef WOLFSSL_LINUXKM
     2156    #ifndef NO_DEV_RANDOM
     2157        #define NO_DEV_RANDOM
     2158    #endif
     2159    #ifndef NO_WRITEV
     2160        #define NO_WRITEV
     2161    #endif
     2162    #ifndef NO_FILESYSTEM
     2163        #define NO_FILESYSTEM
     2164    #endif
     2165    #ifndef NO_STDIO_FILESYSTEM
     2166        #define NO_STDIO_FILESYSTEM
     2167    #endif
     2168    #ifndef WOLFSSL_NO_SOCK
     2169        #define WOLFSSL_NO_SOCK
     2170    #endif
     2171    #ifndef WOLFSSL_DH_CONST
     2172        #define WOLFSSL_DH_CONST
     2173    #endif
     2174    #ifndef WOLFSSL_USER_IO
     2175        #define WOLFSSL_USER_IO
     2176    #endif
     2177    #ifndef USE_WOLF_STRTOK
     2178        #define USE_WOLF_STRTOK
     2179    #endif
     2180    #ifndef WOLFSSL_SP_DIV_WORD_HALF
     2181        #define WOLFSSL_SP_DIV_WORD_HALF
     2182    #endif
     2183    #ifndef WOLFSSL_OLD_PRIME_CHECK
     2184        #define WOLFSSL_OLD_PRIME_CHECK
     2185    #endif
     2186    #ifndef WOLFSSL_TEST_SUBROUTINE
     2187        #define WOLFSSL_TEST_SUBROUTINE static
     2188    #endif
     2189    #undef HAVE_STRINGS_H
     2190    #undef HAVE_ERRNO_H
     2191    #undef HAVE_THREAD_LS
     2192    #undef WOLFSSL_HAVE_MIN
     2193    #undef WOLFSSL_HAVE_MAX
     2194    #define SIZEOF_LONG         8
     2195    #define SIZEOF_LONG_LONG    8
     2196    #define CHAR_BIT            8
     2197    #ifndef WOLFSSL_SP_DIV_64
     2198        #define WOLFSSL_SP_DIV_64
     2199    #endif
     2200    #ifndef WOLFSSL_SP_DIV_WORD_HALF
     2201        #define WOLFSSL_SP_DIV_WORD_HALF
     2202    #endif
     2203#endif
     2204
     2205
    20022206/* Place any other flags or defines here */
    20032207
     
    20072211#endif /* WOLFSSL_MYSQL_COMPATIBLE */
    20082212
    2009 #if defined(OPENSSL_ALL) || defined(WOLFSSL_NGINX) || defined(WOLFSSL_HAPROXY)
     2213#if defined(OPENSSL_ALL) || defined(WOLFSSL_NGINX) || defined(WOLFSSL_HAPROXY) \
     2214 || defined(HAVE_LIGHTY)
    20102215    #define SSL_OP_NO_COMPRESSION    SSL_OP_NO_COMPRESSION
    20112216    #define OPENSSL_NO_ENGINE
     
    20282233#endif
    20292234
    2030 #if defined(WOLFSSL_NGINX) || defined(WOLFSSL_QT) || defined(OPENSSL_ALL)
     2235#ifdef HAVE_SNI
    20312236    #define SSL_CTRL_SET_TLSEXT_HOSTNAME 55
    20322237#endif
     
    21012306
    21022307/* Parts of the openssl compatibility layer require peer certs */
    2103 #if defined(OPENSSL_ALL) || defined(WOLFSSL_NGINX) || defined(WOLFSSL_HAPROXY)
     2308#if defined(OPENSSL_ALL) || defined(WOLFSSL_NGINX) || defined(WOLFSSL_HAPROXY) \
     2309 || defined(HAVE_LIGHTY)
    21042310    #undef  KEEP_PEER_CERT
    21052311    #define KEEP_PEER_CERT
    21062312#endif
    21072313
    2108 /* RAW hash function APIs are not implemented with ARMv8 hardware acceleration*/
    2109 #ifdef WOLFSSL_ARMASM
     2314/* RAW hash function APIs are not implemented */
     2315#if defined(WOLFSSL_ARMASM) || defined(WOLFSSL_AFALG_HASH)
    21102316    #undef  WOLFSSL_NO_HASH_RAW
    21112317    #define WOLFSSL_NO_HASH_RAW
     2318#endif
     2319
     2320/* XChacha not implemented with ARM assembly ChaCha */
     2321#if defined(WOLFSSL_ARMASM)
     2322    #undef HAVE_XCHACHA
    21122323#endif
    21132324
     
    21502361#if defined(WOLFCRYPT_ONLY) && defined(NO_AES) && !defined(WOLFSSL_SHA384) && \
    21512362    !defined(WOLFSSL_SHA512) && defined(WC_NO_RNG) && \
    2152                     defined(WOLFSSL_SP_MATH) && defined(WOLFSSL_RSA_PUBLIC_ONLY)
     2363    (defined(WOLFSSL_SP_MATH) || defined(WOLFSSL_SP_MATH_ALL)) && \
     2364    defined(WOLFSSL_RSA_PUBLIC_ONLY)
    21532365    #undef  WOLFSSL_NO_FORCE_ZERO
    21542366    #define WOLFSSL_NO_FORCE_ZERO
     
    21742386#ifdef NO_WOLFSSL_SMALL_STACK
    21752387    #undef WOLFSSL_SMALL_STACK
     2388#endif
     2389
     2390#ifdef WOLFSSL_SMALL_STACK_STATIC
     2391    #undef WOLFSSL_SMALL_STACK_STATIC
     2392    #define WOLFSSL_SMALL_STACK_STATIC static
     2393#else
     2394    #define WOLFSSL_SMALL_STACK_STATIC
    21762395#endif
    21772396
     
    21882407#endif
    21892408
     2409/* FIPS v1 does not support TLS v1.3 (requires RSA PSS and HKDF) */
     2410#if defined(HAVE_FIPS) && !defined(HAVE_FIPS_VERSION)
     2411    #undef WC_RSA_PSS
     2412    #undef WOLFSSL_TLS13
     2413#endif
     2414
     2415/* For FIPSv2 make sure the ECDSA encoding allows extra bytes
     2416 * but make sure users consider enabling it */
     2417#if !defined(NO_STRICT_ECDSA_LEN) && defined(HAVE_FIPS) && \
     2418        defined(HAVE_FIPS_VERSION) && (HAVE_FIPS_VERSION >= 2)
     2419    /* ECDSA length checks off by default for CAVP testing
     2420     * consider enabling strict checks in production */
     2421    #define NO_STRICT_ECDSA_LEN
     2422#endif
     2423
    21902424
    21912425#ifdef __cplusplus
  • azure_iot_hub_f767zi/trunk/wolfssl-4.7.0/wolfssl/wolfcrypt/sha.h

    r457 r464  
    7373    #include <wolfssl/wolfcrypt/port/Espressif/esp32-crypt.h>
    7474#endif
     75#ifdef WOLFSSL_IMXRT_DCP
     76    #include <wolfssl/wolfcrypt/port/nxp/dcp_port.h>
     77#endif
     78#if defined(WOLFSSL_SILABS_SE_ACCEL)
     79    #include <wolfssl/wolfcrypt/port/silabs/silabs_hash.h>
     80#endif
    7581
    7682#if !defined(NO_OLD_SHA_NAMES)
     
    102108   !defined(NO_WOLFSSL_RENESAS_TSIP_CRYPT_HASH)
    103109    #include "wolfssl/wolfcrypt/port/Renesas/renesas-tsip-crypt.h"
     110#elif defined(WOLFSSL_PSOC6_CRYPTO)
     111    #include "wolfssl/wolfcrypt/port/cypress/psoc6_crypto.h"
    104112#else
    105113
     
    110118#elif defined(STM32_HASH)
    111119        STM32_HASH_Context stmCtx;
     120#elif defined(WOLFSSL_SILABS_SE_ACCEL)
     121        wc_silabs_sha_t silabsCtx;
    112122#else
    113123        word32  buffLen;   /* in bytes          */
  • azure_iot_hub_f767zi/trunk/wolfssl-4.7.0/wolfssl/wolfcrypt/sha256.h

    r457 r464  
    8888#if defined(WOLFSSL_CRYPTOCELL)
    8989    #include <wolfssl/wolfcrypt/port/arm/cryptoCell.h>
     90#endif
     91#if defined(WOLFSSL_SILABS_SE_ACCEL)
     92    #include <wolfssl/wolfcrypt/port/silabs/silabs_hash.h>
    9093#endif
    9194
     
    127130   !defined(NO_WOLFSSL_RENESAS_TSIP_CRYPT_HASH)
    128131    #include "wolfssl/wolfcrypt/port/Renesas/renesas-tsip-crypt.h"
     132#elif defined(WOLFSSL_PSOC6_CRYPTO)
     133    #include "wolfssl/wolfcrypt/port/cypress/psoc6_crypto.h"
     134#elif defined(WOLFSSL_IMXRT_DCP)
     135    #include <wolfssl/wolfcrypt/port/nxp/dcp_port.h>
    129136#else
    130137
     
    135142#elif defined(STM32_HASH_SHA2)
    136143    STM32_HASH_Context stmCtx;
     144#elif defined(WOLFSSL_SILABS_SE_ACCEL)
     145  wc_silabs_sha_t silabsCtx;
    137146#else
    138147    /* alignment on digest and buffer speeds up ARMv8 crypto operations */
     
    143152    word32  hiLen;     /* length in bytes   */
    144153    void*   heap;
     154#endif
    145155#ifdef WOLFSSL_PIC32MZ_HASH
    146156    hashUpdCache cache; /* cache for updates */
     
    151161#ifdef WOLFSSL_SMALL_STACK_CACHE
    152162    word32* W;
    153 #endif
     163#endif /* !FREESCALE_LTC_SHA && !STM32_HASH_SHA2 */
    154164#ifdef WOLFSSL_DEVCRYPTO_HASH
    155165    WC_CRYPTODEV ctx;
     
    168178    int    devId;
    169179    void*  devCtx; /* generic crypto callback context */
    170 #endif
    171180#endif
    172181#if defined(WOLFSSL_HASH_FLAGS) || defined(WOLF_CRYPTO_CB)
  • azure_iot_hub_f767zi/trunk/wolfssl-4.7.0/wolfssl/wolfcrypt/sha512.h

    r457 r464  
    3131
    3232#if defined(WOLFSSL_SHA512) || defined(WOLFSSL_SHA384)
     33
    3334
    3435#if defined(HAVE_FIPS) && \
     
    7677    #include <wolfssl/wolfcrypt/port/Espressif/esp32-crypt.h>
    7778#endif
     79#if defined(WOLFSSL_SILABS_SE_ACCEL)
     80    #include <wolfssl/wolfcrypt/port/silabs/silabs_hash.h>
     81#endif
     82
    7883#if defined(_MSC_VER)
    7984    #define SHA512_NOINLINE __declspec(noinline)
     
    112117#ifdef WOLFSSL_IMX6_CAAM
    113118    #include "wolfssl/wolfcrypt/port/caam/wolfcaam_sha.h"
     119#elif defined (WOLFSSL_PSOC6_CRYPTO)
     120    #include "wolfssl/wolfcrypt/port/cypress/psoc6_crypto.h"
    114121#else
    115122/* wc_Sha512 digest */
     
    134141    WC_ESP32SHA ctx;
    135142#endif
     143#if defined(WOLFSSL_SILABS_SE_ACCEL)
     144  wc_silabs_sha_t silabsCtx;
     145#endif
     146
    136147#if defined(WOLFSSL_HASH_FLAGS) || defined(WOLF_CRYPTO_CB)
    137148    word32 flags; /* enum wc_HashFlags in hash.h */
     
    153164
    154165#ifdef WOLFSSL_SHA512
     166
    155167
    156168WOLFSSL_API int wc_InitSha512(wc_Sha512*);
  • azure_iot_hub_f767zi/trunk/wolfssl-4.7.0/wolfssl/wolfcrypt/types.h

    r457 r464  
    2323    \file wolfssl/wolfcrypt/types.h
    2424*/
    25 
     25/*
     26DESCRIPTION
     27This library defines the primitive data types and abstraction macros to
     28decouple library dependencies with standard string, memory and so on.
     29
     30*/
    2631#ifndef WOLF_CRYPT_TYPES_H
    2732#define WOLF_CRYPT_TYPES_H
     
    6065        #ifndef byte
    6166            typedef unsigned char  byte;
     67            typedef   signed char  sword8;
     68            typedef unsigned char  word8;
    6269        #endif
    6370        #ifdef WC_16BIT_CPU
     71            typedef          int   sword16;
    6472            typedef unsigned int   word16;
     73            typedef          long  sword32;
    6574            typedef unsigned long  word32;
    6675        #else
     76            typedef          short sword16;
    6777            typedef unsigned short word16;
     78            typedef          int   sword32;
    6879            typedef unsigned int   word32;
    6980        #endif
     
    110121        #define WORD64_AVAILABLE
    111122        #define W64LIT(x) x##ui64
     123        typedef          __int64 sword64;
    112124        typedef unsigned __int64 word64;
    113125    #elif defined(__EMSCRIPTEN__)
    114126        #define WORD64_AVAILABLE
    115127        #define W64LIT(x) x##ull
     128        typedef          long long sword64;
    116129        typedef unsigned long long word64;
    117130    #elif defined(SIZEOF_LONG) && SIZEOF_LONG == 8
    118131        #define WORD64_AVAILABLE
    119132        #define W64LIT(x) x##LL
     133        typedef          long sword64;
    120134        typedef unsigned long word64;
    121135    #elif defined(SIZEOF_LONG_LONG) && SIZEOF_LONG_LONG == 8
    122136        #define WORD64_AVAILABLE
    123137        #define W64LIT(x) x##LL
     138        typedef          long long sword64;
    124139        typedef unsigned long long word64;
    125140    #elif defined(__SIZEOF_LONG_LONG__) && __SIZEOF_LONG_LONG__ == 8
    126141        #define WORD64_AVAILABLE
    127142        #define W64LIT(x) x##LL
     143        typedef          long long sword64;
    128144        typedef unsigned long long word64;
    129145    #endif
     
    150166            #define WOLFCRYPT_SLOW_WORD64
    151167        #endif
     168        #define WC_32BIT_CPU
    152169    #endif
    153170
     
    163180        #define MP_16BIT  /* for mp_int, mp_word needs to be twice as big as
    164181                             mp_digit, no 64 bit type so make mp_digit 16 bit */
     182        #define WC_32BIT_CPU
    165183#endif
    166184
     
    198216        #endif
    199217    #else
    200         #define WC_INLINE
     218        #ifdef __GNUC__
     219            #define WC_INLINE __attribute__((unused))
     220        #else
     221            #define WC_INLINE
     222        #endif
    201223    #endif
    202224    #endif
     
    245267        #if ((__GNUC__ > 7) || ((__GNUC__ == 7) && (__GNUC_MINOR__ >= 1)))
    246268            #undef  FALL_THROUGH
    247             #define FALL_THROUGH __attribute__ ((fallthrough));
     269            #if defined(WOLFSSL_LINUXKM) && defined(fallthrough)
     270                #define FALL_THROUGH fallthrough
     271            #else
     272                #define FALL_THROUGH __attribute__ ((fallthrough));
     273            #endif
    248274        #endif
    249275    #endif
     
    343369        /* just use plain C stdlib stuff if desired */
    344370        #include <stdlib.h>
    345         #define XMALLOC(s, h, t)     malloc((s))
     371        #define XMALLOC(s, h, t)     malloc((size_t)(s))
    346372        #define XFREE(p, h, t)       {void* xp = (p); if((xp)) free((xp));}
    347         #define XREALLOC(p, n, h, t) realloc((p), (n))
    348         #endif
     373        #define XREALLOC(p, n, h, t) realloc((p), (size_t)(n))
     374        #endif
     375
     376    #elif defined(WOLFSSL_LINUXKM)
     377        /* the requisite linux/slab.h is included in wc_port.h, with incompatible warnings masked out. */
     378        #define XMALLOC(s, h, t)     ({(void)(h); (void)(t); kmalloc(s, GFP_KERNEL);})
     379        #define XFREE(p, h, t)       ({void* _xp; (void)(h); _xp = (p); if(_xp) kfree(_xp);})
     380        #define XREALLOC(p, n, h, t) ({(void)(h); (void)(t); krealloc((p), (n), GFP_KERNEL);})
     381
    349382    #elif !defined(MICRIUM_MALLOC) && !defined(EBSNET) \
    350383            && !defined(WOLFSSL_SAFERTOS) && !defined(FREESCALE_MQX) \
     
    376409    #endif
    377410
    378     /* declare/free variable handling for async */
    379     #ifdef WOLFSSL_ASYNC_CRYPT
     411    /* declare/free variable handling for async and smallstack */
     412    #if defined(WOLFSSL_ASYNC_CRYPT) || defined(WOLFSSL_SMALL_STACK)
     413        #define DECLARE_VAR_IS_HEAP_ALLOC
    380414        #define DECLARE_VAR(VAR_NAME, VAR_TYPE, VAR_SIZE, HEAP) \
    381             VAR_TYPE* VAR_NAME = (VAR_TYPE*)XMALLOC(sizeof(VAR_TYPE) * VAR_SIZE, (HEAP), DYNAMIC_TYPE_WOLF_BIGINT);
    382         #define DECLARE_VAR_INIT(VAR_NAME, VAR_TYPE, VAR_SIZE, INIT_VALUE, HEAP) \
    383             VAR_TYPE* VAR_NAME = ({ \
    384                 VAR_TYPE* ptr = (VAR_TYPE*)XMALLOC(sizeof(VAR_TYPE) * VAR_SIZE, (HEAP), DYNAMIC_TYPE_WOLF_BIGINT); \
    385                 if (ptr && INIT_VALUE) { \
    386                     XMEMCPY(ptr, INIT_VALUE, sizeof(VAR_TYPE) * VAR_SIZE); \
    387                 } \
    388                 ptr; \
    389             })
     415            VAR_TYPE* VAR_NAME = (VAR_TYPE*)XMALLOC(sizeof(VAR_TYPE) * VAR_SIZE, (HEAP), DYNAMIC_TYPE_WOLF_BIGINT)
    390416        #define DECLARE_ARRAY(VAR_NAME, VAR_TYPE, VAR_ITEMS, VAR_SIZE, HEAP) \
    391417            VAR_TYPE* VAR_NAME[VAR_ITEMS]; \
    392             int idx##VAR_NAME; \
     418            int idx##VAR_NAME, inner_idx_##VAR_NAME; \
    393419            for (idx##VAR_NAME=0; idx##VAR_NAME<VAR_ITEMS; idx##VAR_NAME++) { \
    394420                VAR_NAME[idx##VAR_NAME] = (VAR_TYPE*)XMALLOC(VAR_SIZE, (HEAP), DYNAMIC_TYPE_WOLF_BIGINT); \
     421                if (VAR_NAME[idx##VAR_NAME] == NULL) { \
     422                    for (inner_idx_##VAR_NAME = 0; inner_idx_##VAR_NAME < idx##VAR_NAME; inner_idx_##VAR_NAME++) { \
     423                        XFREE(VAR_NAME[inner_idx_##VAR_NAME], HEAP, DYNAMIC_TYPE_WOLF_BIGINT); \
     424                        VAR_NAME[inner_idx_##VAR_NAME] = NULL; \
     425                    } \
     426                    for (inner_idx_##VAR_NAME = idx##VAR_NAME + 1; inner_idx_##VAR_NAME < VAR_ITEMS; inner_idx_##VAR_NAME++) { \
     427                        VAR_NAME[inner_idx_##VAR_NAME] = NULL; \
     428                    } \
     429                    break; \
     430                } \
    395431            }
    396432        #define FREE_VAR(VAR_NAME, HEAP) \
     
    407443            FREE_ARRAY(VAR_NAME, VAR_ITEMS, HEAP)
    408444    #else
     445        #undef DECLARE_VAR_IS_HEAP_ALLOC
    409446        #define DECLARE_VAR(VAR_NAME, VAR_TYPE, VAR_SIZE, HEAP) \
    410447            VAR_TYPE VAR_NAME[VAR_SIZE]
    411         #define DECLARE_VAR_INIT(VAR_NAME, VAR_TYPE, VAR_SIZE, INIT_VALUE, HEAP) \
    412             VAR_TYPE* VAR_NAME = (VAR_TYPE*)INIT_VALUE
    413448        #define DECLARE_ARRAY(VAR_NAME, VAR_TYPE, VAR_ITEMS, VAR_SIZE, HEAP) \
    414449            VAR_TYPE VAR_NAME[VAR_ITEMS][VAR_SIZE]
     
    418453        #define DECLARE_ARRAY_DYNAMIC_DEC(VAR_NAME, VAR_TYPE, VAR_ITEMS, VAR_SIZE, HEAP) \
    419454            VAR_TYPE* VAR_NAME[VAR_ITEMS]; \
    420             int idx##VAR_NAME;
     455            int idx##VAR_NAME, inner_idx_##VAR_NAME;
    421456        #define DECLARE_ARRAY_DYNAMIC_EXE(VAR_NAME, VAR_TYPE, VAR_ITEMS, VAR_SIZE, HEAP) \
    422457            for (idx##VAR_NAME=0; idx##VAR_NAME<VAR_ITEMS; idx##VAR_NAME++) { \
    423458                VAR_NAME[idx##VAR_NAME] = (VAR_TYPE*)XMALLOC(VAR_SIZE, (HEAP), DYNAMIC_TYPE_TMP_BUFFER); \
     459                if (VAR_NAME[idx##VAR_NAME] == NULL) { \
     460                    for (inner_idx_##VAR_NAME = 0; inner_idx_##VAR_NAME < idx##VAR_NAME; inner_idx_##VAR_NAME++) { \
     461                        XFREE(VAR_NAME[inner_idx_##VAR_NAME], HEAP, DYNAMIC_TYPE_TMP_BUFFER); \
     462                        VAR_NAME[inner_idx_##VAR_NAME] = NULL; \
     463                    } \
     464                    for (inner_idx_##VAR_NAME = idx##VAR_NAME + 1; inner_idx_##VAR_NAME < VAR_ITEMS; inner_idx_##VAR_NAME++) { \
     465                        VAR_NAME[inner_idx_##VAR_NAME] = NULL; \
     466                    } \
     467                    break; \
     468                } \
    424469            }
    425470        #define FREE_ARRAY_DYNAMIC(VAR_NAME, VAR_ITEMS, HEAP) \
     
    438483    #endif
    439484
    440     #ifndef STRING_USER
    441         #include <string.h>
    442         #define XMEMCPY(d,s,l)    memcpy((d),(s),(l))
    443         #define XMEMSET(b,c,l)    memset((b),(c),(l))
    444         #define XMEMCMP(s1,s2,n)  memcmp((s1),(s2),(n))
    445         #define XMEMMOVE(d,s,l)   memmove((d),(s),(l))
     485        #ifndef STRING_USER
     486        #if defined(WOLFSSL_LINUXKM)
     487            #include <linux/string.h>
     488        #else
     489            #include <string.h>
     490        #endif
     491
     492            #define XMEMCPY(d,s,l)    memcpy((d),(s),(l))
     493            #define XMEMSET(b,c,l)    memset((b),(c),(l))
     494            #define XMEMCMP(s1,s2,n)  memcmp((s1),(s2),(n))
     495            #define XMEMMOVE(d,s,l)   memmove((d),(s),(l))
    446496
    447497        #define XSTRLEN(s1)       strlen((s1))
    448498        #define XSTRNCPY(s1,s2,n) strncpy((s1),(s2),(n))
    449         /* strstr, strncmp, and strncat only used by wolfSSL proper,
     499        /* strstr, strncmp, strcmp, and strncat only used by wolfSSL proper,
    450500         * not required for wolfCrypt only */
    451501        #define XSTRSTR(s1,s2)    strstr((s1),(s2))
    452502        #define XSTRNSTR(s1,s2,n) mystrnstr((s1),(s2),(n))
    453503        #define XSTRNCMP(s1,s2,n) strncmp((s1),(s2),(n))
     504        #define XSTRCMP(s1,s2)    strcmp((s1),(s2))
    454505        #define XSTRNCAT(s1,s2,n) strncat((s1),(s2),(n))
    455506
     
    474525            #if defined(WOLFSSL_DEOS)
    475526                #define XSTRNCASECMP(s1,s2,n) strnicmp((s1),(s2),(n))
     527            #elif defined(WOLFSSL_CMSIS_RTOSv2)
     528                #define XSTRNCASECMP(s1,s2,n) strncmp((s1),(s2),(n))
    476529            #else
    477530                #define XSTRNCASECMP(s1,s2,n) strncasecmp((s1),(s2),(n))
     
    490543                #include <stdio.h>
    491544            #endif
    492             #define XSNPRINTF snprintf
     545            #if defined(WOLFSSL_ESPIDF) && \
     546                (!defined(NO_ASN_TIME) && defined(HAVE_PKCS7))
     547                    #include<stdarg.h>
     548                    /* later gcc than 7.1 introduces -Wformat-truncation    */
     549                    /* In cases when truncation is expected the caller needs*/
     550                    /* to check the return value from the function so that  */
     551                    /* compiler doesn't complain.                           */
     552                    /* xtensa-esp32-elf v8.2.0 warns trancation at          */
     553                    /* GetAsnTimeString()                                   */
     554                    static WC_INLINE
     555                    int _xsnprintf_(char *s, size_t n, const char *format, ...)
     556                    {
     557                        va_list ap;
     558                        int ret;
     559                       
     560                        if ((int)n <= 0) return -1;
     561                       
     562                        va_start(ap, format);
     563                       
     564                        ret = vsnprintf(s, n, format, ap);
     565                        if (ret < 0)
     566                            ret = -1;
     567                           
     568                        va_end(ap);
     569                       
     570                        return ret;
     571                    }
     572                #define XSNPRINTF _xsnprintf_
     573            #else
     574                #define XSNPRINTF snprintf
     575            #endif
    493576            #endif
    494577        #else
     
    566649    #endif /* OPENSSL_EXTRA */
    567650
    568     #ifndef CTYPE_USER
    569         #include <ctype.h>
    570         #if defined(HAVE_ECC) || defined(HAVE_OCSP) || \
    571             defined(WOLFSSL_KEY_GEN) || !defined(NO_DSA)
     651        #ifndef CTYPE_USER
     652            #ifndef WOLFSSL_LINUXKM
     653                #include <ctype.h>
     654            #endif
     655            #if defined(HAVE_ECC) || defined(HAVE_OCSP) || \
     656            defined(WOLFSSL_KEY_GEN) || !defined(NO_DSA) || \
     657            defined(OPENSSL_EXTRA)
    572658            #define XTOUPPER(c)     toupper((c))
    573             #define XISALPHA(c)     isalpha((c))
     659        #endif
     660        #ifdef OPENSSL_ALL
     661        #define XISALNUM(c)     isalnum((c))
    574662        #endif
    575663        /* needed by wolfSSL_check_domain_name() */
     
    672760        DYNAMIC_TYPE_CURVE448     = 91,
    673761        DYNAMIC_TYPE_ED448        = 92,
     762        DYNAMIC_TYPE_AES          = 93,
     763        DYNAMIC_TYPE_CMAC         = 94,
    674764        DYNAMIC_TYPE_SNIFFER_SERVER     = 1000,
    675765        DYNAMIC_TYPE_SNIFFER_SESSION    = 1001,
     
    706796    /* hash types */
    707797    enum wc_HashType {
    708     #if defined(HAVE_SELFTEST) || defined(HAVE_FIPS)
     798    #if defined(HAVE_SELFTEST) || defined(HAVE_FIPS) && \
     799        (defined(HAVE_FIPS_VERSION) && (HAVE_FIPS_VERSION <= 2))
    709800        /* In selftest build, WC_* types are not mapped to WC_HASH_TYPE types.
    710801         * Values here are based on old selftest hmac.h enum, with additions.
     
    780871        WC_PK_TYPE_RSA_KEYGEN = 8,
    781872        WC_PK_TYPE_EC_KEYGEN = 9,
    782 
    783         WC_PK_TYPE_MAX = WC_PK_TYPE_EC_KEYGEN
     873        WC_PK_TYPE_RSA_CHECK_PRIV_KEY = 10,
     874        WC_PK_TYPE_EC_CHECK_PRIV_KEY = 11,
     875
     876        WC_PK_TYPE_MAX = WC_PK_TYPE_EC_CHECK_PRIV_KEY
    784877    };
    785878
  • azure_iot_hub_f767zi/trunk/wolfssl-4.7.0/wolfssl/wolfcrypt/wc_encrypt.h

    r457 r464  
    2929
    3030#include <wolfssl/wolfcrypt/types.h>
    31 #include <wolfssl/wolfcrypt/aes.h>
    32 #include <wolfssl/wolfcrypt/chacha.h>
    33 #include <wolfssl/wolfcrypt/des3.h>
    34 #include <wolfssl/wolfcrypt/arc4.h>
     31#ifndef NO_AES
     32    #include <wolfssl/wolfcrypt/aes.h>
     33#endif
     34#ifdef HAVE_CHACHA
     35    #include <wolfssl/wolfcrypt/chacha.h>
     36#endif
     37#ifndef NO_DES3
     38    #include <wolfssl/wolfcrypt/des3.h>
     39#endif
     40#ifndef NO_RC4
     41    #include <wolfssl/wolfcrypt/arc4.h>
     42#endif
    3543
    3644#ifdef __cplusplus
     
    3846#endif
    3947
    40 /* determine max cipher key size */
     48/* determine max cipher key size - cannot use enum values here, must be define,
     49 * since WC_MAX_SYM_KEY_SIZE is used in if macro logic. */
    4150#ifndef NO_AES
    4251    #define WC_MAX_SYM_KEY_SIZE     (AES_MAX_KEY_SIZE/8)
    4352#elif defined(HAVE_CHACHA)
    44     #define WC_MAX_SYM_KEY_SIZE     CHACHA_MAX_KEY_SZ
     53    #define WC_MAX_SYM_KEY_SIZE     32 /* CHACHA_MAX_KEY_SZ */
    4554#elif !defined(NO_DES3)
    46     #define WC_MAX_SYM_KEY_SIZE     DES3_KEY_SIZE
     55    #define WC_MAX_SYM_KEY_SIZE     24 /* DES3_KEY_SIZE */
    4756#elif !defined(NO_RC4)
    48     #define WC_MAX_SYM_KEY_SIZE     RC4_KEY_SIZE
     57    #define WC_MAX_SYM_KEY_SIZE     16 /* RC4_KEY_SIZE */
    4958#else
    5059    #define WC_MAX_SYM_KEY_SIZE     32
     60#endif
     61
     62
     63#if (defined(HAVE_FIPS) && defined(HAVE_FIPS_VERSION) && \
     64     (HAVE_FIPS_VERSION <= 2)) || (defined(HAVE_SELFTEST) && \
     65     (!defined(HAVE_SELFTEST_VERSION) || (HAVE_SELFTEST_VERSION < 2)))
     66    /* In FIPS cert 3389 and CAVP selftest v1 build, these enums are
     67     * not in aes.h. Define them here outside the fips boundary.
     68     */
     69    #ifndef GCM_NONCE_MID_SZ
     70        /* The usual default nonce size for AES-GCM. */
     71        #define GCM_NONCE_MID_SZ 12
     72    #endif
     73    #ifndef CCM_NONCE_MIN_SZ
     74        #define CCM_NONCE_MIN_SZ 7
     75    #endif
    5176#endif
    5277
  • azure_iot_hub_f767zi/trunk/wolfssl-4.7.0/wolfssl/wolfcrypt/wc_port.h

    r457 r464  
    5555#endif
    5656
     57#ifdef WOLFSSL_LINUXKM
     58    #ifdef HAVE_CONFIG_H
     59        #ifndef PACKAGE_NAME
     60            #error wc_port.h included before config.h
     61        #endif
     62        /* config.h is autogenerated without gating, and is subject to repeat
     63         * inclusions, so gate it out here to keep autodetection masking
     64         * intact:
     65         */
     66        #undef HAVE_CONFIG_H
     67    #endif
     68
     69    #ifdef BUILDING_WOLFSSL
     70
     71    _Pragma("GCC diagnostic push");
     72
     73    /* we include all the needed kernel headers with these masked out. else
     74     * there are profuse warnings.
     75     */
     76    _Pragma("GCC diagnostic ignored \"-Wunused-parameter\"");
     77    _Pragma("GCC diagnostic ignored \"-Wpointer-arith\"");
     78    _Pragma("GCC diagnostic ignored \"-Wshadow\"");
     79    _Pragma("GCC diagnostic ignored \"-Wnested-externs\"");
     80    _Pragma("GCC diagnostic ignored \"-Wredundant-decls\"");
     81    _Pragma("GCC diagnostic ignored \"-Wsign-compare\"");
     82    _Pragma("GCC diagnostic ignored \"-Wpointer-sign\"");
     83    _Pragma("GCC diagnostic ignored \"-Wbad-function-cast\"");
     84    _Pragma("GCC diagnostic ignored \"-Wdiscarded-qualifiers\"");
     85
     86    #include <linux/kconfig.h>
     87    #include <linux/kernel.h>
     88    #include <linux/version.h>
     89    #include <linux/ctype.h>
     90    #include <linux/init.h>
     91    #include <linux/module.h>
     92    #include <linux/mm.h>
     93    #ifndef SINGLE_THREADED
     94        #include <linux/kthread.h>
     95    #endif
     96    #include <linux/net.h>
     97    #include <linux/slab.h>
     98    #if defined(WOLFSSL_AESNI) || defined(USE_INTEL_SPEEDUP)
     99        #if LINUX_VERSION_CODE < KERNEL_VERSION(4, 0, 0)
     100            #include <asm/i387.h>
     101        #else
     102            #include <asm/simd.h>
     103        #endif
     104        #ifndef SAVE_VECTOR_REGISTERS
     105            #define SAVE_VECTOR_REGISTERS() kernel_fpu_begin()
     106        #endif
     107        #ifndef RESTORE_VECTOR_REGISTERS
     108            #define RESTORE_VECTOR_REGISTERS() kernel_fpu_end()
     109        #endif
     110    #elif defined(WOLFSSL_ARMASM)
     111        #include <asm/fpsimd.h>
     112        #ifndef SAVE_VECTOR_REGISTERS
     113            #define SAVE_VECTOR_REGISTERS() ({ preempt_disable(); fpsimd_preserve_current_state(); })
     114        #endif
     115        #ifndef RESTORE_VECTOR_REGISTERS
     116            #define RESTORE_VECTOR_REGISTERS() ({ fpsimd_restore_current_state(); preempt_enable(); })
     117        #endif
     118    #else
     119        #ifndef SAVE_VECTOR_REGISTERS
     120            #define SAVE_VECTOR_REGISTERS() ({})
     121        #endif
     122        #ifndef RESTORE_VECTOR_REGISTERS
     123            #define RESTORE_VECTOR_REGISTERS() ({})
     124        #endif
     125    #endif
     126
     127    _Pragma("GCC diagnostic pop");
     128
     129    /* Linux headers define these using C expressions, but we need
     130     * them to be evaluable by the preprocessor, for use in sp_int.h.
     131     */
     132    _Static_assert(sizeof(ULONG_MAX) == 8, "WOLFSSL_LINUXKM supported only on targets with 64 bit long words.");
     133    #undef UCHAR_MAX
     134    #define UCHAR_MAX 255
     135    #undef USHRT_MAX
     136    #define USHRT_MAX 65535
     137    #undef UINT_MAX
     138    #define UINT_MAX 4294967295U
     139    #undef ULONG_MAX
     140    #define ULONG_MAX 18446744073709551615UL
     141    #undef ULLONG_MAX
     142    #define ULLONG_MAX ULONG_MAX
     143    #undef INT_MAX
     144    #define INT_MAX 2147483647
     145    #undef LONG_MAX
     146    #define LONG_MAX 9223372036854775807L
     147    #undef LLONG_MAX
     148    #define LLONG_MAX LONG_MAX
     149
     150    /* remove this multifariously conflicting macro, picked up from
     151     * Linux arch/<arch>/include/asm/current.h.
     152     */
     153    #undef current
     154
     155    /* prevent gcc's mm_malloc.h from being included, since it unconditionally
     156     * includes stdlib.h, which is kernel-incompatible.
     157     */
     158    #define _MM_MALLOC_H_INCLUDED
     159
     160#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 12, 0)
     161    /* kvmalloc()/kvfree() and friends added in linux commit a7c3e901 */
     162    #define malloc(x) kvmalloc(x, GFP_KERNEL)
     163    #define free(x) kvfree(x)
     164    void *lkm_realloc(void *ptr, size_t newsize);
     165    #define realloc(x, y) lkm_realloc(x, y)
     166#else
     167    #define malloc(x) kmalloc(x, GFP_KERNEL)
     168    #define free(x) kfree(x)
     169    #define realloc(x,y) krealloc(x, y, GFP_KERNEL)
     170#endif
     171
     172    /* min() and max() in linux/kernel.h over-aggressively type-check, producing
     173     * myriad spurious -Werrors throughout the codebase.
     174     */
     175    #undef min
     176    #undef max
     177
     178    /* work around namespace conflict between wolfssl/internal.h (enum HandShakeType)
     179     * and linux/key.h (extern int()).
     180     */
     181    #define key_update wc_key_update
     182
     183    #define lkm_printf(format, args...) printk(KERN_INFO "wolfssl: %s(): " format, __func__, ## args)
     184    #define printf(...) lkm_printf(__VA_ARGS__)
     185
     186    #endif /* BUILDING_WOLFSSL */
     187
     188    /* needed to suppress inclusion of stdio.h in wolfssl/wolfcrypt/types.h */
     189    #define XSNPRINTF snprintf
     190
     191    /* the rigmarole around kstrtol() here is to accommodate its warn-unused-result attribute. */
     192    #define XATOI(s) ({                                 \
     193          long _xatoi_res = 0;                          \
     194          int _xatoi_ret = kstrtol(s, 10, &_xatoi_res); \
     195          if (_xatoi_ret != 0) {                        \
     196            _xatoi_res = 0;                             \
     197          }                                             \
     198          (int)_xatoi_res;                              \
     199        })
     200
     201#else /* ! WOLFSSL_LINUXKM */
     202
     203    #ifndef SAVE_VECTOR_REGISTERS
     204        #define SAVE_VECTOR_REGISTERS() do{}while(0)
     205    #endif
     206    #ifndef RESTORE_VECTOR_REGISTERS
     207        #define RESTORE_VECTOR_REGISTERS() do{}while(0)
     208    #endif
     209
     210#endif /* WOLFSSL_LINUXKM */
    57211
    58212/* THREADING/MUTEX SECTION */
     
    84238    /* do nothing, just don't pick Unix */
    85239#elif defined(FREERTOS) || defined(FREERTOS_TCP) || defined(WOLFSSL_SAFERTOS)
     240    /* do nothing */
     241#elif defined(RTTHREAD)
    86242    /* do nothing */
    87243#elif defined(EBSNET)
     
    157313#else
    158314    #ifndef SINGLE_THREADED
    159         #define WOLFSSL_PTHREADS
    160         #include <pthread.h>
     315        #ifndef WOLFSSL_USER_MUTEX
     316            #if defined(WOLFSSL_LINUXKM)
     317                #define WOLFSSL_KTHREADS
     318            #else
     319                #define WOLFSSL_PTHREADS
     320                #include <pthread.h>
     321            #endif
     322        #endif
    161323    #endif
    162324    #if (defined(OPENSSL_EXTRA) || defined(GOAHEAD_WS)) && \
    163325        !defined(NO_FILESYSTEM)
    164         #include <unistd.h>      /* for close of BIO */
     326        #ifdef FUSION_RTOS
     327            #include <fclunistd.h>
     328        #else
     329            #include <unistd.h>      /* for close of BIO */
     330        #endif
    165331    #endif
    166332#endif
     
    184350        #include "semphr.h"
    185351                typedef SemaphoreHandle_t  wolfSSL_Mutex;
     352    #elif defined (RTTHREAD)
     353        #include "rtthread.h"
     354        typedef rt_mutex_t wolfSSL_Mutex;
    186355    #elif defined(WOLFSSL_SAFERTOS)
    187356        typedef struct wolfSSL_Mutex {
     
    193362    #elif defined(WOLFSSL_PTHREADS)
    194363        typedef pthread_mutex_t wolfSSL_Mutex;
     364    #elif defined(WOLFSSL_KTHREADS)
     365        typedef struct mutex wolfSSL_Mutex;
    195366    #elif defined(THREADX)
    196367        typedef TX_MUTEX wolfSSL_Mutex;
     
    239410    #elif defined(WOLFSSL_TELIT_M2MB)
    240411        typedef M2MB_OS_MTX_HANDLE wolfSSL_Mutex;
     412    #elif defined(WOLFSSL_USER_MUTEX)
     413        /* typedef User_Mutex wolfSSL_Mutex; */
     414    #elif defined(WOLFSSL_LINUXKM)
     415        typedef struct mutex wolfSSL_Mutex;
    241416    #else
    242417        #error Need a mutex type in multithreaded mode
     
    246421/* Enable crypt HW mutex for Freescale MMCAU, PIC32MZ or STM32 */
    247422#if defined(FREESCALE_MMCAU) || defined(WOLFSSL_MICROCHIP_PIC32MZ) || \
    248     defined(STM32_CRYPTO)
     423    defined(STM32_CRYPTO) || defined(STM32_HASH) || defined(STM32_RNG)
    249424    #ifndef WOLFSSL_CRYPT_HW_MUTEX
    250425        #define WOLFSSL_CRYPT_HW_MUTEX  1
     
    289464WOLFSSL_API int wolfCrypt_Cleanup(void);
    290465
     466#ifdef WOLFSSL_TRACK_MEMORY_VERBOSE
     467    WOLFSSL_API long wolfCrypt_heap_peakAllocs_checkpoint(void);
     468    WOLFSSL_API long wolfCrypt_heap_peakBytes_checkpoint(void);
     469#endif
     470
    291471
    292472/* FILESYSTEM SECTION */
     
    312492    #define XBADFILE                 -1
    313493    #define XFGETS(b,s,f)            -2 /* Not ported yet */
     494
    314495#elif defined(LSR_FS)
    315496    #include <fs.h>
     
    324505    #define XSEEK_END               0
    325506    #define XBADFILE                NULL
    326     #define XFGETS(b,s,f)            -2 /* Not ported yet */
     507    #define XFGETS(b,s,f)           -2 /* Not ported yet */
     508
    327509#elif defined(FREESCALE_MQX) || defined(FREESCALE_KSDK_MQX)
    328510    #define XFILE                   MQX_FILE_PTR
     
    337519    #define XBADFILE                NULL
    338520    #define XFGETS                  fgets
     521
    339522#elif defined(WOLFSSL_DEOS)
    340523    #define NO_FILESYSTEM
    341524    #warning "TODO - DDC-I Certifiable Fast File System for Deos is not integrated"
    342     //#define XFILE      bfd *
     525    /* #define XFILE      bfd * */
    343526
    344527#elif defined(MICRIUM)
     
    355538    #define XBADFILE   NULL
    356539    #define XFGETS(b,s,f) -2 /* Not ported yet */
     540
    357541#elif defined(WOLFSSL_NUCLEUS_1_2)
    358542    #include "fal/inc/fal.h"
     
    367551    #define XSEEK_END  PSEEK_END
    368552    #define XBADFILE   NULL
     553
    369554#elif defined(WOLFSSL_APACHE_MYNEWT)
    370555    #include <fs/fs.h>
     
    381566    #define XBADFILE   NULL
    382567    #define XFGETS(b,s,f) -2 /* Not ported yet */
     568
    383569#elif defined(WOLFSSL_ZEPHYR)
    384570    #include <fs.h>
     
    415601    #define XFGETS(b,s,f)            -2 /* Not ported yet */
    416602
     603#elif defined (WOLFSSL_XILINX)
     604    #include "xsdps.h"
     605    #include "ff.h"
     606
     607    /* workaround to declare variable and provide type */
     608    #define XFILE                    FIL curFile; FIL*
     609    #define XFOPEN(NAME, MODE)       ({ FRESULT res; res = f_open(&curFile, (NAME), (FA_OPEN_ALWAYS | FA_WRITE | FA_READ)); (res == FR_OK) ? &curFile : NULL; })
     610    #define XFSEEK(F, O, W)          f_lseek((F), (O))
     611    #define XFTELL(F)                f_tell((F))
     612    #define XREWIND(F)               f_rewind((F))
     613    #define XFREAD(BUF, SZ, AMT, F)  ({ FRESULT res; UINT br; res = f_read((F), (BUF), (SZ)*(AMT), &br); (void)br; res; })
     614    #define XFWRITE(BUF, SZ, AMT, F) ({ FRESULT res; UINT written; res = f_write((F), (BUF), (SZ)*(AMT), &written); (void)written; res; })
     615    #define XFCLOSE(F)               f_close((F))
     616    #define XSEEK_END                0
     617    #define XBADFILE                 NULL
     618    #define XFGETS(b,s,f)            f_gets((b), (s), (f))
     619
     620#elif defined(FUSION_RTOS)
     621    #include <fclstdio.h>
     622    #include <fclunistd.h>
     623    #include <fcldirent.h>
     624    #include <sys/fclstat.h>
     625    #include <fclstring.h>
     626    #include <fcl_os.h>
     627    #define XFILE     FCL_FILE*
     628    #define XFOPEN    FCL_FOPEN
     629    #define XFSEEK    FCL_FSEEK
     630    #define XFTELL    FCL_FTELL
     631    #define XREWIND   FCL_REWIND
     632    #define XFREAD    FCL_FREAD
     633    #define XFWRITE   FCL_FWRITE
     634    #define XFCLOSE   FCL_FCLOSE
     635    #define XSEEK_END SEEK_END
     636    #define XBADFILE  NULL
     637    #define XFGETS    FCL_FGETS
     638    #define XFPUTS    FCL_FPUTS
     639    #define XFPRINTF  FCL_FPRINTF
     640    #define XVFPRINTF FCL_VFPRINTF
     641    #define XVSNPRINTF  FCL_VSNPRINTF
     642    #define XSNPRINTF  FCL_SNPRINTF
     643    #define XSPRINTF  FCL_SPRINTF
     644    #define DIR       FCL_DIR
     645    #define stat      FCL_STAT
     646    #define opendir   FCL_OPENDIR
     647    #define closedir  FCL_CLOSEDIR
     648    #define readdir   FCL_READDIR
     649    #define dirent    fclDirent
     650    #define strncasecmp FCL_STRNCASECMP
     651
     652    /* FUSION SPECIFIC ERROR CODE */
     653    #define FUSION_IO_SEND_E 63
     654
    417655#elif defined(WOLFSSL_USER_FILESYSTEM)
    418656    /* To be defined in user_settings.h */
     
    427665        #define XFOPEN     fopen
    428666    #endif
     667    #define XFDOPEN    fdopen
    429668    #define XFSEEK     fseek
    430669    #define XFTELL     ftell
     
    436675    #define XBADFILE   NULL
    437676    #define XFGETS     fgets
     677    #define XFPRINTF   fprintf
    438678
    439679    #if !defined(USE_WINDOWS_API) && !defined(NO_WOLFSSL_DIR)\
     
    442682        #include <unistd.h>
    443683        #include <sys/stat.h>
    444     #endif
     684        #define XWRITE      write
     685        #define XREAD       read
     686        #define XCLOSE      close
     687    #endif
     688#endif
     689
     690/* Defaults, user may over-ride with user_settings.h or in a porting section
     691 * above
     692 */
     693#ifndef XVFPRINTF
     694    #define XVFPRINTF  vfprintf
     695#endif
     696#ifndef XVSNPRINTF
     697    #define XVSNPRINTF vsnprintf
     698#endif
     699#ifndef XFPUTS
     700    #define XFPUTS     fputs
     701#endif
     702#ifndef XSPRINTF
     703    #define XSPRINTF   sprintf
    445704#endif
    446705
     
    451710        #define MAX_PATH 256
    452711    #endif
     712
     713    WOLFSSL_LOCAL int wc_FileLoad(const char* fname, unsigned char** buf,
     714        size_t* bufLen, void* heap);
    453715
    454716#if !defined(NO_WOLFSSL_DIR) && !defined(WOLFSSL_NUCLEUS) && \
     
    529791
    530792#elif defined(WOLFSSL_XILINX)
    531     #define USER_TIME
     793    #ifndef XTIME
     794        #define XTIME(t1)       xilinx_time((t1))
     795    #endif
    532796    #include <time.h>
    533797
     
    554818#elif defined(MICROCHIP_TCPIP_V5) || defined(MICROCHIP_TCPIP)
    555819    #include <time.h>
     820    extern time_t pic32_time(time_t* timer);
    556821    #define XTIME(t1)       pic32_time((t1))
    557822    #define XGMTIME(c, t)   gmtime((c))
     
    638903    #define USE_WOLF_TM
    639904
     905
     906#elif defined(WOLFSSL_LINUXKM)
     907    #ifdef BUILDING_WOLFSSL
     908
     909    /* includes are all above, with incompatible warnings masked out. */
     910    #if LINUX_VERSION_CODE < KERNEL_VERSION(5, 5, 0)
     911    typedef __kernel_time_t time_t;
     912    #else
     913    typedef __kernel_time64_t time_t;
     914    #endif
     915    extern time_t time(time_t * timer);
     916    #define XTIME time
     917    #define WOLFSSL_GMTIME
     918    #define XGMTIME(c, t) gmtime(c)
     919    #define NO_TIMEVAL 1
     920
     921    #endif /* BUILDING_WOLFSSL */
     922
    640923#else
    641924    /* default */
     
    675958#endif
    676959#if !defined(XGMTIME) && !defined(TIME_OVERRIDES)
    677     #if defined(WOLFSSL_GMTIME) || !defined(HAVE_GMTIME_R) || defined(WOLF_C99)
    678         #define XGMTIME(c, t)   gmtime((c))
    679     #else
     960    /* Always use gmtime_r if available. */
     961    #if defined(HAVE_GMTIME_R)
    680962        #define XGMTIME(c, t)   gmtime_r((c), (t))
    681963        #define NEED_TMP_TIME
     964    #else
     965        #define XGMTIME(c, t)   gmtime((c))
    682966    #endif
    683967#endif
    684968#if !defined(XVALIDATE_DATE) && !defined(HAVE_VALIDATE_DATE)
    685969    #define USE_WOLF_VALIDDATE
    686     #define XVALIDATE_DATE(d, f, t) ValidateDate((d), (f), (t))
     970    #define XVALIDATE_DATE(d, f, t) wc_ValidateDate((d), (f), (t))
    687971#endif
    688972
     
    7431027
    7441028#ifndef FILE_BUFFER_SIZE
    745     #define FILE_BUFFER_SIZE 1024     /* default static file buffer size for input,
     1029    #define FILE_BUFFER_SIZE 1024     /* default static file buffer size for input, \
    7461030                                    will use dynamic buffer if not big enough */
    7471031#endif
  • azure_iot_hub_f767zi/trunk/wolfssl-4.7.0/wolfssl/wolfcrypt/wolfmath.h

    r457 r464  
    2020 */
    2121
     22/*
     23DESCRIPTION
     24This library provides big integer math functions.
     25
     26*/
    2227#ifndef __WOLFMATH_H__
    2328#define __WOLFMATH_H__
Note: See TracChangeset for help on using the changeset viewer.