2020-12-29 17:15:51 +00:00
|
|
|
/***********************************************************************
|
|
|
|
* Copyright (c) 2014, 2015 Pieter Wuille *
|
|
|
|
* Distributed under the MIT software license, see the accompanying *
|
|
|
|
* file COPYING or https://www.opensource.org/licenses/mit-license.php.*
|
|
|
|
***********************************************************************/
|
2015-10-26 14:54:21 +00:00
|
|
|
|
2016-01-14 18:35:54 +00:00
|
|
|
/****
|
|
|
|
* 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.
|
|
|
|
****/
|
|
|
|
|
2015-10-26 14:54:21 +00:00
|
|
|
/* 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.
|
|
|
|
*/
|
|
|
|
|
2018-07-09 11:17:44 +00:00
|
|
|
#ifndef SECP256K1_CONTRIB_BER_PRIVATEKEY_H
|
|
|
|
#define SECP256K1_CONTRIB_BER_PRIVATEKEY_H
|
2015-10-26 14:54:21 +00:00
|
|
|
|
2021-06-14 14:55:38 +00:00
|
|
|
/* #include secp256k1.h only when it hasn't been included yet.
|
|
|
|
This enables this file to be #included directly in other project
|
|
|
|
files (such as tests.c) without the need to set an explicit -I flag,
|
|
|
|
which would be necessary to locate secp256k1.h. */
|
|
|
|
#ifndef SECP256K1_H
|
2015-10-26 14:54:21 +00:00
|
|
|
#include <secp256k1.h>
|
2021-06-14 14:55:38 +00:00
|
|
|
#endif
|
2015-10-26 14:54:21 +00:00
|
|
|
|
2018-07-09 11:17:44 +00:00
|
|
|
#ifdef __cplusplus
|
2016-01-14 18:35:54 +00:00
|
|
|
extern "C" {
|
2018-07-09 11:17:44 +00:00
|
|
|
#endif
|
2016-01-14 18:35:54 +00:00
|
|
|
|
2015-10-26 14:54:21 +00:00
|
|
|
/** Export a private key in DER format.
|
|
|
|
*
|
|
|
|
* Returns: 1 if the private key was valid.
|
2023-03-17 05:22:01 +00:00
|
|
|
* Args: ctx: pointer to a context object (not rustsecp256k1_v0_8_1_context_static).
|
2015-10-26 14:54:21 +00:00
|
|
|
* 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
|
2023-03-17 05:22:01 +00:00
|
|
|
* guaranteed to be parsable by rustsecp256k1_v0_8_1_ec_privkey_import_der
|
2015-10-26 14:54:21 +00:00
|
|
|
*/
|
2016-01-14 18:35:54 +00:00
|
|
|
SECP256K1_WARN_UNUSED_RESULT int ec_privkey_export_der(
|
2023-03-17 05:22:01 +00:00
|
|
|
const rustsecp256k1_v0_8_1_context* ctx,
|
2015-10-26 14:54:21 +00:00
|
|
|
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.
|
|
|
|
*/
|
2016-01-14 18:35:54 +00:00
|
|
|
SECP256K1_WARN_UNUSED_RESULT int ec_privkey_import_der(
|
2023-03-17 05:22:01 +00:00
|
|
|
const rustsecp256k1_v0_8_1_context* ctx,
|
2015-10-26 14:54:21 +00:00
|
|
|
unsigned char *seckey,
|
|
|
|
const unsigned char *privkey,
|
|
|
|
size_t privkeylen
|
|
|
|
) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3);
|
|
|
|
|
2016-01-14 18:35:54 +00:00
|
|
|
#ifdef __cplusplus
|
2015-10-26 14:54:21 +00:00
|
|
|
}
|
2016-01-14 18:35:54 +00:00
|
|
|
#endif
|
2015-10-26 14:54:21 +00:00
|
|
|
|
2018-07-09 11:17:44 +00:00
|
|
|
#endif /* SECP256K1_CONTRIB_BER_PRIVATEKEY_H */
|