ecjpake.h File Reference

Elliptic curve J-PAKE. More...

`#include "ecp.h"`
`#include "md.h"`
Include dependency graph for ecjpake.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

## Data Structures

struct | mbedtls_ecjpake_context
| EC J-PAKE context structure. More...

## Enumerations

enum | mbedtls_ecjpake_role { MBEDTLS_ECJPAKE_CLIENT = 0, MBEDTLS_ECJPAKE_SERVER }
| Roles in the EC J-PAKE exchange. More...

## 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)
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.

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)

Definition in file ecjpake.h.

## Enumeration Type Documentation

enum mbedtls_ecjpake_role

Roles in the EC J-PAKE exchange.

Enumerator
MBEDTLS_ECJPAKE_CLIENT | Client.
MBEDTLS_ECJPAKE_SERVER | Server.

Definition at line 53 of file ecjpake.h.

## Function Documentation

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

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

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

Free a context's content.

Parameters

  ctx | context to free

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

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

Parameters

  ctx | context to initialize

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

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

int mbedtls_ecjpake_self_test | ( | int | verbose | ) |

Checkup routine.

Returns
  0 if successful, or 1 if a test failed

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

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

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