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