1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
/* The AGPL version 3 License (AGPLv3)
*
* Copyright (c) 2021 Digital Freedom Defence Inc.
* This file is part of the QSC Cryptographic library
*
* This program is free software : you can redistribute it and / or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 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 Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*
*
* Copyright (c) Original-2021 John G. Underhill <john.underhill@mailfence.com>
* Copyright (c) 2022-Present QRC Eurosmart SA <opensource-support@qrcrypto.ch>
*
* The following code is a derivative work of the code from the QSC Cryptographic library in C,
* which is licensed AGPLv3. This code therefore is also licensed under the terms of
* the GNU Affero General Public License, version 3. The AGPL version 3 License (AGPLv3). */
use crate::;
/*
* \def QRC_ECDSA_SIGNATURE_SIZE
* \brief The byte size of the signature array
*/
pub const QRC_ECDSA_SIGNATURE_SIZE: usize = if QRC_ECDSA_S1EC25519 else ;
/*
* \def QRC_ECDSA_PRIVATEKEY_SIZE
* \brief The byte size of the secret private-key array
*/
pub const QRC_ECDSA_PRIVATEKEY_SIZE: usize = if QRC_ECDSA_S1EC25519 else ;
/*
* \def QRC_ECDSA_PUBLICKEY_SIZE
* \brief The byte size of the public-key array
*/
pub const QRC_ECDSA_PUBLICKEY_SIZE: usize = if QRC_ECDSA_S1EC25519 else ;
/*
* \def QRC_ECDSA_SEED_SIZE
* \brief The byte size of the random seed array
*/
pub const QRC_ECDSA_SEED_SIZE: usize = 32;
/*
* \def QRC_ECDSA_ALGNAME
* \brief The formal algorithm name
*/
pub const QRC_ECDSA_ALGNAME: &str = "ECDSA";
/*
* \brief Generates a ECDSA public/private key-pair.
*
* \warning Arrays must be sized to QRC_ECDSA_PUBLICKEY_SIZE and QRC_ECDSA_SECRETKEY_SIZE.
*
* \param publickey: Pointer to the public verification-key array
* \param privatekey: Pointer to the private signature-key array
* \param seed: [const] Pointer to the random 32-byte seed array
*/
/*
* \brief Generates a ECDSA public/private key-pair.
*
* \warning Arrays must be sized to QRC_ECDSA_PUBLICKEY_SIZE and QRC_ECDSA_SECRETKEY_SIZE.
*
* \param publickey: Pointer to the public verification-key array
* \param privatekey: Pointer to the private signature-key array
* \param rng_generate: Pointer to the random generator
*/
/*
* \brief Takes the message as input and returns an array containing the signature followed by the message.
*
* \warning Signature array must be sized to the size of the message plus QRC_ECDSA_SIGNATURE_SIZE.
*
* \param signedmsg: Pointer to the signed-message array
* \param smsglen: [const] Pointer to the signed message length
* \param message: Pointer to the message array
* \param msglen: The message length
* \param privatekey: [const] Pointer to the private signature-key array
*/
/*
* \brief Verifies a signature-message pair with the public key.
*
* \param message: Pointer to the message array to be signed
* \param msglen: Pointer to the message length
* \param signedmsg: [const] Pointer to the signed message array
* \param smsglen: The signed message length
* \param publickey: [const] Pointer to the public verification-key array
* \return Returns true for success
*/