1 // Copyright 2015-2016 Brian Smith. 2 // 3 // Permission to use, copy, modify, and/or distribute this software for any 4 // purpose with or without fee is hereby granted, provided that the above 5 // copyright notice and this permission notice appear in all copies. 6 // 7 // THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES 8 // WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 9 // MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY 10 // SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 11 // WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION 12 // OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN 13 // CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 14 15 //! Safe, fast, small crypto using Rust with BoringSSL's cryptography 16 //! primitives. 17 //! 18 //! # Feature Flags 19 //! 20 //! <table> 21 //! <tr><th>Feature 22 //! <th>Description 23 //! <tr><td><code>alloc (default)</code> 24 //! <td>Enable features that require use of the heap, RSA in particular. 25 //! <tr><td><code>dev_urandom_fallback (default)</code> 26 //! <td>This is only applicable to Linux. On Linux, by default, 27 //! <code>ring::rand::SystemRandom</code> will fall back to reading 28 //! from <code>/dev/urandom</code> if the <code>getrandom()</code> 29 //! syscall isn't supported at runtime. When the 30 //! <code>dev_urandom_fallback</code> feature is disabled, such 31 //! fallbacks will not occur. See the documentation for 32 //! <code>rand::SystemRandom</code> for more details. 33 //! <tr><td><code>std</code> 34 //! <td>Enable features that use libstd, in particular 35 //! <code>std::error::Error</code> integration. Implies `alloc`. 36 //! <tr><td><code>wasm32_c</code> 37 //! <td>Enables features that require a C compiler on wasm32 targets, such as 38 //! the <code>constant_time</code> module, HMAC verification, and PBKDF2 39 //! verification. Without this feature, only a subset of functionality 40 //! is provided to wasm32 targets so that a C compiler isn't needed. A 41 //! typical invocation would be: 42 //! <code>TARGET_CC=clang-10 TARGET_AR=llvm-ar-10 cargo test --target=wasm32-unknown-unknown --features=wasm32_c</code> 43 //! with <code>llvm-ar-10</code> and <code>clang-10</code> in <code>$PATH</code>. 44 //! (Going forward more functionality should be enabled by default, without 45 //! requiring these hacks, and without requiring a C compiler.) 46 //! </table> 47 48 #![doc(html_root_url = "https://briansmith.org/rustdoc/")] 49 #![allow( 50 clippy::collapsible_if, 51 clippy::identity_op, 52 clippy::len_without_is_empty, 53 clippy::len_zero, 54 clippy::let_unit_value, 55 clippy::many_single_char_names, 56 clippy::needless_range_loop, 57 clippy::new_without_default, 58 clippy::neg_cmp_op_on_partial_ord, 59 clippy::range_plus_one, 60 clippy::too_many_arguments, 61 clippy::trivially_copy_pass_by_ref, 62 clippy::type_complexity, 63 clippy::unreadable_literal, 64 missing_copy_implementations, 65 missing_debug_implementations, 66 non_camel_case_types, 67 non_snake_case, 68 unsafe_code 69 )] 70 // `#[derive(...)]` uses `trivial_numeric_casts` and `unused_qualifications` 71 // internally. 72 #![deny(missing_docs, unused_qualifications, variant_size_differences)] 73 #![forbid(unused_results)] 74 #![no_std] 75 76 #[cfg(feature = "alloc")] 77 extern crate alloc; 78 79 #[macro_use] 80 mod debug; 81 82 #[macro_use] 83 pub mod test; 84 85 #[macro_use] 86 mod arithmetic; 87 88 #[macro_use] 89 mod bssl; 90 91 #[macro_use] 92 mod polyfill; 93 94 pub mod aead; 95 pub mod agreement; 96 97 mod bits; 98 99 pub(crate) mod c; 100 pub mod constant_time; 101 102 pub mod io; 103 104 mod cpu; 105 pub mod digest; 106 mod ec; 107 mod endian; 108 pub mod error; 109 pub mod hkdf; 110 pub mod hmac; 111 mod limb; 112 pub mod pbkdf2; 113 pub mod pkcs8; 114 pub mod rand; 115 116 #[cfg(feature = "alloc")] 117 mod rsa; 118 119 pub mod signature; 120 121 mod sealed { 122 /// Traits that are designed to only be implemented internally in *ring*. 123 // 124 // Usage: 125 // ``` 126 // use crate::sealed; 127 // 128 // pub trait MyType: sealed::Sealed { 129 // // [...] 130 // } 131 // 132 // impl sealed::Sealed for MyType {} 133 // ``` 134 pub trait Sealed {} 135 } 136