mbed TLS v2.14.1

Data Structures | Typedefs | Enumerations | Functions
ecjpake.h File Reference

Elliptic curve J-PAKE. More...

`#include "ecp.h"`
`#include "md.h"`
Include dependency graph for ecjpake.h:

Go to the source code of this file.

## Data Structures
struct | mbedtls_ecjpake_context

## Typedefs
typedef struct mbedtls_ecjpake_context | mbedtls_ecjpake_context

## Enumerations
enum | mbedtls_ecjpake_role { MBEDTLS_ECJPAKE_CLIENT = 0, MBEDTLS_ECJPAKE_SERVER }

## Functions
void | mbedtls_ecjpake_init (mbedtls_ecjpake_context *ctx)
| Initialize a context (just makes it ready for setup() or free()). More...
int | mbedtls_ecjpake_setup (mbedtls_ecjpake_context *ctx, mbedtls_ecjpake_role role, mbedtls_md_type_t hash, mbedtls_ecp_group_id curve, const unsigned char *secret, size_t len)
| Set up a context for use. More...
int | mbedtls_ecjpake_check (const mbedtls_ecjpake_context *ctx)
| Check if a context is ready for use. More...
int | mbedtls_ecjpake_write_round_one (mbedtls_ecjpake_context *ctx, unsigned char *buf, size_t len, size_t *olen, int(*f_rng)(void *, unsigned char *, size_t), void *p_rng)
| Generate and write the first round message (TLS: contents of the Client/ServerHello extension, excluding extension type and length bytes) More...
int | mbedtls_ecjpake_read_round_one (mbedtls_ecjpake_context *ctx, const unsigned char *buf, size_t len)
| Read and process the first round message (TLS: contents of the Client/ServerHello extension, excluding extension type and length bytes) More...
int | mbedtls_ecjpake_write_round_two (mbedtls_ecjpake_context *ctx, unsigned char *buf, size_t len, size_t *olen, int(*f_rng)(void *, unsigned char *, size_t), void *p_rng)
| Generate and write the second round message (TLS: contents of the Client/ServerKeyExchange) More...
int | mbedtls_ecjpake_read_round_two (mbedtls_ecjpake_context *ctx, const unsigned char *buf, size_t len)
| Read and process the second round message (TLS: contents of the Client/ServerKeyExchange) More...
int | mbedtls_ecjpake_derive_secret (mbedtls_ecjpake_context *ctx, unsigned char *buf, size_t len, size_t *olen, int(*f_rng)(void *, unsigned char *, size_t), void *p_rng)
| Derive the shared secret (TLS: Pre-Master Secret) More...
void | mbedtls_ecjpake_free (mbedtls_ecjpake_context *ctx)
| Free a context's content. More...
int | mbedtls_ecjpake_self_test (int verbose)
| Checkup routine. More...

## Detailed Description

Elliptic curve J-PAKE.

Definition in file ecjpake.h.

## Typedef Documentation

## ◆ mbedtls_ecjpake_context

typedef struct mbedtls_ecjpake_context mbedtls_ecjpake_context

EC J-PAKE context structure.

J-PAKE is a symmetric protocol, except for the identifiers used in Zero-Knowledge Proofs, and the serialization of the second message (KeyExchange) as defined by the Thread spec.

In order to benefit from this symmetry, we choose a different naming convetion from the Thread v1.0 spec. Correspondance is indicated in the description as a pair C: client name, S: server name

## Enumeration Type Documentation

## ◆ mbedtls_ecjpake_role

enum mbedtls_ecjpake_role

Roles in the EC J-PAKE exchange

Enumerator
MBEDTLS_ECJPAKE_CLIENT | Client
MBEDTLS_ECJPAKE_SERVER | Server

Definition at line 54 of file ecjpake.h.

## Function Documentation

## ◆ mbedtls_ecjpake_check()

int mbedtls_ecjpake_check | ( | const mbedtls_ecjpake_context * | ctx | ) |

Check if a context is ready for use.

Parameters

  ctx | Context to check

Returns
  0 if the context is ready for use, MBEDTLS_ERR_ECP_BAD_INPUT_DATA otherwise

## ◆ mbedtls_ecjpake_derive_secret()

int mbedtls_ecjpake_derive_secret | ( | mbedtls_ecjpake_context * | ctx,
|  | unsigned char * | buf,
|  | size_t | len,
|  | size_t * | olen,
|  | int(*)(void *, unsigned char *, size_t) | f_rng,
|  | void * | p_rng
| ) |  |

