diff --git a/.cargo/audit.toml b/.cargo/audit.toml deleted file mode 100644 index 95c16be6..00000000 --- a/.cargo/audit.toml +++ /dev/null @@ -1,7 +0,0 @@ -# https://github.com/RustSec/cargo-audit/blob/master/audit.toml.example - -[advisories] -ignore = [ - "RUSTSEC-2021-0127", # serde_cbor - "RUSTSEC-2021-0145", # atty -] # advisory IDs to ignore e.g. ["RUSTSEC-2019-0001", ...] diff --git a/Cargo.lock b/Cargo.lock index 82375670..a6e2c7ce 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -13,15 +13,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "aho-corasick" -version = "1.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" -dependencies = [ - "memchr", -] - [[package]] name = "aria" version = "0.2.0-pre" @@ -30,23 +21,6 @@ dependencies = [ "hex-literal 0.4.1", ] -[[package]] -name = "atty" -version = "0.2.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" -dependencies = [ - "hermit-abi", - "libc", - "winapi", -] - -[[package]] -name = "autocfg" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" - [[package]] name = "belt-block" version = "0.2.0-pre.1" @@ -55,12 +29,6 @@ dependencies = [ "hex-literal 0.4.1", ] -[[package]] -name = "bitflags" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - [[package]] name = "blobby" version = "0.3.1" @@ -75,12 +43,6 @@ dependencies = [ "cipher", ] -[[package]] -name = "bumpalo" -version = "3.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" - [[package]] name = "byteorder" version = "1.5.0" @@ -95,12 +57,6 @@ dependencies = [ "cipher", ] -[[package]] -name = "cast" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" - [[package]] name = "cast5" version = "0.12.0-pre" @@ -135,17 +91,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "clap" -version = "2.34.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c" -dependencies = [ - "bitflags", - "textwrap", - "unicode-width", -] - [[package]] name = "cpufeatures" version = "0.2.12" @@ -155,76 +100,6 @@ dependencies = [ "libc", ] -[[package]] -name = "criterion" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b01d6de93b2b6c65e17c634a26653a29d107b3c98c607c765bf38d041531cd8f" -dependencies = [ - "atty", - "cast", - "clap", - "criterion-plot", - "csv", - "itertools", - "lazy_static", - "num-traits", - "oorandom", - "plotters", - "rayon", - "regex", - "serde", - "serde_cbor", - "serde_derive", - "serde_json", - "tinytemplate", - "walkdir", -] - -[[package]] -name = "criterion-cycles-per-byte" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07175eab62c9054f8828955f9a84ddd3f732f796ee99fb4898453d60be4bcbdc" -dependencies = [ - "criterion", -] - -[[package]] -name = "criterion-plot" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2673cc8207403546f45f5fd319a974b1e6983ad1a3ee7e6041650013be041876" -dependencies = [ - "cast", - "itertools", -] - -[[package]] -name = "crossbeam-deque" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" -dependencies = [ - "crossbeam-epoch", - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-epoch" -version = "0.9.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" -dependencies = [ - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-utils" -version = "0.8.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" - [[package]] name = "crypto-common" version = "0.2.0-rc.0" @@ -234,27 +109,6 @@ dependencies = [ "hybrid-array", ] -[[package]] -name = "csv" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac574ff4d437a7b5ad237ef331c17ccca63c46479e5b5453eb8e10bb99a759fe" -dependencies = [ - "csv-core", - "itoa", - "ryu", - "serde", -] - -[[package]] -name = "csv-core" -version = "0.1.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5efa2b3d7902f4b634a20cae3c9c4e6209dc4779feb6863329607560143efa70" -dependencies = [ - "memchr", -] - [[package]] name = "des" version = "0.9.0-pre.1" @@ -262,34 +116,11 @@ dependencies = [ "cipher", ] -[[package]] -name = "either" -version = "1.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" - [[package]] name = "gift-cipher" version = "0.0.0" dependencies = [ "cipher", - "criterion", - "criterion-cycles-per-byte", -] - -[[package]] -name = "half" -version = "1.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b43ede17f21864e81be2fa654110bf1e793774238d86ef8555c37e6519c0403" - -[[package]] -name = "hermit-abi" -version = "0.1.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" -dependencies = [ - "libc", ] [[package]] @@ -329,30 +160,6 @@ dependencies = [ "hybrid-array", ] -[[package]] -name = "itertools" -version = "0.10.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" -dependencies = [ - "either", -] - -[[package]] -name = "itoa" -version = "1.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" - -[[package]] -name = "js-sys" -version = "0.3.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" -dependencies = [ - "wasm-bindgen", -] - [[package]] name = "kuznyechik" version = "0.9.0-pre.1" @@ -361,24 +168,12 @@ dependencies = [ "hex-literal 0.4.1", ] -[[package]] -name = "lazy_static" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" - [[package]] name = "libc" version = "0.2.155" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" -[[package]] -name = "log" -version = "0.4.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" - [[package]] name = "magma" version = "0.10.0-pre.1" @@ -387,99 +182,6 @@ dependencies = [ "hex-literal 0.4.1", ] -[[package]] -name = "memchr" -version = "2.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" - -[[package]] -name = "num-traits" -version = "0.2.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" -dependencies = [ - "autocfg", -] - -[[package]] -name = "once_cell" -version = "1.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" - -[[package]] -name = "oorandom" -version = "11.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b410bbe7e14ab526a0e86877eb47c6996a2bd7746f027ba551028c925390e4e9" - -[[package]] -name = "plotters" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a15b6eccb8484002195a3e44fe65a4ce8e93a625797a063735536fd59cb01cf3" -dependencies = [ - "num-traits", - "plotters-backend", - "plotters-svg", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "plotters-backend" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "414cec62c6634ae900ea1c56128dfe87cf63e7caece0852ec76aba307cebadb7" - -[[package]] -name = "plotters-svg" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81b30686a7d9c3e010b84284bdd26a29f2138574f52f5eb6f794fc0ad924e705" -dependencies = [ - "plotters-backend", -] - -[[package]] -name = "proc-macro2" -version = "1.0.86" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "quote" -version = "1.0.36" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "rayon" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" -dependencies = [ - "either", - "rayon-core", -] - -[[package]] -name = "rayon-core" -version = "1.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" -dependencies = [ - "crossbeam-deque", - "crossbeam-utils", -] - [[package]] name = "rc2" version = "0.9.0-pre" @@ -494,92 +196,6 @@ dependencies = [ "cipher", ] -[[package]] -name = "regex" -version = "1.10.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b91213439dad192326a0d7c6ee3955910425f441d7038e0d6933b0aec5c4517f" -dependencies = [ - "aho-corasick", - "memchr", - "regex-automata", - "regex-syntax", -] - -[[package]] -name = "regex-automata" -version = "0.4.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df" -dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax", -] - -[[package]] -name = "regex-syntax" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" - -[[package]] -name = "ryu" -version = "1.0.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" - -[[package]] -name = "same-file" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" -dependencies = [ - "winapi-util", -] - -[[package]] -name = "serde" -version = "1.0.204" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc76f558e0cbb2a839d37354c575f1dc3fdc6546b5be373ba43d95f231bf7c12" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde_cbor" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bef2ebfde456fb76bbcf9f59315333decc4fda0b2b44b420243c11e0f5ec1f5" -dependencies = [ - "half", - "serde", -] - -[[package]] -name = "serde_derive" -version = "1.0.204" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0cd7e117be63d3c3678776753929474f3b04a43a080c744d6b0ae2a8c28e222" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "serde_json" -version = "1.0.121" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ab380d7d9f22ef3f21ad3e6c1ebe8e4fc7a2000ccba2e4d71fc96f15b2cb609" -dependencies = [ - "itoa", - "memchr", - "ryu", - "serde", -] - [[package]] name = "serpent" version = "0.6.0-pre" @@ -604,26 +220,6 @@ dependencies = [ "hex-literal 0.4.1", ] -[[package]] -name = "syn" -version = "2.0.72" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc4b9b9bf2add8093d3f2c0204471e951b2285580335de42f9d2534f3ae7a8af" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "textwrap" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" -dependencies = [ - "unicode-width", -] - [[package]] name = "threefish" version = "0.6.0-pre" @@ -633,16 +229,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "tinytemplate" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be4d6b5f19ff7664e8c98d03e2139cb510db9b0a60b55f8e8709b689d939b6bc" -dependencies = [ - "serde", - "serde_json", -] - [[package]] name = "twofish" version = "0.8.0-pre" @@ -657,196 +243,6 @@ version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" -[[package]] -name = "unicode-ident" -version = "1.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" - -[[package]] -name = "unicode-width" -version = "0.1.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0336d538f7abc86d282a4189614dfaa90810dfc2c6f6427eaf88e16311dd225d" - -[[package]] -name = "walkdir" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" -dependencies = [ - "same-file", - "winapi-util", -] - -[[package]] -name = "wasm-bindgen" -version = "0.2.92" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" -dependencies = [ - "cfg-if", - "wasm-bindgen-macro", -] - -[[package]] -name = "wasm-bindgen-backend" -version = "0.2.92" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" -dependencies = [ - "bumpalo", - "log", - "once_cell", - "proc-macro2", - "quote", - "syn", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-macro" -version = "0.2.92" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" -dependencies = [ - "quote", - "wasm-bindgen-macro-support", -] - -[[package]] -name = "wasm-bindgen-macro-support" -version = "0.2.92" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" -dependencies = [ - "proc-macro2", - "quote", - "syn", - "wasm-bindgen-backend", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-shared" -version = "0.2.92" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" - -[[package]] -name = "web-sys" -version = "0.3.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef" -dependencies = [ - "js-sys", - "wasm-bindgen", -] - -[[package]] -name = "winapi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" -dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", -] - -[[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" - -[[package]] -name = "winapi-util" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d4cc384e1e73b93bafa6fb4f1df8c41695c8a91cf9c4c64358067d15a7b6c6b" -dependencies = [ - "windows-sys", -] - -[[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" - -[[package]] -name = "windows-sys" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" -dependencies = [ - "windows-targets", -] - -[[package]] -name = "windows-targets" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" -dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_gnullvm", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc", -] - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" - -[[package]] -name = "windows_i686_gnu" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" - -[[package]] -name = "windows_i686_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" - -[[package]] -name = "windows_i686_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" - [[package]] name = "xtea" version = "0.0.0" diff --git a/gift/Cargo.toml b/gift/Cargo.toml index 1e3c6c90..658d12ff 100644 --- a/gift/Cargo.toml +++ b/gift/Cargo.toml @@ -17,18 +17,9 @@ cipher = "=0.5.0-pre.6" [dev-dependencies] cipher = { version = "=0.5.0-pre.6", features = ["dev"] } -criterion = "0.3.5" - -[target.'cfg(any(target_arch = "x86", target_arch = "x86_64"))'.dev-dependencies] -criterion-cycles-per-byte = "0.1.2" [features] zeroize = ["cipher/zeroize"] [package.metadata.docs.rs] rustdoc-args = ["--cfg", "docsrs"] - -[[bench]] -name = "gift128enc" -path = "benches/gift128enc.rs" -harness = false diff --git a/gift/benches/gift128enc.rs b/gift/benches/gift128enc.rs index eabfb492..2163ae71 100644 --- a/gift/benches/gift128enc.rs +++ b/gift/benches/gift128enc.rs @@ -1,32 +1,25 @@ -use criterion::{criterion_group, criterion_main, BenchmarkId, Criterion, Throughput}; -use criterion_cycles_per_byte::CyclesPerByte; -use gift_cipher::cipher::{BlockCipherEncrypt, KeyInit}; -use gift_cipher::Gift128; - -const KB: usize = 1024; - -fn bench(c: &mut Criterion) { - let mut group = c.benchmark_group("gift128enc"); - - let cipher128 = Gift128::new(&Default::default()); - - for size in &[KB, 2 * KB, 4 * KB, 8 * KB, 16 * KB] { - let mut buf = vec![Default::default(); *size / 16]; - - group.throughput(Throughput::Bytes(*size as u64)); +#![feature(test)] +extern crate test; - group.bench_function(BenchmarkId::new("encrypt-128", size), |b| { - b.iter(|| cipher128.encrypt_blocks(&mut buf)); - }); - } - - group.finish(); -} +use cipher::{block_decryptor_bench, block_encryptor_bench, KeyInit}; +use gift_cipher::Gift128; -criterion_group!( - name = benches; - config = Criterion::default().with_measurement(CyclesPerByte); - targets = bench +block_encryptor_bench!( + Key: Gift128, + gift128_encrypt_block, + gift128_encrypt_blocks, +); +block_decryptor_bench!( + Key: Gift128, + gift128_decrypt_block, + gift128_decrypt_blocks, ); -criterion_main!(benches); +#[bench] +fn gift128_new(bh: &mut test::Bencher) { + bh.iter(|| { + let key = test::black_box(Default::default()); + let cipher = Gift128::new(&key); + test::black_box(&cipher); + }); +} diff --git a/gift/src/gift.rs b/gift/src/gift.rs deleted file mode 100644 index 9e6d829d..00000000 --- a/gift/src/gift.rs +++ /dev/null @@ -1,134 +0,0 @@ -// This implementation is based on the -// 32-bit word oriented C implementation https://github.com/aadomn/gift/tree/master/crypto_bc/gift128/opt32 from https://github.com/aadomn/gift - -use cipher::{consts::U16, BlockCipher, Key, KeyInit, KeySizeUser}; -use core::fmt; - -#[cfg(feature = "zeroize")] -use cipher::zeroize::{Zeroize, ZeroizeOnDrop}; - -use crate::{ - consts::GIFT_RC, - key_schedule::{ - key_double_update_1, key_double_update_2, key_double_update_3, key_double_update_4, - key_triple_update_0, key_triple_update_1, key_triple_update_2, key_triple_update_3, - key_triple_update_4, key_update, rearrange_rkey_0, rearrange_rkey_1, rearrange_rkey_2, - rearrange_rkey_3, - }, - primitives::{ - inv_quintuple_round, packing, quintuple_round, swapmovesingle, u32big, unpacking, - }, -}; - -impl Gift128 { - #[inline] - fn precompute_rkeys(key: &[u8]) -> Self { - let mut rkey = [0u32; 80]; - rkey[0] = u32big(&(key[12..16])); - rkey[1] = u32big(&(key[4..8])); - rkey[2] = u32big(&(key[8..12])); - rkey[3] = u32big(&(key[0..4])); - - for i in (0..16).step_by(2) { - rkey[i + 4] = rkey[i + 1]; - rkey[i + 5] = key_update(&rkey[i]); - } - - for i in (0..20).step_by(10) { - rkey[i] = rearrange_rkey_0(&rkey[i]); - rkey[i + 1] = rearrange_rkey_0(&rkey[i + 1]); - rkey[i + 2] = rearrange_rkey_1(&rkey[i + 2]); - rkey[i + 3] = rearrange_rkey_1(&rkey[i + 3]); - rkey[i + 4] = rearrange_rkey_2(&rkey[i + 4]); - rkey[i + 5] = rearrange_rkey_2(&rkey[i + 5]); - rkey[i + 6] = rearrange_rkey_3(&rkey[i + 6]); - rkey[i + 7] = rearrange_rkey_3(&rkey[i + 7]); - } - - for i in (20..80).step_by(10) { - rkey[i] = rkey[i - 19]; - rkey[i + 1] = key_triple_update_0(&rkey[i - 20]); - rkey[i + 2] = key_double_update_1(&rkey[i - 17]); - rkey[i + 3] = key_triple_update_1(&rkey[i - 18]); - rkey[i + 4] = key_double_update_2(&rkey[i - 15]); - rkey[i + 5] = key_triple_update_2(&rkey[i - 16]); - rkey[i + 6] = key_double_update_3(&rkey[i - 13]); - rkey[i + 7] = key_triple_update_3(&rkey[i - 14]); - rkey[i + 8] = key_double_update_4(&rkey[i - 11]); - rkey[i + 9] = key_triple_update_4(&rkey[i - 12]); - swapmovesingle(&mut rkey[i], 0x00003333, 16); - swapmovesingle(&mut rkey[i], 0x55554444, 1); - swapmovesingle(&mut rkey[i + 1], 0x55551100, 1); - } - - Self { k: rkey } - } -} - -impl KeyInit for Gift128 { - fn new(key: &Key) -> Self { - Self::precompute_rkeys(key[0..16].try_into().unwrap()) - } -} - -macro_rules! impl_gift { - ($name:ident, $subkey_size:literal, $key_size:ty, $doc:literal) => { - #[doc = $doc] - #[derive(Clone)] - pub struct $name { - /// Subkeys - k: [u32; $subkey_size], - } - - impl BlockCipher for $name {} - - impl KeySizeUser for $name { - type KeySize = $key_size; - } - - impl fmt::Debug for $name { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - f.write_str(concat!(stringify!($name), " { ... }")) - } - } - - #[cfg(feature = "zeroize")] - #[cfg_attr(docsrs, doc(cfg(feature = "zeroize")))] - impl Drop for $name { - fn drop(&mut self) { - self.k.zeroize(); - } - } - - #[cfg(feature = "zeroize")] - #[cfg_attr(docsrs, doc(cfg(feature = "zeroize")))] - impl ZeroizeOnDrop for $name {} - - cipher::impl_simple_block_encdec!( - $name, U16, cipher, block, - encrypt: { - let b = block.get_in(); - let mut state = [0u32; 4]; - packing(&mut state, b); - for i in (0..40).step_by(5) { - quintuple_round(&mut state, &cipher.k[i*2..], &GIFT_RC[i..]); - } - unpacking(&state, block.get_out()); - } - decrypt: { - let b = block.get_in(); - let mut state = [0u32; 4]; - packing(&mut state, b); - let mut i: usize = 35; - while i > 0 { - inv_quintuple_round(&mut state, &cipher.k[i*2..], &GIFT_RC[i..]); - i -= 5; - } - inv_quintuple_round(&mut state, &cipher.k[i*2..], &GIFT_RC[i..]); - unpacking(&state, block.get_out()); - } - ); - }; -} - -impl_gift!(Gift128, 80, U16, "Gift-128 block cipher instance."); diff --git a/gift/src/lib.rs b/gift/src/lib.rs index f0cd1f44..872ef2dc 100644 --- a/gift/src/lib.rs +++ b/gift/src/lib.rs @@ -43,11 +43,138 @@ #![cfg_attr(docsrs, feature(doc_cfg))] #![warn(missing_docs, rust_2018_idioms)] +use cipher::{consts::U16, BlockCipher, Key, KeyInit, KeySizeUser}; +use core::fmt; + +#[cfg(feature = "zeroize")] +use cipher::zeroize::{Zeroize, ZeroizeOnDrop}; + pub use cipher; mod consts; -mod gift; mod key_schedule; mod primitives; -pub use crate::gift::Gift128; +use consts::GIFT_RC; +use key_schedule::{ + key_double_update_1, key_double_update_2, key_double_update_3, key_double_update_4, + key_triple_update_0, key_triple_update_1, key_triple_update_2, key_triple_update_3, + key_triple_update_4, key_update, rearrange_rkey_0, rearrange_rkey_1, rearrange_rkey_2, + rearrange_rkey_3, +}; +use primitives::{ + inv_quintuple_round, packing, quintuple_round, swapmovesingle, u32big, unpacking, +}; + +impl Gift128 { + #[inline] + fn precompute_rkeys(key: &[u8]) -> Self { + let mut rkey = [0u32; 80]; + rkey[0] = u32big(&(key[12..16])); + rkey[1] = u32big(&(key[4..8])); + rkey[2] = u32big(&(key[8..12])); + rkey[3] = u32big(&(key[0..4])); + + for i in (0..16).step_by(2) { + rkey[i + 4] = rkey[i + 1]; + rkey[i + 5] = key_update(&rkey[i]); + } + + for i in (0..20).step_by(10) { + rkey[i] = rearrange_rkey_0(&rkey[i]); + rkey[i + 1] = rearrange_rkey_0(&rkey[i + 1]); + rkey[i + 2] = rearrange_rkey_1(&rkey[i + 2]); + rkey[i + 3] = rearrange_rkey_1(&rkey[i + 3]); + rkey[i + 4] = rearrange_rkey_2(&rkey[i + 4]); + rkey[i + 5] = rearrange_rkey_2(&rkey[i + 5]); + rkey[i + 6] = rearrange_rkey_3(&rkey[i + 6]); + rkey[i + 7] = rearrange_rkey_3(&rkey[i + 7]); + } + + for i in (20..80).step_by(10) { + rkey[i] = rkey[i - 19]; + rkey[i + 1] = key_triple_update_0(&rkey[i - 20]); + rkey[i + 2] = key_double_update_1(&rkey[i - 17]); + rkey[i + 3] = key_triple_update_1(&rkey[i - 18]); + rkey[i + 4] = key_double_update_2(&rkey[i - 15]); + rkey[i + 5] = key_triple_update_2(&rkey[i - 16]); + rkey[i + 6] = key_double_update_3(&rkey[i - 13]); + rkey[i + 7] = key_triple_update_3(&rkey[i - 14]); + rkey[i + 8] = key_double_update_4(&rkey[i - 11]); + rkey[i + 9] = key_triple_update_4(&rkey[i - 12]); + swapmovesingle(&mut rkey[i], 0x00003333, 16); + swapmovesingle(&mut rkey[i], 0x55554444, 1); + swapmovesingle(&mut rkey[i + 1], 0x55551100, 1); + } + + Self { k: rkey } + } +} + +impl KeyInit for Gift128 { + fn new(key: &Key) -> Self { + Self::precompute_rkeys(key[0..16].try_into().unwrap()) + } +} + +macro_rules! impl_gift { + ($name:ident, $subkey_size:literal, $key_size:ty, $doc:literal) => { + #[doc = $doc] + #[derive(Clone)] + pub struct $name { + /// Subkeys + k: [u32; $subkey_size], + } + + impl BlockCipher for $name {} + + impl KeySizeUser for $name { + type KeySize = $key_size; + } + + impl fmt::Debug for $name { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + f.write_str(concat!(stringify!($name), " { ... }")) + } + } + + #[cfg(feature = "zeroize")] + #[cfg_attr(docsrs, doc(cfg(feature = "zeroize")))] + impl Drop for $name { + fn drop(&mut self) { + self.k.zeroize(); + } + } + + #[cfg(feature = "zeroize")] + #[cfg_attr(docsrs, doc(cfg(feature = "zeroize")))] + impl ZeroizeOnDrop for $name {} + + cipher::impl_simple_block_encdec!( + $name, U16, cipher, block, + encrypt: { + let b = block.get_in(); + let mut state = [0u32; 4]; + packing(&mut state, b); + for i in (0..40).step_by(5) { + quintuple_round(&mut state, &cipher.k[i*2..], &GIFT_RC[i..]); + } + unpacking(&state, block.get_out()); + } + decrypt: { + let b = block.get_in(); + let mut state = [0u32; 4]; + packing(&mut state, b); + let mut i: usize = 35; + while i > 0 { + inv_quintuple_round(&mut state, &cipher.k[i*2..], &GIFT_RC[i..]); + i -= 5; + } + inv_quintuple_round(&mut state, &cipher.k[i*2..], &GIFT_RC[i..]); + unpacking(&state, block.get_out()); + } + ); + }; +} + +impl_gift!(Gift128, 80, U16, "Gift-128 block cipher instance.");