github.com/ethereum/go-ethereum@v1.16.1/crypto/secp256k1/libsecp256k1/contrib/lax_der_privatekey_parsing.h (about)

     1  /***********************************************************************
     2   * Copyright (c) 2014, 2015 Pieter Wuille                              *
     3   * Distributed under the MIT software license, see the accompanying    *
     4   * file COPYING or https://www.opensource.org/licenses/mit-license.php.*
     5   ***********************************************************************/
     6  
     7  /****
     8   * Please do not link this file directly. It is not part of the libsecp256k1
     9   * project and does not promise any stability in its API, functionality or
    10   * presence. Projects which use this code should instead copy this header
    11   * and its accompanying .c file directly into their codebase.
    12   ****/
    13  
    14  /* This file contains code snippets that parse DER private keys with
    15   * various errors and violations.  This is not a part of the library
    16   * itself, because the allowed violations are chosen arbitrarily and
    17   * do not follow or establish any standard.
    18   *
    19   * It also contains code to serialize private keys in a compatible
    20   * manner.
    21   *
    22   * These functions are meant for compatibility with applications
    23   * that require BER encoded keys. When working with secp256k1-specific
    24   * code, the simple 32-byte private keys normally used by the
    25   * library are sufficient.
    26   */
    27  
    28  #ifndef SECP256K1_CONTRIB_BER_PRIVATEKEY_H
    29  #define SECP256K1_CONTRIB_BER_PRIVATEKEY_H
    30  
    31  /* #include secp256k1.h only when it hasn't been included yet.
    32     This enables this file to be #included directly in other project
    33     files (such as tests.c) without the need to set an explicit -I flag,
    34     which would be necessary to locate secp256k1.h. */
    35  #ifndef SECP256K1_H
    36  #include <secp256k1.h>
    37  #endif
    38  
    39  #ifdef __cplusplus
    40  extern "C" {
    41  #endif
    42  
    43  /** Export a private key in DER format.
    44   *
    45   *  Returns: 1 if the private key was valid.
    46   *  Args: ctx:        pointer to a context object (not secp256k1_context_static).
    47   *  Out: privkey:     pointer to an array for storing the private key in BER.
    48   *                    Should have space for 279 bytes, and cannot be NULL.
    49   *       privkeylen:  Pointer to an int where the length of the private key in
    50   *                    privkey will be stored.
    51   *  In:  seckey:      pointer to a 32-byte secret key to export.
    52   *       compressed:  1 if the key should be exported in
    53   *                    compressed format, 0 otherwise
    54   *
    55   *  This function is purely meant for compatibility with applications that
    56   *  require BER encoded keys. When working with secp256k1-specific code, the
    57   *  simple 32-byte private keys are sufficient.
    58   *
    59   *  Note that this function does not guarantee correct DER output. It is
    60   *  guaranteed to be parsable by secp256k1_ec_privkey_import_der
    61   */
    62  SECP256K1_WARN_UNUSED_RESULT int ec_privkey_export_der(
    63      const secp256k1_context* ctx,
    64      unsigned char *privkey,
    65      size_t *privkeylen,
    66      const unsigned char *seckey,
    67      int compressed
    68  ) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3) SECP256K1_ARG_NONNULL(4);
    69  
    70  /** Import a private key in DER format.
    71   * Returns: 1 if a private key was extracted.
    72   * Args: ctx:        pointer to a context object (cannot be NULL).
    73   * Out:  seckey:     pointer to a 32-byte array for storing the private key.
    74   *                   (cannot be NULL).
    75   * In:   privkey:    pointer to a private key in DER format (cannot be NULL).
    76   *       privkeylen: length of the DER private key pointed to be privkey.
    77   *
    78   * This function will accept more than just strict DER, and even allow some BER
    79   * violations. The public key stored inside the DER-encoded private key is not
    80   * verified for correctness, nor are the curve parameters. Use this function
    81   * only if you know in advance it is supposed to contain a secp256k1 private
    82   * key.
    83   */
    84  SECP256K1_WARN_UNUSED_RESULT int ec_privkey_import_der(
    85      const secp256k1_context* ctx,
    86      unsigned char *seckey,
    87      const unsigned char *privkey,
    88      size_t privkeylen
    89  ) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3);
    90  
    91  #ifdef __cplusplus
    92  }
    93  #endif
    94  
    95  #endif /* SECP256K1_CONTRIB_BER_PRIVATEKEY_H */