curve25519.c File Reference

Curve25519 elliptic curve (constant-time implementation) More...

#include "core/crypto.h"
#include "ecc/ec_curves.h"
#include "ecc/curve25519.h"
#include "debug.h"

Go to the source code of this file.

Macros

#define TRACE_LEVEL   CRYPTO_TRACE_LEVEL
 

Functions

void curve25519SetInt (uint32_t *a, uint32_t b)
 Set integer value. More...
 
void curve25519Add (uint32_t *r, const uint32_t *a, const uint32_t *b)
 Modular addition. More...
 
void curve25519AddInt (uint32_t *r, const uint32_t *a, uint32_t b)
 Modular addition. More...
 
void curve25519Sub (uint32_t *r, const uint32_t *a, const uint32_t *b)
 Modular subtraction. More...
 
void curve25519SubInt (uint32_t *r, const uint32_t *a, uint32_t b)
 Modular subtraction. More...
 
__weak_func void curve25519Mul (uint32_t *r, const uint32_t *a, const uint32_t *b)
 Modular multiplication. More...
 
void curve25519MulInt (uint32_t *r, const uint32_t *a, uint32_t b)
 Modular multiplication. More...
 
__weak_func void curve25519Sqr (uint32_t *r, const uint32_t *a)
 Modular squaring. More...
 
void curve25519Pwr2 (uint32_t *r, const uint32_t *a, uint_t n)
 Raise an integer to power 2^n. More...
 
void curve25519Red (uint32_t *r, const uint32_t *a)
 Modular reduction. More...
 
void curve25519Inv (uint32_t *r, const uint32_t *a)
 Modular multiplicative inverse. More...
 
uint32_t curve25519Sqrt (uint32_t *r, const uint32_t *a, const uint32_t *b)
 Compute the square root of (A / B) modulo p. More...
 
void curve25519Copy (uint32_t *a, const uint32_t *b)
 Copy an integer. More...
 
void curve25519Swap (uint32_t *a, uint32_t *b, uint32_t c)
 Conditional swap. More...
 
void curve25519Select (uint32_t *r, const uint32_t *a, const uint32_t *b, uint32_t c)
 Select an integer. More...
 
uint32_t curve25519Comp (const uint32_t *a, const uint32_t *b)
 Compare integers. More...
 
void curve25519Import (uint32_t *a, const uint8_t *data)
 Import an octet string. More...
 
void curve25519Export (uint32_t *a, uint8_t *data)
 Export an octet string. More...
 

Detailed Description

Curve25519 elliptic curve (constant-time implementation)

License

SPDX-License-Identifier: GPL-2.0-or-later

Copyright (C) 2010-2024 Oryx Embedded SARL. All rights reserved.

This file is part of CycloneCRYPTO Open.

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.

Author
Oryx Embedded SARL (www.oryx-embedded.com)
Version
2.4.4

Definition in file curve25519.c.

Macro Definition Documentation

◆ TRACE_LEVEL

#define TRACE_LEVEL   CRYPTO_TRACE_LEVEL

Definition at line 32 of file curve25519.c.

Function Documentation

◆ curve25519Add()

void curve25519Add ( uint32_t *  r,
const uint32_t *  a,
const uint32_t *  b 
)

Modular addition.

Parameters
[out]rResulting integer R = (A + B) mod p
[in]aAn integer such as 0 <= A < p
[in]bAn integer such as 0 <= B < p

Definition at line 79 of file curve25519.c.

◆ curve25519AddInt()

void curve25519AddInt ( uint32_t *  r,
const uint32_t *  a,
uint32_t  b 
)

Modular addition.

Parameters
[out]rResulting integer R = (A + B) mod p
[in]aAn integer such as 0 <= A < p
[in]bAn integer such as 0 <= B < (2^32 - 1)

Definition at line 105 of file curve25519.c.

◆ curve25519Comp()

uint32_t curve25519Comp ( const uint32_t *  a,
const uint32_t *  b 
)

Compare integers.

Parameters
[in]aPointer to the first integer
[in]bPointer to the second integer
Returns
The function returns 0 if the A = B, else 1

Definition at line 587 of file curve25519.c.

◆ curve25519Copy()

void curve25519Copy ( uint32_t *  a,
const uint32_t *  b 
)

Copy an integer.

Parameters
[out]aPointer to the destination integer
[in]bPointer to the source integer

Definition at line 515 of file curve25519.c.

◆ curve25519Export()

void curve25519Export ( uint32_t *  a,
uint8_t *  data 
)

Export an octet string.

