RetroArch
Classes | Macros | Typedefs | Enumerations | Functions
pk.h File Reference

Public Key abstraction layer. More...

#include <retro_inline.h>
#include "config.h"
#include "md.h"
#include "rsa.h"
#include "ecp.h"
#include "ecdsa.h"
Include dependency graph for pk.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  mbedtls_pk_rsassa_pss_options
 Options for RSASSA-PSS signature verification. See mbedtls_rsa_rsassa_pss_verify_ext() More...
 
struct  mbedtls_pk_debug_item
 Item to send to the debug module. More...
 
struct  mbedtls_pk_context
 Public key container. More...
 

Macros

#define MBEDTLS_ERR_PK_ALLOC_FAILED   -0x3F80
 
#define MBEDTLS_ERR_PK_TYPE_MISMATCH   -0x3F00
 
#define MBEDTLS_ERR_PK_BAD_INPUT_DATA   -0x3E80
 
#define MBEDTLS_ERR_PK_FILE_IO_ERROR   -0x3E00
 
#define MBEDTLS_ERR_PK_KEY_INVALID_VERSION   -0x3D80
 
#define MBEDTLS_ERR_PK_KEY_INVALID_FORMAT   -0x3D00
 
#define MBEDTLS_ERR_PK_UNKNOWN_PK_ALG   -0x3C80
 
#define MBEDTLS_ERR_PK_PASSWORD_REQUIRED   -0x3C00
 
#define MBEDTLS_ERR_PK_PASSWORD_MISMATCH   -0x3B80
 
#define MBEDTLS_ERR_PK_INVALID_PUBKEY   -0x3B00
 
#define MBEDTLS_ERR_PK_INVALID_ALG   -0x3A80
 
#define MBEDTLS_ERR_PK_UNKNOWN_NAMED_CURVE   -0x3A00
 
#define MBEDTLS_ERR_PK_FEATURE_UNAVAILABLE   -0x3980
 
#define MBEDTLS_ERR_PK_SIG_LEN_MISMATCH   -0x3900
 
#define MBEDTLS_PK_DEBUG_MAX_ITEMS   3
 

Typedefs

typedef struct mbedtls_pk_info_t mbedtls_pk_info_t
 Public key information and operations. More...
 
typedef int(* mbedtls_pk_rsa_alt_decrypt_func) (void *ctx, int mode, size_t *olen, const unsigned char *input, unsigned char *output, size_t output_max_len)
 Types for RSA-alt abstraction. More...
 
typedef int(* mbedtls_pk_rsa_alt_sign_func) (void *ctx, int(*f_rng) (void *, unsigned char *, size_t), void *p_rng, int mode, mbedtls_md_type_t md_alg, unsigned int hashlen, const unsigned char *hash, unsigned char *sig)
 
typedef size_t(* mbedtls_pk_rsa_alt_key_len_func) (void *ctx)
 

Enumerations

enum  mbedtls_pk_type_t {
  MBEDTLS_PK_NONE =0, MBEDTLS_PK_RSA, MBEDTLS_PK_ECKEY, MBEDTLS_PK_ECKEY_DH,
  MBEDTLS_PK_ECDSA, MBEDTLS_PK_RSA_ALT, MBEDTLS_PK_RSASSA_PSS
}
 Public key types. More...
 
enum  mbedtls_pk_debug_type { MBEDTLS_PK_DEBUG_NONE = 0, MBEDTLS_PK_DEBUG_MPI, MBEDTLS_PK_DEBUG_ECP }
 Types for interfacing with the debug module. More...
 

Functions

static INLINE mbedtls_rsa_contextmbedtls_pk_rsa (const mbedtls_pk_context pk)
 
static INLINE mbedtls_ecp_keypairmbedtls_pk_ec (const mbedtls_pk_context pk)
 
const mbedtls_pk_info_tmbedtls_pk_info_from_type (mbedtls_pk_type_t pk_type)
 Return information associated with the given PK type. More...
 
void mbedtls_pk_init (mbedtls_pk_context *ctx)
 Initialize a mbedtls_pk_context (as NONE) More...
 
void mbedtls_pk_free (mbedtls_pk_context *ctx)
 Free a mbedtls_pk_context. More...
 
int mbedtls_pk_setup (mbedtls_pk_context *ctx, const mbedtls_pk_info_t *info)
 Initialize a PK context with the information given and allocates the type-specific PK subcontext. More...
 
