xref: /freebsd/contrib/bearssl/inc/bearssl_rsa.h (revision 72143e89bb430c3b1406b399b810806904f6c882)
1 /*
2  * Copyright (c) 2016 Thomas Pornin <pornin@bolet.org>
3  *
4  * Permission is hereby granted, free of charge, to any person obtaining
5  * a copy of this software and associated documentation files (the
6  * "Software"), to deal in the Software without restriction, including
7  * without limitation the rights to use, copy, modify, merge, publish,
8  * distribute, sublicense, and/or sell copies of the Software, and to
9  * permit persons to whom the Software is furnished to do so, subject to
10  * the following conditions:
11  *
12  * The above copyright notice and this permission notice shall be
13  * included in all copies or substantial portions of the Software.
14  *
15  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
19  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
20  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
21  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22  * SOFTWARE.
23  */
24 
25 #ifndef BR_BEARSSL_RSA_H__
26 #define BR_BEARSSL_RSA_H__
27 
28 #include <stddef.h>
29 #include <stdint.h>
30 
31 #include "bearssl_hash.h"
32 #include "bearssl_rand.h"
33 
34 #ifdef __cplusplus
35 extern "C" {
36 #endif
37 
38 /** \file bearssl_rsa.h
39  *
40  * # RSA
41  *
42  * This file documents the RSA implementations provided with BearSSL.
43  * Note that the SSL engine accesses these implementations through a
44  * configurable API, so it is possible to, for instance, run a SSL
45  * server which uses a RSA engine which is not based on this code.
46  *
47  * ## Key Elements
48  *
49  * RSA public and private keys consist in lists of big integers. All
50  * such integers are represented with big-endian unsigned notation:
51  * first byte is the most significant, and the value is positive (so
52  * there is no dedicated "sign bit"). Public and private key structures
53  * thus contain, for each such integer, a pointer to the first value byte
54  * (`unsigned char *`), and a length (`size_t`) which is the number of
55  * relevant bytes. As a general rule, minimal-length encoding is not
56  * enforced: values may have extra leading bytes of value 0.
57  *
58  * RSA public keys consist in two integers:
59  *
60  *   - the modulus (`n`);
61  *   - the public exponent (`e`).
62  *
63  * RSA private keys, as defined in
64  * [PKCS#1](https://tools.ietf.org/html/rfc3447), contain eight integers:
65  *
66  *   - the modulus (`n`);
67  *   - the public exponent (`e`);
68  *   - the private exponent (`d`);
69  *   - the first prime factor (`p`);
70  *   - the second prime factor (`q`);
71  *   - the first reduced exponent (`dp`, which is `d` modulo `p-1`);
72  *   - the second reduced exponent (`dq`, which is `d` modulo `q-1`);
73  *   - the CRT coefficient (`iq`, the inverse of `q` modulo `p`).
74  *
75  * However, the implementations defined in BearSSL use only five of
76  * these integers: `p`, `q`, `dp`, `dq` and `iq`.
77  *
78  * ## Security Features and Limitations
79  *
80  * The implementations contained in BearSSL have the following limitations
81  * and features:
82  *
83  *   - They are constant-time. This means that the execution time and
84  *     memory access pattern may depend on the _lengths_ of the private
85  *     key components, but not on their value, nor on the value of
86  *     the operand. Note that this property is not achieved through
87  *     random masking, but "true" constant-time code.
88  *
89  *   - They support only private keys with two prime factors. RSA private
90  *     keys with three or more prime factors are nominally supported, but
91  *     rarely used; they may offer faster operations, at the expense of
92  *     more code and potentially a reduction in security if there are
93  *     "too many" prime factors.
94  *
95  *   - The public exponent may have arbitrary length. Of course, it is
96  *     a good idea to keep public exponents small, so that public key
97  *     operations are fast; but, contrary to some widely deployed
98  *     implementations, BearSSL has no problem with public exponents
99  *     longer than 32 bits.
100  *
101  *   - The two prime factors of the modulus need not have the same length
102  *     (but severely imbalanced factor lengths might reduce security).
103  *     Similarly, there is no requirement that the first factor (`p`)
104  *     be greater than the second factor (`q`).
105  *
106  *   - Prime factors and modulus must be smaller than a compile-time limit.
107  *     This is made necessary by the use of fixed-size stack buffers, and
108  *     the limit has been adjusted to keep stack usage under 2 kB for the
109  *     RSA operations. Currently, the maximum modulus size is 4096 bits,
110  *     and the maximum prime factor size is 2080 bits.
111  *
112  *   - The RSA functions themselves do not enforce lower size limits,
113  *     except that which is absolutely necessary for the operation to
114  *     mathematically make sense (e.g. a PKCS#1 v1.5 signature with
115  *     SHA-1 requires a modulus of at least 361 bits). It is up to users
116  *     of this code to enforce size limitations when appropriate (e.g.
117  *     the X.509 validation engine, by default, rejects RSA keys of
118  *     less than 1017 bits).
119  *
120  *   - Within the size constraints expressed above, arbitrary bit lengths
121  *     are supported. There is no requirement that prime factors or
122  *     modulus have a size multiple of 8 or 16.
123  *
124  *   - When verifying PKCS#1 v1.5 signatures, both variants of the hash
125  *     function identifying header (with and without the ASN.1 NULL) are
126  *     supported. When producing such signatures, the variant with the
127  *     ASN.1 NULL is used.
128  *
129  * ## Implementations
130  *
131  * Three RSA implementations are included:
132  *
133  *   - The **i32** implementation internally represents big integers
134  *     as arrays of 32-bit integers. It is perfunctory and portable,
135  *     but not very efficient.
136  *
137  *   - The **i31** implementation uses 32-bit integers, each containing
138  *     31 bits worth of integer data. The i31 implementation is somewhat
139  *     faster than the i32 implementation (the reduced integer size makes
140  *     carry propagation easier) for a similar code footprint, but uses
141  *     very slightly larger stack buffers (about 4% bigger).
142  *
143  *   - The **i62** implementation is similar to the i31 implementation,
144  *     except that it internally leverages the 64x64->128 multiplication
145  *     opcode. This implementation is available only on architectures
146  *     where such an opcode exists. It is much faster than i31.
147  *
148  *   - The **i15** implementation uses 16-bit integers, each containing
149  *     15 bits worth of integer data. Multiplication results fit on
150  *     32 bits, so this won't use the "widening" multiplication routine
151  *     on ARM Cortex M0/M0+, for much better performance and constant-time
152  *     execution.
153  */
154 
155 /**
156  * \brief RSA public key.
157  *
158  * The structure references the modulus and the public exponent. Both
159  * integers use unsigned big-endian representation; extra leading bytes
160  * of value 0 are allowed.
161  */
162 typedef struct {
163 	/** \brief Modulus. */
164 	unsigned char *n;
165 	/** \brief Modulus length (in bytes). */
166 	size_t nlen;
167 	/** \brief Public exponent. */
168 	unsigned char *e;
169 	/** \brief Public exponent length (in bytes). */
170 	size_t elen;
171 } br_rsa_public_key;
172 
173 /**
174  * \brief RSA private key.
175  *
176  * The structure references the private factors, reduced private
177  * exponents, and CRT coefficient. It also contains the bit length of
178  * the modulus. The big integers use unsigned big-endian representation;
179  * extra leading bytes of value 0 are allowed. However, the modulus bit
180  * length (`n_bitlen`) MUST be exact.
181  */
182 typedef struct {
183 	/** \brief Modulus bit length (in bits, exact value). */
184 	uint32_t n_bitlen;
185 	/** \brief First prime factor. */
186 	unsigned char *p;
187 	/** \brief First prime factor length (in bytes). */
188 	size_t plen;
189 	/** \brief Second prime factor. */
190 	unsigned char *q;
191 	/** \brief Second prime factor length (in bytes). */
192 	size_t qlen;
193 	/** \brief First reduced private exponent. */
194 	unsigned char *dp;
195 	/** \brief First reduced private exponent length (in bytes). */
196 	size_t dplen;
197 	/** \brief Second reduced private exponent. */
198 	unsigned char *dq;
199 	/** \brief Second reduced private exponent length (in bytes). */
200 	size_t dqlen;
201 	/** \brief CRT coefficient. */
202 	unsigned char *iq;
203 	/** \brief CRT coefficient length (in bytes). */
204 	size_t iqlen;
205 } br_rsa_private_key;
206 
207 /**
208  * \brief Type for a RSA public key engine.
209  *
210  * The public key engine performs the modular exponentiation of the
211  * provided value with the public exponent. The value is modified in
212  * place.
213  *
214  * The value length (`xlen`) is verified to have _exactly_ the same
215  * length as the modulus (actual modulus length, without extra leading
216  * zeros in the modulus representation in memory). If the length does
217  * not match, then this function returns 0 and `x[]` is unmodified.
218  *
219  * It `xlen` is correct, then `x[]` is modified. Returned value is 1
220  * on success, 0 on error. Error conditions include an oversized `x[]`
221  * (the array has the same length as the modulus, but the numerical value
222  * is not lower than the modulus) and an invalid modulus (e.g. an even
223  * integer). If an error is reported, then the new contents of `x[]` are
224  * unspecified.
225  *
226  * \param x      operand to exponentiate.
227  * \param xlen   length of the operand (in bytes).
228  * \param pk     RSA public key.
229  * \return  1 on success, 0 on error.
230  */
231 typedef uint32_t (*br_rsa_public)(unsigned char *x, size_t xlen,
232 	const br_rsa_public_key *pk);
233 
234 /**
235  * \brief Type for a RSA signature verification engine (PKCS#1 v1.5).
236  *
237  * Parameters are:
238  *
239  *   - The signature itself. The provided array is NOT modified.
240  *
241  *   - The encoded OID for the hash function. The provided array must begin
242  *     with a single byte that contains the length of the OID value (in
243  *     bytes), followed by exactly that many bytes. This parameter may
244  *     also be `NULL`, in which case the raw hash value should be used
245  *     with the PKCS#1 v1.5 "type 1" padding (as used in SSL/TLS up
246  *     to TLS-1.1, with a 36-byte hash value).
247  *
248  *   - The hash output length, in bytes.
249  *
250  *   - The public key.
251  *
252  *   - An output buffer for the hash value. The caller must still compare
253  *     it with the hash of the data over which the signature is computed.
254  *
255  * **Constraints:**
256  *
257  *   - Hash length MUST be no more than 64 bytes.
258  *
259  *   - OID value length MUST be no more than 32 bytes (i.e. `hash_oid[0]`
260  *     must have a value in the 0..32 range, inclusive).
261  *
262  * This function verifies that the signature length (`xlen`) matches the
263  * modulus length (this function returns 0 on mismatch). If the modulus
264  * size exceeds the maximum supported RSA size, then the function also
265  * returns 0.
266  *
267  * Returned value is 1 on success, 0 on error.
268  *
269  * Implementations of this type need not be constant-time.
270  *
271  * \param x          signature buffer.
272  * \param xlen       signature length (in bytes).
273  * \param hash_oid   encoded hash algorithm OID (or `NULL`).
274  * \param hash_len   expected hash value length (in bytes).
275  * \param pk         RSA public key.
276  * \param hash_out   output buffer for the hash value.
277  * \return  1 on success, 0 on error.
278  */
279 typedef uint32_t (*br_rsa_pkcs1_vrfy)(const unsigned char *x, size_t xlen,
280 	const unsigned char *hash_oid, size_t hash_len,
281 	const br_rsa_public_key *pk, unsigned char *hash_out);
282 
283 /**
284  * \brief Type for a RSA signature verification engine (PSS).
285  *
286  * Parameters are:
287  *
288  *   - The signature itself. The provided array is NOT modified.
289  *
290  *   - The hash function which was used to hash the message.
291  *
292  *   - The hash function to use with MGF1 within the PSS padding. This
293  *     is not necessarily the same hash function as the one which was
294  *     used to hash the signed message.
295  *
296  *   - The hashed message (as an array of bytes).
297  *
298  *   - The PSS salt length (in bytes).
299  *
300  *   - The public key.
301  *
302  * **Constraints:**
303  *
304  *   - Hash message length MUST be no more than 64 bytes.
305  *
306  * Note that, contrary to PKCS#1 v1.5 signature, the hash value of the
307  * signed data cannot be extracted from the signature; it must be
308  * provided to the verification function.
309  *
310  * This function verifies that the signature length (`xlen`) matches the
311  * modulus length (this function returns 0 on mismatch). If the modulus
312  * size exceeds the maximum supported RSA size, then the function also
313  * returns 0.
314  *
315  * Returned value is 1 on success, 0 on error.
316  *
317  * Implementations of this type need not be constant-time.
318  *
319  * \param x          signature buffer.
320  * \param xlen       signature length (in bytes).
321  * \param hf_data    hash function applied on the message.
322  * \param hf_mgf1    hash function to use with MGF1.
323  * \param hash       hash value of the signed message.
324  * \param salt_len   PSS salt length (in bytes).
325  * \param pk         RSA public key.
326  * \return  1 on success, 0 on error.
327  */
328 typedef uint32_t (*br_rsa_pss_vrfy)(const unsigned char *x, size_t xlen,
329 	const br_hash_class *hf_data, const br_hash_class *hf_mgf1,
330 	const void *hash, size_t salt_len, const br_rsa_public_key *pk);
331 
332 /**
333  * \brief Type for a RSA encryption engine (OAEP).
334  *
335  * Parameters are:
336  *
337  *   - A source of random bytes. The source must be already initialized.
338  *
339  *   - A hash function, used internally with the mask generation function
340  *     (MGF1).
341  *
342  *   - A label. The `label` pointer may be `NULL` if `label_len` is zero
343  *     (an empty label, which is the default in PKCS#1 v2.2).
344  *
345  *   - The public key.
346  *
347  *   - The destination buffer. Its maximum length (in bytes) is provided;
348  *     if that length is lower than the public key length, then an error
349  *     is reported.
350  *
351  *   - The source message.
352  *
353  * The encrypted message output has exactly the same length as the modulus
354  * (mathematical length, in bytes, not counting extra leading zeros in the
355  * modulus representation in the public key).
356  *
357  * The source message (`src`, length `src_len`) may overlap with the
358  * destination buffer (`dst`, length `dst_max_len`).
359  *
360  * This function returns the actual encrypted message length, in bytes;
361  * on error, zero is returned. An error is reported if the output buffer
362  * is not large enough, or the public is invalid, or the public key
363  * modulus exceeds the maximum supported RSA size.
364  *
365  * \param rnd           source of random bytes.
366  * \param dig           hash function to use with MGF1.
367  * \param label         label value (may be `NULL` if `label_len` is zero).
368  * \param label_len     label length, in bytes.
369  * \param pk            RSA public key.
370  * \param dst           destination buffer.
371  * \param dst_max_len   destination buffer length (maximum encrypted data size).
372  * \param src           message to encrypt.
373  * \param src_len       source message length (in bytes).
374  * \return  encrypted message length (in bytes), or 0 on error.
375  */
376 typedef size_t (*br_rsa_oaep_encrypt)(
377 	const br_prng_class **rnd, const br_hash_class *dig,
378 	const void *label, size_t label_len,
379 	const br_rsa_public_key *pk,
380 	void *dst, size_t dst_max_len,
381 	const void *src, size_t src_len);
382 
383 /**
384  * \brief Type for a RSA private key engine.
385  *
386  * The `x[]` buffer is modified in place, and its length is inferred from
387  * the modulus length (`x[]` is assumed to have a length of
388  * `(sk->n_bitlen+7)/8` bytes).
389  *
390  * Returned value is 1 on success, 0 on error.
391  *
392  * \param x    operand to exponentiate.
393  * \param sk   RSA private key.
394  * \return  1 on success, 0 on error.
395  */
396 typedef uint32_t (*br_rsa_private)(unsigned char *x,
397 	const br_rsa_private_key *sk);
398 
399 /**
400  * \brief Type for a RSA signature generation engine (PKCS#1 v1.5).
401  *
402  * Parameters are:
403  *
404  *   - The encoded OID for the hash function. The provided array must begin
405  *     with a single byte that contains the length of the OID value (in
406  *     bytes), followed by exactly that many bytes. This parameter may
407  *     also be `NULL`, in which case the raw hash value should be used
408  *     with the PKCS#1 v1.5 "type 1" padding (as used in SSL/TLS up
409  *     to TLS-1.1, with a 36-byte hash value).
410  *
411  *   - The hash value computes over the data to sign (its length is
412  *     expressed in bytes).
413  *
414  *   - The RSA private key.
415  *
416  *   - The output buffer, that receives the signature.
417  *
418  * Returned value is 1 on success, 0 on error. Error conditions include
419  * a too small modulus for the provided hash OID and value, or some
420  * invalid key parameters. The signature length is exactly
421  * `(sk->n_bitlen+7)/8` bytes.
422  *
423  * This function is expected to be constant-time with regards to the
424  * private key bytes (lengths of the modulus and the individual factors
425  * may leak, though) and to the hashed data.
426  *
427  * \param hash_oid   encoded hash algorithm OID (or `NULL`).
428  * \param hash       hash value.
429  * \param hash_len   hash value length (in bytes).
430  * \param sk         RSA private key.
431  * \param x          output buffer for the signature value.
432  * \return  1 on success, 0 on error.
433  */
434 typedef uint32_t (*br_rsa_pkcs1_sign)(const unsigned char *hash_oid,
435 	const unsigned char *hash, size_t hash_len,
436 	const br_rsa_private_key *sk, unsigned char *x);
437 
438 /**
439  * \brief Type for a RSA signature generation engine (PSS).
440  *
441  * Parameters are:
442  *
443  *   - An initialized PRNG for salt generation. If the salt length is
444  *     zero (`salt_len` parameter), then the PRNG is optional (this is
445  *     not the typical case, as the security proof of RSA/PSS is
446  *     tighter when a non-empty salt is used).
447  *
448  *   - The hash function which was used to hash the message.
449  *
450  *   - The hash function to use with MGF1 within the PSS padding. This
451  *     is not necessarily the same function as the one used to hash the
452  *     message.
453  *
454  *   - The hashed message.
455  *
456  *   - The salt length, in bytes.
457  *
458  *   - The RSA private key.
459  *
460  *   - The output buffer, that receives the signature.
461  *
462  * Returned value is 1 on success, 0 on error. Error conditions include
463  * a too small modulus for the provided hash and salt lengths, or some
464  * invalid key parameters. The signature length is exactly
465  * `(sk->n_bitlen+7)/8` bytes.
466  *
467  * This function is expected to be constant-time with regards to the
468  * private key bytes (lengths of the modulus and the individual factors
469  * may leak, though) and to the hashed data.
470  *
471  * \param rng        PRNG for salt generation (`NULL` if `salt_len` is zero).
472  * \param hf_data    hash function used to hash the signed data.
473  * \param hf_mgf1    hash function to use with MGF1.
474  * \param hash       hashed message.
475  * \param salt_len   salt length (in bytes).
476  * \param sk         RSA private key.
477  * \param x          output buffer for the signature value.
478  * \return  1 on success, 0 on error.
479  */
480 typedef uint32_t (*br_rsa_pss_sign)(const br_prng_class **rng,
481 	const br_hash_class *hf_data, const br_hash_class *hf_mgf1,
482 	const unsigned char *hash_value, size_t salt_len,
483 	const br_rsa_private_key *sk, unsigned char *x);
484 
485 /**
486  * \brief Encoded OID for SHA-1 (in RSA PKCS#1 signatures).
487  */
488 #define BR_HASH_OID_SHA1     \
489 	((const unsigned char *)"\x05\x2B\x0E\x03\x02\x1A")
490 
491 /**
492  * \brief Encoded OID for SHA-224 (in RSA PKCS#1 signatures).
493  */
494 #define BR_HASH_OID_SHA224   \
495 	((const unsigned char *)"\x09\x60\x86\x48\x01\x65\x03\x04\x02\x04")
496 
497 /**
498  * \brief Encoded OID for SHA-256 (in RSA PKCS#1 signatures).
499  */
500 #define BR_HASH_OID_SHA256   \
501 	((const unsigned char *)"\x09\x60\x86\x48\x01\x65\x03\x04\x02\x01")
502 
503 /**
504  * \brief Encoded OID for SHA-384 (in RSA PKCS#1 signatures).
505  */
506 #define BR_HASH_OID_SHA384   \
507 	((const unsigned char *)"\x09\x60\x86\x48\x01\x65\x03\x04\x02\x02")
508 
509 /**
510  * \brief Encoded OID for SHA-512 (in RSA PKCS#1 signatures).
511  */
512 #define BR_HASH_OID_SHA512   \
513 	((const unsigned char *)"\x09\x60\x86\x48\x01\x65\x03\x04\x02\x03")
514 
515 /**
516  * \brief Type for a RSA decryption engine (OAEP).
517  *
518  * Parameters are:
519  *
520  *   - A hash function, used internally with the mask generation function
521  *     (MGF1).
522  *
523  *   - A label. The `label` pointer may be `NULL` if `label_len` is zero
524  *     (an empty label, which is the default in PKCS#1 v2.2).
525  *
526  *   - The private key.
527  *
528  *   - The source and destination buffer. The buffer initially contains
529  *     the encrypted message; the buffer contents are altered, and the
530  *     decrypted message is written at the start of that buffer
531  *     (decrypted message is always shorter than the encrypted message).
532  *
533  * If decryption fails in any way, then `*len` is unmodified, and the
534  * function returns 0. Otherwise, `*len` is set to the decrypted message
535  * length, and 1 is returned. The implementation is responsible for
536  * checking that the input message length matches the key modulus length,
537  * and that the padding is correct.
538  *
539  * Implementations MUST use constant-time check of the validity of the
540  * OAEP padding, at least until the leading byte and hash value have
541  * been checked. Whether overall decryption worked, and the length of
542  * the decrypted message, may leak.
543  *
544  * \param dig         hash function to use with MGF1.
545  * \param label       label value (may be `NULL` if `label_len` is zero).
546  * \param label_len   label length, in bytes.
547  * \param sk          RSA private key.
548  * \param data        input/output buffer.
549  * \param len         encrypted/decrypted message length.
550  * \return  1 on success, 0 on error.
551  */
552 typedef uint32_t (*br_rsa_oaep_decrypt)(
553 	const br_hash_class *dig, const void *label, size_t label_len,
554 	const br_rsa_private_key *sk, void *data, size_t *len);
555 
556 /*
557  * RSA "i32" engine. Integers are internally represented as arrays of
558  * 32-bit integers, and the core multiplication primitive is the
559  * 32x32->64 multiplication.
560  */
561 
562 /**
563  * \brief RSA public key engine "i32".
564  *
565  * \see br_rsa_public
566  *
567  * \param x      operand to exponentiate.
568  * \param xlen   length of the operand (in bytes).
569  * \param pk     RSA public key.
570  * \return  1 on success, 0 on error.
571  */
572 uint32_t br_rsa_i32_public(unsigned char *x, size_t xlen,
573 	const br_rsa_public_key *pk);
574 
575 /**
576  * \brief RSA signature verification engine "i32" (PKCS#1 v1.5 signatures).
577  *
578  * \see br_rsa_pkcs1_vrfy
579  *
580  * \param x          signature buffer.
581  * \param xlen       signature length (in bytes).
582  * \param hash_oid   encoded hash algorithm OID (or `NULL`).
583  * \param hash_len   expected hash value length (in bytes).
584  * \param pk         RSA public key.
585  * \param hash_out   output buffer for the hash value.
586  * \return  1 on success, 0 on error.
587  */
588 uint32_t br_rsa_i32_pkcs1_vrfy(const unsigned char *x, size_t xlen,
589 	const unsigned char *hash_oid, size_t hash_len,
590 	const br_rsa_public_key *pk, unsigned char *hash_out);
591 
592 /**
593  * \brief RSA signature verification engine "i32" (PSS signatures).
594  *
595  * \see br_rsa_pss_vrfy
596  *
597  * \param x          signature buffer.
598  * \param xlen       signature length (in bytes).
599  * \param hf_data    hash function applied on the message.
600  * \param hf_mgf1    hash function to use with MGF1.
601  * \param hash       hash value of the signed message.
602  * \param salt_len   PSS salt length (in bytes).
603  * \param pk         RSA public key.
604  * \return  1 on success, 0 on error.
605  */
606 uint32_t br_rsa_i32_pss_vrfy(const unsigned char *x, size_t xlen,
607 	const br_hash_class *hf_data, const br_hash_class *hf_mgf1,
608 	const void *hash, size_t salt_len, const br_rsa_public_key *pk);
609 
610 /**
611  * \brief RSA private key engine "i32".
612  *
613  * \see br_rsa_private
614  *
615  * \param x    operand to exponentiate.
616  * \param sk   RSA private key.
617  * \return  1 on success, 0 on error.
618  */
619 uint32_t br_rsa_i32_private(unsigned char *x,
620 	const br_rsa_private_key *sk);
621 
622 /**
623  * \brief RSA signature generation engine "i32" (PKCS#1 v1.5 signatures).
624  *
625  * \see br_rsa_pkcs1_sign
626  *
627  * \param hash_oid   encoded hash algorithm OID (or `NULL`).
628  * \param hash       hash value.
629  * \param hash_len   hash value length (in bytes).
630  * \param sk         RSA private key.
631  * \param x          output buffer for the hash value.
632  * \return  1 on success, 0 on error.
633  */
634 uint32_t br_rsa_i32_pkcs1_sign(const unsigned char *hash_oid,
635 	const unsigned char *hash, size_t hash_len,
636 	const br_rsa_private_key *sk, unsigned char *x);
637 
638 /**
639  * \brief RSA signature generation engine "i32" (PSS signatures).
640  *
641  * \see br_rsa_pss_sign
642  *
643  * \param rng        PRNG for salt generation (`NULL` if `salt_len` is zero).
644  * \param hf_data    hash function used to hash the signed data.
645  * \param hf_mgf1    hash function to use with MGF1.
646  * \param hash       hashed message.
647  * \param salt_len   salt length (in bytes).
648  * \param sk         RSA private key.
649  * \param x          output buffer for the signature value.
650  * \return  1 on success, 0 on error.
651  */
652 uint32_t br_rsa_i32_pss_sign(const br_prng_class **rng,
653 	const br_hash_class *hf_data, const br_hash_class *hf_mgf1,
654 	const unsigned char *hash_value, size_t salt_len,
655 	const br_rsa_private_key *sk, unsigned char *x);
656 
657 /*
658  * RSA "i31" engine. Similar to i32, but only 31 bits are used per 32-bit
659  * word. This uses slightly more stack space (about 4% more) and code
660  * space, but it quite faster.
661  */
662 
663 /**
664  * \brief RSA public key engine "i31".
665  *
666  * \see br_rsa_public
667  *
668  * \param x      operand to exponentiate.
669  * \param xlen   length of the operand (in bytes).
670  * \param pk     RSA public key.
671  * \return  1 on success, 0 on error.
672  */
673 uint32_t br_rsa_i31_public(unsigned char *x, size_t xlen,
674 	const br_rsa_public_key *pk);
675 
676 /**
677  * \brief RSA signature verification engine "i31" (PKCS#1 v1.5 signatures).
678  *
679  * \see br_rsa_pkcs1_vrfy
680  *
681  * \param x          signature buffer.
682  * \param xlen       signature length (in bytes).
683  * \param hash_oid   encoded hash algorithm OID (or `NULL`).
684  * \param hash_len   expected hash value length (in bytes).
685  * \param pk         RSA public key.
686  * \param hash_out   output buffer for the hash value.
687  * \return  1 on success, 0 on error.
688  */
689 uint32_t br_rsa_i31_pkcs1_vrfy(const unsigned char *x, size_t xlen,
690 	const unsigned char *hash_oid, size_t hash_len,
691 	const br_rsa_public_key *pk, unsigned char *hash_out);
692 
693 /**
694  * \brief RSA signature verification engine "i31" (PSS signatures).
695  *
696  * \see br_rsa_pss_vrfy
697  *
698  * \param x          signature buffer.
699  * \param xlen       signature length (in bytes).
700  * \param hf_data    hash function applied on the message.
701  * \param hf_mgf1    hash function to use with MGF1.
702  * \param hash       hash value of the signed message.
703  * \param salt_len   PSS salt length (in bytes).
704  * \param pk         RSA public key.
705  * \return  1 on success, 0 on error.
706  */
707 uint32_t br_rsa_i31_pss_vrfy(const unsigned char *x, size_t xlen,
708 	const br_hash_class *hf_data, const br_hash_class *hf_mgf1,
709 	const void *hash, size_t salt_len, const br_rsa_public_key *pk);
710 
711 /**
712  * \brief RSA private key engine "i31".
713  *
714  * \see br_rsa_private
715  *
716  * \param x    operand to exponentiate.
717  * \param sk   RSA private key.
718  * \return  1 on success, 0 on error.
719  */
720 uint32_t br_rsa_i31_private(unsigned char *x,
721 	const br_rsa_private_key *sk);
722 
723 /**
724  * \brief RSA signature generation engine "i31" (PKCS#1 v1.5 signatures).
725  *
726  * \see br_rsa_pkcs1_sign
727  *
728  * \param hash_oid   encoded hash algorithm OID (or `NULL`).
729  * \param hash       hash value.
730  * \param hash_len   hash value length (in bytes).
731  * \param sk         RSA private key.
732  * \param x          output buffer for the hash value.
733  * \return  1 on success, 0 on error.
734  */
735 uint32_t br_rsa_i31_pkcs1_sign(const unsigned char *hash_oid,
736 	const unsigned char *hash, size_t hash_len,
737 	const br_rsa_private_key *sk, unsigned char *x);
738 
739 /**
740  * \brief RSA signature generation engine "i31" (PSS signatures).
741  *
742  * \see br_rsa_pss_sign
743  *
744  * \param rng        PRNG for salt generation (`NULL` if `salt_len` is zero).
745  * \param hf_data    hash function used to hash the signed data.
746  * \param hf_mgf1    hash function to use with MGF1.
747  * \param hash       hashed message.
748  * \param salt_len   salt length (in bytes).
749  * \param sk         RSA private key.
750  * \param x          output buffer for the signature value.
751  * \return  1 on success, 0 on error.
752  */
753 uint32_t br_rsa_i31_pss_sign(const br_prng_class **rng,
754 	const br_hash_class *hf_data, const br_hash_class *hf_mgf1,
755 	const unsigned char *hash_value, size_t salt_len,
756 	const br_rsa_private_key *sk, unsigned char *x);
757 
758 /*
759  * RSA "i62" engine. Similar to i31, but internal multiplication use
760  * 64x64->128 multiplications. This is available only on architecture
761  * that offer such an opcode.
762  */
763 
764 /**
765  * \brief RSA public key engine "i62".
766  *
767  * This function is defined only on architecture that offer a 64x64->128
768  * opcode. Use `br_rsa_i62_public_get()` to dynamically obtain a pointer
769  * to that function.
770  *
771  * \see br_rsa_public
772  *
773  * \param x      operand to exponentiate.
774  * \param xlen   length of the operand (in bytes).
775  * \param pk     RSA public key.
776  * \return  1 on success, 0 on error.
777  */
778 uint32_t br_rsa_i62_public(unsigned char *x, size_t xlen,
779 	const br_rsa_public_key *pk);
780 
781 /**
782  * \brief RSA signature verification engine "i62" (PKCS#1 v1.5 signatures).
783  *
784  * This function is defined only on architecture that offer a 64x64->128
785  * opcode. Use `br_rsa_i62_pkcs1_vrfy_get()` to dynamically obtain a pointer
786  * to that function.
787  *
788  * \see br_rsa_pkcs1_vrfy
789  *
790  * \param x          signature buffer.
791  * \param xlen       signature length (in bytes).
792  * \param hash_oid   encoded hash algorithm OID (or `NULL`).
793  * \param hash_len   expected hash value length (in bytes).
794  * \param pk         RSA public key.
795  * \param hash_out   output buffer for the hash value.
796  * \return  1 on success, 0 on error.
797  */
798 uint32_t br_rsa_i62_pkcs1_vrfy(const unsigned char *x, size_t xlen,
799 	const unsigned char *hash_oid, size_t hash_len,
800 	const br_rsa_public_key *pk, unsigned char *hash_out);
801 
802 /**
803  * \brief RSA signature verification engine "i62" (PSS signatures).
804  *
805  * This function is defined only on architecture that offer a 64x64->128
806  * opcode. Use `br_rsa_i62_pss_vrfy_get()` to dynamically obtain a pointer
807  * to that function.
808  *
809  * \see br_rsa_pss_vrfy
810  *
811  * \param x          signature buffer.
812  * \param xlen       signature length (in bytes).
813  * \param hf_data    hash function applied on the message.
814  * \param hf_mgf1    hash function to use with MGF1.
815  * \param hash       hash value of the signed message.
816  * \param salt_len   PSS salt length (in bytes).
817  * \param pk         RSA public key.
818  * \return  1 on success, 0 on error.
819  */
820 uint32_t br_rsa_i62_pss_vrfy(const unsigned char *x, size_t xlen,
821 	const br_hash_class *hf_data, const br_hash_class *hf_mgf1,
822 	const void *hash, size_t salt_len, const br_rsa_public_key *pk);
823 
824 /**
825  * \brief RSA private key engine "i62".
826  *
827  * This function is defined only on architecture that offer a 64x64->128
828  * opcode. Use `br_rsa_i62_private_get()` to dynamically obtain a pointer
829  * to that function.
830  *
831  * \see br_rsa_private
832  *
833  * \param x    operand to exponentiate.
834  * \param sk   RSA private key.
835  * \return  1 on success, 0 on error.
836  */
837 uint32_t br_rsa_i62_private(unsigned char *x,
838 	const br_rsa_private_key *sk);
839 
840 /**
841  * \brief RSA signature generation engine "i62" (PKCS#1 v1.5 signatures).
842  *
843  * This function is defined only on architecture that offer a 64x64->128
844  * opcode. Use `br_rsa_i62_pkcs1_sign_get()` to dynamically obtain a pointer
845  * to that function.
846  *
847  * \see br_rsa_pkcs1_sign
848  *
849  * \param hash_oid   encoded hash algorithm OID (or `NULL`).
850  * \param hash       hash value.
851  * \param hash_len   hash value length (in bytes).
852  * \param sk         RSA private key.
853  * \param x          output buffer for the hash value.
854  * \return  1 on success, 0 on error.
855  */
856 uint32_t br_rsa_i62_pkcs1_sign(const unsigned char *hash_oid,
857 	const unsigned char *hash, size_t hash_len,
858 	const br_rsa_private_key *sk, unsigned char *x);
859 
860 /**
861  * \brief RSA signature generation engine "i62" (PSS signatures).
862  *
863  * This function is defined only on architecture that offer a 64x64->128
864  * opcode. Use `br_rsa_i62_pss_sign_get()` to dynamically obtain a pointer
865  * to that function.
866  *
867  * \see br_rsa_pss_sign
868  *
869  * \param rng        PRNG for salt generation (`NULL` if `salt_len` is zero).
870  * \param hf_data    hash function used to hash the signed data.
871  * \param hf_mgf1    hash function to use with MGF1.
872  * \param hash       hashed message.
873  * \param salt_len   salt length (in bytes).
874  * \param sk         RSA private key.
875  * \param x          output buffer for the signature value.
876  * \return  1 on success, 0 on error.
877  */
878 uint32_t br_rsa_i62_pss_sign(const br_prng_class **rng,
879 	const br_hash_class *hf_data, const br_hash_class *hf_mgf1,
880 	const unsigned char *hash_value, size_t salt_len,
881 	const br_rsa_private_key *sk, unsigned char *x);
882 
883 /**
884  * \brief Get the RSA "i62" implementation (public key operations),
885  * if available.
886  *
887  * \return  the implementation, or 0.
888  */
889 br_rsa_public br_rsa_i62_public_get(void);
890 
891 /**
892  * \brief Get the RSA "i62" implementation (PKCS#1 v1.5 signature verification),
893  * if available.
894  *
895  * \return  the implementation, or 0.
896  */
897 br_rsa_pkcs1_vrfy br_rsa_i62_pkcs1_vrfy_get(void);
898 
899 /**
900  * \brief Get the RSA "i62" implementation (PSS signature verification),
901  * if available.
902  *
903  * \return  the implementation, or 0.
904  */
905 br_rsa_pss_vrfy br_rsa_i62_pss_vrfy_get(void);
906 
907 /**
908  * \brief Get the RSA "i62" implementation (private key operations),
909  * if available.
910  *
911  * \return  the implementation, or 0.
912  */
913 br_rsa_private br_rsa_i62_private_get(void);
914 
915 /**
916  * \brief Get the RSA "i62" implementation (PKCS#1 v1.5 signature generation),
917  * if available.
918  *
919  * \return  the implementation, or 0.
920  */
921 br_rsa_pkcs1_sign br_rsa_i62_pkcs1_sign_get(void);
922 
923 /**
924  * \brief Get the RSA "i62" implementation (PSS signature generation),
925  * if available.
926  *
927  * \return  the implementation, or 0.
928  */
929 br_rsa_pss_sign br_rsa_i62_pss_sign_get(void);
930 
931 /**
932  * \brief Get the RSA "i62" implementation (OAEP encryption),
933  * if available.
934  *
935  * \return  the implementation, or 0.
936  */
937 br_rsa_oaep_encrypt br_rsa_i62_oaep_encrypt_get(void);
938 
939 /**
940  * \brief Get the RSA "i62" implementation (OAEP decryption),
941  * if available.
942  *
943  * \return  the implementation, or 0.
944  */
945 br_rsa_oaep_decrypt br_rsa_i62_oaep_decrypt_get(void);
946 
947 /*
948  * RSA "i15" engine. Integers are represented as 15-bit integers, so
949  * the code uses only 32-bit multiplication (no 64-bit result), which
950  * is vastly faster (and constant-time) on the ARM Cortex M0/M0+.
951  */
952 
953 /**
954  * \brief RSA public key engine "i15".
955  *
956  * \see br_rsa_public
957  *
958  * \param x      operand to exponentiate.
959  * \param xlen   length of the operand (in bytes).
960  * \param pk     RSA public key.
961  * \return  1 on success, 0 on error.
962  */
963 uint32_t br_rsa_i15_public(unsigned char *x, size_t xlen,
964 	const br_rsa_public_key *pk);
965 
966 /**
967  * \brief RSA signature verification engine "i15" (PKCS#1 v1.5 signatures).
968  *
969  * \see br_rsa_pkcs1_vrfy
970  *
971  * \param x          signature buffer.
972  * \param xlen       signature length (in bytes).
973  * \param hash_oid   encoded hash algorithm OID (or `NULL`).
974  * \param hash_len   expected hash value length (in bytes).
975  * \param pk         RSA public key.
976  * \param hash_out   output buffer for the hash value.
977  * \return  1 on success, 0 on error.
978  */
979 uint32_t br_rsa_i15_pkcs1_vrfy(const unsigned char *x, size_t xlen,
980 	const unsigned char *hash_oid, size_t hash_len,
981 	const br_rsa_public_key *pk, unsigned char *hash_out);
982 
983 /**
984  * \brief RSA signature verification engine "i15" (PSS signatures).
985  *
986  * \see br_rsa_pss_vrfy
987  *
988  * \param x          signature buffer.
989  * \param xlen       signature length (in bytes).
990  * \param hf_data    hash function applied on the message.
991  * \param hf_mgf1    hash function to use with MGF1.
992  * \param hash       hash value of the signed message.
993  * \param salt_len   PSS salt length (in bytes).
994  * \param pk         RSA public key.
995  * \return  1 on success, 0 on error.
996  */
997 uint32_t br_rsa_i15_pss_vrfy(const unsigned char *x, size_t xlen,
998 	const br_hash_class *hf_data, const br_hash_class *hf_mgf1,
999 	const void *hash, size_t salt_len, const br_rsa_public_key *pk);
1000 
1001 /**
1002  * \brief RSA private key engine "i15".
1003  *
1004  * \see br_rsa_private
1005  *
1006  * \param x    operand to exponentiate.
1007  * \param sk   RSA private key.
1008  * \return  1 on success, 0 on error.
1009  */
1010 uint32_t br_rsa_i15_private(unsigned char *x,
1011 	const br_rsa_private_key *sk);
1012 
1013 /**
1014  * \brief RSA signature generation engine "i15" (PKCS#1 v1.5 signatures).
1015  *
1016  * \see br_rsa_pkcs1_sign
1017  *
1018  * \param hash_oid   encoded hash algorithm OID (or `NULL`).
1019  * \param hash       hash value.
1020  * \param hash_len   hash value length (in bytes).
1021  * \param sk         RSA private key.
1022  * \param x          output buffer for the hash value.
1023  * \return  1 on success, 0 on error.
1024  */
1025 uint32_t br_rsa_i15_pkcs1_sign(const unsigned char *hash_oid,
1026 	const unsigned char *hash, size_t hash_len,
1027 	const br_rsa_private_key *sk, unsigned char *x);
1028 
1029 /**
1030  * \brief RSA signature generation engine "i15" (PSS signatures).
1031  *
1032  * \see br_rsa_pss_sign
1033  *
1034  * \param rng        PRNG for salt generation (`NULL` if `salt_len` is zero).
1035  * \param hf_data    hash function used to hash the signed data.
1036  * \param hf_mgf1    hash function to use with MGF1.
1037  * \param hash       hashed message.
1038  * \param salt_len   salt length (in bytes).
1039  * \param sk         RSA private key.
1040  * \param x          output buffer for the signature value.
1041  * \return  1 on success, 0 on error.
1042  */
1043 uint32_t br_rsa_i15_pss_sign(const br_prng_class **rng,
1044 	const br_hash_class *hf_data, const br_hash_class *hf_mgf1,
1045 	const unsigned char *hash_value, size_t salt_len,
1046 	const br_rsa_private_key *sk, unsigned char *x);
1047 
1048 /**
1049  * \brief Get "default" RSA implementation (public-key operations).
1050  *
1051  * This returns the preferred implementation of RSA (public-key operations)
1052  * on the current system.
1053  *
1054  * \return  the default implementation.
1055  */
1056 br_rsa_public br_rsa_public_get_default(void);
1057 
1058 /**
1059  * \brief Get "default" RSA implementation (private-key operations).
1060  *
1061  * This returns the preferred implementation of RSA (private-key operations)
1062  * on the current system.
1063  *
1064  * \return  the default implementation.
1065  */
1066 br_rsa_private br_rsa_private_get_default(void);
1067 
1068 /**
1069  * \brief Get "default" RSA implementation (PKCS#1 v1.5 signature verification).
1070  *
1071  * This returns the preferred implementation of RSA (signature verification)
1072  * on the current system.
1073  *
1074  * \return  the default implementation.
1075  */
1076 br_rsa_pkcs1_vrfy br_rsa_pkcs1_vrfy_get_default(void);
1077 
1078 /**
1079  * \brief Get "default" RSA implementation (PSS signature verification).
1080  *
1081  * This returns the preferred implementation of RSA (signature verification)
1082  * on the current system.
1083  *
1084  * \return  the default implementation.
1085  */
1086 br_rsa_pss_vrfy br_rsa_pss_vrfy_get_default(void);
1087 
1088 /**
1089  * \brief Get "default" RSA implementation (PKCS#1 v1.5 signature generation).
1090  *
1091  * This returns the preferred implementation of RSA (signature generation)
1092  * on the current system.
1093  *
1094  * \return  the default implementation.
1095  */
1096 br_rsa_pkcs1_sign br_rsa_pkcs1_sign_get_default(void);
1097 
1098 /**
1099  * \brief Get "default" RSA implementation (PSS signature generation).
1100  *
1101  * This returns the preferred implementation of RSA (signature generation)
1102  * on the current system.
1103  *
1104  * \return  the default implementation.
1105  */
1106 br_rsa_pss_sign br_rsa_pss_sign_get_default(void);
1107 
1108 /**
1109  * \brief Get "default" RSA implementation (OAEP encryption).
1110  *
1111  * This returns the preferred implementation of RSA (OAEP encryption)
1112  * on the current system.
1113  *
1114  * \return  the default implementation.
1115  */
1116 br_rsa_oaep_encrypt br_rsa_oaep_encrypt_get_default(void);
1117 
1118 /**
1119  * \brief Get "default" RSA implementation (OAEP decryption).
1120  *
1121  * This returns the preferred implementation of RSA (OAEP decryption)
1122  * on the current system.
1123  *
1124  * \return  the default implementation.
1125  */
1126 br_rsa_oaep_decrypt br_rsa_oaep_decrypt_get_default(void);
1127 
1128 /**
1129  * \brief RSA decryption helper, for SSL/TLS.
1130  *
1131  * This function performs the RSA decryption for a RSA-based key exchange
1132  * in a SSL/TLS server. The provided RSA engine is used. The `data`
1133  * parameter points to the value to decrypt, of length `len` bytes. On
1134  * success, the 48-byte pre-master secret is copied into `data`, starting
1135  * at the first byte of that buffer; on error, the contents of `data`
1136  * become indeterminate.
1137  *
1138  * This function first checks that the provided value length (`len`) is
1139  * not lower than 59 bytes, and matches the RSA modulus length; if neither
1140  * of this property is met, then this function returns 0 and the buffer
1141  * is unmodified.
1142  *
1143  * Otherwise, decryption and then padding verification are performed, both
1144  * in constant-time. A decryption error, or a bad padding, or an
1145  * incorrect decrypted value length are reported with a returned value of
1146  * 0; on success, 1 is returned. The caller (SSL server engine) is supposed
1147  * to proceed with a random pre-master secret in case of error.
1148  *
1149  * \param core   RSA private key engine.
1150  * \param sk     RSA private key.
1151  * \param data   input/output buffer.
1152  * \param len    length (in bytes) of the data to decrypt.
1153  * \return  1 on success, 0 on error.
1154  */
1155 uint32_t br_rsa_ssl_decrypt(br_rsa_private core, const br_rsa_private_key *sk,
1156 	unsigned char *data, size_t len);
1157 
1158 /**
1159  * \brief RSA encryption (OAEP) with the "i15" engine.
1160  *
1161  * \see br_rsa_oaep_encrypt
1162  *
1163  * \param rnd           source of random bytes.
1164  * \param dig           hash function to use with MGF1.
1165  * \param label         label value (may be `NULL` if `label_len` is zero).
1166  * \param label_len     label length, in bytes.
1167  * \param pk            RSA public key.
1168  * \param dst           destination buffer.
1169  * \param dst_max_len   destination buffer length (maximum encrypted data size).
1170  * \param src           message to encrypt.
1171  * \param src_len       source message length (in bytes).
1172  * \return  encrypted message length (in bytes), or 0 on error.
1173  */
1174 size_t br_rsa_i15_oaep_encrypt(
1175 	const br_prng_class **rnd, const br_hash_class *dig,
1176 	const void *label, size_t label_len,
1177 	const br_rsa_public_key *pk,
1178 	void *dst, size_t dst_max_len,
1179 	const void *src, size_t src_len);
1180 
1181 /**
1182  * \brief RSA decryption (OAEP) with the "i15" engine.
1183  *
1184  * \see br_rsa_oaep_decrypt
1185  *
1186  * \param dig         hash function to use with MGF1.
1187  * \param label       label value (may be `NULL` if `label_len` is zero).
1188  * \param label_len   label length, in bytes.
1189  * \param sk          RSA private key.
1190  * \param data        input/output buffer.
1191  * \param len         encrypted/decrypted message length.
1192  * \return  1 on success, 0 on error.
1193  */
1194 uint32_t br_rsa_i15_oaep_decrypt(
1195 	const br_hash_class *dig, const void *label, size_t label_len,
1196 	const br_rsa_private_key *sk, void *data, size_t *len);
1197 
1198 /**
1199  * \brief RSA encryption (OAEP) with the "i31" engine.
1200  *
1201  * \see br_rsa_oaep_encrypt
1202  *
1203  * \param rnd           source of random bytes.
1204  * \param dig           hash function to use with MGF1.
1205  * \param label         label value (may be `NULL` if `label_len` is zero).
1206  * \param label_len     label length, in bytes.
1207  * \param pk            RSA public key.
1208  * \param dst           destination buffer.
1209  * \param dst_max_len   destination buffer length (maximum encrypted data size).
1210  * \param src           message to encrypt.
1211  * \param src_len       source message length (in bytes).
1212  * \return  encrypted message length (in bytes), or 0 on error.
1213  */
1214 size_t br_rsa_i31_oaep_encrypt(
1215 	const br_prng_class **rnd, const br_hash_class *dig,
1216 	const void *label, size_t label_len,
1217 	const br_rsa_public_key *pk,
1218 	void *dst, size_t dst_max_len,
1219 	const void *src, size_t src_len);
1220 
1221 /**
1222  * \brief RSA decryption (OAEP) with the "i31" engine.
1223  *
1224  * \see br_rsa_oaep_decrypt
1225  *
1226  * \param dig         hash function to use with MGF1.
1227  * \param label       label value (may be `NULL` if `label_len` is zero).
1228  * \param label_len   label length, in bytes.
1229  * \param sk          RSA private key.
1230  * \param data        input/output buffer.
1231  * \param len         encrypted/decrypted message length.
1232  * \return  1 on success, 0 on error.
1233  */
1234 uint32_t br_rsa_i31_oaep_decrypt(
1235 	const br_hash_class *dig, const void *label, size_t label_len,
1236 	const br_rsa_private_key *sk, void *data, size_t *len);
1237 
1238 /**
1239  * \brief RSA encryption (OAEP) with the "i32" engine.
1240  *
1241  * \see br_rsa_oaep_encrypt
1242  *
1243  * \param rnd           source of random bytes.
1244  * \param dig           hash function to use with MGF1.
1245  * \param label         label value (may be `NULL` if `label_len` is zero).
1246  * \param label_len     label length, in bytes.
1247  * \param pk            RSA public key.
1248  * \param dst           destination buffer.
1249  * \param dst_max_len   destination buffer length (maximum encrypted data size).
1250  * \param src           message to encrypt.
1251  * \param src_len       source message length (in bytes).
1252  * \return  encrypted message length (in bytes), or 0 on error.
1253  */
1254 size_t br_rsa_i32_oaep_encrypt(
1255 	const br_prng_class **rnd, const br_hash_class *dig,
1256 	const void *label, size_t label_len,
1257 	const br_rsa_public_key *pk,
1258 	void *dst, size_t dst_max_len,
1259 	const void *src, size_t src_len);
1260 
1261 /**
1262  * \brief RSA decryption (OAEP) with the "i32" engine.
1263  *
1264  * \see br_rsa_oaep_decrypt
1265  *
1266  * \param dig         hash function to use with MGF1.
1267  * \param label       label value (may be `NULL` if `label_len` is zero).
1268  * \param label_len   label length, in bytes.
1269  * \param sk          RSA private key.
1270  * \param data        input/output buffer.
1271  * \param len         encrypted/decrypted message length.
1272  * \return  1 on success, 0 on error.
1273  */
1274 uint32_t br_rsa_i32_oaep_decrypt(
1275 	const br_hash_class *dig, const void *label, size_t label_len,
1276 	const br_rsa_private_key *sk, void *data, size_t *len);
1277 
1278 /**
1279  * \brief RSA encryption (OAEP) with the "i62" engine.
1280  *
1281  * This function is defined only on architecture that offer a 64x64->128
1282  * opcode. Use `br_rsa_i62_oaep_encrypt_get()` to dynamically obtain a pointer
1283  * to that function.
1284  *
1285  * \see br_rsa_oaep_encrypt
1286  *
1287  * \param rnd           source of random bytes.
1288  * \param dig           hash function to use with MGF1.
1289  * \param label         label value (may be `NULL` if `label_len` is zero).
1290  * \param label_len     label length, in bytes.
1291  * \param pk            RSA public key.
1292  * \param dst           destination buffer.
1293  * \param dst_max_len   destination buffer length (maximum encrypted data size).
1294  * \param src           message to encrypt.
1295  * \param src_len       source message length (in bytes).
1296  * \return  encrypted message length (in bytes), or 0 on error.
1297  */
1298 size_t br_rsa_i62_oaep_encrypt(
1299 	const br_prng_class **rnd, const br_hash_class *dig,
1300 	const void *label, size_t label_len,
1301 	const br_rsa_public_key *pk,
1302 	void *dst, size_t dst_max_len,
1303 	const void *src, size_t src_len);
1304 
1305 /**
1306  * \brief RSA decryption (OAEP) with the "i62" engine.
1307  *
1308  * This function is defined only on architecture that offer a 64x64->128
1309  * opcode. Use `br_rsa_i62_oaep_decrypt_get()` to dynamically obtain a pointer
1310  * to that function.
1311  *
1312  * \see br_rsa_oaep_decrypt
1313  *
1314  * \param dig         hash function to use with MGF1.
1315  * \param label       label value (may be `NULL` if `label_len` is zero).
1316  * \param label_len   label length, in bytes.
1317  * \param sk          RSA private key.
1318  * \param data        input/output buffer.
1319  * \param len         encrypted/decrypted message length.
1320  * \return  1 on success, 0 on error.
1321  */
1322 uint32_t br_rsa_i62_oaep_decrypt(
1323 	const br_hash_class *dig, const void *label, size_t label_len,
1324 	const br_rsa_private_key *sk, void *data, size_t *len);
1325 
1326 /**
1327  * \brief Get buffer size to hold RSA private key elements.
1328  *
1329  * This macro returns the length (in bytes) of the buffer needed to
1330  * receive the elements of a RSA private key, as generated by one of
1331  * the `br_rsa_*_keygen()` functions. If the provided size is a constant
1332  * expression, then the whole macro evaluates to a constant expression.
1333  *
1334  * \param size   target key size (modulus size, in bits)
1335  * \return  the length of the private key buffer, in bytes.
1336  */
1337 #define BR_RSA_KBUF_PRIV_SIZE(size)    (5 * (((size) + 15) >> 4))
1338 
1339 /**
1340  * \brief Get buffer size to hold RSA public key elements.
1341  *
1342  * This macro returns the length (in bytes) of the buffer needed to
1343  * receive the elements of a RSA public key, as generated by one of
1344  * the `br_rsa_*_keygen()` functions. If the provided size is a constant
1345  * expression, then the whole macro evaluates to a constant expression.
1346  *
1347  * \param size   target key size (modulus size, in bits)
1348  * \return  the length of the public key buffer, in bytes.
1349  */
1350 #define BR_RSA_KBUF_PUB_SIZE(size)     (4 + (((size) + 7) >> 3))
1351 
1352 /**
1353  * \brief Type for RSA key pair generator implementation.
1354  *
1355  * This function generates a new RSA key pair whose modulus has bit
1356  * length `size` bits. The private key elements are written in the
1357  * `kbuf_priv` buffer, and pointer values and length fields to these
1358  * elements are populated in the provided private key structure `sk`.
1359  * Similarly, the public key elements are written in `kbuf_pub`, with
1360  * pointers and lengths set in `pk`.
1361  *
1362  * If `pk` is `NULL`, then `kbuf_pub` may be `NULL`, and only the
1363  * private key is set.
1364  *
1365  * If `pubexp` is not zero, then its value will be used as public
1366  * exponent. Valid RSA public exponent values are odd integers
1367  * greater than 1. If `pubexp` is zero, then the public exponent will
1368  * have value 3.
1369  *
1370  * The provided PRNG (`rng_ctx`) must have already been initialized
1371  * and seeded.
1372  *
1373  * Returned value is 1 on success, 0 on error. An error is reported
1374  * if the requested range is outside of the supported key sizes, or
1375  * if an invalid non-zero public exponent value is provided. Supported
1376  * range starts at 512 bits, and up to an implementation-defined
1377  * maximum (by default 4096 bits). Note that key sizes up to 768 bits
1378  * have been broken in practice, and sizes lower than 2048 bits are
1379  * usually considered to be weak and should not be used.
1380  *
1381  * \param rng_ctx     source PRNG context (already initialized)
1382  * \param sk          RSA private key structure (destination)
1383  * \param kbuf_priv   buffer for private key elements
1384  * \param pk          RSA public key structure (destination), or `NULL`
1385  * \param kbuf_pub    buffer for public key elements, or `NULL`
1386  * \param size        target RSA modulus size (in bits)
1387  * \param pubexp      public exponent to use, or zero
1388  * \return  1 on success, 0 on error (invalid parameters)
1389  */
1390 typedef uint32_t (*br_rsa_keygen)(
1391 	const br_prng_class **rng_ctx,
1392 	br_rsa_private_key *sk, void *kbuf_priv,
1393 	br_rsa_public_key *pk, void *kbuf_pub,
1394 	unsigned size, uint32_t pubexp);
1395 
1396 /**
1397  * \brief RSA key pair generation with the "i15" engine.
1398  *
1399  * \see br_rsa_keygen
1400  *
1401  * \param rng_ctx     source PRNG context (already initialized)
1402  * \param sk          RSA private key structure (destination)
1403  * \param kbuf_priv   buffer for private key elements
1404  * \param pk          RSA public key structure (destination), or `NULL`
1405  * \param kbuf_pub    buffer for public key elements, or `NULL`
1406  * \param size        target RSA modulus size (in bits)
1407  * \param pubexp      public exponent to use, or zero
1408  * \return  1 on success, 0 on error (invalid parameters)
1409  */
1410 uint32_t br_rsa_i15_keygen(
1411 	const br_prng_class **rng_ctx,
1412 	br_rsa_private_key *sk, void *kbuf_priv,
1413 	br_rsa_public_key *pk, void *kbuf_pub,
1414 	unsigned size, uint32_t pubexp);
1415 
1416 /**
1417  * \brief RSA key pair generation with the "i31" engine.
1418  *
1419  * \see br_rsa_keygen
1420  *
1421  * \param rng_ctx     source PRNG context (already initialized)
1422  * \param sk          RSA private key structure (destination)
1423  * \param kbuf_priv   buffer for private key elements
1424  * \param pk          RSA public key structure (destination), or `NULL`
1425  * \param kbuf_pub    buffer for public key elements, or `NULL`
1426  * \param size        target RSA modulus size (in bits)
1427  * \param pubexp      public exponent to use, or zero
1428  * \return  1 on success, 0 on error (invalid parameters)
1429  */
1430 uint32_t br_rsa_i31_keygen(
1431 	const br_prng_class **rng_ctx,
1432 	br_rsa_private_key *sk, void *kbuf_priv,
1433 	br_rsa_public_key *pk, void *kbuf_pub,
1434 	unsigned size, uint32_t pubexp);
1435 
1436 /**
1437  * \brief RSA key pair generation with the "i62" engine.
1438  *
1439  * This function is defined only on architecture that offer a 64x64->128
1440  * opcode. Use `br_rsa_i62_keygen_get()` to dynamically obtain a pointer
1441  * to that function.
1442  *
1443  * \see br_rsa_keygen
1444  *
1445  * \param rng_ctx     source PRNG context (already initialized)
1446  * \param sk          RSA private key structure (destination)
1447  * \param kbuf_priv   buffer for private key elements
1448  * \param pk          RSA public key structure (destination), or `NULL`
1449  * \param kbuf_pub    buffer for public key elements, or `NULL`
1450  * \param size        target RSA modulus size (in bits)
1451  * \param pubexp      public exponent to use, or zero
1452  * \return  1 on success, 0 on error (invalid parameters)
1453  */
1454 uint32_t br_rsa_i62_keygen(
1455 	const br_prng_class **rng_ctx,
1456 	br_rsa_private_key *sk, void *kbuf_priv,
1457 	br_rsa_public_key *pk, void *kbuf_pub,
1458 	unsigned size, uint32_t pubexp);
1459 
1460 /**
1461  * \brief Get the RSA "i62" implementation (key pair generation),
1462  * if available.
1463  *
1464  * \return  the implementation, or 0.
1465  */
1466 br_rsa_keygen br_rsa_i62_keygen_get(void);
1467 
1468 /**
1469  * \brief Get "default" RSA implementation (key pair generation).
1470  *
1471  * This returns the preferred implementation of RSA (key pair generation)
1472  * on the current system.
1473  *
1474  * \return  the default implementation.
1475  */
1476 br_rsa_keygen br_rsa_keygen_get_default(void);
1477 
1478 /**
1479  * \brief Type for a modulus computing function.
1480  *
1481  * Such a function computes the public modulus from the private key. The
1482  * encoded modulus (unsigned big-endian) is written on `n`, and the size
1483  * (in bytes) is returned. If `n` is `NULL`, then the size is returned but
1484  * the modulus itself is not computed.
1485  *
1486  * If the key size exceeds an internal limit, 0 is returned.
1487  *
1488  * \param n    destination buffer (or `NULL`).
1489  * \param sk   RSA private key.
1490  * \return  the modulus length (in bytes), or 0.
1491  */
1492 typedef size_t (*br_rsa_compute_modulus)(void *n, const br_rsa_private_key *sk);
1493 
1494 /**
1495  * \brief Recompute RSA modulus ("i15" engine).
1496  *
1497  * \see br_rsa_compute_modulus
1498  *
1499  * \param n    destination buffer (or `NULL`).
1500  * \param sk   RSA private key.
1501  * \return  the modulus length (in bytes), or 0.
1502  */
1503 size_t br_rsa_i15_compute_modulus(void *n, const br_rsa_private_key *sk);
1504 
1505 /**
1506  * \brief Recompute RSA modulus ("i31" engine).
1507  *
1508  * \see br_rsa_compute_modulus
1509  *
1510  * \param n    destination buffer (or `NULL`).
1511  * \param sk   RSA private key.
1512  * \return  the modulus length (in bytes), or 0.
1513  */
1514 size_t br_rsa_i31_compute_modulus(void *n, const br_rsa_private_key *sk);
1515 
1516 /**
1517  * \brief Get "default" RSA implementation (recompute modulus).
1518  *
1519  * This returns the preferred implementation of RSA (recompute modulus)
1520  * on the current system.
1521  *
1522  * \return  the default implementation.
1523  */
1524 br_rsa_compute_modulus br_rsa_compute_modulus_get_default(void);
1525 
1526 /**
1527  * \brief Type for a public exponent computing function.
1528  *
1529  * Such a function recomputes the public exponent from the private key.
1530  * 0 is returned if any of the following occurs:
1531  *
1532  *   - Either `p` or `q` is not equal to 3 modulo 4.
1533  *
1534  *   - The public exponent does not fit on 32 bits.
1535  *
1536  *   - An internal limit is exceeded.
1537  *
1538  *   - The private key is invalid in some way.
1539  *
1540  * For all private keys produced by the key generator functions
1541  * (`br_rsa_keygen` type), this function succeeds and returns the true
1542  * public exponent. The public exponent is always an odd integer greater
1543  * than 1.
1544  *
1545  * \return  the public exponent, or 0.
1546  */
1547 typedef uint32_t (*br_rsa_compute_pubexp)(const br_rsa_private_key *sk);
1548 
1549 /**
1550  * \brief Recompute RSA public exponent ("i15" engine).
1551  *
1552  * \see br_rsa_compute_pubexp
1553  *
1554  * \return  the public exponent, or 0.
1555  */
1556 uint32_t br_rsa_i15_compute_pubexp(const br_rsa_private_key *sk);
1557 
1558 /**
1559  * \brief Recompute RSA public exponent ("i31" engine).
1560  *
1561  * \see br_rsa_compute_pubexp
1562  *
1563  * \return  the public exponent, or 0.
1564  */
1565 uint32_t br_rsa_i31_compute_pubexp(const br_rsa_private_key *sk);
1566 
1567 /**
1568  * \brief Get "default" RSA implementation (recompute public exponent).
1569  *
1570  * This returns the preferred implementation of RSA (recompute public
1571  * exponent) on the current system.
1572  *
1573  * \return  the default implementation.
1574  */
1575 br_rsa_compute_pubexp br_rsa_compute_pubexp_get_default(void);
1576 
1577 /**
1578  * \brief Type for a private exponent computing function.
1579  *
1580  * An RSA private key (`br_rsa_private_key`) contains two reduced
1581  * private exponents, which are sufficient to perform private key
1582  * operations. However, standard encoding formats for RSA private keys
1583  * require also a copy of the complete private exponent (non-reduced),
1584  * which this function recomputes.
1585  *
1586  * This function suceeds if all the following conditions hold:
1587  *
1588  *   - Both private factors `p` and `q` are equal to 3 modulo 4.
1589  *
1590  *   - The provided public exponent `pubexp` is correct, and, in particular,
1591  *     is odd, relatively prime to `p-1` and `q-1`, and greater than 1.
1592  *
1593  *   - No internal storage limit is exceeded.
1594  *
1595  * For all private keys produced by the key generator functions
1596  * (`br_rsa_keygen` type), this function succeeds. Note that the API
1597  * restricts the public exponent to a maximum size of 32 bits.
1598  *
1599  * The encoded private exponent is written in `d` (unsigned big-endian
1600  * convention), and the length (in bytes) is returned. If `d` is `NULL`,
1601  * then the exponent is not written anywhere, but the length is still
1602  * returned. On error, 0 is returned.
1603  *
1604  * Not all error conditions are detected when `d` is `NULL`; therefore, the
1605  * returned value shall be checked also when actually producing the value.
1606  *
1607  * \param d        destination buffer (or `NULL`).
1608  * \param sk       RSA private key.
1609  * \param pubexp   the public exponent.
1610  * \return  the private exponent length (in bytes), or 0.
1611  */
1612 typedef size_t (*br_rsa_compute_privexp)(void *d,
1613 	const br_rsa_private_key *sk, uint32_t pubexp);
1614 
1615 /**
1616  * \brief Recompute RSA private exponent ("i15" engine).
1617  *
1618  * \see br_rsa_compute_privexp
1619  *
1620  * \param d        destination buffer (or `NULL`).
1621  * \param sk       RSA private key.
1622  * \param pubexp   the public exponent.
1623  * \return  the private exponent length (in bytes), or 0.
1624  */
1625 size_t br_rsa_i15_compute_privexp(void *d,
1626 	const br_rsa_private_key *sk, uint32_t pubexp);
1627 
1628 /**
1629  * \brief Recompute RSA private exponent ("i31" engine).
1630  *
1631  * \see br_rsa_compute_privexp
1632  *
1633  * \param d        destination buffer (or `NULL`).
1634  * \param sk       RSA private key.
1635  * \param pubexp   the public exponent.
1636  * \return  the private exponent length (in bytes), or 0.
1637  */
1638 size_t br_rsa_i31_compute_privexp(void *d,
1639 	const br_rsa_private_key *sk, uint32_t pubexp);
1640 
1641 /**
1642  * \brief Get "default" RSA implementation (recompute private exponent).
1643  *
1644  * This returns the preferred implementation of RSA (recompute private
1645  * exponent) on the current system.
1646  *
1647  * \return  the default implementation.
1648  */
1649 br_rsa_compute_privexp br_rsa_compute_privexp_get_default(void);
1650 
1651 #ifdef __cplusplus
1652 }
1653 #endif
1654 
1655 #endif
1656