Parameters
[in]aPointer to the integer to be exported
[out]dataOctet string resulting from the conversion

Definition at line 634 of file curve25519.c.

◆ curve25519Import()

void curve25519Import ( uint32_t *  a,
const uint8_t *  data 
)

Import an octet string.

Parameters
[out]aPointer to resulting integer
[in]dataOctet string to be converted

Definition at line 613 of file curve25519.c.

◆ curve25519Inv()

void curve25519Inv ( uint32_t *  r,
const uint32_t *  a 
)

Modular multiplicative inverse.

Parameters
[out]rResulting integer R = A^-1 mod p
[in]aAn integer such as 0 <= A < p

Definition at line 380 of file curve25519.c.

◆ curve25519Mul()

__weak_func void curve25519Mul ( uint32_t *  r,
const uint32_t *  a,
const uint32_t *  b 
)

Modular multiplication.

Parameters
[out]rResulting integer R = (A * B) mod p
[in]aAn integer such as 0 <= A < p
[in]bAn integer such as 0 <= B < p

Definition at line 191 of file curve25519.c.

◆ curve25519MulInt()

void curve25519MulInt ( uint32_t *  r,
const uint32_t *  a,
uint32_t  b 
)

Modular multiplication.

Parameters
[out]rResulting integer R = (A * B) mod p
[in]aAn integer such as 0 <= A < p
[in]bAn integer such as 0 <= B < (2^32 - 1)

Definition at line 277 of file curve25519.c.

◆ curve25519Pwr2()

void curve25519Pwr2 ( uint32_t *  r,
const uint32_t *  a,
uint_t  n 
)

Raise an integer to power 2^n.

Parameters
[out]rResulting integer R = (A ^ (2^n)) mod p
[in]aAn integer such as 0 <= A < p
[in]nAn integer such as n >= 1

Definition at line 331 of file curve25519.c.

◆ curve25519Red()

void curve25519Red ( uint32_t *  r,
const uint32_t *  a 
)

Modular reduction.

Parameters
[out]rResulting integer R = A mod p
[in]aAn integer such as 0 <= A < (2 * p)

Definition at line 352 of file curve25519.c.

◆ curve25519Select()

void curve25519Select ( uint32_t *  r,
const uint32_t *  a,
const uint32_t *  b,
uint32_t  c 
)

Select an integer.

Parameters
[out]rPointer to the destination integer
[in]aPointer to the first source integer
[in]bPointer to the second source integer
[in]cCondition variable

Definition at line 562 of file curve25519.c.

◆ curve25519SetInt()

void curve25519SetInt ( uint32_t *  a,
uint32_t  b 
)

Set integer value.

Parameters
[out]aPointer to the integer to be initialized
[in]bInitial value

Definition at line 57 of file curve25519.c.

◆ curve25519Sqr()

__weak_func void curve25519Sqr ( uint32_t *  r,
const uint32_t *  a 
)

Modular squaring.

Parameters
[out]rResulting integer R = (A ^ 2) mod p
[in]aAn integer such as 0 <= A < p

Definition at line 317 of file curve25519.c.

◆ curve25519Sqrt()

uint32_t curve25519Sqrt ( uint32_t *  r,
const uint32_t *  a,
const uint32_t *  b 
)

Compute the square root of (A / B) modulo p.

Parameters
[out]rResulting integer R = (A / B)^(1 / 2) mod p
[in]aAn integer such as 0 <= A < p
[in]bAn integer such as 0 < B < p
Returns
The function returns 0 if the square root exists, else 1

Definition at line 430 of file curve25519.c.

◆ curve25519Sub()

void curve25519Sub ( uint32_t *  r,
const uint32_t *  a,
const uint32_t *  b 
)

Modular subtraction.

Parameters
[out]rResulting integer R = (A - B) mod p
[in]aAn integer such as 0 <= A < p
[in]bAn integer such as 0 <= B < p

Definition at line 130 of file curve25519.c.

◆ curve25519SubInt()

void curve25519SubInt ( uint32_t *  r,
const uint32_t *  a,
uint32_t  b 
)

Modular subtraction.

Parameters
[out]rResulting integer R = (A - B) mod p
[in]aAn integer such as 0 <= A < p
[in]bAn integer such as 0 <= B < (2^32 - 1)

Definition at line 159 of file curve25519.c.

◆ curve25519Swap()

void curve25519Swap ( uint32_t *  a,
uint32_t *  b,
uint32_t  c 
)

Conditional swap.

Parameters
[in,out]aPointer to the first integer
[in,out]bPointer to the second integer
[in]cCondition variable

Definition at line 534 of file curve25519.c.