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>std</code>
26  //!     <td>Enable features that use libstd, in particular
27  //!         <code>std::error::Error</code> integration. Implies `alloc`.
28  //! <tr><td><code>wasm32_unknown_unknown_js</code>
29  //!     <td>When this feature is enabled, for the wasm32-unknown-unknown target,
30  //!         Web APIs will be used to implement features like `ring::rand` that
31  //!         require an operating environment of some kind. This has no effect
32  //!         for any other target. This enables the `getrandom` crate's `js`
33  //!         feature.
34  //! </table>
35  
36  // When running mk/package.sh, don't actually build any code.
37  #![cfg(not(pregenerate_asm_only))]
38  #![doc(html_root_url = "https://briansmith.org/rustdoc/")]
39  #![allow(
40      missing_copy_implementations,
41      missing_debug_implementations,
42      non_camel_case_types,
43      non_snake_case,
44      unsafe_code
45  )]
46  // `#[derive(...)]` uses `trivial_numeric_casts` and `unused_qualifications`
47  // internally.
48  #![deny(missing_docs, variant_size_differences)]
49  #![forbid(unused_results)]
50  #![no_std]
51  
52  #[cfg(feature = "alloc")]
53  extern crate alloc;
54  
55  #[macro_use]
56  mod debug;
57  
58  #[macro_use]
59  mod prefixed;
60  
61  #[macro_use]
62  pub mod test;
63  
64  #[macro_use]
65  mod arithmetic;
66  
67  #[macro_use]
68  mod bssl;
69  
70  #[macro_use]
71  mod polyfill;
72  
73  pub mod aead;
74  
75  #[cfg(not(target_arch = "wasm32"))]
76  pub mod agreement;
77  
78  mod bits;
79  
80  pub(crate) mod c;
81  pub mod constant_time;
82  
83  pub mod io;
84  
85  mod cpu;
86  pub mod digest;
87  mod ec;
88  mod endian;
89  pub mod error;
90  pub mod hkdf;
91  pub mod hmac;
92  mod limb;
93  pub mod pbkdf2;
94  pub mod pkcs8;
95  pub mod rand;
96  
97  #[cfg(feature = "alloc")]
98  pub mod rsa;
99  
100  pub mod signature;
101  
102  mod sealed {
103      /// Traits that are designed to only be implemented internally in *ring*.
104      //
105      // Usage:
106      // ```
107      // use crate::sealed;
108      //
109      // pub trait MyType: sealed::Sealed {
110      //     // [...]
111      // }
112      //
113      // impl sealed::Sealed for MyType {}
114      // ```
115      pub trait Sealed {}
116  }
117