github.com/guiltylotus/go-ethereum@v1.9.7/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 http://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>
    32  
    33  # ifdef __cplusplus
    34  extern "C" {
    35  # endif
    36  
    37  /** Export a private key in DER format.
    38   *
    39   *  Returns: 1 if the private key was valid.
    40   *  Args: ctx:        pointer to a context object, initialized for signing (cannot
    41   *                    be NULL)
    42   *  Out: privkey:     pointer to an array for storing the private key in BER.
    43   *                    Should have space for 279 bytes, and cannot be NULL.
    44   *       privkeylen:  Pointer to an int where the length of the private key in
    45   *                    privkey will be stored.
    46   *  In:  seckey:      pointer to a 32-byte secret key to export.
    47   *       compressed:  1 if the key should be exported in
    48   *                    compressed format, 0 otherwise
    49   *
    50   *  This function is purely meant for compatibility with applications that
    51   *  require BER encoded keys. When working with secp256k1-specific code, the
    52   *  simple 32-byte private keys are sufficient.
    53   *
    54   *  Note that this function does not guarantee correct DER output. It is
    55   *  guaranteed to be parsable by secp256k1_ec_privkey_import_der
    56   */
    57  SECP256K1_WARN_UNUSED_RESULT int ec_privkey_export_der(
    58      const secp256k1_context* ctx,
    59      unsigned char *privkey,
    60      size_t *privkeylen,
    61      const unsigned char *seckey,
    62      int compressed
    63  ) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3) SECP256K1_ARG_NONNULL(4);
    64  
    65  /** Import a private key in DER format.
    66   * Returns: 1 if a private key was extracted.
    67   * Args: ctx:        pointer to a context object (cannot be NULL).
    68   * Out:  seckey:     pointer to a 32-byte array for storing the private key.
    69   *                   (cannot be NULL).
    70   * In:   privkey:    pointer to a private key in DER format (cannot be NULL).
    71   *       privkeylen: length of the DER private key pointed to be privkey.
    72   *
    73   * This function will accept more than just strict DER, and even allow some BER
    74   * violations. The public key stored inside the DER-encoded private key is not
    75   * verified for correctness, nor are the curve parameters. Use this function
    76   * only if you know in advance it is supposed to contain a secp256k1 private
    77   * key.
    78   */
    79  SECP256K1_WARN_UNUSED_RESULT int ec_privkey_import_der(
    80      const secp256k1_context* ctx,
    81      unsigned char *seckey,
    82      const unsigned char *privkey,
    83      size_t privkeylen
    84  ) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3);
    85  
    86  #ifdef __cplusplus
    87  }
    88  #endif
    89  
    90  #endif