csecp256k1

Haskell FFI bindings to bitcoin-core/secp256k1 (docs.ppad.tech/csecp256k1).
git clone git://git.ppad.tech/csecp256k1.git
Log | Files | Refs | README | LICENSE

lax_der_privatekey_parsing.h (4072B)


      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 haskellsecp256k1_v0_1_0_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 haskellsecp256k1_v0_1_0_ec_privkey_import_der
     61  */
     62 SECP256K1_WARN_UNUSED_RESULT int ec_privkey_export_der(
     63     const haskellsecp256k1_v0_1_0_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 haskellsecp256k1_v0_1_0_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 */