dsa.h
Go to the documentation of this file.
1 /**
2  * @file dsa.h
3  * @brief DSA (Digital Signature Algorithm)
4  *
5  * @section License
6  *
7  * SPDX-License-Identifier: GPL-2.0-or-later
8  *
9  * Copyright (C) 2010-2025 Oryx Embedded SARL. All rights reserved.
10  *
11  * This file is part of CycloneCRYPTO Open.
12  *
13  * This program is free software; you can redistribute it and/or
14  * modify it under the terms of the GNU General Public License
15  * as published by the Free Software Foundation; either version 2
16  * of the License, or (at your option) any later version.
17  *
18  * This program is distributed in the hope that it will be useful,
19  * but WITHOUT ANY WARRANTY; without even the implied warranty of
20  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21  * GNU General Public License for more details.
22  *
23  * You should have received a copy of the GNU General Public License
24  * along with this program; if not, write to the Free Software Foundation,
25  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
26  *
27  * @author Oryx Embedded SARL (www.oryx-embedded.com)
28  * @version 2.5.0
29  **/
30 
31 #ifndef _DSA_H
32 #define _DSA_H
33 
34 //Dependencies
35 #include "core/crypto.h"
36 #include "mpi/mpi.h"
37 
38 //C++ guard
39 #ifdef __cplusplus
40 extern "C" {
41 #endif
42 
43 
44 /**
45  * @brief DSA domain parameters
46  **/
47 
48 typedef struct
49 {
50  Mpi p; ///<Prime modulus
51  Mpi q; ///<Group order
52  Mpi g; ///<Group generator
54 
55 
56 /**
57  * @brief DSA public key
58  **/
59 
60 typedef struct
61 {
62  DsaDomainParameters params; ///<DSA domain parameters
63  Mpi y; ///<Public key value
64 } DsaPublicKey;
65 
66 
67 /**
68  * @brief DSA private key
69  **/
70 
71 typedef struct
72 {
73  DsaDomainParameters params; ///<DSA domain parameters
74  Mpi x; ///<Secret exponent
75  Mpi y; ///<Public key value
76  int_t slot; ///<Private key slot
78 
79 
80 /**
81  * @brief DSA signature
82  **/
83 
84 typedef struct
85 {
86  Mpi r;
87  Mpi s;
88 } DsaSignature;
89 
90 
91 //DSA related constants
92 extern const uint8_t DSA_OID[7];
93 extern const uint8_t DSA_WITH_SHA1_OID[7];
94 extern const uint8_t DSA_WITH_SHA224_OID[9];
95 extern const uint8_t DSA_WITH_SHA256_OID[9];
96 extern const uint8_t DSA_WITH_SHA384_OID[9];
97 extern const uint8_t DSA_WITH_SHA512_OID[9];
98 extern const uint8_t DSA_WITH_SHA3_224_OID[9];
99 extern const uint8_t DSA_WITH_SHA3_256_OID[9];
100 extern const uint8_t DSA_WITH_SHA3_384_OID[9];
101 extern const uint8_t DSA_WITH_SHA3_512_OID[9];
102 
103 //DSA related functions
106 
107 void dsaInitPublicKey(DsaPublicKey *key);
108 void dsaFreePublicKey(DsaPublicKey *key);
109 
112 
113 void dsaInitSignature(DsaSignature *signature);
114 void dsaFreeSignature(DsaSignature *signature);
115 
116 error_t dsaImportSignature(DsaSignature *signature, const uint8_t *data,
117  size_t length);
118 
119 error_t dsaExportSignature(const DsaSignature *signature, uint8_t *data,
120  size_t *length);
121 
122 error_t dsaGenerateSignature(const PrngAlgo *prngAlgo, void *prngContext,
123  const DsaPrivateKey *key, const uint8_t *digest, size_t digestLen,
124  DsaSignature *signature);
125 
127  const uint8_t *digest, size_t digestLen, const DsaSignature *signature);
128 
129 //C++ guard
130 #ifdef __cplusplus
131 }
132 #endif
133 
134 #endif
const uint8_t DSA_OID[7]
Definition: dsa.c:51
Mpi s
Definition: dsa.h:87
void dsaFreeDomainParameters(DsaDomainParameters *params)
Release DSA domain parameters.
Definition: dsa.c:91
Arbitrary precision integer.
Definition: mpi.h:102
signed int int_t
Definition: compiler_port.h:56
#define PrngAlgo
Definition: crypto.h:973
const uint8_t DSA_WITH_SHA384_OID[9]
Definition: dsa.c:59
Mpi q
Group order.
Definition: dsa.h:51
uint8_t data[]
Definition: ethernet.h:222
error_t dsaGenerateSignature(const PrngAlgo *prngAlgo, void *prngContext, const DsaPrivateKey *key, const uint8_t *digest, size_t digestLen, DsaSignature *signature)
DSA signature generation.
Definition: dsa.c:500
error_t dsaExportSignature(const DsaSignature *signature, uint8_t *data, size_t *length)
Export a DSA signature to ASN.1 format.
Definition: dsa.c:334
Mpi r
Definition: dsa.h:86
Mpi p
Prime modulus.
Definition: dsa.h:50
void dsaFreePrivateKey(DsaPrivateKey *key)
Release a DSA private key.
Definition: dsa.c:152
error_t dsaImportSignature(DsaSignature *signature, const uint8_t *data, size_t length)
Import an ASN.1 encoded DSA signature.
Definition: dsa.c:197
const uint8_t DSA_WITH_SHA3_256_OID[9]
Definition: dsa.c:65
DSA public key.
Definition: dsa.h:61
const uint8_t DSA_WITH_SHA224_OID[9]
Definition: dsa.c:55
error_t
Error codes.
Definition: error.h:43
Mpi g
Group generator.
Definition: dsa.h:52
const uint8_t DSA_WITH_SHA3_512_OID[9]
Definition: dsa.c:69
const uint8_t DSA_WITH_SHA1_OID[7]
Definition: dsa.c:53
DSA domain parameters.
Definition: dsa.h:49
MPI (Multiple Precision Integer Arithmetic)
General definitions for cryptographic algorithms.
Mpi y
Public key value.
Definition: dsa.h:75
DsaDomainParameters params
DSA domain parameters.
Definition: dsa.h:62
DSA private key.
Definition: dsa.h:72
uint8_t length
Definition: tcp.h:375
const uint8_t DSA_WITH_SHA3_384_OID[9]
Definition: dsa.c:67
void dsaFreeSignature(DsaSignature *signature)
Release a DSA signature.
Definition: dsa.c:181
void dsaInitDomainParameters(DsaDomainParameters *params)
Initialize DSA domain parameters.
Definition: dsa.c:77
void dsaInitSignature(DsaSignature *signature)
Initialize a DSA signature.
Definition: dsa.c:168
int_t slot
Private key slot.
Definition: dsa.h:76
const uint8_t DSA_WITH_SHA256_OID[9]
Definition: dsa.c:57
Mpi x
Secret exponent.
Definition: dsa.h:74
error_t dsaVerifySignature(const DsaPublicKey *key, const uint8_t *digest, size_t digestLen, const DsaSignature *signature)
DSA signature verification.
Definition: dsa.c:601
Mpi y
Public key value.
Definition: dsa.h:63
void dsaInitPublicKey(DsaPublicKey *key)
Initialize a DSA public key.
Definition: dsa.c:105
DsaDomainParameters params
DSA domain parameters.
Definition: dsa.h:73
DSA signature.
Definition: dsa.h:85
const uint8_t DSA_WITH_SHA512_OID[9]
Definition: dsa.c:61
void dsaFreePublicKey(DsaPublicKey *key)
Release a DSA public key.
Definition: dsa.c:119
void dsaInitPrivateKey(DsaPrivateKey *key)
Initialize a DSA private key.
Definition: dsa.c:133
const uint8_t DSA_WITH_SHA3_224_OID[9]
Definition: dsa.c:63