rc5-cipher 0.1.2

A generic use elliptic curve library
Documentation
pub trait Word:
    std::cmp::PartialEq
    + std::fmt::Debug
    + Copy
    + num::traits::WrappingAdd
    + num::traits::WrappingSub
    + num::traits::WrappingShl
    + num::traits::WrappingShr
    + std::ops::BitAnd<Output = Self>
    + std::ops::BitOr<Output = Self>
    + std::ops::BitXor<Output = Self>
    + std::ops::Shl<Output = Self>
    + std::ops::Shr<Output = Self>
{
    const ZERO: Self;
    const BYTES: usize;
    const P: Self;
    const Q: Self;

    fn from_usize(val: usize) -> Self;
    fn from_u8(val: u8) -> Self;
}

impl Word for u8 {
    const ZERO: Self = 0u8;
    const BYTES: usize = 1;
    const P: Self = 0xB7u8;
    const Q: Self = 0x9Fu8;

    fn from_usize(val: usize) -> Self {
        val as Self
    }

    fn from_u8(val: u8) -> Self {
        val as Self
    }
}

impl Word for u16 {
    const ZERO: Self = 0u16;
    const BYTES: usize = 2;
    const P: Self = 0xB7E1u16;
    const Q: Self = 0x9E37u16;

    fn from_usize(val: usize) -> Self {
        val as Self
    }

    fn from_u8(val: u8) -> Self {
        val as Self
    }
}

impl Word for u32 {
    const ZERO: Self = 0u32;
    const BYTES: usize = 4;
    const P: Self = 0xB7E15163u32;
    const Q: Self = 0x9E3779B9u32;

    fn from_usize(val: usize) -> Self {
        val as Self
    }

    fn from_u8(val: u8) -> Self {
        val as Self
    }
}

impl Word for u64 {
    const ZERO: Self = 0u64;
    const BYTES: usize = 8;
    const P: Self = 0xB7E151628AED2A6Bu64;
    const Q: Self = 0x9E3779B97F4A7C15u64;

    fn from_usize(val: usize) -> Self {
        val as Self
    }

    fn from_u8(val: u8) -> Self {
        val as Self
    }
}

impl Word for u128 {
    const ZERO: Self = 0u128;
    const BYTES: usize = 16;
    const P: Self = 0xB7E151628AED2A6ABF7158809CF4F3C7u128;
    const Q: Self = 0x9E3779B97F4A7C15F39CC0605CEDC835u128;

    fn from_usize(val: usize) -> Self {
        val as Self
    }

    fn from_u8(val: u8) -> Self {
        val as Self
    }
}