You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
90 lines
3.6 KiB
90 lines
3.6 KiB
/********************************************************************** |
|
* Copyright (c) 2014, 2015 Pieter Wuille * |
|
* Distributed under the MIT software license, see the accompanying * |
|
* file COPYING or http://www.opensource.org/licenses/mit-license.php.* |
|
**********************************************************************/ |
|
|
|
/**** |
|
* Please do not link this file directly. It is not part of the libsecp256k1 |
|
* project and does not promise any stability in its API, functionality or |
|
* presence. Projects which use this code should instead copy this header |
|
* and its accompanying .c file directly into their codebase. |
|
****/ |
|
|
|
/* This file contains code snippets that parse DER private keys with |
|
* various errors and violations. This is not a part of the library |
|
* itself, because the allowed violations are chosen arbitrarily and |
|
* do not follow or establish any standard. |
|
* |
|
* It also contains code to serialize private keys in a compatible |
|
* manner. |
|
* |
|
* These functions are meant for compatibility with applications |
|
* that require BER encoded keys. When working with secp256k1-specific |
|
* code, the simple 32-byte private keys normally used by the |
|
* library are sufficient. |
|
*/ |
|
|
|
#ifndef _SECP256K1_CONTRIB_BER_PRIVATEKEY_H_ |
|
#define _SECP256K1_CONTRIB_BER_PRIVATEKEY_H_ |
|
|
|
#include <secp256k1.h> |
|
|
|
# ifdef __cplusplus |
|
extern "C" { |
|
# endif |
|
|
|
/** Export a private key in DER format. |
|
* |
|
* Returns: 1 if the private key was valid. |
|
* Args: ctx: pointer to a context object, initialized for signing (cannot |
|
* be NULL) |
|
* Out: privkey: pointer to an array for storing the private key in BER. |
|
* Should have space for 279 bytes, and cannot be NULL. |
|
* privkeylen: Pointer to an int where the length of the private key in |
|
* privkey will be stored. |
|
* In: seckey: pointer to a 32-byte secret key to export. |
|
* compressed: 1 if the key should be exported in |
|
* compressed format, 0 otherwise |
|
* |
|
* This function is purely meant for compatibility with applications that |
|
* require BER encoded keys. When working with secp256k1-specific code, the |
|
* simple 32-byte private keys are sufficient. |
|
* |
|
* Note that this function does not guarantee correct DER output. It is |
|
* guaranteed to be parsable by secp256k1_ec_privkey_import_der |
|
*/ |
|
SECP256K1_WARN_UNUSED_RESULT int ec_privkey_export_der( |
|
const secp256k1_context* ctx, |
|
unsigned char *privkey, |
|
size_t *privkeylen, |
|
const unsigned char *seckey, |
|
int compressed |
|
) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3) SECP256K1_ARG_NONNULL(4); |
|
|
|
/** Import a private key in DER format. |
|
* Returns: 1 if a private key was extracted. |
|
* Args: ctx: pointer to a context object (cannot be NULL). |
|
* Out: seckey: pointer to a 32-byte array for storing the private key. |
|
* (cannot be NULL). |
|
* In: privkey: pointer to a private key in DER format (cannot be NULL). |
|
* privkeylen: length of the DER private key pointed to be privkey. |
|
* |
|
* This function will accept more than just strict DER, and even allow some BER |
|
* violations. The public key stored inside the DER-encoded private key is not |
|
* verified for correctness, nor are the curve parameters. Use this function |
|
* only if you know in advance it is supposed to contain a secp256k1 private |
|
* key. |
|
*/ |
|
SECP256K1_WARN_UNUSED_RESULT int ec_privkey_import_der( |
|
const secp256k1_context* ctx, |
|
unsigned char *seckey, |
|
const unsigned char *privkey, |
|
size_t privkeylen |
|
) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3); |
|
|
|
#ifdef __cplusplus |
|
} |
|
#endif |
|
|
|
#endif
|
|
|