curve448.c File Reference

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

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

Go to the source code of this file.

Macros

#define TRACE_LEVEL   CRYPTO_TRACE_LEVEL
 

Functions

void curve448SetInt (uint32_t *a, uint32_t b)
 Set integer value. More...
 
void curve448Add (uint32_t *r, const uint32_t *a, const uint32_t *b)
 Modular addition. More...
 
void curve448AddInt (uint32_t *r, const uint32_t *a, uint32_t b)
 Modular addition. More...
 
void curve448Sub (uint32_t *r, const uint32_t *a, const uint32_t *b)
 Modular subtraction. More...
 
void curve448SubInt (uint32_t *r, const uint32_t *a, uint32_t b)
 Modular subtraction. More...
 
__weak_func void curve448Mul (uint32_t *r, const uint32_t *a, const uint32_t *b)
 Modular multiplication. More...
 
void curve448MulInt (uint32_t *r, const uint32_t *a, uint32_t b)
 Modular multiplication. More...
 
void curve448Sqr (uint32_t *r, const uint32_t *a)
 Modular squaring. More...
 
void curve448Pwr2 (uint32_t *r, const uint32_t *a, uint_t n)
 Raise an integer to power 2^n. More...
 
void curve448Red (uint32_t *r, const uint32_t *a, uint32_t h)
 Modular reduction. More...
 
void curve448Inv (uint32_t *r, const uint32_t *a)
 Modular multiplicative inverse. More...
 
uint32_t curve448Sqrt (uint32_t *r, const uint32_t *a, const uint32_t *b)
 Compute the square root of (A / B) modulo p. More...
 
void curve448Copy (uint32_t *a, const uint32_t *b)
 Copy an integer. More...
 
void curve448Swap (uint32_t *a, uint32_t *b, uint32_t c)
 Conditional swap. More...
 
void curve448Select (uint32_t *r, const uint32_t *a, const uint32_t *b, uint32_t c)
 Select an integer. More...
 
uint32_t curve448Comp (const uint32_t *a, const uint32_t *b)
 Compare integers. More...
 
void curve448Import (uint32_t *a, const uint8_t *data)
 Import an octet string. More...
 
void curve448Export (uint32_t *a, uint8_t *data)
 Export an octet string. More...
 

Detailed Description

Curve448 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 curve448.c.

Macro Definition Documentation

◆ TRACE_LEVEL

#define TRACE_LEVEL   CRYPTO_TRACE_LEVEL

Definition at line 32 of file curve448.c.

Function Documentation

◆ curve448Add()

void curve448Add ( 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 72 of file curve448.c.

◆ curve448AddInt()

void curve448AddInt ( 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 98 of file curve448.c.

◆ curve448Comp()

uint32_t curve448Comp ( 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 599 of file curve448.c.

◆ curve448Copy()

void curve448Copy ( 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 527 of file curve448.c.

◆ curve448Export()

void curve448Export ( 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 646 of file curve448.c.

◆ curve448Import()

void curve448Import ( 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 625 of file curve448.c.

◆ curve448Inv()

void curve448Inv ( 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 402 of file curve448.c.

◆ curve448Mul()

__weak_func void curve448Mul ( 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 199 of file curve448.c.

◆ curve448MulInt()

void curve448MulInt ( 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 290 of file curve448.c.

◆ curve448Pwr2()

void curve448Pwr2 ( 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 345 of file curve448.c.

◆ curve448Red()

void curve448Red ( uint32_t *  r,
const uint32_t *  a,
uint32_t  h 
)

Modular reduction.

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

Definition at line 367 of file curve448.c.

◆ curve448Select()

void curve448Select ( 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 574 of file curve448.c.

◆ curve448SetInt()

void curve448SetInt ( uint32_t *  a,
uint32_t  b 
)

Set integer value.

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

Definition at line 50 of file curve448.c.

◆ curve448Sqr()

void curve448Sqr ( 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 331 of file curve448.c.

◆ curve448Sqrt()

uint32_t curve448Sqrt ( 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 451 of file curve448.c.

◆ curve448Sub()

void curve448Sub ( 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 123 of file curve448.c.

◆ curve448SubInt()

void curve448SubInt ( 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 160 of file curve448.c.

◆ curve448Swap()

void curve448Swap ( 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 546 of file curve448.c.