quickjs-tart

quickjs-based runtime for wallet-core logic
Log | Files | Refs | README | LICENSE

x509asn1.h (3388B)


      1 #ifndef HEADER_CURL_X509ASN1_H
      2 #define HEADER_CURL_X509ASN1_H
      3 
      4 /***************************************************************************
      5  *                                  _   _ ____  _
      6  *  Project                     ___| | | |  _ \| |
      7  *                             / __| | | | |_) | |
      8  *                            | (__| |_| |  _ <| |___
      9  *                             \___|\___/|_| \_\_____|
     10  *
     11  * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
     12  *
     13  * This software is licensed as described in the file COPYING, which
     14  * you should have received as part of this distribution. The terms
     15  * are also available at https://curl.se/docs/copyright.html.
     16  *
     17  * You may opt to use, copy, modify, merge, publish, distribute and/or sell
     18  * copies of the Software, and permit persons to whom the Software is
     19  * furnished to do so, under the terms of the COPYING file.
     20  *
     21  * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
     22  * KIND, either express or implied.
     23  *
     24  * SPDX-License-Identifier: curl
     25  *
     26  ***************************************************************************/
     27 
     28 #include "../curl_setup.h"
     29 
     30 #if defined(USE_GNUTLS) || defined(USE_WOLFSSL) || defined(USE_SCHANNEL) || \
     31   defined(USE_MBEDTLS) || defined(USE_RUSTLS)
     32 
     33 #include "../cfilters.h"
     34 #include "../urldata.h"
     35 
     36 /*
     37  * Types.
     38  */
     39 
     40 /* ASN.1 parsed element. */
     41 struct Curl_asn1Element {
     42   const char *header;         /* Pointer to header byte. */
     43   const char *beg;            /* Pointer to element data. */
     44   const char *end;            /* Pointer to 1st byte after element. */
     45   unsigned char class;        /* ASN.1 element class. */
     46   unsigned char tag;          /* ASN.1 element tag. */
     47   BIT(constructed);           /* Element is constructed. */
     48 };
     49 
     50 /* X509 certificate: RFC 5280. */
     51 struct Curl_X509certificate {
     52   struct Curl_asn1Element certificate;
     53   struct Curl_asn1Element version;
     54   struct Curl_asn1Element serialNumber;
     55   struct Curl_asn1Element signatureAlgorithm;
     56   struct Curl_asn1Element signature;
     57   struct Curl_asn1Element issuer;
     58   struct Curl_asn1Element notBefore;
     59   struct Curl_asn1Element notAfter;
     60   struct Curl_asn1Element subject;
     61   struct Curl_asn1Element subjectPublicKeyInfo;
     62   struct Curl_asn1Element subjectPublicKeyAlgorithm;
     63   struct Curl_asn1Element subjectPublicKey;
     64   struct Curl_asn1Element issuerUniqueID;
     65   struct Curl_asn1Element subjectUniqueID;
     66   struct Curl_asn1Element extensions;
     67 };
     68 
     69 /*
     70  * Prototypes.
     71  */
     72 
     73 int Curl_parseX509(struct Curl_X509certificate *cert,
     74                    const char *beg, const char *end);
     75 CURLcode Curl_extract_certinfo(struct Curl_easy *data, int certnum,
     76                                const char *beg, const char *end);
     77 CURLcode Curl_verifyhost(struct Curl_cfilter *cf, struct Curl_easy *data,
     78                          const char *beg, const char *end);
     79 
     80 #ifdef UNITTESTS
     81 #if defined(USE_GNUTLS) || defined(USE_SCHANNEL) || defined(USE_MBEDTLS) || \
     82   defined(USE_RUSTLS)
     83 
     84 /* used by unit1656.c */
     85 CURLcode Curl_x509_GTime2str(struct dynbuf *store,
     86                              const char *beg, const char *end);
     87 /* used by unit1657.c */
     88 CURLcode Curl_x509_getASN1Element(struct Curl_asn1Element *elem,
     89                                   const char *beg, const char *end);
     90 #endif
     91 #endif
     92 
     93 #endif /* USE_GNUTLS or USE_WOLFSSL or USE_SCHANNEL or USE_MBEDTLS or
     94           USE_RUSTLS */
     95 #endif /* HEADER_CURL_X509ASN1_H */