int mbedtls_pk_setup_rsa_alt (mbedtls_pk_context *ctx, void *key, mbedtls_pk_rsa_alt_decrypt_func decrypt_func, mbedtls_pk_rsa_alt_sign_func sign_func, mbedtls_pk_rsa_alt_key_len_func key_len_func)
 Initialize an RSA-alt context. More...
 
size_t mbedtls_pk_get_bitlen (const mbedtls_pk_context *ctx)
 Get the size in bits of the underlying key. More...
 
static INLINE size_t mbedtls_pk_get_len (const mbedtls_pk_context *ctx)
 Get the length in bytes of the underlying key. More...
 
int mbedtls_pk_can_do (const mbedtls_pk_context *ctx, mbedtls_pk_type_t type)
 Tell if a context can do the operation given by type. More...
 
int mbedtls_pk_verify (mbedtls_pk_context *ctx, mbedtls_md_type_t md_alg, const unsigned char *hash, size_t hash_len, const unsigned char *sig, size_t sig_len)
 Verify signature (including padding if relevant). More...
 
int mbedtls_pk_verify_ext (mbedtls_pk_type_t type, const void *options, mbedtls_pk_context *ctx, mbedtls_md_type_t md_alg, const unsigned char *hash, size_t hash_len, const unsigned char *sig, size_t sig_len)
 Verify signature, with options. (Includes verification of the padding depending on type.) More...
 
int mbedtls_pk_sign (mbedtls_pk_context *ctx, mbedtls_md_type_t md_alg, const unsigned char *hash, size_t hash_len, unsigned char *sig, size_t *sig_len, int(*f_rng)(void *, unsigned char *, size_t), void *p_rng)
 Make signature, including padding if relevant. More...
 
int mbedtls_pk_decrypt (mbedtls_pk_context *ctx, const unsigned char *input, size_t ilen, unsigned char *output, size_t *olen, size_t osize, int(*f_rng)(void *, unsigned char *, size_t), void *p_rng)
 Decrypt message (including padding if relevant). More...
 
int mbedtls_pk_encrypt (mbedtls_pk_context *ctx, const unsigned char *input, size_t ilen, unsigned char *output, size_t *olen, size_t osize, int(*f_rng)(void *, unsigned char *, size_t), void *p_rng)
 Encrypt message (including padding if relevant). More...
 
int mbedtls_pk_check_pair (const mbedtls_pk_context *pub, const mbedtls_pk_context *prv)
 Check if a public-private pair of keys matches. More...
 
int mbedtls_pk_debug (const mbedtls_pk_context *ctx, mbedtls_pk_debug_item *items)
 Export debug information. More...
 
const char * mbedtls_pk_get_name (const mbedtls_pk_context *ctx)
 Access the type name. More...
 
mbedtls_pk_type_t mbedtls_pk_get_type (const mbedtls_pk_context *ctx)
 Get the key type. More...
 
int mbedtls_pk_parse_key (mbedtls_pk_context *ctx, const unsigned char *key, size_t keylen, const unsigned char *pwd, size_t pwdlen)
 Parse a private key in PEM or DER format. More...
 
int mbedtls_pk_parse_public_key (mbedtls_pk_context *ctx, const unsigned char *key, size_t keylen)
 Parse a public key in PEM or DER format. More...
 
int mbedtls_pk_parse_keyfile (mbedtls_pk_context *ctx, const char *path, const char *password)
 Load and parse a private key. More...
 
int mbedtls_pk_parse_public_keyfile (mbedtls_pk_context *ctx, const char *path)
 Load and parse a public key. More...
 
int mbedtls_pk_write_key_der (mbedtls_pk_context *ctx, unsigned char *buf, size_t size)
 Write a private key to a PKCS#1 or SEC1 DER structure Note: data is written at the end of the buffer! Use the return value to determine where you should start using the buffer. More...
 
int mbedtls_pk_write_pubkey_der (mbedtls_pk_context *ctx, unsigned char *buf, size_t size)
 Write a public key to a SubjectPublicKeyInfo DER structure Note: data is written at the end of the buffer! Use the return value to determine where you should start using the buffer. More...
 
int mbedtls_pk_write_pubkey_pem (mbedtls_pk_context *ctx, unsigned char *buf, size_t size)
 Write a public key to a PEM string. More...
 