Derive the shared secret (TLS: Pre-Master Secret)

Parameters

  ctx | Context to use
  buf | Buffer to write the contents to
  len | Buffer size
  olen | Will be updated with the number of bytes written
  f_rng | RNG function
  p_rng | RNG parameter

Returns
  0 if successfull, a negative error code otherwise

## ◆ mbedtls_ecjpake_free()

void mbedtls_ecjpake_free | ( | mbedtls_ecjpake_context * | ctx | ) |

Free a context's content.

Parameters

  ctx | context to free

## ◆ mbedtls_ecjpake_init()

void mbedtls_ecjpake_init | ( | mbedtls_ecjpake_context * | ctx | ) |

Initialize a context (just makes it ready for setup() or free()).

Parameters

  ctx | context to initialize

## ◆ mbedtls_ecjpake_read_round_one()

int mbedtls_ecjpake_read_round_one | ( | mbedtls_ecjpake_context * | ctx,
|  | const unsigned char * | buf,
|  | size_t | len
| ) |  |

Read and process the first round message (TLS: contents of the Client/ServerHello extension, excluding extension type and length bytes)

Parameters

  ctx | Context to use
  buf | Pointer to extension contents
  len | Extension length

Returns
  0 if successfull, a negative error code otherwise

## ◆ mbedtls_ecjpake_read_round_two()

int mbedtls_ecjpake_read_round_two | ( | mbedtls_ecjpake_context * | ctx,
|  | const unsigned char * | buf,
|  | size_t | len
| ) |  |

Read and process the second round message (TLS: contents of the Client/ServerKeyExchange)

Parameters

  ctx | Context to use
  buf | Pointer to the message
  len | Message length

Returns
  0 if successfull, a negative error code otherwise

## ◆ mbedtls_ecjpake_self_test()

int mbedtls_ecjpake_self_test | ( | int | verbose | ) |

Checkup routine.

Returns
  0 if successful, or 1 if a test failed

## ◆ mbedtls_ecjpake_setup()

int mbedtls_ecjpake_setup | ( | mbedtls_ecjpake_context * | ctx,
|  | mbedtls_ecjpake_role | role,
|  | mbedtls_md_type_t | hash,
|  | mbedtls_ecp_group_id | curve,
|  | const unsigned char * | secret,
|  | size_t | len
| ) |  |

Set up a context for use.

Note
  Currently the only values for hash/curve allowed by the standard are MBEDTLS_MD_SHA256/MBEDTLS_ECP_DP_SECP256R1.

Parameters

  ctx | context to set up
  role | Our role: client or server
  hash | hash function to use (MBEDTLS_MD_XXX)
  curve | elliptic curve identifier (MBEDTLS_ECP_DP_XXX)
  secret | pre-shared secret (passphrase)
  len | length of the shared secret

Returns
  0 if successfull, a negative error code otherwise

## ◆ mbedtls_ecjpake_write_round_one()

int mbedtls_ecjpake_write_round_one | ( | mbedtls_ecjpake_context * | ctx,
|  | unsigned char * | buf,
|  | size_t | len,
|  | size_t * | olen,
|  | int(*)(void *, unsigned char *, size_t) | f_rng,
|  | void * | p_rng
| ) |  |

Generate and write the first round message (TLS: contents of the Client/ServerHello extension, excluding extension type and length bytes)

Parameters

  ctx | Context to use
  buf | Buffer to write the contents to
  len | Buffer size
  olen | Will be updated with the number of bytes written
  f_rng | RNG function
  p_rng | RNG parameter

Returns
  0 if successfull, a negative error code otherwise

## ◆ mbedtls_ecjpake_write_round_two()

int mbedtls_ecjpake_write_round_two | ( | mbedtls_ecjpake_context * | ctx,
|  | unsigned char * | buf,
|  | size_t | len,
|  | size_t * | olen,
|  | int(*)(void *, unsigned char *, size_t) | f_rng,
|  | void * | p_rng
| ) |  |

Generate and write the second round message (TLS: contents of the Client/ServerKeyExchange)

Parameters

  ctx | Context to use
  buf | Buffer to write the contents to
  len | Buffer size
  olen | Will be updated with the number of bytes written
  f_rng | RNG function
  p_rng | RNG parameter

Returns
  0 if successfull, a negative error code otherwise