1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
// Copyright 2019 Stichting Organism // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // // Schnorr via ristretto // // Modified From the hard work off: // Authors: // - Isis Agora Lovecruft <isis@patternsinthevoid.net> // - Jeff Burdges <jeff@web3.foundation> // - The Tari Project Authors // - Cathie Yun <cathieyun@gmail.com> // - Tess Rinearson <tess.rinearson@gmail.com> // - Oleg Andreev <oleganza@gmail.com> //Modeled from //https://github.com/dalek-cryptography/ed25519-dalek/blob/master/src/ed25519.rs //Useful links: //https://blockstream.com/2018/01/23/musig-key-aggregation-schnorr-signatures/ //https://github.com/sipa/bips/blob/bip-schnorr/bip-schnorr.mediawiki //https://medium.com/cryptoadvance/how-schnorr-signatures-may-improve-bitcoin-91655bcb4744 mod errors; pub use errors::SchnorrError; mod tools; pub use tools::SigningContext; pub mod keys; pub mod signature; /// Export everything public in schnorr. pub use signature::{ Signature, SIGNATURE_LENGTH, }; /// Key Swap mod ecdh; pub use crate::ecdh::{ diffie_hellman, SharedSecret }; /// A Multisignature over many different messages mod multimessage; pub use multimessage::{ Multimessage }; mod multisignature; pub use multisignature::Multisignature; pub use crate::keys::*; mod batch; pub use batch::{ BatchVerification, BatchVerifier, SingleVerifier }; mod context; pub use context::MuSigContext; /// A Multisig Participator pub(crate) mod counterparty; /// Multisig local signer mod signer; pub use signer::{ Signer, SignerAwaitingCommitments, SignerAwaitingPrecommitments, SignerAwaitingShares, }; #[cfg(test)] mod musig_test; // use rand_core::{RngCore,CryptoRng}; // #[cfg(all(feature = "rand_os", feature = "rand"))] // fn rand_hack() -> impl RngCore+CryptoRng { // ::rand::thread_rng() // } // #[cfg(all(feature = "rand_os", not(feature = "rand")))] // fn rand_hack() -> impl RngCore+CryptoRng { // ::rand_os::OsRng::new().unwrap() // }