int mbedtls_pk_write_key_pem (mbedtls_pk_context *ctx, unsigned char *buf, size_t size)
 Write a private key to a PKCS#1 or SEC1 PEM string. More...
 
int mbedtls_pk_parse_subpubkey (unsigned char **p, const unsigned char *end, mbedtls_pk_context *pk)
 Parse a SubjectPublicKeyInfo DER structure. More...
 
int mbedtls_pk_write_pubkey (unsigned char **p, unsigned char *start, const mbedtls_pk_context *key)
 Write a subjectPublicKey to ASN.1 data Note: function works backwards in data buffer. More...
 
int mbedtls_pk_load_file (const char *path, unsigned char **buf, size_t *n)
 

Detailed Description

Public Key abstraction layer.

Public Key abstraction layer: wrapper functions.

Copyright (C) 2006-2015, ARM Limited, All Rights Reserved SPDX-License-Identifier: Apache-2.0

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

This file is part of mbed TLS (https://tls.mbed.org)

Macro Definition Documentation

◆ MBEDTLS_ERR_PK_ALLOC_FAILED

#define MBEDTLS_ERR_PK_ALLOC_FAILED   -0x3F80

Memory allocation failed.

◆ MBEDTLS_ERR_PK_BAD_INPUT_DATA

#define MBEDTLS_ERR_PK_BAD_INPUT_DATA   -0x3E80

Bad input parameters to function.

◆ MBEDTLS_ERR_PK_FEATURE_UNAVAILABLE

#define MBEDTLS_ERR_PK_FEATURE_UNAVAILABLE   -0x3980

Unavailable feature, e.g. RSA disabled for RSA key.

◆ MBEDTLS_ERR_PK_FILE_IO_ERROR

#define MBEDTLS_ERR_PK_FILE_IO_ERROR   -0x3E00

Read/write of file failed.

◆ MBEDTLS_ERR_PK_INVALID_ALG

#define MBEDTLS_ERR_PK_INVALID_ALG   -0x3A80

The algorithm tag or value is invalid.

◆ MBEDTLS_ERR_PK_INVALID_PUBKEY

#define MBEDTLS_ERR_PK_INVALID_PUBKEY   -0x3B00

The pubkey tag or value is invalid (only RSA and EC are supported).

◆ MBEDTLS_ERR_PK_KEY_INVALID_FORMAT

#define MBEDTLS_ERR_PK_KEY_INVALID_FORMAT   -0x3D00

Invalid key tag or value.

◆ MBEDTLS_ERR_PK_KEY_INVALID_VERSION

#define MBEDTLS_ERR_PK_KEY_INVALID_VERSION   -0x3D80

Unsupported key version

◆ MBEDTLS_ERR_PK_PASSWORD_MISMATCH

#define MBEDTLS_ERR_PK_PASSWORD_MISMATCH   -0x3B80

Given private key password does not allow for correct decryption.

◆ MBEDTLS_ERR_PK_PASSWORD_REQUIRED

#define MBEDTLS_ERR_PK_PASSWORD_REQUIRED   -0x3C00

Private key password can't be empty.

◆ MBEDTLS_ERR_PK_SIG_LEN_MISMATCH

#define MBEDTLS_ERR_PK_SIG_LEN_MISMATCH   -0x3900

The signature is valid but its length is less than expected.

◆ MBEDTLS_ERR_PK_TYPE_MISMATCH

#define MBEDTLS_ERR_PK_TYPE_MISMATCH   -0x3F00

Type mismatch, eg attempt to encrypt with an ECDSA key

◆ MBEDTLS_ERR_PK_UNKNOWN_NAMED_CURVE

#define MBEDTLS_ERR_PK_UNKNOWN_NAMED_CURVE   -0x3A00

Elliptic curve is unsupported (only NIST curves are supported).

◆ MBEDTLS_ERR_PK_UNKNOWN_PK_ALG

#define MBEDTLS_ERR_PK_UNKNOWN_PK_ALG   -0x3C80

Key algorithm is unsupported (only RSA and EC are supported).

◆ MBEDTLS_PK_DEBUG_MAX_ITEMS

#define MBEDTLS_PK_DEBUG_MAX_ITEMS   3

Maximum number of item send for debugging, plus 1

Typedef Documentation

◆ mbedtls_pk_info_t

Public key information and operations.

◆ mbedtls_pk_rsa_alt_decrypt_func

typedef int(* mbedtls_pk_rsa_alt_decrypt_func) (void *ctx, int mode, size_t *olen, const unsigned char *input, unsigned char *output, size_t output_max_len)

Types for RSA-alt abstraction.

◆ mbedtls_pk_rsa_alt_key_len_func

typedef size_t(* mbedtls_pk_rsa_alt_key_len_func) (void *ctx)

◆ mbedtls_pk_rsa_alt_sign_func

typedef int(* mbedtls_pk_rsa_alt_sign_func) (void *ctx, int(*f_rng)(void *, unsigned char *, size_t), void *p_rng, int mode, mbedtls_md_type_t md_alg, unsigned int hashlen, const unsigned char *hash, unsigned char *sig)

Enumeration Type Documentation

◆ mbedtls_pk_debug_type

Types for interfacing with the debug module.

Enumerator
MBEDTLS_PK_DEBUG_NONE 
MBEDTLS_PK_DEBUG_MPI 
MBEDTLS_PK_DEBUG_ECP 

◆ mbedtls_pk_type_t

Public key types.

Enumerator
MBEDTLS_PK_NONE 
MBEDTLS_PK_RSA 
MBEDTLS_PK_ECKEY 
MBEDTLS_PK_ECKEY_DH 
MBEDTLS_PK_ECDSA 
MBEDTLS_PK_RSA_ALT 
MBEDTLS_PK_RSASSA_PSS 

Function Documentation

◆ mbedtls_pk_can_do()

int mbedtls_pk_can_do ( const mbedtls_pk_context ctx,
mbedtls_pk_type_t  type 
)

Tell if a context can do the operation given by type.

Parameters
ctxContext to test
typeTarget type
Returns
0 if context can't do the operations, 1 otherwise.
Here is the caller graph for this function:

◆ mbedtls_pk_check_pair()

int mbedtls_pk_check_pair ( const mbedtls_pk_context pub,
const mbedtls_pk_context prv 
)

Check if a public-private pair of keys matches.

Parameters
pubContext holding a public key.
prvContext holding a private (and public) key.
Returns
0 on success or MBEDTLS_ERR_PK_BAD_INPUT_DATA

◆ mbedtls_pk_debug()

int mbedtls_pk_debug ( const mbedtls_pk_context ctx,
mbedtls_pk_debug_item items 
)

Export debug information.

Parameters
ctxContext to use
itemsPlace to write debug items
Returns
0 on success or MBEDTLS_ERR_PK_BAD_INPUT_DATA
Here is the caller graph for this function:

◆ mbedtls_pk_decrypt()

int mbedtls_pk_decrypt ( mbedtls_pk_context ctx,
const unsigned char *  input,
size_t  ilen,
unsigned char *  output,
size_t *  olen,
size_t  osize,
int(*)(void *, unsigned char *, size_t)  f_rng,
void p_rng 
)

Decrypt message (including padding if relevant).

Parameters
ctxPK context to use - must hold a private key
inputInput to decrypt
ilenInput size
outputDecrypted output
olenDecrypted message length
osizeSize of the output buffer
f_rngRNG function
p_rngRNG parameter
Note
For RSA keys, the default padding type is PKCS#1 v1.5.
Returns
0 on success, or a specific error code.
Here is the caller graph for this function:

◆ mbedtls_pk_ec()

static INLINE mbedtls_ecp_keypair* mbedtls_pk_ec ( const mbedtls_pk_context  pk)
static

Quick access to an EC context inside a PK context.

Warning
You must make sure the PK context actually holds an EC context before using this function!
Here is the caller graph for this function:

◆ mbedtls_pk_encrypt()

int mbedtls_pk_encrypt ( mbedtls_pk_context ctx,
const unsigned char *  input,
size_t  ilen,
unsigned char *  output,
size_t *  olen,
size_t  osize,
int(*)(void *, unsigned char *, size_t)  f_rng,
void p_rng 
)

Encrypt message (including padding if relevant).

Parameters
ctxPK context to use
inputMessage to encrypt
ilenMessage size
outputEncrypted output
olenEncrypted output length
osizeSize of the output buffer
f_rngRNG function
p_rngRNG parameter
Note
For RSA keys, the default padding type is PKCS#1 v1.5.
Returns
0 on success, or a specific error code.
Here is the caller graph for this function:

◆ mbedtls_pk_free()

void mbedtls_pk_free ( mbedtls_pk_context ctx)

Free a mbedtls_pk_context.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ mbedtls_pk_get_bitlen()

size_t mbedtls_pk_get_bitlen ( const mbedtls_pk_context ctx)

Get the size in bits of the underlying key.

Parameters
ctxContext to use
Returns
Key size in bits, or 0 on error
Here is the caller graph for this function:

◆ mbedtls_pk_get_len()

static INLINE size_t mbedtls_pk_get_len ( const mbedtls_pk_context ctx)
static

Get the length in bytes of the underlying key.

Parameters
ctxContext to use
Returns
Key length in bytes, or 0 on error
Here is the call graph for this function:
Here is the caller graph for this function:

◆ mbedtls_pk_get_name()

const char* mbedtls_pk_get_name ( const mbedtls_pk_context ctx)

Access the type name.

Parameters
ctxContext to use
Returns
Type name on success, or "invalid PK"
Here is the caller graph for this function:

◆ mbedtls_pk_get_type()

mbedtls_pk_type_t mbedtls_pk_get_type ( const mbedtls_pk_context ctx)

Get the key type.

Parameters
ctxContext to use
Returns
Type on success, or MBEDTLS_PK_NONE
Here is the caller graph for this function:

◆ mbedtls_pk_info_from_type()

const mbedtls_pk_info_t* mbedtls_pk_info_from_type ( mbedtls_pk_type_t  pk_type)

Return information associated with the given PK type.

Parameters
pk_typePK type to search for.
Returns
The PK info associated with the type or NULL if not found.
Here is the caller graph for this function:

◆ mbedtls_pk_init()

void mbedtls_pk_init ( mbedtls_pk_context ctx)

Initialize a mbedtls_pk_context (as NONE)

◆ mbedtls_pk_load_file()

int mbedtls_pk_load_file ( const char *  path,
unsigned char **  buf,
size_t *  n 
)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ mbedtls_pk_parse_key()

int mbedtls_pk_parse_key ( mbedtls_pk_context ctx,
const unsigned char *  key,
size_t  keylen,
const unsigned char *  pwd,
size_t  pwdlen 
)

Parse a private key in PEM or DER format.

Parameters
ctxkey to be initialized
keyinput buffer
keylensize of the buffer (including the terminating null byte for PEM data)
pwdpassword for decryption (optional)
pwdlensize of the password
Note
On entry, ctx must be empty, either freshly initialised with mbedtls_pk_init() or reset with mbedtls_pk_free(). If you need a specific key type, check the result with mbedtls_pk_can_do().
The key is also checked for correctness.
Returns
0 if successful, or a specific PK or PEM error code
Here is the call graph for this function:
Here is the caller graph for this function:

◆ mbedtls_pk_parse_keyfile()

int mbedtls_pk_parse_keyfile ( mbedtls_pk_context ctx,
const char *  path,
const char *  password 
)

Load and parse a private key.

Parameters
ctxkey to be initialized
pathfilename to read the private key from
passwordpassword to decrypt the file (can be NULL)
Note
On entry, ctx must be empty, either freshly initialised with mbedtls_pk_init() or reset with mbedtls_pk_free(). If you need a specific key type, check the result with mbedtls_pk_can_do().
The key is also checked for correctness.
Returns
0 if successful, or a specific PK or PEM error code
Here is the call graph for this function:

◆ mbedtls_pk_parse_public_key()

int mbedtls_pk_parse_public_key ( mbedtls_pk_context ctx,
const unsigned char *  key,
size_t  keylen 
)

Parse a public key in PEM or DER format.

Parameters
ctxkey to be initialized
keyinput buffer
keylensize of the buffer (including the terminating null byte for PEM data)
Note
On entry, ctx must be empty, either freshly initialised with mbedtls_pk_init() or reset with mbedtls_pk_free(). If you need a specific key type, check the result with mbedtls_pk_can_do().
The key is also checked for correctness.
Returns
0 if successful, or a specific PK or PEM error code
Here is the call graph for this function:
Here is the caller graph for this function:

◆ mbedtls_pk_parse_public_keyfile()

int mbedtls_pk_parse_public_keyfile ( mbedtls_pk_context ctx,
const char *  path 
)

Load and parse a public key.

Parameters
ctxkey to be initialized
pathfilename to read the public key from
Note
On entry, ctx must be empty, either freshly initialised with mbedtls_pk_init() or reset with mbedtls_pk_free(). If you need a specific key type, check the result with mbedtls_pk_can_do().
The key is also checked for correctness.
Returns
0 if successful, or a specific PK or PEM error code
Here is the call graph for this function:

◆ mbedtls_pk_parse_subpubkey()

int mbedtls_pk_parse_subpubkey ( unsigned char **  p,
const unsigned char *  end,
mbedtls_pk_context pk 
)

Parse a SubjectPublicKeyInfo DER structure.

Parameters
pthe position in the ASN.1 data
endend of the buffer
pkthe key to fill
Returns
0 if successful, or a specific PK error code
Here is the call graph for this function:
Here is the caller graph for this function:

◆ mbedtls_pk_rsa()

static INLINE mbedtls_rsa_context* mbedtls_pk_rsa ( const mbedtls_pk_context  pk)
static

Quick access to an RSA context inside a PK context.

Warning
You must make sure the PK context actually holds an RSA context before using this function!
Here is the caller graph for this function:

◆ mbedtls_pk_setup()

int mbedtls_pk_setup ( mbedtls_pk_context ctx,
const mbedtls_pk_info_t info 
)

Initialize a PK context with the information given and allocates the type-specific PK subcontext.

Parameters
ctxContext to initialize. Must be empty (type NONE).
infoInformation to use
Returns
0 on success, MBEDTLS_ERR_PK_BAD_INPUT_DATA on invalid input, MBEDTLS_ERR_PK_ALLOC_FAILED on allocation failure.
Note
For contexts holding an RSA-alt key, use mbedtls_pk_setup_rsa_alt() instead.
Here is the caller graph for this function:

◆ mbedtls_pk_setup_rsa_alt()

int mbedtls_pk_setup_rsa_alt ( mbedtls_pk_context ctx,
void key,
mbedtls_pk_rsa_alt_decrypt_func  decrypt_func,
mbedtls_pk_rsa_alt_sign_func  sign_func,
mbedtls_pk_rsa_alt_key_len_func  key_len_func 
)

Initialize an RSA-alt context.

Parameters
ctxContext to initialize. Must be empty (type NONE).
keyRSA key pointer
decrypt_funcDecryption function
sign_funcSigning function
key_len_funcFunction returning key length in bytes
Returns
0 on success, or MBEDTLS_ERR_PK_BAD_INPUT_DATA if the context wasn't already initialized as RSA_ALT.
Note
This function replaces mbedtls_pk_setup() for RSA-alt.

◆ mbedtls_pk_sign()

int mbedtls_pk_sign ( mbedtls_pk_context ctx,
mbedtls_md_type_t  md_alg,
const unsigned char *  hash,
size_t  hash_len,
unsigned char *  sig,
size_t *  sig_len,
int(*)(void *, unsigned char *, size_t)  f_rng,
void p_rng 
)

Make signature, including padding if relevant.

Parameters
ctxPK context to use - must hold a private key
md_algHash algorithm used (see notes)
hashHash of the message to sign
hash_lenHash length or 0 (see notes)
sigPlace to write the signature
sig_lenNumber of bytes written
f_rngRNG function
p_rngRNG parameter
Returns
0 on success, or a specific error code.
Note
For RSA keys, the default padding type is PKCS#1 v1.5. There is no interface in the PK module to make RSASSA-PSS signatures yet.
If hash_len is 0, then the length associated with md_alg is used instead, or an error returned if it is invalid.
For RSA, md_alg may be MBEDTLS_MD_NONE if hash_len != 0. For ECDSA, md_alg may never be MBEDTLS_MD_NONE.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ mbedtls_pk_verify()

int mbedtls_pk_verify ( mbedtls_pk_context ctx,
mbedtls_md_type_t  md_alg,
const unsigned char *  hash,
size_t  hash_len,
const unsigned char *  sig,
size_t  sig_len 
)

Verify signature (including padding if relevant).

Parameters
ctxPK context to use
md_algHash algorithm used (see notes)
hashHash of the message to sign
hash_lenHash length or 0 (see notes)
sigSignature to verify
sig_lenSignature length
Returns
0 on success (signature is valid), MBEDTLS_ERR_PK_SIG_LEN_MISMATCH if the signature is valid but its actual length is less than sig_len, or a specific error code.
Note
For RSA keys, the default padding type is PKCS#1 v1.5. Use mbedtls_pk_verify_ext( MBEDTLS_PK_RSASSA_PSS, ... ) to verify RSASSA_PSS signatures.
If hash_len is 0, then the length associated with md_alg is used instead, or an error returned if it is invalid.
md_alg may be MBEDTLS_MD_NONE, only if hash_len != 0
Here is the call graph for this function:
Here is the caller graph for this function:

◆ mbedtls_pk_verify_ext()

int mbedtls_pk_verify_ext ( mbedtls_pk_type_t  type,
const void options,
mbedtls_pk_context ctx,
mbedtls_md_type_t  md_alg,
const unsigned char *  hash,
size_t  hash_len,
const unsigned char *  sig,
size_t  sig_len 
)

Verify signature, with options. (Includes verification of the padding depending on type.)

Parameters
typeSignature type (inc. possible padding type) to verify
optionsPointer to type-specific options, or NULL
ctxPK context to use
md_algHash algorithm used (see notes)
hashHash of the message to sign
hash_lenHash length or 0 (see notes)
sigSignature to verify
sig_lenSignature length
Returns
0 on success (signature is valid), MBEDTLS_ERR_PK_TYPE_MISMATCH if the PK context can't be used for this type of signatures, MBEDTLS_ERR_PK_SIG_LEN_MISMATCH if the signature is valid but its actual length is less than sig_len, or a specific error code.
Note
If hash_len is 0, then the length associated with md_alg is used instead, or an error returned if it is invalid.
md_alg may be MBEDTLS_MD_NONE, only if hash_len != 0
If type is MBEDTLS_PK_RSASSA_PSS, then options must point to a mbedtls_pk_rsassa_pss_options structure, otherwise it must be NULL.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ mbedtls_pk_write_key_der()

int mbedtls_pk_write_key_der ( mbedtls_pk_context ctx,
unsigned char *  buf,
size_t  size 
)

Write a private key to a PKCS#1 or SEC1 DER structure Note: data is written at the end of the buffer! Use the return value to determine where you should start using the buffer.

Parameters
ctxprivate to write away
bufbuffer to write to
sizesize of the buffer
Returns
length of data written if successful, or a specific error code
Here is the call graph for this function:
Here is the caller graph for this function:

◆ mbedtls_pk_write_key_pem()

int mbedtls_pk_write_key_pem ( mbedtls_pk_context ctx,
unsigned char *  buf,
size_t  size 
)

Write a private key to a PKCS#1 or SEC1 PEM string.

Parameters
ctxprivate to write away
bufbuffer to write to
sizesize of the buffer
Returns
0 if successful, or a specific error code
Here is the call graph for this function:

◆ mbedtls_pk_write_pubkey()

int mbedtls_pk_write_pubkey ( unsigned char **  p,
unsigned char *  start,
const mbedtls_pk_context key 
)

Write a subjectPublicKey to ASN.1 data Note: function works backwards in data buffer.

Parameters
preference to current position pointer
startstart of the buffer (for bounds-checking)
keypublic key to write away
Returns
the length written or a negative error code
Here is the call graph for this function:
Here is the caller graph for this function:

◆ mbedtls_pk_write_pubkey_der()

int mbedtls_pk_write_pubkey_der ( mbedtls_pk_context ctx,
unsigned char *  buf,
size_t  size 
)

Write a public key to a SubjectPublicKeyInfo DER structure Note: data is written at the end of the buffer! Use the return value to determine where you should start using the buffer.

Parameters
ctxpublic key to write away
bufbuffer to write to
sizesize of the buffer
Returns
length of data written if successful, or a specific error code
Here is the call graph for this function:
Here is the caller graph for this function:

◆ mbedtls_pk_write_pubkey_pem()

int mbedtls_pk_write_pubkey_pem ( mbedtls_pk_context ctx,
unsigned char *  buf,
size_t  size 
)

Write a public key to a PEM string.

Parameters
ctxpublic key to write away
bufbuffer to write to
sizesize of the buffer
Returns
0 if successful, or a specific error code
Here is the call graph for this function: