1 /*
2 * Copyright 2024-2025 The OpenSSL Project Authors. All Rights Reserved.
3 *
4 * Licensed under the Apache License 2.0 (the "License"). You may not use
5 * this file except in compliance with the License. You can obtain a copy
6 * in the file LICENSE in the source distribution or at
7 * https://www.openssl.org/source/license.html
8 */
9
10 /* A 'k' by 'l' Matrix object ('k' rows and 'l' columns) containing polynomial scalars */
11 struct matrix_st {
12 POLY *m_poly;
13 size_t k, l;
14 };
15
16 /**
17 * @brief Initialize a Matrix object.
18 *
19 * @param m The matrix object.
20 * @param polys A preallocated array of k * l polynomial blocks. |m| does not
21 * own/free this.
22 * @param k The number of rows
23 * @param l The number of columns
24 */
25 static ossl_inline ossl_unused void
matrix_init(MATRIX * m,POLY * polys,size_t k,size_t l)26 matrix_init(MATRIX *m, POLY *polys, size_t k, size_t l)
27 {
28 m->k = k;
29 m->l = l;
30 m->m_poly = polys;
31 }
32
33 static ossl_inline ossl_unused void
matrix_mult_vector(const MATRIX * a,const VECTOR * s,VECTOR * t)34 matrix_mult_vector(const MATRIX *a, const VECTOR *s, VECTOR *t)
35 {
36 ossl_ml_dsa_matrix_mult_vector(a, s, t);
37 }
38
39 static ossl_inline ossl_unused int
matrix_expand_A(EVP_MD_CTX * g_ctx,const EVP_MD * md,const uint8_t * rho,MATRIX * out)40 matrix_expand_A(EVP_MD_CTX *g_ctx, const EVP_MD *md, const uint8_t *rho,
41 MATRIX *out)
42 {
43 return ossl_ml_dsa_matrix_expand_A(g_ctx, md, rho, out);
44 }
45