sn_curv 0.10.1

Curv contains an extremely simple interface to onboard new elliptic curves. Use this library for general purpose elliptic curve cryptography
Documentation
#[cfg(test)]
#[macro_export]
macro_rules! test_for_all_curves {
    (#[should_panic] $fn: ident) => {
        crate::test_for_all_curves!([#[should_panic]] $fn);
    };
    ($fn: ident) => {
        crate::test_for_all_curves!([] $fn);
    };
    ([$($attrs:tt)*] $fn: ident) => {
        crate::test_for_all!{[$($attrs)*] $fn =>
            secp256k1 = crate::elliptic::curves::Secp256k1,
            p256 = crate::elliptic::curves::Secp256r1,
            ed25519 = crate::elliptic::curves::Ed25519,
            ristretto = crate::elliptic::curves::Ristretto,
            bls12_381_1 = crate::elliptic::curves::Bls12_381_1,
            bls12_381_2 = crate::elliptic::curves::Bls12_381_2,
        }
    };
}

#[cfg(test)]
#[macro_export]
macro_rules! test_for_all_hashes {
    (#[should_panic] $fn: ident) => {
        crate::test_for_all_hashes!([#[should_panic]] $fn);
    };
    ($fn: ident) => {
        crate::test_for_all_hashes!([] $fn);
    };
    ([$($attrs:tt)*] $fn: ident) => {
        crate::test_for_all!{[$($attrs)*] $fn =>
            sha256 = sha2::Sha256,
            sha512 = sha2::Sha512,
            sha3_256 = sha3::Sha3_256,
            sha3_512 = sha3::Sha3_512,
            blake2b = blake2::Blake2b,
            blake2s = blake2::Blake2s,
        }
    };
}

#[cfg(test)]
#[macro_export]
macro_rules! test_for_all {
    ([$($attrs:tt)*] $fn: ident =>) => {};
    ([$($attrs:tt)*] $fn: ident => $inst_name: ident = $inst:path, $($rest: tt)*) => {
        paste::paste!{
            #[test]
            $($attrs)*
            fn [<$fn _$inst_name>]() {
                $fn::<$inst>()
            }
        }
        crate::test_for_all!([$($attrs)*] $fn => $($rest)*);
    };
}

#[cfg(test)]
#[macro_export]
macro_rules! test_for_all_curves_and_hashes {
    (#[should_panic] $fn: ident) => {
        crate::test_for_all_curves_and_hashes!([#[should_panic]] $fn);
    };
    ($fn: ident) => {
        crate::test_for_all_curves_and_hashes!([] $fn);
    };
    ([$($attrs:tt)*] $fn: ident) => {
        crate::test_for_all_curves_and_hashes!{compose: [$($attrs)*] $fn =>
            secp256k1 = crate::elliptic::curves::Secp256k1,
            p256 = crate::elliptic::curves::Secp256r1,
            ed25519 = crate::elliptic::curves::Ed25519,
            ristretto = crate::elliptic::curves::Ristretto,
            bls12_381_1 = crate::elliptic::curves::Bls12_381_1,
            bls12_381_2 = crate::elliptic::curves::Bls12_381_2,
        }
    };
    (compose: [$($attrs:tt)*] $fn: ident =>) => {};
    (compose: [$($attrs:tt)*] $fn: ident => $inst_name: ident = $inst:path, $($rest: tt)*) => {
        crate::test_for_all_curves_and_hashes!{private: [$($attrs)*] $fn =>
            $inst_name = $inst | sha256 = sha2::Sha256,
            $inst_name = $inst | sha512 = sha2::Sha512,
        }
        crate::test_for_all_curves_and_hashes!(compose: [$($attrs)*] $fn => $($rest)*);
    };
    (private: [$($attrs:tt)*] $fn: ident =>) => {};
    (private: [$($attrs:tt)*] $fn:ident => $inst_name1:ident = $inst1: path | $inst_name2:ident = $inst2:path, $($rest: tt)*) => {
        paste::paste!{
            #[test]
            $($attrs)*
            fn [<$fn _$inst_name1 _$inst_name2>]() {
                $fn::<$inst1, $inst2>()
            }
        }
        crate::test_for_all_curves_and_hashes!(private: [$($attrs)*] $fn => $($rest)*);
    };
}