Embedded SDK
Embedded SDK
Loading...
Searching...
No Matches
cx_mldsa_packing.h
Go to the documentation of this file.
1/*****************************************************************************
2 * (c) 2026 Ledger SAS.
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 *****************************************************************************/
16
17#ifndef CX_MLDSA_PACKING_H
18#define CX_MLDSA_PACKING_H
19
20#include "cx_mldsa_poly.h"
21#include "lcx_mldsa.h"
22
31
39
48
56
66uint32_t MLDSA_PACK_polyeta(uint8_t *r, const mldsa_poly *a, uint8_t eta);
67
77uint32_t MLDSA_PACK_unpack_polyeta(mldsa_poly *r, const uint8_t *a, uint8_t eta);
78
88uint32_t MLDSA_PACK_polyz(uint8_t *r, const mldsa_poly *a, int32_t gamma1);
89
99uint32_t MLDSA_PACK_unpack_polyz(mldsa_poly *r, const uint8_t *a, int32_t gamma1);
100
111uint32_t MLDSA_PACK_polyw1(uint8_t *r, const mldsa_poly *a, int32_t gamma2);
112
121void MLDSA_PACK_pk(uint8_t *pk,
122 const uint8_t rho[MLDSA_SEEDBYTES],
123 const mldsa_poly *t1,
124 const MLDSA_param_info_t *p);
125
134void MLDSA_PACK_unpack_pk(uint8_t rho[MLDSA_SEEDBYTES],
135 mldsa_poly *t1,
136 const uint8_t *pk,
137 const MLDSA_param_info_t *p);
138
151void MLDSA_PACK_sk(uint8_t *sk,
152 const uint8_t rho[MLDSA_SEEDBYTES],
153 const uint8_t K[MLDSA_SEEDBYTES],
154 const uint8_t tr[MLDSA_TRBYTES],
155 const mldsa_poly *s1,
156 const mldsa_poly *s2,
157 const mldsa_poly *t0,
158 const MLDSA_param_info_t *p);
159
172void MLDSA_PACK_unpack_sk(uint8_t rho[MLDSA_SEEDBYTES],
173 uint8_t K[MLDSA_SEEDBYTES],
174 uint8_t tr[MLDSA_TRBYTES],
175 mldsa_poly *s1,
176 mldsa_poly *s2,
177 mldsa_poly *t0,
178 const uint8_t *sk,
179 const MLDSA_param_info_t *p);
180
190void MLDSA_PACK_sig(uint8_t *sig,
191 const uint8_t *ctilde,
192 const mldsa_poly *z,
193 const mldsa_poly *h,
194 const MLDSA_param_info_t *p);
195
207int MLDSA_PACK_unpack_sig(uint8_t *ctilde,
208 mldsa_poly *z,
209 mldsa_poly *h,
210 const uint8_t *sig,
211 const MLDSA_param_info_t *p);
212
213#endif /* CX_MLDSA_PACKING_H */
void MLDSA_PACK_sig(uint8_t *sig, const uint8_t *ctilde, const mldsa_poly *z, const mldsa_poly *h, const MLDSA_param_info_t *p)
Pack signature (c_tilde || z || h).
uint32_t MLDSA_PACK_polyw1(uint8_t *r, const mldsa_poly *a, int32_t gamma2)
Bit-pack polynomial w1 with coefficients fitting in ceil(log2((q-1)/(2*gamma2))) bits.
uint32_t MLDSA_PACK_unpack_polyeta(mldsa_poly *r, const uint8_t *a, uint8_t eta)
Unpack polynomial with coefficients in [-eta, eta].
void MLDSA_PACK_sk(uint8_t *sk, const uint8_t rho[MLDSA_SEEDBYTES], const uint8_t K[MLDSA_SEEDBYTES], const uint8_t tr[MLDSA_TRBYTES], const mldsa_poly *s1, const mldsa_poly *s2, const mldsa_poly *t0, const MLDSA_param_info_t *p)
Pack the secret key (rho || K || tr || s1 || s2 || t0).
void MLDSA_PACK_unpack_polyt0(mldsa_poly *r, const uint8_t a[MLDSA_POLYT0_PACKEDBYTES])
Unpack polynomial t0 from bytes.
void MLDSA_PACK_unpack_pk(uint8_t rho[MLDSA_SEEDBYTES], mldsa_poly *t1, const uint8_t *pk, const MLDSA_param_info_t *p)
Unpack the public key.
void MLDSA_PACK_unpack_sk(uint8_t rho[MLDSA_SEEDBYTES], uint8_t K[MLDSA_SEEDBYTES], uint8_t tr[MLDSA_TRBYTES], mldsa_poly *s1, mldsa_poly *s2, mldsa_poly *t0, const uint8_t *sk, const MLDSA_param_info_t *p)
Unpack the secret key.
void MLDSA_PACK_polyt1(uint8_t r[MLDSA_POLYT1_PACKEDBYTES], const mldsa_poly *a)
Bit-pack polynomial with coefficients a1 from power2round (10-bit values). Each coefficient uses 10 b...
uint32_t MLDSA_PACK_unpack_polyz(mldsa_poly *r, const uint8_t *a, int32_t gamma1)
Unpack polynomial z.
void MLDSA_PACK_pk(uint8_t *pk, const uint8_t rho[MLDSA_SEEDBYTES], const mldsa_poly *t1, const MLDSA_param_info_t *p)
Pack the public key (rho || t1).
int MLDSA_PACK_unpack_sig(uint8_t *ctilde, mldsa_poly *z, mldsa_poly *h, const uint8_t *sig, const MLDSA_param_info_t *p)
Unpack signature.
void MLDSA_PACK_unpack_polyt1(mldsa_poly *r, const uint8_t a[MLDSA_POLYT1_PACKEDBYTES])
Unpack polynomial t1 from bytes.
void MLDSA_PACK_polyt0(uint8_t r[MLDSA_POLYT0_PACKEDBYTES], const mldsa_poly *a)
Bit-pack polynomial with coefficients a0 from power2round. Coefficients in (-(2^{D-1}-1),...
uint32_t MLDSA_PACK_polyeta(uint8_t *r, const mldsa_poly *a, uint8_t eta)
Bit-pack polynomial with coefficients in [-eta, eta].
uint32_t MLDSA_PACK_polyz(uint8_t *r, const mldsa_poly *a, int32_t gamma1)
Bit-pack polynomial z with coefficients in [-(gamma1-1), gamma1].
#define MLDSA_TRBYTES
Definition lcx_mldsa.h:42
#define MLDSA_POLYT0_PACKEDBYTES
Definition lcx_mldsa.h:46
#define MLDSA_SEEDBYTES
Definition lcx_mldsa.h:40
#define MLDSA_POLYT1_PACKEDBYTES
Definition lcx_mldsa.h:45
ML-DSA (Module-Lattice Digital Signature Algorithm) public API.
ML-DSA parameter set descriptor holding all derived sizes.
Definition lcx_mldsa.h:179
Polynomial with MLDSA_N int32_t coefficients.