strobe-rs-0.8.1/.cargo_vcs_info.json0000644000000001360000000000100127620ustar { "git": { "sha1": "46905c3fbe6dc50d6546a7060778fa9ffc0834c8" }, "path_in_vcs": "" }strobe-rs-0.8.1/.github/workflows/ci.yml000064400000000000000000000071721046102023000162740ustar 00000000000000name: CI on: # Run CI on new pushes to the repo or any pull requests. # If only the README file changed, ignore. pull_request: paths-ignore: - README.md push: branches: master paths-ignore: - README.md # Allow CI workflow to be run manually workflow_dispatch: # Run CI at least once a month no matter what schedule: - cron: '0 1 1 */1 *' jobs: test: strategy: matrix: platform: - ubuntu-latest - macos-latest - windows-latest toolchain: - stable - nightly runs-on: ${{ matrix.platform }} steps: - name: Checkout sources uses: actions/checkout@v2 - name: Install toolchain uses: actions-rs/toolchain@v1 with: toolchain: ${{ matrix.toolchain }} override: true - name: Run cargo test --no-default-features env: CARGO_INCREMENTAL: 0 RUSTFLAGS: -D warnings uses: actions-rs/cargo@v1 with: command: test args: --no-default-features - name: Run cargo test --all-features env: CARGO_INCREMENTAL: 0 RUSTFLAGS: -D warnings uses: actions-rs/cargo@v1 with: command: test args: --all-features cross-linux-test: runs-on: ubuntu-latest strategy: fail-fast: false matrix: rust_target: # Other interesting archs here: # https://github.com/rust-embedded/cross/tree/master/docker - i686-unknown-linux-gnu - powerpc-unknown-linux-gnu timeout-minutes: 10 steps: - name: Checkout sources uses: actions/checkout@v2 - name: Install Rust stable uses: actions-rs/toolchain@v1 with: toolchain: stable profile: minimal target: ${{ matrix.rust_target }} default: true - name: Test env: CARGO_INCREMENTAL: 0 RUSTFLAGS: -D warnings uses: actions-rs/cargo@v1 with: # see https://github.com/rust-embedded/cross use-cross: true command: test args: --all-features --target ${{ matrix.rust_target }} rustfmt: runs-on: ubuntu-latest steps: - name: Checkout sources uses: actions/checkout@v2 - name: Install stable toolchain uses: actions-rs/toolchain@v1 with: profile: minimal toolchain: stable components: rustfmt - name: Run cargo fmt uses: actions-rs/cargo@v1 with: command: fmt args: --all -- --check clippy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - uses: actions-rs/toolchain@v1 with: profile: minimal toolchain: stable components: clippy - run: cargo clippy --all-features -- -D warnings codecov: runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v2 - name: Install stable toolchain uses: actions-rs/toolchain@v1 with: toolchain: stable override: true - name: Run cargo-tarpaulin uses: actions-rs/tarpaulin@v0.1 env: CARGO_INCREMENTAL: 0 with: version: 0.15.0 args: --all-features - name: Upload to codecov.io uses: codecov/codecov-action@v1.0.2 with: token: ${{secrets.CODECOV_TOKEN}} - name: Archive code coverage results uses: actions/upload-artifact@v1 with: name: code-coverage-report path: cobertura.xml strobe-rs-0.8.1/.github/workflows/security_audit.yml000064400000000000000000000004721046102023000207320ustar 00000000000000name: Security Audit on: pull_request: paths: - '**/Cargo.toml' push: paths: - '**/Cargo.toml' jobs: security_audit: runs-on: ubuntu-latest steps: - uses: actions/checkout@v1 - uses: actions-rs/audit-check@v1 with: token: ${{ secrets.GITHUB_TOKEN }} strobe-rs-0.8.1/.gitignore000064400000000000000000000000771046102023000135460ustar 00000000000000/target **/*.rs.bk Cargo.lock *.vi /strobe-reference .DS_Store strobe-rs-0.8.1/CHANGELOG.md000064400000000000000000000017661046102023000133750ustar 00000000000000# Changelog All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [0.8.1] - 2022-10-10 ### Changes * Improved docs and fixed docsrs build ## [0.8.0] - 2022-10-10 ### Additions * Made `Strobe` struct impl `Zeroize` * Implemented `std::error::Error` for `AuthError`, when `std` is set ### Changes * Made `Strobe::version_str` return a `[u8]` rather than a `String`, thus removing the need for allocation * Updated deps ## [0.7.1] - 2022-02-13 ### Additions * Made `Strobe` struct impl `ZeroizeOnDrop` (PR [#4](https://github.com/rozbb/strobe-rs/pull/4)) ## [0.7.0] - 2021-12-29 ### Additions * Added `serialize_secret_state` feature, which impls `serde::Serialize` and `serde::Deserialize` for `Strobe` (PR [#3](https://github.com/rozbb/strobe-rs/pull/3)) ### Changes * Some light refactoring and improvement to tests strobe-rs-0.8.1/Cargo.lock0000644000000414610000000000100107430ustar # This file is automatically @generated by Cargo. # It is not intended for manual editing. version = 3 [[package]] name = "anes" version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299" [[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.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" [[package]] name = "bitflags" version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bumpalo" version = "3.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c1ad822118d20d2c234f427000d5acc36eabe1e29a348c89b63dd60b13f28e5d" [[package]] name = "byteorder" version = "1.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" [[package]] name = "cast" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" [[package]] name = "cfg-if" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "ciborium" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b0c137568cc60b904a7724001b35ce2630fd00d5d84805fbb608ab89509d788f" dependencies = [ "ciborium-io", "ciborium-ll", "serde", ] [[package]] name = "ciborium-io" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "346de753af073cc87b52b2083a506b38ac176a44cfb05497b622e27be899b369" [[package]] name = "ciborium-ll" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "213030a2b5a4e0c0892b6652260cf6ccac84827b83a85a534e178e3906c4cf1b" dependencies = [ "ciborium-io", "half", ] [[package]] name = "clap" version = "3.2.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "86447ad904c7fb335a790c9d7fe3d0d971dc523b8ccd1561a520de9a85302750" dependencies = [ "bitflags", "clap_lex", "indexmap", "textwrap", ] [[package]] name = "clap_lex" version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5" dependencies = [ "os_str_bytes", ] [[package]] name = "criterion" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e7c76e09c1aae2bc52b3d2f29e13c6572553b30c4aa1b8a49fd70de6412654cb" dependencies = [ "anes", "atty", "cast", "ciborium", "clap", "criterion-plot", "itertools", "lazy_static", "num-traits", "oorandom", "plotters", "rayon", "regex", "serde", "serde_derive", "serde_json", "tinytemplate", "walkdir", ] [[package]] name = "criterion-plot" version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6b50826342786a51a89e2da3a28f1c32b06e387201bc2d19791f622c673706b1" dependencies = [ "cast", "itertools", ] [[package]] name = "crossbeam-channel" version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2dd04ddaf88237dc3b8d8f9a3c1004b506b54b3313403944054d23c0870c521" dependencies = [ "cfg-if", "crossbeam-utils", ] [[package]] name = "crossbeam-deque" version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "715e8152b692bba2d374b53d4875445368fdf21a94751410af607a5ac677d1fc" dependencies = [ "cfg-if", "crossbeam-epoch", "crossbeam-utils", ] [[package]] name = "crossbeam-epoch" version = "0.9.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f916dfc5d356b0ed9dae65f1db9fc9770aa2851d2662b988ccf4fe3516e86348" dependencies = [ "autocfg", "cfg-if", "crossbeam-utils", "memoffset", "scopeguard", ] [[package]] name = "crossbeam-utils" version = "0.8.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "edbafec5fa1f196ca66527c1b12c2ec4745ca14b50f1ad8f9f6f720b55d11fac" dependencies = [ "cfg-if", ] [[package]] name = "either" version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "90e5c1c8368803113bf0c9584fc495a58b86dc8a29edbf8fe877d21d9507e797" [[package]] name = "half" version = "1.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eabb4a44450da02c90444cf74558da904edde8fb4e9035a9a6a4e15445af0bd7" [[package]] name = "hashbrown" version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" [[package]] name = "hermit-abi" version = "0.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" dependencies = [ "libc", ] [[package]] name = "hex" version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" [[package]] name = "indexmap" version = "1.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "10a35a97730320ffe8e2d410b5d3b69279b98d2c14bdb8b70ea89ecf7888d41e" dependencies = [ "autocfg", "hashbrown", ] [[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.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4217ad341ebadf8d8e724e264f13e593e0648f5b3e94b3896a5df283be015ecc" [[package]] name = "js-sys" version = "0.3.60" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49409df3e3bf0856b916e2ceaca09ee28e6871cf7d9ce97a692cacfdb2a25a47" dependencies = [ "wasm-bindgen", ] [[package]] name = "keccak" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f9b7d56ba4a8344d6be9729995e6b06f928af29998cdf79fe390cbf6b1fee838" [[package]] name = "lazy_static" version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" version = "0.2.135" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "68783febc7782c6c5cb401fbda4de5a9898be1762314da0bb2c10ced61f18b0c" [[package]] name = "log" version = "0.4.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" dependencies = [ "cfg-if", ] [[package]] name = "memoffset" version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" dependencies = [ "autocfg", ] [[package]] name = "num-traits" version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" dependencies = [ "autocfg", ] [[package]] name = "num_cpus" version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1" dependencies = [ "hermit-abi", "libc", ] [[package]] name = "once_cell" version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e82dad04139b71a90c080c8463fe0dc7902db5192d939bd0950f074d014339e1" [[package]] name = "oorandom" version = "11.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ab1bc2a289d34bd04a330323ac98a1b4bc82c9d9fcb1e66b63caa84da26b575" [[package]] name = "os_str_bytes" version = "6.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ff7415e9ae3fff1225851df9e0d9e4e5479f947619774677a63572e55e80eff" [[package]] name = "plotters" version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2538b639e642295546c50fcd545198c9d64ee2a38620a628724a3b266d5fbf97" dependencies = [ "num-traits", "plotters-backend", "plotters-svg", "wasm-bindgen", "web-sys", ] [[package]] name = "plotters-backend" version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "193228616381fecdc1224c62e96946dfbc73ff4384fba576e052ff8c1bea8142" [[package]] name = "plotters-svg" version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f9a81d2759aae1dae668f783c308bc5c8ebd191ff4184aaa1b37f65a6ae5a56f" dependencies = [ "plotters-backend", ] [[package]] name = "proc-macro2" version = "1.0.46" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94e2ef8dbfc347b10c094890f778ee2e36ca9bb4262e86dc99cd217e35f3470b" dependencies = [ "unicode-ident", ] [[package]] name = "quote" version = "1.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179" dependencies = [ "proc-macro2", ] [[package]] name = "rayon" version = "1.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bd99e5772ead8baa5215278c9b15bf92087709e9c1b2d1f97cdb5a183c933a7d" dependencies = [ "autocfg", "crossbeam-deque", "either", "rayon-core", ] [[package]] name = "rayon-core" version = "1.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "258bcdb5ac6dad48491bb2992db6b7cf74878b0384908af124823d118c99683f" dependencies = [ "crossbeam-channel", "crossbeam-deque", "crossbeam-utils", "num_cpus", ] [[package]] name = "regex" version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4c4eb3267174b8c6c2f654116623910a0fef09c4753f8dd83db29c48a0df988b" dependencies = [ "regex-syntax", ] [[package]] name = "regex-syntax" version = "0.6.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a3f87b73ce11b1619a3c6332f45341e0047173771e8b8b73f87bfeefb7b56244" [[package]] name = "ryu" version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4501abdff3ae82a1c1b477a17252eb69cee9e66eb915c1abaa4f44d873df9f09" [[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 = "scopeguard" version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" [[package]] name = "serde" version = "1.0.145" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "728eb6351430bccb993660dfffc5a72f91ccc1295abaa8ce19b27ebe4f75568b" dependencies = [ "serde_derive", ] [[package]] name = "serde-big-array" version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3323f09a748af288c3dc2474ea6803ee81f118321775bffa3ac8f7e65c5e90e7" dependencies = [ "serde", ] [[package]] name = "serde_derive" version = "1.0.145" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "81fa1584d3d1bcacd84c277a0dfe21f5b0f6accf4a23d04d4c6d61f1af522b4c" dependencies = [ "proc-macro2", "quote", "syn", ] [[package]] name = "serde_json" version = "1.0.86" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "41feea4228a6f1cd09ec7a3593a682276702cd67b5273544757dae23c096f074" dependencies = [ "itoa", "ryu", "serde", ] [[package]] name = "strobe-rs" version = "0.8.1" dependencies = [ "bitflags", "byteorder", "criterion", "hex", "keccak", "serde", "serde-big-array", "serde_json", "subtle", "zeroize", ] [[package]] name = "subtle" version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" [[package]] name = "syn" version = "1.0.102" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3fcd952facd492f9be3ef0d0b7032a6e442ee9b361d4acc2b1d0c4aaa5f613a1" dependencies = [ "proc-macro2", "quote", "unicode-ident", ] [[package]] name = "synstructure" version = "0.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" dependencies = [ "proc-macro2", "quote", "syn", "unicode-xid", ] [[package]] name = "textwrap" version = "0.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "949517c0cf1bf4ee812e2e07e08ab448e3ae0d23472aee8a06c985f0c8815b16" [[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 = "unicode-ident" version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6ceab39d59e4c9499d4e5a8ee0e2735b891bb7308ac83dfb4e80cad195c9f6f3" [[package]] name = "unicode-xid" version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" [[package]] name = "walkdir" version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56" dependencies = [ "same-file", "winapi", "winapi-util", ] [[package]] name = "wasm-bindgen" version = "0.2.83" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eaf9f5aceeec8be17c128b2e93e031fb8a4d469bb9c4ae2d7dc1888b26887268" dependencies = [ "cfg-if", "wasm-bindgen-macro", ] [[package]] name = "wasm-bindgen-backend" version = "0.2.83" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4c8ffb332579b0557b52d268b91feab8df3615f265d5270fec2a8c95b17c1142" dependencies = [ "bumpalo", "log", "once_cell", "proc-macro2", "quote", "syn", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-macro" version = "0.2.83" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "052be0f94026e6cbc75cdefc9bae13fd6052cdcaf532fa6c45e7ae33a1e6c810" dependencies = [ "quote", "wasm-bindgen-macro-support", ] [[package]] name = "wasm-bindgen-macro-support" version = "0.2.83" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "07bc0c051dc5f23e307b13285f9d75df86bfdf816c5721e573dec1f9b8aa193c" dependencies = [ "proc-macro2", "quote", "syn", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" version = "0.2.83" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1c38c045535d93ec4f0b4defec448e4291638ee608530863b1e2ba115d4fff7f" [[package]] name = "web-sys" version = "0.3.60" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bcda906d8be16e728fd5adc5b729afad4e444e106ab28cd1c7256e54fa61510f" 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.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" dependencies = [ "winapi", ] [[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 = "zeroize" version = "1.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c394b5bd0c6f669e7275d9c20aa90ae064cb22e75a1cad54e1b34088034b149f" dependencies = [ "zeroize_derive", ] [[package]] name = "zeroize_derive" version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f8f187641dad4f680d25c4bfc4225b418165984179f26ca76ec4fb6441d3a17" dependencies = [ "proc-macro2", "quote", "syn", "synstructure", ] strobe-rs-0.8.1/Cargo.toml0000644000000034650000000000100107700ustar # THIS FILE IS AUTOMATICALLY GENERATED BY CARGO # # When uploading crates to the registry Cargo will automatically # "normalize" Cargo.toml files for maximal compatibility # with all versions of Cargo and also rewrite `path` dependencies # to registry (e.g., crates.io) dependencies. # # If you are reading this file be aware that the original Cargo.toml # will likely look very different (and much more reasonable). # See Cargo.toml.orig for the original contents. [package] edition = "2018" name = "strobe-rs" version = "0.8.1" authors = ["Michael Rosenberg "] description = "An implementation of the Strobe protocol framework in pure Rust" documentation = "https://docs.rs/strobe-rs" readme = "README.md" keywords = [ "crypto", "strobe", "protocol", "framework", "no_std", ] categories = [ "cryptography", "no-std", ] license = "MIT/Apache-2.0" repository = "https://github.com/rozbb/strobe-rs" [package.metadata.docs.rs] all-features = true rustdoc-args = [ "--cfg", "docsrs", ] [[bench]] name = "benches" harness = false [dependencies.bitflags] version = "1.3" [dependencies.byteorder] version = "1.4" default-features = false [dependencies.keccak] version = "0.1" [dependencies.serde] version = "1" features = ["derive"] optional = true default-features = false [dependencies.serde-big-array] version = "0.4" optional = true [dependencies.subtle] version = "2.4" default-features = false [dependencies.zeroize] version = "1.5" features = ["derive"] [dev-dependencies.criterion] version = "0.4" features = ["html_reports"] [dev-dependencies.hex] version = "0.4" [dev-dependencies.serde] version = "1" features = ["derive"] [dev-dependencies.serde_json] version = "1" [features] default = [] serialize_secret_state = [ "serde", "serde-big-array", ] std = [] strobe-rs-0.8.1/Cargo.toml.orig000064400000000000000000000024261046102023000144450ustar 00000000000000[package] name = "strobe-rs" repository = "https://github.com/rozbb/strobe-rs" documentation = "https://docs.rs/strobe-rs" description = "An implementation of the Strobe protocol framework in pure Rust" readme = "README.md" version = "0.8.1" edition = "2018" authors = ["Michael Rosenberg "] license = "MIT/Apache-2.0" keywords = ["crypto", "strobe", "protocol", "framework", "no_std"] categories = ["cryptography", "no-std"] [features] default = [] std = [] serialize_secret_state = ["serde", "serde-big-array"] [dependencies] bitflags = "1.3" byteorder = { version = "1.4", default-features = false } keccak = "0.1" serde = { version = "1", optional = true, default-features = false, features = ["derive"] } serde-big-array = { version = "0.4", optional = true } subtle = { version = "2.4", default-features = false } zeroize = { version = "1.5", features = ["derive"] } [dev-dependencies] criterion = { version = "0.4", features = ["html_reports"] } hex = "0.4" serde = { version = "1", features = ["derive"] } serde_json = "1" # Criteron benches [[bench]] name = "benches" harness = false # Tell docs.rs to build docs with `--all-features` and `--cfg docsrs` (for nightly docs features) [package.metadata.docs.rs] all-features = true rustdoc-args = ["--cfg", "docsrs"] strobe-rs-0.8.1/LICENSE-APACHE000064400000000000000000000010571046102023000135010ustar 00000000000000Copyright 2018 Michael Rosenberg 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 https://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. strobe-rs-0.8.1/LICENSE-MIT000064400000000000000000000020741046102023000132110ustar 00000000000000The MIT License (MIT) Copyright (c) 2018 Michael Rosenberg Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. strobe-rs-0.8.1/README.md000064400000000000000000000062751046102023000130430ustar 00000000000000strobe-rs ========= [![CI](https://github.com/rozbb/strobe-rs/workflows/CI/badge.svg)](https://github.com/rozbb/strobe-rs/actions) [![Coverage](https://codecov.io/gh/rozbb/strobe-rs/branch/master/graph/badge.svg)](https://codecov.io/gh/rozbb/strobe-rs) [![Version](https://img.shields.io/crates/v/strobe-rs.svg)](https://crates.io/crates/strobe-rs) [![Docs](https://docs.rs/strobe-rs/badge.svg)](https://docs.rs/strobe-rs) This is a relatively barebones, `no_std` implementation of the [Strobe protocol framework][strobe] in pure Rust. It is intended to be used as a library to build other protocols and frameworks. This implementation currently only supports Keccak-f\[1600\] as the internal permutation function, which is the largest possible block size, so big deal. [strobe]: https://strobe.sourceforge.io/ Example ------- A simple [program](examples/basic.rs) that encrypts and decrypts a message: ```rust use strobe_rs::{SecParam, Strobe}; fn main() { let mut rx = Strobe::new(b"correctnesstest", SecParam::B256); let mut tx = Strobe::new(b"correctnesstest", SecParam::B256); rx.key(b"the-combination-on-my-luggage", false); tx.key(b"the-combination-on-my-luggage", false); let mut msg = b"Attack at dawn".to_vec(); rx.send_enc(msg.as_mut_slice(), false); // Rename for clarity. `msg` has been encrypted in-place. let mut ciphertext = msg; tx.recv_enc(ciphertext.as_mut_slice(), false); // And back again. let round_trip_msg = ciphertext; assert_eq!(&round_trip_msg, b"Attack at dawn"); } ``` Features -------- Default features flags: [none] Feature flag list: * `std` - Implements `std::error::Error` for `AuthError`. * `serialize_secret_state` - Implements `serde`'s `Serialize` and `Deserialize` traits for the `Strobe` struct. **SECURITY NOTE**: Serializing Strobe state outputs security sensitive data that MUST be kept private. Treat the data as you would a private encryption/decryption key. For info on how to omit or include feature flags, see the [cargo docs on features](https://doc.rust-lang.org/cargo/reference/specifying-dependencies.html#choosing-features). MSRV ---- The current minimum supported Rust version (MSRV) is 1.51.0 (2021-03-25). Tests ----- To run tests, execute cargo test --all-features This includes known-answer tests, which test against JSON-encoded test vectors in the [kat/](kat/) directory. To verify these test vectors against the reference Python implementation, `cd` into `kat/`, run `python2 verify_test_vector.py` and follow the included instructions. Benchmarks ---------- To benchmark, run cargo bench This will produce a summary with plots in `target/crieteron/report/index.html`. These won't be very interesting, since almost every function in STROBE has the same runtime. TODO ---- * Contribute an asm impelmentation of Keccak-f\[1600\] to tiny-keccak and expose a feature flag that lets `strobe-rs` users choose which implementation they prefer. License ------- Licensed under either of * Apache License, Version 2.0, ([LICENSE-APACHE](LICENSE-APACHE)) * MIT license ([LICENSE-MIT](LICENSE-MIT)) at your option. Warning ------- This code has not been audited in any sense of the word. Use at your own discretion. strobe-rs-0.8.1/benches/benches.rs000064400000000000000000000040201046102023000151320ustar 00000000000000use strobe_rs::{SecParam, Strobe}; use criterion::{criterion_group, criterion_main, Criterion}; // Literally all these functions (besides ratchet) should have the same runtime. But a benchmark // can't hurt, I suppose fn bench_nonmeta(c: &mut Criterion) { let mut g = c.benchmark_group("simple bench"); let mut s = Strobe::new(b"simplebench", SecParam::B256); let mut v = [0u8; 256]; g.bench_function("send_enc", |b| b.iter(|| s.send_enc(&mut v, false))); g.bench_function("recv_enc", |b| b.iter(|| s.recv_enc(&mut v, false))); g.bench_function("send_clr", |b| b.iter(|| s.send_clr(&v, false))); g.bench_function("recv_clr", |b| b.iter(|| s.recv_clr(&v, false))); g.bench_function("ad", |b| b.iter(|| s.ad(&v, false))); g.bench_function("key", |b| b.iter(|| s.key(&v, false))); g.bench_function("prf", |b| b.iter(|| s.prf(&mut v, false))); g.bench_function("send_mac", |b| b.iter(|| s.send_mac(&mut v, false))); g.bench_function("rachet 16", |b| b.iter(|| s.ratchet(16, false))); } fn bench_meta(c: &mut Criterion) { let mut g = c.benchmark_group("meta benches"); let mut s = Strobe::new(b"simplebench", SecParam::B256); let mut v = [0u8; 256]; g.bench_function("meta_send_enc", |b| { b.iter(|| s.meta_send_enc(&mut v, false)) }); g.bench_function("meta_recv_enc", |b| { b.iter(|| s.meta_recv_enc(&mut v, false)) }); g.bench_function("meta_send_clr", |b| b.iter(|| s.meta_send_clr(&v, false))); g.bench_function("meta_recv_clr", |b| b.iter(|| s.meta_recv_clr(&v, false))); g.bench_function("meta_ad", |b| b.iter(|| s.meta_ad(&v, false))); g.bench_function("meta_key", |b| b.iter(|| s.meta_key(&v, false))); g.bench_function("meta_prf", |b| b.iter(|| s.meta_prf(&mut v, false))); g.bench_function("meta_send_mac", |b| { b.iter(|| s.meta_send_mac(&mut v, false)) }); g.bench_function("meta_rachet 16", |b| b.iter(|| s.meta_ratchet(16, false))); } criterion_group!(benches, bench_nonmeta, bench_meta); criterion_main!(benches); strobe-rs-0.8.1/examples/basic.rs000064400000000000000000000011771046102023000150250ustar 00000000000000use strobe_rs::{SecParam, Strobe}; fn main() { let mut rx = Strobe::new(b"correctnesstest", SecParam::B256); let mut tx = Strobe::new(b"correctnesstest", SecParam::B256); rx.key(b"the-combination-on-my-luggage", false); tx.key(b"the-combination-on-my-luggage", false); let mut msg = b"Attack at dawn".to_vec(); rx.send_enc(msg.as_mut_slice(), false); // Rename for clarity. `msg` has been encrypted in-place. let mut ciphertext = msg; tx.recv_enc(ciphertext.as_mut_slice(), false); // And back again. let round_trip_msg = ciphertext; assert_eq!(&round_trip_msg, b"Attack at dawn"); } strobe-rs-0.8.1/kat/boundary_test_vector.json000064400000000000000000003731111046102023000174760ustar 00000000000000{ "name": "boundary tests", "proto_string": "custom string number 2, that's a pretty long string", "security": 128, "_comment": "These were taken from https://github.com/mimoo/StrobeGo/blob/master/strobe/test_vectors/test_vectors.json. Thanks David!", "_comment": "NOTE: recv_MAC throws an authentication error in this file. This is expected.", "operations": [ { "name": "init", "meta": false, "input_data": "", "state_after": "9c7f75fa8b893ab70ad448513c0b5243b2792a3e306706c45f1b9e4a9018920ff37e485e146b9d66fb6a1b4d6f8933e7561d2392d12d331293cc92e8a624acf6e1b60095e322bbfbc845e5b26995fe7d7c841374d1ff5898c92ee0636b06727321c92a603907035349ccbb1b92b7b0057e8fa87fcebc7e88656fcb45ae04bc34cabeaebe79d91750c0e8bf13b966504d1343597265dd8865adf91409cc9b20d5f47444041f97b699ddfbdee91ea87bd09bf8b02da75a96e947f07f5b65bb4e6efefaa16abfd9fbf6", "stream": false }, { "name": "KEY", "meta": false, "input_data": "00", "state_after": "0073c69cfaafc70245935ce6fc2fffb47011279f887312c498f2a44a5aafb316e25f24fd46140c84c87f6613d7ff30a22d105ea7b8cde98ac104cf72d0c913bd71c6b7918cf8d1a15f8aa2b6bd6b92416e709b9678b52358884b3855dc4714ae0b93338829fbca58361efeeb58c41e9511258beba1322752c123696de8c20159b6b17303f56df8741c6fecc991611ca8f755d54bed57960feb032f47d64df53030a491151fe6f4cdd0c48f9c0a81e5bce406de061283d6257ac6ef2babc776e5dee146793acef9cf", "stream": false }, { "name": "AD", "meta": false, "input_data": "0001", "state_after": "0073c49cfbafc70245935ce6fc2fffb47011279f887312c498f2a44a5aafb316e25f24fd46140c84c87f6613d7ff30a22d105ea7b8cde98ac104cf72d0c913bd71c6b7918cf8d1a15f8aa2b6bd6b92416e709b9678b52358884b3855dc4714ae0b93338829fbca58361efeeb58c41e9511258beba1322752c123696de8c20159b6b17303f56df8741c6fecc991611ca8f755d54bed57960feb032f47d64df53030a491151fe6f4cdd0c48f9c0a81e5bce406de061283d6257ac6ef2babc776e5dee146793acef9cf", "stream": false }, { "name": "send_ENC", "meta": false, "input_data": "000102", "output": "00fdec", "state_after": "00fdec8c1234e93a20d11d53e011f7623d218c099186ce53e211316bc2f9d3f241f9045ea21375d75ff2fccf78c78c13da9edf7d5578646f483c4c018beb01c6d6c82056a71f879390a6c76262d0847eba1df1374ddf4b8393734c027469c1488a732f7f38f26b2e3f642a6f9ea99e6bfe67b99550f5b43e2edd59fccf95da4746ea19239bdfc241f4e885cbacb5748a4504ec1ea1d5a29f83eaedcc343d4bfa1cb3f9c439124393fc108b3de8aec3e4fd6870d77d3c0976c9582b518edabb396f538c4ff4b8419f", "stream": false }, { "name": "KEY", "meta": false, "input_data": "00010203", "state_after": "000102030764ef14e5830e7e670c81f0b83a66f12058a9c63e7fb99ff7eb4e6bd2ae3f1f37e02855648705b2bf18bc47d5411be0a40490cfe1912342f360be9c78b72041a75c21050cc88b65c3d7f2d2582ed8ea63261d6b7ef73e2ee4dc95e045ec4ef06937a179b1f4e014c425460f57b592cca0e1d449fa21fc1f3fa8301b7f3794746868aeec35a0739e47c4f3cf5d6adc041ec0e554f9269a2e6acbcebd0ff8274bf5ca9abb0559eef39428c1384c6882dfc05161a932c0a08b52fad6a52c50de22d8f94196", "stream": false }, { "name": "AD", "meta": false, "input_data": "0001020304", "state_after": "000102030766ef15e7800a7e670c81f0b83a66f12058a9c63e7fb99ff7eb4e6bd2ae3f1f37e02855648705b2bf18bc47d5411be0a40490cfe1912342f360be9c78b72041a75c21050cc88b65c3d7f2d2582ed8ea63261d6b7ef73e2ee4dc95e045ec4ef06937a179b1f4e014c425460f57b592cca0e1d449fa21fc1f3fa8301b7f3794746868aeec35a0739e47c4f3cf5d6adc041ec0e554f9269a2e6acbcebd0ff8274bf5ca9abb0559eef39428c1384c6882dfc05161a932c0a08b52fad6a52c50de22d8f94196", "stream": false }, { "name": "send_ENC", "meta": false, "input_data": "000102030405", "output": "f6c22d0f51f9", "state_after": "f6c22d0f51f90ca9fd4400baf1097b62d3ad09c1bae11b3e5d6349b53f0003f925c09bdc7b71126fc3237987e581e2ce57af2786475609e92dff666f985ed8980eb80404bfd4a464a6d57ae73d0dc8abd14c18f95959edb8559517f80faaa1fb563e1d45321debc5c04f9b1a2d2a685da2ed7b470b06c86e5062a3d5297cbb392cad0acec42f73174eb36f96653ca9252399354cf9dda55d95a1836eb6cc1050e5269197060f1f0aff149aa21aaed2531006ac4f8ac0ff913c8a61d121a746d791c99ada3e72c315", "stream": false }, { "name": "KEY", "meta": false, "input_data": "00010203040506", "state_after": "00010203040506f60d74229800bd033d6e7addef057ce47e9b3b70bc6c34c88672e1ea4b6bb5c9d98c71f936cdb17aa9abe2f060d0f57b6873d09bef5d241fe885f4899345e4afa94fe5eade2eb8fd548e78d787486d279bc516f43c3abaa8e1b80c5cdb14dcf32d1b40c42e2ca8a0d4c1ec2b7d7eeed6c65e928206c7f4b30cd22b06b1638c4867558c2206ab4e4f5f07ddc5c97564a83535bc3ecdcb0c2608ecd05ff9846d593dbb42c17935d2427be82310a2fdce8ef9ee80d24e078abb883ae2f76f0b9112b3", "stream": false }, { "name": "AD", "meta": false, "input_data": "0001020304050607", "state_after": "00010203040506f60f74239a03b9063b697addef057ce47e9b3b70bc6c34c88672e1ea4b6bb5c9d98c71f936cdb17aa9abe2f060d0f57b6873d09bef5d241fe885f4899345e4afa94fe5eade2eb8fd548e78d787486d279bc516f43c3abaa8e1b80c5cdb14dcf32d1b40c42e2ca8a0d4c1ec2b7d7eeed6c65e928206c7f4b30cd22b06b1638c4867558c2206ab4e4f5f07ddc5c97564a83535bc3ecdcb0c2608ecd05ff9846d593dbb42c17935d2427be82310a2fdce8ef9ee80d24e078abb883ae2f76f0b9112b3", "stream": false }, { "name": "send_ENC", "meta": false, "input_data": "000102030405060708", "output": "b3abbcbebb3c23e4b2", "state_after": "b3abbcbebb3c23e4b2b9ee03e32cb5cc29502b5e5b5ef04e2aa98604fa9108c4991c7cc87fc86067aeaaa0b2887f5f921ca26e376656e25dd4c682be32f02cc700d53151ad0ed6d94abb21a738b7abbcdf0287dc68be4ed74c556e7431936722fe3e1aee9266caf471e63c988684f75d204084b839b6b239093fb5eff9007dd6fb02bec467da1083ae38e37794fb2cc9fcef5548912c424fe69be3666c0420d498ba2c62567e80dc1942e051a772abb085b4d00dfb27159592e5bfbaf45667733ec44a91da058140", "stream": false }, { "name": "KEY", "meta": false, "input_data": "00010203040506070809", "state_after": "000102030405060708092d267d0d9d914e30a1717b8eb46a5aa0b1fef2eac73ad534fd86a2da0f97f6b7a0f15e7d9fe2261dade6d5f5032fc33758f0bca996ab8ceb7cba8da525d1ff5dff022f8e3542a5228ce262e8301a4996f32300f5f865c81556770975941e33427dce9e2b8ed0b419c28b133ab9b74b1f1e19a3e804a502eceea198f631c49e7d8dee1607d534e1a3ffbcf0fe8048a28ca1033ba99a6b3c752632da5fdd12461e529979c2a77331708d75cbc85e51caa289cabe08e219fb1e15ae04b9c7e1", "stream": false }, { "name": "AD", "meta": false, "input_data": "000102030405060708090a", "state_after": "000102030405060708092d247d0c9f924a35a7767387be6a5aa0b1fef2eac73ad534fd86a2da0f97f6b7a0f15e7d9fe2261dade6d5f5032fc33758f0bca996ab8ceb7cba8da525d1ff5dff022f8e3542a5228ce262e8301a4996f32300f5f865c81556770975941e33427dce9e2b8ed0b419c28b133ab9b74b1f1e19a3e804a502eceea198f631c49e7d8dee1607d534e1a3ffbcf0fe8048a28ca1033ba99a6b3c752632da5fdd12461e529979c2a77331708d75cbc85e51caa289cabe08e219fb1e15ae04b9c7e1", "stream": false }, { "name": "send_ENC", "meta": false, "input_data": "000102030405060708090a0b", "output": "2477c260d0926e8d8ec57b90", "state_after": "2477c260d0926e8d8ec57b902ff18928cc571d8e487fb3260290d840cc4675ae10a3a2b2a075dd09d14de9aef64b1283cc5c2d6a334efb51a14a6a891fde740f36ddea8b10d94bf542624d8dc38b9da0f237b9078279ac963396253ba6edc5400d4dc447ca290f84ad86d8516cc30869f7aed9be87c470437bcf74116110a2b6af342a14a769c6d743677f2c71176bf767fcd4a9cbfb51acb5b5cb79208912d760d54a662da5a8241facfc2c9a8d6cfcc76fb318737b4b8556490f079c94880b4409b20a2c06596f", "stream": false }, { "name": "KEY", "meta": false, "input_data": "000102030405060708090a0b0c", "state_after": "000102030405060708090a0b0c2274abbc3c90573b5aac1d00e7f3237fb49a10ffdd2d7091d89dbd5bb54ffbdbc419fa053561ea4dcd4afeab0b561a9e7c3f9c007734574986c80ed8edeb36fd17ff0fac67e679e591c6aa333a104c7767a101706486855285bb27b08fe4625036ea9fd50aeee5f958a2feb41ad540195b032e8c6b58ca02e3f4a99ec2144594029b24debac7cce619b59651eb143f5dff4b72e6610a7b0904b47748466253efca7118997513e417fba99339786dbab54adeaf9276055c5556854f", "stream": false }, { "name": "AD", "meta": false, "input_data": "000102030405060708090a0b0c0d", "state_after": "000102030405060708090a0b0c2276abbd3e93533e5cab1509edf82f72b49a10ffdd2d7091d89dbd5bb54ffbdbc419fa053561ea4dcd4afeab0b561a9e7c3f9c007734574986c80ed8edeb36fd17ff0fac67e679e591c6aa333a104c7767a101706486855285bb27b08fe4625036ea9fd50aeee5f958a2feb41ad540195b032e8c6b58ca02e3f4a99ec2144594029b24debac7cce619b59651eb143f5dff4b72e6610a7b0904b47748466253efca7118997513e417fba99339786dbab54adeaf9276055c5556854f", "stream": false }, { "name": "send_ENC", "meta": false, "input_data": "000102030405060708090a0b0c0d0e", "output": "639ab57fe676d768140724906017c4", "state_after": "639ab57fe676d768140724906017c4e1f1daa6b5c212c1990f75473b72d55563df53121d6da229a9a6985eab22ac3a99c079db4a9e684055b6a60e8b55979a4ef057b411bf83557718a616942df22e5fb33aba706e97650222ddbcb52a9451b3c969ee6c71de8b9725e25ad91cad3510caffcd5cdfd7efd70d05f1ed373c85018a191995e389427875b4546143bb2bdac065de305a3639836734af5a9d3c3ccda247d093c6e33f3c094c38a2f193018240f0bba77792c32251c44429df074d6c111b6273c4f91f01", "stream": false }, { "name": "KEY", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f", "state_after": "000102030405060708090a0b0c0d0e0f863b8d027816cd7fef8bbbf938bc3370b57ad9ee35f960ba034622cf6c0b3d507618e7d8e3bc82e092bf559f4da27084e46b15bdca174c7f0cd86173692b218a4a0ddd8e07f760c0ac0a4f5f403b7754a994f5586de043af57df07e572babb57410d7d26c3d3e77980926fffec293f801c7c477a7a5dcfa0aaeb6b5188173a22858961db210c09fe89e4473284e716ee87d2b344ad737107a23c8494eacf1d664ca1c50be09cdcf30c7c2271f06a6a9430a6217ba00850cf", "stream": false }, { "name": "AD", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f10", "state_after": "000102030405060708090a0b0c0d0e0f86398d037a15c97ae98cb3f032b73f7dbb75c9ee35f960ba034622cf6c0b3d507618e7d8e3bc82e092bf559f4da27084e46b15bdca174c7f0cd86173692b218a4a0ddd8e07f760c0ac0a4f5f403b7754a994f5586de043af57df07e572babb57410d7d26c3d3e77980926fffec293f801c7c477a7a5dcfa0aaeb6b5188173a22858961db210c09fe89e4473284e716ee87d2b344ad737107a23c8494eacf1d664ca1c50be09cdcf30c7c2271f06a6a9430a6217ba00850cf", "stream": false }, { "name": "send_ENC", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f1011", "output": "3d34858c2a22301bc8d494aa638a4c8a962a", "state_after": "3d34858c2a22301bc8d494aa638a4c8a962a719e59afea91b9bc494856846a1fcfb191b2cc20865ba6ee4917c70a58ee9affcea0b0f5bf93082c7a4251617e26a54610dcda08327dd05591681738dc8d98d12f8b02f551f97360e8518b4818564795502c70137f85dd8b4515daaed9d7a2c78de6315c5b47933977df159dd1ab0ce0c50c4edf8e32971b65d4f83de461097f97a60fa1b78dff984c9ffe8ca6f9ba642218862ccdee0fcbf905037513f7a9dd3adebf357244b58e91640b8980ca5c4d0f9ba32f5dfa", "stream": false }, { "name": "KEY", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112", "state_after": "000102030405060708090a0b0c0d0e0f101112c1b806ec395e4826258a6021fdfccfbbe08d03087193c07e6160aa19dd0169b8a490c2aa9e418e60cf5c255002b51bb8d20ed1ad4a52a011a09b69ae66e3c24cbf95c7b8a2dab89fbe39e28fca80815f173529c145fc04d7ecb05b1405254151b7e94f8d39a1bbada495238a3302b65fb0f89ac1bffba02d884e1059ba338efcc56c61d1ead3e709e2ffa832d39c46217597ddc82708ae5b93032cc84f91545d179359ac9c47859ad877c313d8990c74ece78ddb20", "stream": false }, { "name": "AD", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f10111213", "state_after": "000102030405060708090a0b0c0d0e0f101112c1ba06ed3b5d4c23238d6828f7f7c3b6ee8213196380c07e6160aa19dd0169b8a490c2aa9e418e60cf5c255002b51bb8d20ed1ad4a52a011a09b69ae66e3c24cbf95c7b8a2dab89fbe39e28fca80815f173529c145fc04d7ecb05b1405254151b7e94f8d39a1bbada495238a3302b65fb0f89ac1bffba02d884e1059ba338efcc56c61d1ead3e709e2ffa832d39c46217597ddc82708ae5b93032cc84f91545d179359ac9c47859ad877c313d8990c74ece78ddb20", "stream": false }, { "name": "send_ENC", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f1011121314", "output": "d88da9b37fbdd35fc96d39c4248685b15596449e02", "state_after": "d88da9b37fbdd35fc96d39c4248685b15596449e02dae09a0b01d39d6cf3f75f8742bed7891811442c287618a24be7026523e906fa32a1ba12c41315c5a6f3d2570d9622939b5972730a6cacf852807a9875d8aacdd711fb714f0031c294cef5f75b38b61ffe8bf2ca5e65e5be738b724b30a33a7847375506a202fe0c430d088c41ddccc73b81783768c2f485992db3c6996671915894b946fe6994861d2c69898e1885da657619e2982412012a03c4a47b59209b639683c91dcb8017e21ad874a45c4434f64060", "stream": false }, { "name": "KEY", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415", "state_after": "000102030405060708090a0b0c0d0e0f101112131415f578dfb384faa35c700e65760cac554fc44fefc952878f827e4d741ce1c61c3e29293f2b7be5a3c615a04676922ecc1293d7fb2380cb0cb846afc6d7dd41566eae5722c685fa3ec960d50f1494db19fe083bf7eb676fe24fc48d422edfd4c60ef603d0dd14f2efadd2ca362d4c88b57b7b806b850080d77338f28a533af7f38050059582ce1e7f7def6de4f1b59bd8e187168d3e7bc3abccca9197f44d3971cae2d38293372cd5e077c437cfb47d384a59a1", "stream": false }, { "name": "AD", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f10111213141516", "state_after": "000102030405060708090a0b0c0d0e0f101112131415f57adfb286f9a75976096d7f06a75942ca40ffd840949b97684d741ce1c61c3e29293f2b7be5a3c615a04676922ecc1293d7fb2380cb0cb846afc6d7dd41566eae5722c685fa3ec960d50f1494db19fe083bf7eb676fe24fc48d422edfd4c60ef603d0dd14f2efadd2ca362d4c88b57b7b806b850080d77338f28a533af7f38050059582ce1e7f7def6de4f1b59bd8e187168d3e7bc3abccca9197f44d3971cae2d38293372cd5e077c437cfb47d384a59a1", "stream": false }, { "name": "send_ENC", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f1011121314151617", "output": "19382db50a83ca18e73f624dc8ad72d97bb6f194f639c4cb", "state_after": "19382db50a83ca18e73f624dc8ad72d97bb6f194f639c4cba57091219caec26081134776d09ee6c1e3f45a6518db877aa51b4cc17894d0892775bef6cfa8bbc438e825faff3f1bda94a6a94093e6155106108a42e6c971d43a9ca825907cb2d8b2708e45048787546941d22ab57ab61bf1baa1eab9fa669c5dc924c12febd63458403de6908aa3638baf88e90fd426001d8e0bd00b8fff11c141babbb2866d12352a0ddf1bbca9f96b3ea623749beb8e82f9455cbe1b818f05b89f47ba5274a27d05cafe038cd17d", "stream": false }, { "name": "KEY", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718", "state_after": "000102030405060708090a0b0c0d0e0f101112131415161718f3b501a9ab691725206895df115cbd8abf3d9f56788ddc2370e4541f7bf97f8e61f6bb512fbe99fd9d490eb84e86931cccdbbf24735093b10fce0ff7414f150f05821dba5d86eb91acd6c7473746688308dd1b2dfc8705c0158dae6f26932e9fff245068807667214868164b888c9795f192c4a66b7e3590a99e4f44d68dcc7c179ff249ff093d0dffa08a1253a322370b37fdf52bf5df4697bda03a64192629020bec5923904b66c42808e68b4410", "stream": false }, { "name": "AD", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f10111213141516171819", "state_after": "000102030405060708090a0b0c0d0e0f101112131415161718f3b701a8a96a1320266f9dd61b57b187b1328f476a9ec83666f34c067bf97f8e61f6bb512fbe99fd9d490eb84e86931cccdbbf24735093b10fce0ff7414f150f05821dba5d86eb91acd6c7473746688308dd1b2dfc8705c0158dae6f26932e9fff245068807667214868164b888c9795f192c4a66b7e3590a99e4f44d68dcc7c179ff249ff093d0dffa08a1253a322370b37fdf52bf5df4697bda03a64192629020bec5923904b66c42808e68b4410", "stream": false }, { "name": "send_ENC", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a", "output": "9b24176e161b7527021294b1025e974938e36121a916d931849468", "state_after": "9b24176e161b7527021294b1025e974938e36121a916d931849468e7190782f69cff15f032c9d994315d49ddff267eccc6073b75ca5af473f8f9cecb8af2cc9b7a0dc2faae50d5d917062abbfa04eeee0a1b08153ef19506dc3534c775e86f08b75348801e2ce98a2bd96185e32a6bac26e034804fe958d12ce734ccc190a6e767e216e6659838c73c58436db26cf47bca242eba65792ec42beb6e07ab5089eb63e8164f7af88e7ed41d1c410fef575115f9d8a86bc58747a2e995d8dde8715aa57a32207099fcb7", "stream": false }, { "name": "KEY", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b", "state_after": "000102030405060708090a0b0c0d0e0f101112131415161718191a1bdc8c9a9b49a380d52f8bf882f6eaa5745aafc85ee21dd07ed3ae77fe14b5726f9fef2ffa030a6fc2a292c4038c3c2bfec0e2eb5b561005d6de6b71a07a46510e79a291d329699b9eef20c6a111759e890313ef39d510d97298ad4bc947fa93211dcd020afbd733febe3d54afbe78697c705a88cc278095d3c96aea8f2a2589bb9db829dd21c1b2c37e5eb3299036a8b8419d328e2cedb535279db3ac4091c3e8b91d4cdfddbdf8e7db390d30", "stream": false }, { "name": "AD", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c", "state_after": "000102030405060708090a0b0c0d0e0f101112131415161718191a1bdc8e9a9a4ba084d0298cf08bfce1a97954a0d84ff00ec46bc5b96fe70eae6e6f9fef2ffa030a6fc2a292c4038c3c2bfec0e2eb5b561005d6de6b71a07a46510e79a291d329699b9eef20c6a111759e890313ef39d510d97298ad4bc947fa93211dcd020afbd733febe3d54afbe78697c705a88cc278095d3c96aea8f2a2589bb9db829dd21c1b2c37e5eb3299036a8b8419d328e2cedb535279db3ac4091c3e8b91d4cdfddbdf8e7db390d30", "stream": false }, { "name": "send_ENC", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d", "output": "b019241d5dd2c7af2a686dadd39ee041b9d31f9316fa026198e85d1f38fb", "state_after": "b019241d5dd2c7af2a686dadd39ee041b9d31f9316fa026198e85d1f38fb9a2ae843356093c05569782e286de83198894c176b39322a962ac50b976b41adf770ed50abd3b720fa471bc7cf290e9575136a74e0f6bfff9a21686ea4c7d83164e9200b56eb10ea0c77386b04fcabc19ac68b60071d505c9c4bf28d173a4fe14beb3e6db662c69550cb349155161889280cc6acd248d9a57a68a57191db7994023cc6782668f8e240ef6c58c39aebf0f2b0e0424e96123b1ff4beee55b99977d894f182783485e7b4d5", "stream": false }, { "name": "KEY", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e", "state_after": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1ea76fdf77e00d9d4c176cc7f2f5fdae6b53020572e29278902119a117319fbccdc4554919cfd5c2d98977b2b33e6f6951240718ff6f2006cfe33e2c4b0ea7d4b2db3fc19e491959c9f4d56f36bc5288144afa1acbbe9c713f54629fcc95615b1f4874f5ad8f4a19d2525ce887291b290dd9cc75289dcb79f281e5b595c26b9a3c4ecca1e963e95d5b2d90ebb43af2d86d91814eea71e0a066944b5051762321ef04549c273fedc92676", "stream": false }, { "name": "AD", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", "state_after": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1ea76ddf76e20e9949116bcffbfff6a2665d0d1563f0816c85370eb90e2b84a0d0da4a4919cfd5c2d98977b2b33e6f6951240718ff6f2006cfe33e2c4b0ea7d4b2db3fc19e491959c9f4d56f36bc5288144afa1acbbe9c713f54629fcc95615b1f4874f5ad8f4a19d2525ce887291b290dd9cc75289dcb79f281e5b595c26b9a3c4ecca1e963e95d5b2d90ebb43af2d86d91814eea71e0a066944b5051762321ef04549c273fedc92676", "stream": false }, { "name": "send_ENC", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20", "output": "69f3a799fc4286397f178684cded700d8d6358aa4d44b016f3d16c1b0e1636c922", "state_after": "69f3a799fc4286397f178684cded700d8d6358aa4d44b016f3d16c1b0e1636c9222af5f0df367d618157579c17b13636845d4049cea6198e68b025284365ff3b658df459b34be742cd0aac6b17f1087c462b74ba0e5718b5e761da6c4af93307969fb52739ebacd9e2a71288ab63a3128a33c90bb4541fa64d13571a3255cc49ca772a6d3bbcf7c7fbc6038bf9d69eced91804596a632199fbb451591f99062e49e711958a8e41e7f851bdfdf8cb3610fc086058e2950d559aaee569d63fd3ba257798dfdd165193", "stream": false }, { "name": "KEY", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021", "state_after": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021ceaaedd93a0e124e394b9ff21805b6a3d32fc150a04e74a19b77e1ce0fd5ae855c0ca0f425408bd03b2257f2151402f035b156f8a22e3851cb05e3956e5a220792e6494867d9e4f2dfd8a28c967db1df1b35bb7bada1482cb103ce7181cc3d934a39731d88fb07b23be8b51e2bb2e1e2c59dff3d4b04b4b3bc530dbd43bd0a6349298d8a08a1102690f4f3248bb210e68c2290a91273ee56db319910d44b6522c76c0dc7a089", "stream": false }, { "name": "AD", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122", "state_after": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021cea8edd8380d164b3f4c97fb120ebaaedd20d141b25d60b48d60f9d715ceb298421380d507408bd03b2257f2151402f035b156f8a22e3851cb05e3956e5a220792e6494867d9e4f2dfd8a28c967db1df1b35bb7bada1482cb103ce7181cc3d934a39731d88fb07b23be8b51e2bb2e1e2c59dff3d4b04b4b3bc530dbd43bd0a6349298d8a08a1102690f4f3248bb210e68c2290a91273ee56db319910d44b6522c76c0dc7a089", "stream": false }, { "name": "send_ENC", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223", "output": "6dbbb0a0e9a2c49449685fe25a80fb4312d882d94c81228d731911c37ebb8f53a1457ee1", "state_after": "6dbbb0a0e9a2c49449685fe25a80fb4312d882d94c81228d731911c37ebb8f53a1457ee1124bc24461f9e62214a8e16f6b3fb99e8ce7b6dd98129ba108e0fcd33482f45fb639b3ac479dcbe335cac82930f24f5e9fe905a2271afdfec0f2b1138d147fccc9d1dfba5111f84a26db627cf0877c9f5716fe9614656219dba016039397ca50b5c0fa5c3b7ebdbe6b36606c94b115fa8f23804971c2b7e07c94b41b8dc6780367ad21ac88a7742717a1d20407273b56501db3719a020e2b0b6adc5c7b378c609deb6dbd", "stream": false }, { "name": "KEY", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021222324", "state_after": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021222324fe94482fe7a759e0f15f802b3c184444663c6fec8c17b8892269c89292f24f86be733c6b8f6a27919e29f69c33ab3a6a839bc082e96775984bb8ad4612c463785d38e778935993758648fed561e7406c357e025ad5dbe4df6175e37f0fc5e165078eb9a62f64249bf79d8b2eba4324eb158ca13f6b38a7c4de42029f4c202e0f72cd660576a699fa2adb1356e10ba8898f352d5d753e98b158c56cb7d375d3ce857cd7", "stream": false }, { "name": "AD", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425", "state_after": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021222324fe96482ee5a45de5f75888223613484968337ffd9e04ac9c347ed08b88e9539ba06c1c4aad4903b49e29f69c33ab3a6a839bc082e96775984bb8ad4612c463785d38e778935993758648fed561e7406c357e025ad5dbe4df6175e37f0fc5e165078eb9a62f64249bf79d8b2eba4324eb158ca13f6b38a7c4de42029f4c202e0f72cd660576a699fa2adb1356e10ba8898f352d5d753e98b158c56cb7d375d3ce857cd7", "stream": false }, { "name": "send_ENC", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223242526", "output": "fdb4116c78b27bae923ec8f4e26fea4690f21b975fbabedd050b726dd0e2e75e000e93ba4312c0", "state_after": "fdb4116c78b27bae923ec8f4e26fea4690f21b975fbabedd050b726dd0e2e75e000e93ba4312c00a396942bfd9db8a5b0076fd08787a483f07e65bbc6f9bf017a4892db151f01caaff7622dc359c85705c67b5cc95a81d1b625b13c73ebdfc536cf73985c4a290262d71fba8ed062af5b47efb772e3dd584293de36aa3316157678968212f9836a203fce962058649bb563bcfa413097dd57363c67b75c48e56c94cd802651e4bf85fe7a5061b0f8ed21a1e6d157281dfe230a114a96caaa8098f2240308b27b904", "stream": false }, { "name": "KEY", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021222324252627", "state_after": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223242526274d76a64e325d2a42e82373b1174e80d7d3438cc9596984b06bf29f78499c3baab4dcfbe73f9e3c39fc1789a28a96dd55c93e7d151cb5cdfa5b75ef15a43a96449f38881db18b07fb3d38b176486e0c8d6ca36351eb3f0e53083eea3cdade6df37a60b9f929f6300341911d53065873e3f0a17707c5125efda4036e8b68d093cace174a0d3099a31342865e932de1d7c0b528c4b0d198e6e9dc09acb96dfd30f1", "stream": false }, { "name": "AD", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728", "state_after": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223242526274d74a64f305e2e47ee247bb81d458cdadd4c9cd84b7a90a57de58761538727b7aac3dbc61dbd181cda30a1a28a96dd55c93e7d151cb5cdfa5b75ef15a43a96449f38881db18b07fb3d38b176486e0c8d6ca36351eb3f0e53083eea3cdade6df37a60b9f929f6300341911d53065873e3f0a17707c5125efda4036e8b68d093cace174a0d3099a31342865e932de1d7c0b528c4b0d198e6e9dc09acb96dfd30f1", "stream": false }, { "name": "send_ENC", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223242526272829", "output": "454797248a9fa2bf9f51e9409d914d6760a1e0283e696f351cecb65634269862418bae6f692bc779f209", "state_after": "454797248a9fa2bf9f51e9409d914d6760a1e0283e696f351cecb65634269862418bae6f692bc779f209d7a8033b6b9c895d90bb998f5f13a3b1d94462818bb66fe2386dc40e4edc242445384fd5a9aa2ac476de2bb5a02b1f6292d77e1669f31968ac28b7535ac9316d49c72607e2b3b42f2d00eb188a02b576637751b6a894d00d4cff1b5b72b142bcc2c5508fa11c8e08841ab1c27ba1a9853391ee81fcf4c0cdd5c99925513243cb2ceb3d43a34d2c85e7cefededef13361f9ef632231c4f2e2468921f68cd4", "stream": false }, { "name": "KEY", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a", "state_after": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292af910798af9993071624c882dff91dbad506e2ea68a43961334bcda3fcad0e84d15c9465ee201735fe45cef1d2019f80dd63103e061557846d3ae42cd1899466e77444a012dbe9a5598f06a44303da1ace4258710bad7e222906ce83b558d745c947a6878c403453043b26e3e25d7d3ba46b165247ba3c385341029d83e59475578089b5efabcc0f5017a123fc4ca320788cbdcc112515991f3069ea5a0", "stream": false }, { "name": "AD", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b", "state_after": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292af912798bfb9a3474644b8024f59ad7a05e613eb79850820622abc226d0cbf4500bd6667fc022577ac27bc7340a32f80dd63103e061557846d3ae42cd1899466e77444a012dbe9a5598f06a44303da1ace4258710bad7e222906ce83b558d745c947a6878c403453043b26e3e25d7d3ba46b165247ba3c385341029d83e59475578089b5efabcc0f5017a123fc4ca320788cbdcc112515991f3069ea5a0", "stream": false }, { "name": "send_ENC", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c", "output": "8fd67ab6feb721931fc9104fd7057b2694adbff8328f70b4dc2969eb5ef62b2fc0089f78f26645fd0fc839616d", "state_after": "8fd67ab6feb721931fc9104fd7057b2694adbff8328f70b4dc2969eb5ef62b2fc0089f78f26645fd0fc839616d9bb9d736d7a9aaff46f1a73dc3a57076407a400ff79e82f217efa2ce1a5e4c93001a0dc9a937950aa5592e4b9344a2743021625a6c1a3d1ba95c4d12f0d05500e2c1be9975ed37354e996f74d766dbe46b69e8578a9b783a74671fcc01fb9415fd090ffd26b2c5e6f0e92e474daea1e237ccd64ef75cc561df2d19238342073782fff2eb6c7fd916b1473107c64b572e84ef15b3c0371a0e2ba8f2", "stream": false }, { "name": "KEY", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d", "state_after": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d5e62e684c240d44d7e7cdeb6f8202c86a3b359746c1ab27d74d76df8d8a7a36270b401d7162dd192809e212cddf5d4e3ed4357e05c3cc240be8b81f708fcf1223e3d59e8f90a93b29fc0e02decd89a0700d84048979a6b7f0219f3ec0936c232027e16c2520479a77e10c776e5f9bea70a499374d9b19ad2f64664c688db670ea308ca06bef3573ab7dbd83cfc6346e5fb87bc1ac94745ad9df2", "stream": false }, { "name": "AD", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e", "state_after": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d5e60e685c043d048787bd6bff22b208badbc49657e09a66862c075e1c2bcbf7f6eab21f6340ef5b7a6b90905f7def8cec34357e05c3cc240be8b81f708fcf1223e3d59e8f90a93b29fc0e02decd89a0700d84048979a6b7f0219f3ec0936c232027e16c2520479a77e10c776e5f9bea70a499374d9b19ad2f64664c688db670ea308ca06bef3573ab7dbd83cfc6346e5fb87bc1ac94745ad9df2", "stream": false }, { "name": "send_ENC", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f", "output": "0a5837127baa649cfeaad29976949ba583a934f57def98035d65c1be9a436cf547db984b4cb0fb0f4dba2a549592c771", "state_after": "0a5837127baa649cfeaad29976949ba583a934f57def98035d65c1be9a436cf547db984b4cb0fb0f4dba2a549592c771bdb8df8d2d54ff354485ccecada3e1d242d6c6cd90755027dcfc346309998289d415f213c49c64ead320883bf9e2634ae5462cf30b3e1e12fe085705d10489e9cc7c069f8108b8dc398171bd3ce0c2c406cb69febad1bb4191c2eeab2c3fc4d09c34d95998dd79ee008195be6923bb304eac95f263098120bd8d8a68cf7785c5ac679efbf91b7baa60dee89c8f8788e36b9263b174333022", "stream": false }, { "name": "KEY", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f30", "state_after": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303d15975ad1eee33075c9f9cd9f067c18d999fba39d67e8a473bf5ff7594147085bb416cab0d2c2d1768999b70b4fea2ec3264bf5504bf9e17a11b504b8a813631a37139bcdcbdbcf601761984b22cc2bb8f0b6e0f6c47a3a5c7a5b066b9b51d18df524d64d1e1720b618c5007db73d75dc2836b2ec8ed18c2f3f12aac3c9262a4ea2bc914689e3268338e7037cc82deb60fc98226ea88b", "stream": false }, { "name": "AD", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031", "state_after": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303d17975bd3ede73573cef1c4950d7015d796ebb28f74fcb165a847ee435a5b1545ab36eb92f1e6f450aeb19e2164c603ed097bc4504bf9e17a11b504b8a813631a37139bcdcbdbcf601761984b22cc2bb8f0b6e0f6c47a3a5c7a5b066b9b51d18df524d64d1e1720b618c5007db73d75dc2836b2ec8ed18c2f3f12aac3c9262a4ea2bc914689e3268338e7037cc82deb60fc98226ea88b", "stream": false }, { "name": "send_ENC", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132", "output": "6cefaa5f01d7aef0e023783010c3815e17d25552eba6b203e28d1123cb3833fb80ba712e3b35926f436ccabdf9015feadac035", "state_after": "6cefaa5f01d7aef0e023783010c3815e17d25552eba6b203e28d1123cb3833fb80ba712e3b35926f436ccabdf9015feadac03516377fba64bf40bceeaaa559a1e055a1718f4b4ab477b154011db84dbf41be2cdaf7d568a502d4ea4109d13844b912e13056353b62953bd87c050d5b5265d618169c5f6bbdbcf041ba30fba5014f2d9c97f1a37b23cdeac83aea66b4184fee242a0c5501d33856175d406bb5a1ac908bcb636958e2d4854656bb700ec42845228c8d8a1c2ac3c8a89eb4b01683d05fa400c2062064", "stream": false }, { "name": "KEY", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f30313233", "state_after": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f30313233006f2d82332623799821ba25b53c81b5de239d1d3cf350256eb146a4adf6b42eda980cb5765f2309fb1dbeb4c8ba957426d51bcba66218317ebef36ae8e0be15f4cd56fd26dc24c1e10a489391e4cee4ca68fe3b225752f4e75606b6c4da176849b62cff6efb9191f24e7d182cc7853ba63224450b1aa37a7c126e6654e02e2ecb6529fb12c99778ffa6f1a15bf4e87fc71b3a44", "stream": false }, { "name": "AD", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031323334", "state_after": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f30313233006d2d833125277c9e26b22cbf378db8d02c8d0c2ee0443078a65ebdb7eda833c4872c94547c072cdd3a969de291b95908fa2bfa94512c317ebef36ae8e0be15f4cd56fd26dc24c1e10a489391e4cee4ca68fe3b225752f4e75606b6c4da176849b62cff6efb9191f24e7d182cc7853ba63224450b1aa37a7c126e6654e02e2ecb6529fb12c99778ffa6f1a15bf4e87fc71b3a44", "stream": false }, { "name": "send_ENC", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435", "output": "ab5f2a7f5c005f4a2b7807c4027baf58db5f35d950a009e4da18e6fe9df40024f678516b0934bf615f5ab535cf18fade418fa7fdd9f4", "state_after": "ab5f2a7f5c005f4a2b7807c4027baf58db5f35d950a009e4da18e6fe9df40024f678516b0934bf615f5ab535cf18fade418fa7fdd9f417c10add128e1aa8a95357b50d4f647b9e4aa8bf9803482d34df361cadd284fad4a55b7168c99d880351d3f48015009f9b505ac221552b72755724a8f72b3bdf2d46232d692215d368816656061adfb089467a84cf9da2318b2d33b1426154b52852f1e5c50b2c9f84746eb3711e35088d2ca67961c5a19652fc783ddd03a305ce13bb8d0d54f6b7f1a34ffa329e5354cced", "stream": false }, { "name": "KEY", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f30313233343536", "state_after": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f30313233343536497ba90468b915fee1eb6e9c0a9ffeb11ca68e0624d5cf9c8b04d2ab22d6538dbdb364fcd53cab96a3ea32b7b56e636bbdd322479f01953f111652a2ec9be46f9ef46036c774a0f5bc1a8309c80647f9cf074c25e42091dc1038eb16f42070a1f9a38d129f42f0e718fa97446108920046e3d59239eb85b15009fc6c5178713e38e1ba2bc87a3069146c731124fc6701e1", "stream": false }, { "name": "AD", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031323334353637", "state_after": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435364979a9056aba11fbe7ec66950094f2bc12a99e1736c6db899d13cab238cd4f90a3ac44ddf71f8fb385cd1a9e9f454f4693fc1276ad32a10a272152a2ec9be46f9ef46036c774a0f5bc1a8309c80647f9cf074c25e42091dc1038eb16f42070a1f9a38d129f42f0e718fa97446108920046e3d59239eb85b15009fc6c5178713e38e1ba2bc87a3069146c731124fc6701e1", "stream": false }, { "name": "send_ENC", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738", "output": "101d5d64e9328a9af8491961ea6576582066826ae6de6e406ad263c4f2986b3cce01342305622bf381603b376c87b0773b564e5c0b96ce51a6", "state_after": "101d5d64e9328a9af8491961ea6576582066826ae6de6e406ad263c4f2986b3cce01342305622bf381603b376c87b0773b564e5c0b96ce51a63c94dc2fad114b06db1979664614dbc6296f50cc4fe710b0e9708151418778104c0f6784ab54004cf3eb6927fc8ab652f0b8d0b84f7dcea5c224de7b4189e6c36351364e1d1ed20edef9bd3e7fe42388938b0fbcacfcd13cc4d68512b9bf36e4649e22cede76149fc36c597b1a2323fd2e47f76789f608bb1cc7b698efa5a0fa119e36d252f92b7f2a6ee47df16cdd", "stream": false }, { "name": "KEY", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f30313233343536373839", "state_after": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031323334353637383969a4b47969ddadad3f93f46f2c3b6b351e1083570b3035487f75b5e9f50c95727c81195b7e3ecbf3d7aeecaf596dd1cb535e05e01eae50a32b8c4fe1cf22d2f5b197410642d71189af76053a27aafc0b687be119c68f7766c3e5920b42a9db55dadeb05dacbfaf8eaa2b4f7c068082c48aac7900d873e85f064cb4c65f81d5d946b36e1e7822844ccd6120fa75e3", "stream": false }, { "name": "AD", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a", "state_after": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031323334353637383969a6b4786bdea9a83994fc6626306738101f93461923215d6962adf0ef17896f629e397a5c1defd6f189c4867346fde67d7135d12c9d64961dbb77d8f522d2f5b197410642d71189af76053a27aafc0b687be119c68f7766c3e5920b42a9db55dadeb05dacbfaf8eaa2b4f7c068082c48aac7900d873e85f064cb4c65f81d5d946b36e1e7822844ccd6120fa75e3", "stream": false }, { "name": "send_ENC", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b", "output": "b361d23b3ab5120485fda3bd5c2f70a783e478c5d1f6d45e719a8b79ef2e3623c14eb1a4004dccdae4ec215b28d5d60dee728cba81a35f11f48cb04c", "state_after": "b361d23b3ab5120485fda3bd5c2f70a783e478c5d1f6d45e719a8b79ef2e3623c14eb1a4004dccdae4ec215b28d5d60dee728cba81a35f11f48cb04cc18435b2a8b98b81d184015fbd5f132c4ae0681d4119e8bda46dcb064eb706eacb385cff2464787e3ef9e619d12eb303c28d225861683b2d7f92a67eb4468748c047cf44b2aeea6392c455d9395d92694f8e6c4230951849756f1da58eaf5b11b998646f6a3348320b3a908149f18c380f46c0b5cf710c6e718eec4bc829ca92dd2cdc3517ef18a4baf51036", "stream": false }, { "name": "KEY", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c", "state_after": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c65b381a3108ea9d346b2892f94720fdf69f29bcdca01f6664aecc7dbbc8d50414283f75957b4d8ab1d817977b7ea69f4dd6b8ff3ea0665d3155fd015b90ea3bc920f04b61369f3604814ae112f8e164a22a29897330c066b30b0666a6bb5d2a4f0dd1faa1d6b09d5e71118c31e62b06d4ac5fd9a8b7ff3d9b6c9629b9b76043983b192cd206704fbe50035", "stream": false }, { "name": "AD", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d", "state_after": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c65b181a2128dadd640b581269e7903d267fd8bdcd812e2735cfbdfc2a6964c5c5c9cd7787597fc8e3ba6515e9dc145d9f344bfc2d83551e62368e82c83359f81920f04b61369f3604814ae112f8e164a22a29897330c066b30b0666a6bb5d2a4f0dd1faa1d6b09d5e71118c31e62b06d4ac5fd9a8b7ff3d9b6c9629b9b76043983b192cd206704fbe50035", "stream": false }, { "name": "send_ENC", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e", "output": "6d7be5a0fdcb877ef50f1d20d9406cadb044413d6646cf57664d24c1f29afe5410db33118095d9c7d9a4a62d20ed68ab6b43998d5e9698cd77a5143db1b4d1", "state_after": "6d7be5a0fdcb877ef50f1d20d9406cadb044413d6646cf57664d24c1f29afe5410db33118095d9c7d9a4a62d20ed68ab6b43998d5e9698cd77a5143db1b4d1634141701667b65396ba8b26a7d5c0176c20fb69d3fdd3169a03691f0040c7563dd7b65300861488641e871c03b1f564d031394fbb95847147ffba71df1b4151f74b877cda7124318149216385f58d1c1173f1670143402de8d5b49b9300483c53884e85c958cf99efc91a77e54425bb5aca67bd4d065e47ea91afb42d5291f1280cd0ec70b7c7ee34", "stream": false }, { "name": "KEY", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f", "state_after": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3fc908229db094517a733473e4dd28a536bef43b4dd015dae5b0aec4dc74aa9e2638b602d74873b9a781002f735cfa38ddce75cec4d59b1aa3967ed66c69c9ff7648ba96698041205ae19d4602e4ac9aac22fad10e3ba7041cee4c0eee2800d44ca1c51aa5fb0d76d787db578d576d2248835c9ee6427e7eaf300995c31e4481de50b2c0e98cf11440", "stream": false }, { "name": "AD", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f40", "state_after": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3fc90a229cb297557f75337bedd723a93bb0fb2b5cc206cef0a6b9dcc56eb1823b26a922f66a509d82a727075a76d114f0e05afef5e7a82e96a049ee5553f2c34b7685d6698041205ae19d4602e4ac9aac22fad10e3ba7041cee4c0eee2800d44ca1c51aa5fb0d76d787db578d576d2248835c9ee6427e7eaf300995c31e4481de50b2c0e98cf11440", "stream": false }, { "name": "send_ENC", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f4041", "output": "9031341dd722d97496eedce0edb5a0bf2d870382984d85bafe69387117dc755c34289ed67b85248d7b8d68d44100f4446401d9b0301aefdb092cd8337b9f13aa45ed", "state_after": "9031341dd722d97496eedce0edb5a0bf2d870382984d85bafe69387117dc755c34289ed67b85248d7b8d68d44100f4446401d9b0301aefdb092cd8337b9f13aa45edc9f1b0396c91440a590984195b56cc5f64aa549c73195a2332553898998e9afe187ceb80ea1aeee28c8b37eaa5c3f43875e1cfd0ccd91d1e2eef8fcc3796e14c8f43e17edbd39776fd81906bb92207f2ce63f974ab773edcfb946422a73ac2e2bc3be3c20fe9d6aba390dc66ba8dc7765154a86f4b6030b0f8e873bcb420fce7a7c8837cd86b", "stream": false }, { "name": "KEY", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142", "state_after": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f40414288e73ba3fab7896e649e8f3732f9b6b2f8daecb82a1a8e6f79ee43d396312d6e571bcf8e8b3b91d48f7d71db4339954479464fafaa98cf39b915b85d25cc772b25475c468d6f57de9a00262abdb7389806568a3a1b6b244688faa9cd4ca36166344d13d487992ed8fb70c29869c8558a6cf1b70479c93a26e9d93afed24e59c59e0fc51a99", "stream": false }, { "name": "AD", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f40414243", "state_after": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f40414288e53ba2f8b48d6b6299873e38f2babff6d5fca938099a7a6ff95bca8c2a31734904efafa918b5f1a95a59f26912b96957697f9e98abfb0c8f2280641ff74b161b781c07cf2c57de9a00262abdb7389806568a3a1b6b244688faa9cd4ca36166344d13d487992ed8fb70c29869c8558a6cf1b70479c93a26e9d93afed24e59c59e0fc51a99", "stream": false }, { "name": "send_ENC", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f4041424344", "output": "d77d0da0e7729de95172dedd024a90d9c8897044bddffe05f2003d6e8a2413389b42e9e8349961ca08deee78ee1c9f9ad15fa83b9069bebb33a509b931a6216b493cf730af", "state_after": "d77d0da0e7729de95172dedd024a90d9c8897044bddffe05f2003d6e8a2413389b42e9e8349961ca08deee78ee1c9f9ad15fa83b9069bebb33a509b931a6216b493cf730af5956f75a1762f4d7730131b38a1870e12df674705a6de1880b56d96db0ac594ac57a99f6c6e551b8ea10e0f84a97e6cac95724af0f4b9655528bf61928432aac61e9df322421d8927d3126339ee65b795be826c1a9e511c91fe557a6e0c29adc74336f80b99f6f6f36135c1b3842ca36606a69a2b0eb73e2839875a3bd930e37cc833b", "stream": false }, { "name": "KEY", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445", "state_after": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445bb0728f57f257f539332f5615d419c6f00e6179a6de99ce98e63a542d64866d11a988ff3c08a31635dc920bf61203b655ad1d4a225db890734a027534bc7d27d18009f7698c21362eb4392d37d983d57fbf98df5b5fd94eb530eea7e7bb650fbc305d065b9de97e2086693308033b31002109d9bda5c204b96282ef06154c0297d5a", "stream": false }, { "name": "AD", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f40414243444546", "state_after": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445bb0528f47d267b569535fd68574a90620ee9078b7ffa88fc9874bd5bcc537acc0487afd2e2a915467bee08964b0b174874fee49317e8bd3202971f6a71fcee40263fdf37da815727ad4392d37d983d57fbf98df5b5fd94eb530eea7e7bb650fbc305d065b9de97e2086693308033b31002109d9bda5c204b96282ef06154c0297d5a", "stream": false }, { "name": "send_ENC", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f4041424344454647", "output": "81e054e8c408de31befb92c9203985d43bd2c75ac149e519630784d7d1d70ec56bf734d867519388acc6b6b7986c7ae87a84be8b4c40d9cac6dccbb0406ac2191e60f62464306302", "state_after": "81e054e8c408de31befb92c9203985d43bd2c75ac149e519630784d7d1d70ec56bf734d867519388acc6b6b7986c7ae87a84be8b4c40d9cac6dccbb0406ac2191e60f624643063029cdcd29c829b53da4065fb645d28235cb76a19c898e7767b697e5bdbbf4979dcde795f0261cd983effd6c01432756187744244989e429838518ca7d3578b745bacae2caaf883030a53847e808a63c840d4f2a3faee13c344cb31a12d65a42bf53dc08403e7d3ce8bde177c7b5496cdc8cfa1755069b2ab38f3ab53991378fd27", "stream": false }, { "name": "KEY", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748", "state_after": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748515395a811073cdb3637957c96eef29e93a57b073b36cbfd462bfeb15a37c6863fed54067fc7a2f4abff8e9747b0401d3c316b55e47b2f14cb0fc9ad1ecdc0186b6db7ba93b13a9c6f8d8d985fea9201a151274d1578ec0118517157f0c55b0127bc2e178646bbf94f2e5d60bbd9a2a82a2d6b5afdd37595522db0c5754022", "stream": false }, { "name": "AD", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f40414243444546474849", "state_after": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748515195a9130438de30309d759ce5fe939daa6b162925dfe8503ce6a8402cda9b21f274275de486d18dd8a6be6d9b6c30121e5b64d6481b21fd38f19424f6fc255552f7fbd1f27ed929cac5d15fea9201a151274d1578ec0118517157f0c55b0127bc2e178646bbf94f2e5d60bbd9a2a82a2d6b5afdd37595522db0c5754022", "stream": false }, { "name": "send_ENC", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a", "output": "c186536fa7a066f3939c6d309f587b5701b72f41bab35dfb7e00d0e05c2bcd7533c92caa4d2d71bcc03823accf34954d13d31a3fa5d37e0c06c33fefe840e5cc773ed69d1932ab48da48d7", "state_after": "c186536fa7a066f3939c6d309f587b5701b72f41bab35dfb7e00d0e05c2bcd7533c92caa4d2d71bcc03823accf34954d13d31a3fa5d37e0c06c33fefe840e5cc773ed69d1932ab48da48d7ba1e798f9f2a12e0a02437d3ef862edc88cccdeea8c3a1cf4d86ca26581ce6d6c085c7b666129f1da1b2489a9d622d316a9aaf440d82be719e59c1980de4bda7f5f2b9cc2393abdf0b2e90386aa0a78c5d648ce470c25c758bc6af7c18e954dee02664da562c3a3690822cac36b2928f5955936cdf078d3d2a5b845a64", "stream": false }, { "name": "KEY", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b", "state_after": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b26bf54ee2cbccbaf7c8f187b440c23d6a7f06c1af2510f1cca61a45dfe5b1607fca9015754639584f9175c92e4f268031f42fdbae790f292c747e99f2179242f96c9dae365c79a030a1812c6816b7688d5032512c56b238b4f67d16e374a1de96e5e0b93eaee6872d09f1402bb6252e71ca11df33d863a36d324d81d", "stream": false }, { "name": "AD", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c", "state_after": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b26bd54ef2ebfcfaa7a8810724e072fdba9ff7c0be0421b09dc76bc44e4400a1ae2b621767640b1a1df3074bbced9442e316dcd8bd5a3c6a7f170d1a61b421812a8f69aa22784de464c5f5a8fcb203a88d5032512c56b238b4f67d16e374a1de96e5e0b93eaee6872d09f1402bb6252e71ca11df33d863a36d324d81d", "stream": false }, { "name": "send_ENC", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d", "output": "594a7922b63ae033132f07130fb16cb9e176b75c0fb3eb29558ff84faec331ca20c99d778fbd4f89fe6ce4d7cebf4ef1a00ef9a6a5c078c1b432ecb9781b7d1df3ee72767e86027ef1fe2c08dfb0", "state_after": "594a7922b63ae033132f07130fb16cb9e176b75c0fb3eb29558ff84faec331ca20c99d778fbd4f89fe6ce4d7cebf4ef1a00ef9a6a5c078c1b432ecb9781b7d1df3ee72767e86027ef1fe2c08dfb0d252bd848e0ef1e771a94c08f59c182c033424e39bd61dbf930c54abd7a5e5d0684f31ef92c61f922cf86dc733cd46764451b01a849e81e1777166d5f19a8715f7d1b1062f357d94c35c2f3768115f2ebd71e200c315191c946d0d88fb3a5ca154c4a962e3bf57c7cb91377f07585f37af56568420af5b0a9f6c", "stream": false }, { "name": "KEY", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e", "state_after": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4ef8d8bba8af2cf18d6566b286165244be6b3575857f2d08746bf45b3d37b94a4b8fad3ab4f4c11da1218a5a39e6abda7a5764876875335ed4cd9809c33533e37219249df83b3ed4a8a23bb5d4e349f323a8db85d2ca2cf3e394cd8abd6388923fbb357cf074ba08dad72f079362277e35fc79cb78f2ee501d2a", "stream": false }, { "name": "AD", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f", "state_after": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4ef8dabba9ad2ff5886361ba8f1c5948b3653a65946d3e1c617de343242da2565691b21a95d6e2398407ad7210cc80f657794bb75947006ae1fbaf31fa0f08df4f271bddb9797d90ede47cfd9da902bf6ee69485d2ca2cf3e394cd8abd6388923fbb357cf074ba08dad72f079362277e35fc79cb78f2ee501d2a", "stream": false }, { "name": "send_ENC", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f50", "output": "ca606fe4fe1d39357744334fe5cef4e1d63c9ed9c69960b7840f3fa5eb52d009084b5cab25893212aaac812cdddf67b2932b73455b7ef29962ab7f8c532aecc2e5bd990faf1644d14c973d99db92cb5ede", "state_after": "ca606fe4fe1d39357744334fe5cef4e1d63c9ed9c69960b7840f3fa5eb52d009084b5cab25893212aaac812cdddf67b2932b73455b7ef29962ab7f8c532aecc2e5bd990faf1644d14c973d99db92cb5ede0ee31c6eab5c300a569680895a31da6e5f44e7b54d05cbaad21edfc8d517902a7eda1dd22ce4bce4ca32ee96da8c4ba28b25eeb68f44a672f469610bd09a1284b2c32c85dec08f8d82a77dcb71986e6096c88f8f8ddb02b00f15fbd01d50797689ee694fdea20182354ac6d8899dbe44bf48043504004c", "stream": false }, { "name": "KEY", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f5051", "state_after": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f50519bc0f783e0a89bb2166b0f065d3f130bd517526b7fb09e4e3be8f1e9dee6018ae3199ea0bf684603ab250f2b37fbf86cb7cc610450da8360a498232a0c69bb710fff77e7693ca74ec275d67e7bf2239bb45a84858df7e6d87b1d198b57a35db133c99c017e342f1a9a18c8c79a07cdb5a11d40ce6249", "stream": false }, { "name": "AD", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152", "state_after": "f447526ceb09cdd8badfdd96a82cc2302abfe32e89b6c5807fbd1c0aa43d661d20222df474ed3558327d884eb941759d4d4848db49ec39be343bd663117111346f76e290712c5492f8a89083e179834a59e24c95a77a3d6294a402182cbadb1d330c39c777891975a629c563efb4dafe30460ad27f046f65aae27bf5da39c3bc78a380676a71cbd69e1888359656393d295937caa28f92728efe1e93dcacb8890d2fe169b8efdf248c5f5bbfc51ad612d8924e29c63a4d3b66d30069337d965aeb969ed396e35c87", "stream": false }, { "name": "send_ENC", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f50515253", "output": "6df53f5ed28394e2da0e04fefcef82107f63c500e7154837d6373c099f0b7925cec4dbef54de9a14e3b32cb494c9d19985efca46cf688d802f65df8c3aefc95515a2717f962d1a741417eb8c425868b42268f3d9", "state_after": "6df53f5ed28394e2da0e04fefcef82107f63c500e7154837d6373c099f0b7925cec4dbef54de9a14e3b32cb494c9d19985efca46cf688d802f65df8c3aefc95515a2717f962d1a741417eb8c425868b42268f3d9ba7ed230d382e0147c011840cdbf586126098719c57b84865908101704eae497ae345c904ccf041f76219588a99af55c0d46e1792350c08516b39bbcd6f93cdbfb2214705154e5ccd070e26a12e62c242d91d00415cdf2c77dbd5462f324f0382722f63a2de0658827894554b4f528a58e2823a8", "stream": false }, { "name": "KEY", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f5051525354", "state_after": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f5051525354d7b9704ba473c1e3c9a04de18fe7ee174fab36e8be05c1c374db747dd4c2a246b1cce18fbc1366fb3ee6b43a29be65d65ca3b97d63c87ce2f2065fe3a463ca9cf4b801058b2e18ccc423a1dded07712397e63e7eecb2a59ad1bc50f62d5c73926e879ed08861f7249db1b37ff03de11c58bdfc", "stream": false }, { "name": "AD", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455", "state_after": "4aaf4b468fb0570de053c22f45095df204e0ea1fa4790fd8307c955db1b20232a5464f58ddbdc9800e42763c676d63e5d28a1d1a0dc9476524074c200a5a68d6e256c7a7e910877405a4a576bdab63f3085621307624a037f295d0917a39665ab725e695ba53dca9392e308509ae6ae15a918c29c174c3be139470df225248d1a449d47073529aae773cfe0e75442b4b2a56bd8c74b83fc57ac3ef39438d316934db368b2786901235da1d81b287ea89eaf00da4f3ebaa51be476d7317fbdd416cb79d694c6430bf", "stream": false }, { "name": "send_ENC", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f50515253545556", "output": "4a1f2fc077e225b95bfc510fef4d6a58a70a6140e1ba7c33e330654229dfdddb9f007a7536d988d04855f1e121ca55e6a3bbb6ace47aad481df0f665baa8fcdfaa9e22ea759308a554296c4adffe6793ea5141dae30c04", "state_after": "4a1f2fc077e225b95bfc510fef4d6a58a70a6140e1ba7c33e330654229dfdddb9f007a7536d988d04855f1e121ca55e6a3bbb6ace47aad481df0f665baa8fcdfaa9e22ea759308a554296c4adffe6793ea5141dae30c044ed1ad3a744921cd3dcc986ed097a3d9328a06e622999da464dabdf4d6ff1378c4ea5985a43838281f67bf4cece1385eedebdc053dfdc67b02d4a2fcd26c6d567dda0f268ef91685dd3d9a04205aa7054b53f3d4f917f6c292db6af8055333ad3dfca670720e3aae75a13fe56e3148b8e5", "stream": false }, { "name": "KEY", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f5051525354555657", "state_after": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f5051525354555657821e0f73bf12965dbdd814bde7d00b39ed372fd6f73b84891c929b1f13aa560b911923da37c5364dfc24a9f7333c622e34397550ca40cfcb102d63c2b823b72643d24a4b398fdf753996b8e37dc34a7f0cc826b6f01411d585160270c6e0696525ea6bdd8c2bba6c05f67a34954252e2", "stream": false }, { "name": "AD", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758", "state_after": "bf85ed18641d73ab740ede8a616ccfa0eb84db4b1177409208d95516aecd5aa3e5ba347dc235b8c136202b4387a53425726c21705f0ce73532c3b984349609648d60a586d95003e8f5553c27b109ff017089425e4bfc86a54883dd8e9f60ca6f15fbf6eb07c646868049758415dcf9cd1ddb92b0df978112baefa8adb27f02b53ad6948e4d2f1cf558370753c5eca5c08059cde7fa5b98af7652fd2aa8139601bef860da2a44d7a42c935ca59507eeaf8955970bacda685cdf8059c47da3552168ff9ca9487df804", "stream": false }, { "name": "send_ENC", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f50515253545556575859", "output": "486493c7a48ca2d76a69fa79fe3ec269fddf4e58725ca83ff36d5d2076304988043ed192ba6cafca8b570076083794f4749db3d755f11c10cc95dc126d8714c7b3b642fe1c38eb982fdd378174abd0c679ce58b02f122ca5e2b1", "state_after": "486493c7a48ca2d76a69fa79fe3ec269fddf4e58725ca83ff36d5d2076304988043ed192ba6cafca8b570076083794f4749db3d755f11c10cc95dc126d8714c7b3b642fe1c38eb982fdd378174abd0c679ce58b02f122ca5e2b1f21ccfe639d22c81dc1b56f15d3645ed686579d9778f5f78b64a366d709755248b15abffd2d887bfa7050829b2fbad2da35be081e92ab3b7c032c28cc17bd40964a9fc53b0320398afee8b6bdde2c27404571ddda52c3f11fec28377418e3e5d2ae9b2d4dc9a6968e67e00cd6f6d", "stream": false }, { "name": "KEY", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a", "state_after": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a1b7988775e1e8f48a34f115fa9d9ac4d3283700d798b59f9b4fb3fff176d8e8f10774cfc8611825ff316f531bf03e2a0e61e8e99d2595b9435aa54d210fe8a924325a7b81bcf4002abb45236a428bc1cf012d8abf0032b3a853c5ea9c401d481967b128f9c826d0bc8e12e04b4", "stream": false }, { "name": "AD", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b", "state_after": "d8e7d2328ca857f005f2bf58c68e44347760fc9b8765fe599a83f3389ff48236ccc49217ba09e2109fbd3f3b2870d265434c8d264cb6864c8b47720e9d4e9bef65841e1edd9cbcabf86e817eaa3786903cfca702d8c47bd4c6fc21d2552a2de01c4a3091b71d8301937a7f58c9dd8f3a8768a99660383682d7466d4d659799fc7ef5d0f5b6b8f327b042fff5cb49de12356865e3c9fea2f2cc699d894d57dc7ec23d154a60fd9a4c88a7d67190e1e58bd346d2dd78d6ae848c56453a32a93a30e64ceff442defbd0", "stream": false }, { "name": "send_ENC", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c", "output": "b0bcaa2be297f8ce2b8afe3a8fc83f02e5836982925321044b92e2ab81954d1c09c24782734058f1f6b80a6f5f02f21e6a10f007ab904a1058ad46e07299e3897c447c00cf1c1d85324a7c34c74ff64c0ce6ed8fbd25189cdbf74b7289", "state_after": "b0bcaa2be297f8ce2b8afe3a8fc83f02e5836982925321044b92e2ab81954d1c09c24782734058f1f6b80a6f5f02f21e6a10f007ab904a1058ad46e07299e3897c447c00cf1c1d85324a7c34c74ff64c0ce6ed8fbd25189cdbf74b7289c809082e7beb4d0fc99a1a70286b5edb01b321deae2010bf2254e58aaa7dd71d57273e2f60bbb1d41bc65030b95f110a11c3b624ba49850f46ce864f30e0837e7a46e01f0656d71dd5bc60766e44fa0924b508911efac4d5792440dd87d0a92c87a2531a93d8005089c406", "stream": false }, { "name": "KEY", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d", "state_after": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d334f528c9f1ca56d6e998045cfb7edc1567588e57c9d175d01b335c9663c18ae431358f8a3ac61bb1fe59142a696093026ec3459a26127493234a2a62e38f87158c3cffa0f9c8fe28e02600f2a842b30a7ede897650ef45f42bfb3d6516e2c12785c699221ec821aaa60", "stream": false }, { "name": "AD", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e", "state_after": "de2b1e48b21b801019f81b610d49388b367b51b405183fcfbe2493ee3d05a5a1fae109f5b32ae1e812ce7973a8e04da97bfe546d96aa78f4f0d2136a24f2b777651328cc127eac46a46c5043e819c770748562d0d4495d63e8d13c0649d91d6d6cbfdf54a6df40bc2e6ae0cd22baa5209058371a036619754cec4a805e32e759ab652da4aa60dcea05584c762b29e502fb52cd24c042e47fae213c9c2bcbceba9460db796eca279b42a3943e62aa9deccb74512f1d19ef1609ad066df0b4a7d665464130cf435b86", "stream": false }, { "name": "send_ENC", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f", "output": "1ed7d9c4fb8219162538d08a53465ce4d9856f8496b77b75241fb7265a2e6179554e9b57e4be09019e47d2270863271f60da2250994b819b222c5913edf142a2d25a3bb291283af2503d16bd5b134db22e2afe04ebc632f9a813826b0f38da1b", "state_after": "1ed7d9c4fb8219162538d08a53465ce4d9856f8496b77b75241fb7265a2e6179554e9b57e4be09019e47d2270863271f60da2250994b819b222c5913edf142a2d25a3bb291283af2503d16bd5b134db22e2afe04ebc632f9a813826b0f38da1b517596755e5340e4a9529e6d42c61d3774c49e2d5da13875e62b0cd2ecdcec72c3fb04a117c8873dbe285d2560a24b85b5d2389b6575b53b354940695d0934cd7ce96ec112506432d397f8290f18853d08249e0e063c787c8bc76bf2a9d0f95ea89f05d31c56b970", "stream": false }, { "name": "KEY", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f60", "state_after": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f60a12d44d0ac2124502a7765f6ae9f08c6a4a339a0e9be5ae4dcb2a8d0c372a0b52ab1cdc3ddcce2c5872e9ed360be8e94ed8737d81ad42de1c8cc5a8675d7ea337ff2c7601a3a77dd997cb8326e17633f14654736731d632f9660011b5c2518f4d88c249ee9593b", "stream": false }, { "name": "AD", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f6061", "state_after": "94b1d2dcddd360c14900fb006e44ca771ce4932c28db5638240f7569241a98d39c7188c52e72cd3c45bd75e005f899def6842676f8fd9c7fe97bd45117ff5242548ce40d2c0f63581cce7f39442e3202c99500de624f71fcce6820630cce6fae31e31ae375352840a5f363620769a65a5eb698484887dfa82a7c6545c33d6a5fa54764286502563856f6d0c417f9926beb28fb438c15f294a49a46ac020f2dd20f1dba6c477f6a63303cd3ab015ed5d4e10ea669d519279ed7dbbd34babf2fa77a141723d5771afd", "stream": false }, { "name": "send_ENC", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162", "output": "9a99d2238d039ce1e95d8bd42664755d1d632fc97b54e6983814da656f858e07088dd437dadae29e5145bef018d27553ce5dd08080886301cc05fbcf4b8595f349d390e469bb55a7b03a7bab786dc2ec518c1f0e994c65af104b15d3a5e72c229fc949", "state_after": "9a99d2238d039ce1e95d8bd42664755d1d632fc97b54e6983814da656f858e07088dd437dadae29e5145bef018d27553ce5dd08080886301cc05fbcf4b8595f349d390e469bb55a7b03a7bab786dc2ec518c1f0e994c65af104b15d3a5e72c229fc949132cea0a271c2435191d195b3b347b7648989d3d7ecf81a0834b9e0e38f2924cc13eb3069abfa423bb0f6f195728e330ee4ec9de395d94f1e9711db4d9fe65739d60be5e405a8adafba12d63abe82d8d266e33ebfe5d433d825ff5abbaf6ab1ff1326c1fd3", "stream": false }, { "name": "KEY", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f60616263", "state_after": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f60616263df505660a29298e03c9092f290e0af2183311c57dd4e33054ff84b64fb9d8dcf05f80eeb7e0305fe4277e6eb605af289d12ed683aefa3902b8b8a05644f1e7fee4cdf470ebffb29eb35d12c03a0aa353f0187371e71bf1348aa7f68daf1f16316f9dd883", "stream": false }, { "name": "AD", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f6061626364", "state_after": "52725ff7257d9e59aca285b76754278b3f0ded4daaebe14fbc8c55a7498d09f8e7a3f7168f496416e97f05c1a8667620ad0aece809980efed12790957f76510416073e7edbf767baad33867f9f7ab1191a7f4aa0d51b30cd7d51ee5d9ff0d66da750a2826e7f29d9ddece5b57de852e770fab2ee1a7a8d8b6e68140a31ac0174ca63c6c7a5e45b6fc605a3db082eaf7d6f2bad47bf9604f69d62fc1e8c3cd91bf44c22ff483a88719446b6ad89fb23d882da0dbbcb886953b706724c96565fb0ddbd6eb1c2a09138", "stream": false }, { "name": "send_ENC", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465", "output": "fd7db406054c2cbbf43ef857a7c4a9f42469a8c3bbf90567cc67b6245a4b1c71836784a3a9d7aa7f7d1770787041226318ff3262d12f81255d6f1c9037176a062ae85fe15c359fb11ec341d8fd7083caff779e0fc85cc9604f65d957215f8b6b8f2871c18372", "state_after": "fd7db406054c2cbbf43ef857a7c4a9f42469a8c3bbf90567cc67b6245a4b1c71836784a3a9d7aa7f7d1770787041226318ff3262d12f81255d6f1c9037176a062ae85fe15c359fb11ec341d8fd7083caff779e0fc85cc9604f65d957215f8b6b8f2871c183725becd8ddb25b777b584c9deecb6878c6eab1da2c2592a6f1a7b0a5c08dd8801f3c415c9c233c0806b4e415452ba6d50ffb58c98119ef64548c7c227271fae1346f832b3bd3da06a74c1f953b9a48df8cb2e5c646c2503878daecafca807db9c4f2aa", "stream": false }, { "name": "KEY", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f60616263646566", "state_after": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666774c0b37d5a0e671904824bd17f54e69b3b96f55b31ee63e9cdd0ac7d42475fcf5e14735e2080febcf14e661254510826dfd98911888ecc78e9f97a2574ed3cdad3b587aad1fe996b50640ad4bd75e1e4fcd1b5c967919a8760e62cc2976f54f2", "stream": false }, { "name": "AD", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f6061626364656667", "state_after": "db378365595b9fbeb2b635bddbcfe5b308754e8dc9ec0b651791f20e363e60378453209d4fb1df7d1aa05f89775e8577dffcb708bbd827ddc634f9733436b363eb02ffb7b98bdf2be185effe49febd80f555b5c914a93e5ab335618d9acb2e6a660f60c0f645b7a8420a611e8aa54c742cf7e6da84f51c74c4b32a542f902d135383190352e46e8a9e043a545ac42d6721d4e9f893fc180abc8d7c63961d0b5334db618c51582c511becef88871bd07ff21961f7be04a9ad92daa1d7a203a6a1106fc285df7090fc", "stream": false }, { "name": "send_ENC", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768", "output": "93591eb9031383e2670405faea2f307090f0f7c22e28baf3357d7fd0a854f6d37b8675bb5cc85da32d963265eadf5adfae24f9d1f6e80f812211bcb04fcff25343dfbca55f2e4a119edba98f2eebd063d8d47c94b7bac8aa9ced665f63d95bef6236cb6743d7aaee8a", "state_after": "93591eb9031383e2670405faea2f307090f0f7c22e28baf3357d7fd0a854f6d37b8675bb5cc85da32d963265eadf5adfae24f9d1f6e80f812211bcb04fcff25343dfbca55f2e4a119edba98f2eebd063d8d47c94b7bac8aa9ced665f63d95bef6236cb6743d7aaee8a92f400d4cfd79a471c8d11bfa41cf727d8dd02be02b408dd440d5fcf2f256c44c4de354cf2b818be2afd3d0004f58d7d9a3f93c367edc2a8dbbc4fe1f752686e4bf869eddab721954373bdb1aab20f5716c350d32e2be73d79045e7863dafc", "stream": false }, { "name": "KEY", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f60616263646566676869", "state_after": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f6061626364656667686928b680252f357a29ccd21ab45fb908b2c25a2351700d813a4d4be829e58dced236931f8159702f43c135107ef5abe0f564f08f5b3f4172c9f9752b544450f10bf90e275ee340a2fde2970df45feae9dd0d557ce9071ebe27517b4c04f458", "stream": false }, { "name": "AD", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a", "state_after": "dee6d0dc9b44303914ae0bc4fa7d7e8415bef5aeb25155ed1bb43963891f31712934639bc2ef70e7e8c6c1f8a73b2f471d869b0562450f6f20e3ed1c89f409f988a7d3749175724b44dca9bcfeefd2565aa71b371fa0ba1601df92aeb6bb12d18650a6d62a2e55a222819c4d9004af5db7a712e79e5bcb5ff279f6e31a828dfa91cb2d9fef69d71e3fff00096e027f0293111ae60d18dcb1b3c33ae64bf593be57a29c48ee26534caad1acf43dfc61766f111a79010486cdbce444b7d0d0548a58a3d5ba8014c3c3", "stream": false }, { "name": "send_ENC", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b", "output": "793a4ca0d30a5e832e75ff3fbd525efc62b59eb56b78a2452123eeaee1edd2b24bd09e4cfb9fb9252fba3e933e349bd33f56555e8a329ac1af36275e588de666756a8096273d316b018f55f0cacb7e5a43cec0f32e5b676d520413c5ce12ec137e3c661d2ad5c8b0fc6a9152", "state_after": "793a4ca0d30a5e832e75ff3fbd525efc62b59eb56b78a2452123eeaee1edd2b24bd09e4cfb9fb9252fba3e933e349bd33f56555e8a329ac1af36275e588de666756a8096273d316b018f55f0cacb7e5a43cec0f32e5b676d520413c5ce12ec137e3c661d2ad5c8b0fc6a91528f04705f1041083d7c1d7f194b09f1a2dcef5a75ea8de01ce8443e6d873f10f62b76084dae7b22e630bbf55bbc52fceaa7103707099235ef376180ce24ac74620de05ac02441af906e12c26b799ec49965b05d8af11df6de81bb4b07", "stream": false }, { "name": "KEY", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c", "state_after": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6cb6968336d79cb57bfde2c4bda233f87cbd187918a8e1eb41d91e7953462a51da2eeb43a405fe40932477b3a03d12b5eb1c2dfb312188a1996739f847f23f701c5d3d5f3fe934df5a0efe4c62086161164417d230fb71836a23686f", "stream": false }, { "name": "AD", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d", "state_after": "8c310a1c2adbfcdc553f961e826631019ed893c8ecfc84ff9854017030ca41513d5880f02912f46c91f99aee328b8a6ecda3bbaca5054f939a0c4dc766b3ae5007228e0e96625f9b2697716b02bea82c93774dd6d2992daaa2ca6e44c043479944561b727a69798b0476ac9c1fcbc3fc591b623293bf6e0026df3fe269f038b1d1a7892d37b84913b83dbcef932e26eaa7fa810579dd2f937bf95ca2e4b67400e62ce64cd153c9745c2c1b738bba0884f8a0c77e1fc09675b0d15b9238e41a48588d40aaa8f41d03", "stream": false }, { "name": "send_ENC", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e", "output": "d5b31c9e8a68367f596bd56e912fbeaab55375a9b05ae5d445ba8c20874ab51c17a860b62f251d862cb8b49b65305bdbce65adf5eb24515c15414fbe1f9d231071b6a81198c249e6fbac383196456d8664e08b9f9177c326cf64c90ea2ec30225d6f26349cd466e64fcbc97ded7007", "state_after": "d5b31c9e8a68367f596bd56e912fbeaab55375a9b05ae5d445ba8c20874ab51c17a860b62f251d862cb8b49b65305bdbce65adf5eb24515c15414fbe1f9d231071b6a81198c249e6fbac383196456d8664e08b9f9177c326cf64c90ea2ec30225d6f26349cd466e64fcbc97ded7007b57b6c1285a980fd6dd204eea3f26b815fd4f8da59a6b8f49e8322cf77bb66b1c7bb0ba821af80581377bd2c38137453a4ef883a9c52e6994f61814c0d716ad5a0d18b1f945eada5fcb80ebf10da482ea04cda286f09b00521", "stream": false }, { "name": "KEY", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f", "state_after": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f6415f655f1d4de1c8b615043f84c3168d63edee3b0fff7d8400786c97fd189ecd9ded65cadd34f4d9754551277fe3e8305bbab33c14a7321bb37054dd19cffd116eb376cb514146310e3298c547400cf502f60ed2b0e7a16", "stream": false }, { "name": "AD", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f70", "state_after": "2572c84c55db280df408b7ed0b7f7b64e49e6f42790c398bc1ddd9359ad43c8373d8b8d4d25fc7be5dd28a5878208b2a2ab3ff0bfa8612cc9db040a37f5cf350e80d8cdf5934907f55e6d3b4c5ffc5dd753a38c66b45ea870ba57223a2d1f121849ce29769e6a7fd5d9584aebd1a2d224b669140a4d93ca4ada15e0fa34a9e6a774c1e6606fa154b0c5bb674eaf8a4894bafff9aeec2599cfda3e376d9eecf294671b70e9d92603b2d0634f3453643b2a679a34ef99fd2f2e7a6995881cc7c25da796dc1812b0e2c", "stream": false }, { "name": "send_ENC", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f7071", "output": "5039b303cdeea24bb775b267ce00d0fbae618041263bb918096f12fd1a127614b14bb38acd7f1088edf6c6817a1a4668f431b550292e59e7dfcc108855d71bbaeba4e5a06f11a1303d3e93f1eee95b8feb9c0b444fcab607043c042ffd1cbe06af88ab6f9c4e784aa72e033b7e3f06cf7d26", "state_after": "5039b303cdeea24bb775b267ce00d0fbae618041263bb918096f12fd1a127614b14bb38acd7f1088edf6c6817a1a4668f431b550292e59e7dfcc108855d71bbaeba4e5a06f11a1303d3e93f1eee95b8feb9c0b444fcab607043c042ffd1cbe06af88ab6f9c4e784aa72e033b7e3f06cf7d26fd3637720c1627b410342a78c12a3dd91891bd7f005cb529317d33ecee9299c700a5a64f1d81b152e43495c2ac7793ac0fd17b9a8ad02be8452a92f07d72107fd2c9bab0e886c0f76c3fa7b03be4b5c9fb7888f420e4", "stream": false }, { "name": "KEY", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172", "state_after": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172753a78e0463483af06d8154574032c20d247aeda5d7b8f397c0ebef1b1b073d47f1f4a65d4a76c3f3071de2f20c1940af6280fdaddfa26337ac5f3264dc7c3c7e4b68f1c5f9f1c92384d8448d6d98c410cf97ddb48", "stream": false }, { "name": "AD", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f70717273", "state_after": "57a498c4c29809f6037b81772af04c0c7b7873f49618b907b23711bb0dc42ab8c0499039e243c34336b3c0f0dd65871116330b028fe5878672d08d95356935d6922f6dad81a4a1fd38a5204004e7656ff743820f0ed91730038ab29c578627c9666f4137393396b7741ec9c183df4f095d811c539a97523b3b04ae03698f2499b1cf0931605eb000a55564f24192358740cb6bd01f3929edb17e18c498061b56b127513f900cf0a1fa2f3cb59ece2b6a89b883abce1e5d1533b00e194e579edc187781b485c5be0a", "stream": false }, { "name": "send_ENC", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f7071727374", "output": "a401a13c7f4dd82ca29c64194c21b450f145bf1353e0194301699d78b8dc40f88125a452cad6ed8c4ad43d55fb9b2b906b80fa50fa82fb82b4e7f7582c142f406517cbcedb60b024047b054405d37db92c215ff3900b1cf4573b5041f514b238d4dac1cb2b2249c81c59314e19d14623d9c4594a2c", "state_after": "a401a13c7f4dd82ca29c64194c21b450f145bf1353e0194301699d78b8dc40f88125a452cad6ed8c4ad43d55fb9b2b906b80fa50fa82fb82b4e7f7582c142f406517cbcedb60b024047b054405d37db92c215ff3900b1cf4573b5041f514b238d4dac1cb2b2249c81c59314e19d14623d9c4594a2c0532b6ae1d1ca290341fc7c4d9576e087225633020fda80e4383ba699fff2600488866a2c7a2e73e3d53959cc190a59d240840bfba184fd08d51efb5f61a256344b8d8c5f18b8f1d277484f56612abc0561daf", "stream": false }, { "name": "KEY", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475", "state_after": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f7071727374757240e2e7c21ceb0bb54c745b26020fb206c1204b2d29874b735a34c03ee45ab6a71ae69012abc1511846d1ba8374d99d144b8ef70928e55d8691aaeffa4aabd20fe125fe00373528b1d9be19c908741d2358", "stream": false }, { "name": "AD", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f70717273747576", "state_after": "51a1371143ab9bed3ac5e40b779d9041f437866fdf2c944d7ee0c9cee7c314d621b51d88a890dbcb07027d5ecb60647f0a8a8a35c513639974cbb2abaf5aa4ef7a41a8fe6a8af070dfc23940dbda674eed7baf7a1eb45a1a3c838e4647074e12eec2d34dc37070d4fdadde35be2970a6c6cd6fbdc4b387e7a16f1e4ae7441a1124a9287e75a1c8f49ffbb9c4db80d7aaca5c840dffe0af070a21cf716e3ca68c7fe4c6963f9bd4913d4a2d7d2a835f933099eafcfa8c7cc0062d0e84cf4dc7c1537f45a16fd253b2", "stream": false }, { "name": "send_ENC", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f7071727374757677", "output": "0e40bc57e80a712d8c771e8d1a839b5359129f4ff6960a18e847a51f4270a580687bfd85885ef1992d0c45a18e57b9539d0f36370d82289c373c63763d64d81d546d16d77062833e169015a9b62b630ba93999e441d29c7de0bd6c425822ef442c802f1276b582e35db85f013a54ef275315c5dccbf8feec", "state_after": "0e40bc57e80a712d8c771e8d1a839b5359129f4ff6960a18e847a51f4270a580687bfd85885ef1992d0c45a18e57b9539d0f36370d82289c373c63763d64d81d546d16d77062833e169015a9b62b630ba93999e441d29c7de0bd6c425822ef442c802f1276b582e35db85f013a54ef275315c5dccbf8feec5b5d5662e6d9402c88e9ec1ab8e46e0a17c6c63f660da7d19888b2b39e3fc643940204c8907e10771a0a896bbfc79bb3498737b48b9660645d6aa8f9102d53b95203116de4af7f09b73aa556b01bd6d7", "stream": false }, { "name": "KEY", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778", "state_after": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f7071727374757677785b5020bc635ea2891aa5e6ab78bbf4c00ffd3feef4a6f4a2092d15b91bfac00b01c917e639081c9a41cb497acfe85730075e0394174813b6c0e34aa4a0c277d928f6effd12c050bcf8d5dc13d5c1d6", "stream": false }, { "name": "AD", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f70717273747576777879", "state_after": "717fd3505ef54fb230222575b7ad247a5b0752e3a29f12f8cd73e74f3dd489a9d92f1ba7e48c5e38d46a47a1ac10f39c37a83f5de01396187e02667fe7aae58c929f7730e8e4ce95fa71beedd9bd051380cf00222fe96df00381377c42b37170abb649c399fb3d69f9a51fa8c290c7b93d3abe62e5f97643a5302b1130c702427208a8106a2b1b160d3757878f7529aa025aba21a324d549f4b03b02e1844892e3d37a455b612dd57b65f05e62d7b8ee3a0cda0de5821a6753659b0736c4f48c9dc60c2ebc485065", "stream": false }, { "name": "send_ENC", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a", "output": "94348899b00be9aaa22bc961e2e793533be13059a4df79c4e45380ba03c31cc3a722f1a8c5a8f1cb9a5f1da9dd7d802952cc0e47ebea177f1286f9ec63ccac17165dbcf80a98df7df52d7859211e64480aa13ae616d8bd0ca88cf68ef2ce1d3c3f45851b3c916522d00c7e15833b5c73cead9a6c7610a3eb2d22fc", "state_after": "94348899b00be9aaa22bc961e2e793533be13059a4df79c4e45380ba03c31cc3a722f1a8c5a8f1cb9a5f1da9dd7d802952cc0e47ebea177f1286f9ec63ccac17165dbcf80a98df7df52d7859211e64480aa13ae616d8bd0ca88cf68ef2ce1d3c3f45851b3c916522d00c7e15833b5c73cead9a6c7610a3eb2d22fcabc1330699a0f5b3a6a08759da13b27887d2bdff5daccc8b54abf6d7d277d044a0bfe628fe32fae102079d0a99020b115a11153f5df09f9cea182f933b0dfb026500c6aac1ff5277dce351b850", "stream": false }, { "name": "KEY", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b", "state_after": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b046ab1c24f764a4971ad7dca5711315a6df47849e2bb0d44f8b398bd250e524f194f92ec7e75495f851a2ea66c1327c6390535b259bbf9848d0a76a8d082587d6fa949cc4966388b82613a6f", "stream": false }, { "name": "AD", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c", "state_after": "e6568cb1294d198abf96de975113562b92657587e5cb1f5cf9cbec03df2cbfa3816d2151da265e6c121e5e2cb7b20283b3b61ac4eab05860109f2ac031564bbe9a5bf6843c1275cf9805b0d572dd7c660f8cf40e030dfb7099e687c947bd62218c25f04ae3096b7ee0ba8d4f746ecfb945077af55fc0214548af80b348ee1b4d41ff7b9b5702e75d613c206268d12581f56480650661268a38d6915443bc6c9937b6e538110662351fa191a53d681938d6b92e1fabf9050cb24fe4ac811f48e519c9a2a38be28f42", "stream": false }, { "name": "send_ENC", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d", "output": "683994a1ebd3819cf37badb1f2877ab1f817ecc55e4892384bb6958030fd25fd43d155aa4edb8a909e1267f22feab8c3f34246ea660ac6d3d0ac471aa6af3ac24bf3fa8f66b9fcbd15eead6575af9a5fac25ba3c4cfbac3ec31f529d6d53b64deea08ac67a9548c33bc47dfe91153c6af6dfe24279ff096fb7f55c41c757", "state_after": "683994a1ebd3819cf37badb1f2877ab1f817ecc55e4892384bb6958030fd25fd43d155aa4edb8a909e1267f22feab8c3f34246ea660ac6d3d0ac471aa6af3ac24bf3fa8f66b9fcbd15eead6575af9a5fac25ba3c4cfbac3ec31f529d6d53b64deea08ac67a9548c33bc47dfe91153c6af6dfe24279ff096fb7f55c41c757ce58d884c10b4878e3663016f523bb54a9f448cb4af3de5591c42b5b6a1c638cc16c66889abf8897223616a895ba34d7f3631570620c24c6d1d59c072b834112542ece0ded3b342a8c3c", "stream": false }, { "name": "KEY", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e", "state_after": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7eb4c5b69423d5fd86e4bf959c7c5c3a7d6c37544fe12ff4832f808445c8037b5b16df9f2cec83e2d24310c6abbd81dd3b7c3a8075138f598f26a43d25eb507c78da3182eeb5b314b289", "stream": false }, { "name": "AD", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f", "state_after": "b38550f5efd76f8328f404beae4c744522841ed3fd2ec940cb2691899c4fabd000622207be53359325a24fc7562a88800a8d016e028df6ba75609aa4170e04eb83967dd01b176c7e3f02659e1cb7e09eab1ad2722bd133dd2685ce6aa060a87456164977515ce4d12788a0fc1f339de0506cb16b682e09ed8475bd791cc36b0e94e639e066f9a8e61c269771117a37495fd7b31bb026a70da3a8570b0239051b0a523b2204ab86b512842d3ca7bd8a424407bb812eda25de519725c476a3e6f5272b7a8f15e6accf", "stream": false }, { "name": "send_ENC", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f80", "output": "667dc263ff5593d1d93c15ec378c5751e7e510741835b25a0f956fc5fce0f4b56d7bf4d881547310070f2943373a8ab9696176487e4536dac5a2fb030f08f835a3d9a3aa4bc6fb8f582cbd9ad71dd0becd95aabff756b89aa03ce78aa5f41d199aa911e2ec7a2f2a82f3b255b341c2209ed4c87885af4fd8577b75d30e2c800243", "state_after": "667dc263ff5593d1d93c15ec378c5751e7e510741835b25a0f956fc5fce0f4b56d7bf4d881547310070f2943373a8ab9696176487e4536dac5a2fb030f08f835a3d9a3aa4bc6fb8f582cbd9ad71dd0becd95aabff756b89aa03ce78aa5f41d199aa911e2ec7a2f2a82f3b255b341c2209ed4c87885af4fd8577b75d30e2c80024396c68d9cf77bbf5da2d079ec45c61dd9c566376c68e9c56c0a43c1fa763a32607784ad84054ae1441db0692692d71e9d35a63923fb3fb57b620ce7329adb3c0e92b7009a989d3d", "stream": false }, { "name": "KEY", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f8081", "state_after": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f8081d25bc15f7861b14581f8c4238ba62818e81f9d8c023b29d8f4228049436b4fbfc333dd1cd94bb127dc0fe1fa9e83a1dfa1f4b6892876b6e91f776b33247c57944a25b0dfdaff", "stream": false }, { "name": "AD", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182", "state_after": "630f6f66afa1fa9660710018e3b1b41fd26339f2a502bda664b967dea31a9456ab30c335e99e521b1dd241220b54d5d6c244365e2fe6ead393c9707006c986918de682a16caa9f6d727e2da0773cdfa23045b4ee7365749bab2b30a27324fb130951a6d85357112c77d3f3b07709d9bee5561957095edbe4d069f10af1b84d35407dc89a9d728ca3c0a9180f1ea405ae0a12fe11f942da4f9b6d58e593f5634557c434e80f0bfad875522ff4b031af207bc1d7a8c12b58a0a165619a373452d3235e53c1a94fe5e8", "stream": false }, { "name": "send_ENC", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f80818283", "output": "834c451ca2fb891be7e7efc269ac610fac77dfae6ceb8262bf819b90a479b69011de1f9fc61c7018d40a240ad8ab4dc8612ff9770f3be10a3286a261045f0f6ac973867b641225bab0ad52ef262a4680e23c721e9a9764e6e30d1affe3ebe43173ab30a26e4c3e1e9ead5f9d7f4d10e3643fdb30d47f475f571915782d872667738f7de2", "state_after": "834c451ca2fb891be7e7efc269ac610fac77dfae6ceb8262bf819b90a479b69011de1f9fc61c7018d40a240ad8ab4dc8612ff9770f3be10a3286a261045f0f6ac973867b641225bab0ad52ef262a4680e23c721e9a9764e6e30d1affe3ebe43173ab30a26e4c3e1e9ead5f9d7f4d10e3643fdb30d47f475f571915782d872667738f7de2f4d5b19cbc849949e8fc42851ed578f2069677664e803847a7abbfd8d81120fd2664bfa51db59d9a3ea0364f0bb6ce484613f06123e5f1e11b24472ec87f50a4bcb1508e", "stream": false }, { "name": "KEY", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f8081828384", "state_after": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f80818283844af51884d6088e731af63859ef2d40045458a7bef335861e74f9cbebac9357dcb29a4c198d5d712b71ed57de272267d39d95dcfc552c0f17697494529c4a7647df7535", "stream": false }, { "name": "AD", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485", "state_after": "4a13d7a054d4e1c961148b580238c366b4f6d512dfc94ddb804f966ea145272cffad2beafeef6c8808ff569f5f149e31f8d7b9ad8e8018533fc86032899f44b88d1d051c0b438aab85a90f5f1dc32914d2eec5d8f4a69506228cad9a7f37c7738a8a19e172915b48cd40b7f14f3f5763d5aaa53f27b177d12cb89c5be4e5d0a8397798853e0c5521f0ac0240c7658ac328ddfd888681db456bd6e2c6fabdbab2f5032c817af4fc81ff27ccd0bd3b64fa86eb1d5a61a7fceb410ea3705b1aeecbaf22570771904afe", "stream": false }, { "name": "send_ENC", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f80818283848586", "output": "104e51122aa4e2af098319c5fd0cda46aae936fd2e661e5f136289d26d5858515af2798aa1160d0d947c20093a34243323cb631e5c0f68ef61577006e70bb0f0f032669166eb068b21584aef31d6d6fd742316516fcb165eb06abaedfee392e0fe26fa9f0af469b72b1297b5e41180b037af2bb91333f37fe364908a294fba25edee22e3cf55c1", "state_after": "104e51122aa4e2af098319c5fd0cda46aae936fd2e661e5f136289d26d5858515af2798aa1160d0d947c20093a34243323cb631e5c0f68ef61577006e70bb0f0f032669166eb068b21584aef31d6d6fd742316516fcb165eb06abaedfee392e0fe26fa9f0af469b72b1297b5e41180b037af2bb91333f37fe364908a294fba25edee22e3cf55c19d765e7b6066e350599520f3576587676ac6659e4034ecd4afb2c48a22928271878440ac1227703fab6f52dbff30fa68c7206719166c362c5de033b8d4c53a3969", "stream": false }, { "name": "KEY", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f8081828384858687", "state_after": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f8081828384858687e047397bcd8e832464e04df2a4265065a05627740ab14b0b46ab1256320f11362452caf053f14f2fc6384a94adbf28239fa908a4b28971b122376b31eba6d962", "stream": false }, { "name": "AD", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788", "state_after": "4ab0618db5ec11af726bdf263d7a0485322f63fc3c0138c9b25b26fe0acad5394486dc859a72904dae0d011acf19be3151494cd481498dc86e47801088a9283dcd79191cd68384751c60cfbb37b26d13d906a0ef0372e5a6007559f74895041b1225bd840052d3b8e4b7fc7f7edf43a2529c4860e1f1313f122447aa283473dda27073a9c2ff1599f9db806df1e9d6bb4d0daaffd4775bebf02e112c3dafaeae9bcbe5c9a6fa3fd09f8f08826e6f5347eebe6b20a2b04b36b18b2645990af5e93afd9b022b4ed420", "stream": false }, { "name": "send_ENC", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f80818283848586878889", "output": "51d08bd2747e0b3db8490dadbb8d48e47461f4ff95bf3107cc69d7c84e86c4baa304589bb9d5e45e63105478259c676519e09f1b44d8c9e395ead5782ac2ceaa393f4b14807eede36c8c3fd936e8217c24484ace60fb21b602c1642b27b342e1535753cdb5b3758865f84fa1108b730989a9f6f11a7213dbc1ac1b31dd406b73612e3795b5ce58370472", "state_after": "51d08bd2747e0b3db8490dadbb8d48e47461f4ff95bf3107cc69d7c84e86c4baa304589bb9d5e45e63105478259c676519e09f1b44d8c9e395ead5782ac2ceaa393f4b14807eede36c8c3fd936e8217c24484ace60fb21b602c1642b27b342e1535753cdb5b3758865f84fa1108b730989a9f6f11a7213dbc1ac1b31dd406b73612e3795b5ce58370472c00e0bf103890d7245b8379bea59b1d471555a7ce5fbb19ddac7220346b01da61e97867552c78f25a7640d11ab4e8a2dc60ecd1b22b303235061f8137d58", "stream": false }, { "name": "KEY", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a", "state_after": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898ade4189cf8d0da504660c4ab5528bb25bf74898b9172b717ade27fb5423285bb82a036c7a279ef376eb54e46e1551daa60dada72c7713f602ea6666b9b7", "stream": false }, { "name": "AD", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b", "state_after": "89b74da12d361e675d63430ff88edd422d15282ccba220e4b805dd52245f37ff4ff44acc73ce48ed7a4d04c4dc9e19c013ca76701e03db4790bbe1b452154a05a0e96bd80bb0930c33c1dc386d8da6e262fa1ed042a2b3018c552948d10117256aa521efee0fbafe2cfada8b423daa4ea25239ea8007920d86436cf082a03c33d9f65475822baeb54d44e993ff264265eab289d7d3ab1e9a2df9d37c8a659ae2ddefb65ad4314d16970e8ac0de9752630a1bf42362a7b8a3285efbab48e1d9a2133d667b57ef2626", "stream": false }, { "name": "send_ENC", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c", "output": "25647484c88f270419b3a1654e6e06943be873f0b3925ed8e8d8afdd1a3978d22b31a459374af352a0ad6afd341aa54faf53666f6ebe281265ee6a12448a480d039ecae0394a852b0de24e932d1f6b2c32d15e97f4c59bc4604d33ea19598cf3443a5ddd667f14248542680c3749721acdc6f6ec3c2b4b5a15f834028ec2e4a95e53bdabe00f4e49076f4a2bf6", "state_after": "25647484c88f270419b3a1654e6e06943be873f0b3925ed8e8d8afdd1a3978d22b31a459374af352a0ad6afd341aa54faf53666f6ebe281265ee6a12448a480d039ecae0394a852b0de24e932d1f6b2c32d15e97f4c59bc4604d33ea19598cf3443a5ddd667f14248542680c3749721acdc6f6ec3c2b4b5a15f834028ec2e4a95e53bdabe00f4e49076f4a2bf64f08dbf31cf8de24ade0c0d39f6998a553281b215c41089873fec74172c2c57ca761d61310e461f9c75972b7d08d9caa8646dc64df19dc33487435", "stream": false }, { "name": "KEY", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d", "state_after": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d81b02db384b582ce1c134b944e0350546483c4284e97e5eda207b063a933d51bb4d88a5bd20168b95e25fdf16cb703b21dd92b3b15ca3e6e1453", "stream": false }, { "name": "AD", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e", "state_after": "71080a5dbdfcb7ecd402abca6b9319ae24a49fae28a1ed2f05da6d976b90f32ff3448bcd0adff8fcef25030c0af3076dd9e8d40696ab9b5d1a4bc3bbe26571e4e94260e1b460bcc815a38eac1fd9c934830394702c125810cb741f8623509da79093497aa441a37b1227dd2a690166444475a0236989e1f6bdf8a0f9a650fe4b29a4a94f234d7a14bfff8c9ee4b4836e7d3a270feed88a6f7d66af1df46066518b035434fe6e932cf77cb3a6f056198623ed3500e9f2da0583366e41642be5839e27bfaac33b6939", "stream": false }, { "name": "send_ENC", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f", "output": "5b05f22c1bf25146ac42ce5b4d3a623c491f4b72bb157ae95df9efcb2c77abff9d9b2bb7ca70442486f4e211dff3959e662d1eb37af9fa323e7a7042a8026ad7dec88fcd65bb1543b8b9a16b9abe1f50b18fdf36dc62cccb0867ebb1949ab7587c534da371f39419e3c6cbfbd4df57e73d570a5e3cc307882657ba766f0966a67418c0ba70fc2fdae16c3efdd15fe32e", "state_after": "5b05f22c1bf25146ac42ce5b4d3a623c491f4b72bb157ae95df9efcb2c77abff9d9b2bb7ca70442486f4e211dff3959e662d1eb37af9fa323e7a7042a8026ad7dec88fcd65bb1543b8b9a16b9abe1f50b18fdf36dc62cccb0867ebb1949ab7587c534da371f39419e3c6cbfbd4df57e73d570a5e3cc307882657ba766f0966a67418c0ba70fc2fdae16c3efdd15fe32ef2bb53c80737d788bcaf7f071000906d926f077efdfddd693ad4c216ddb05fe34608074e89b2bfbc8093e62273dcca62ac65553e92315347", "stream": false }, { "name": "KEY", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f90", "state_after": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f9023818fe1503a8089934705c1633b7a8debe090d823ee99c5d0301bc1fa194cd2619adf35385b876593c455e7d2476dd00591af41d89bc8", "stream": false }, { "name": "AD", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f9091", "state_after": "3be8470beb5106f850d06623ae4444de07226738ce9b122809608a4a5e714189483d09224ff88825b577d9b429f7cd2ec159a7ac7d839a4dde1e02032fcbde438fe281b9ed068b2dc639634e1c692cfc166165a2dd42f1ad1fe69e81daa8048e8456576754d7d3692b85acac90597a3da0394143b1508ced62de9f1a6591c9b5e90859f66d4f0e931be78bf73457808ad60c2f9d9ae99c3892a39e402493f645baef503ac9c80294cda756bc3eb6b5f2a729158b75167eb5647924cfcb13e56617221edb7f39dad1", "stream": false }, { "name": "send_ENC", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192", "output": "b0baa791c5ad2bc1c1788dae031f9b4c037a1c55108fe8ba6b8eb14601f50c11371afcee5adcd38cf063c4c40832ae6f53fb00a044f5e6346a53da11ec74a0aca594b73eea806c400f257bd2dd442c2728f32d327fe51fc3b23d02a553cb0073100074a54b3157db5862bc5f8acf466e2389e4db5dc05d23e2ff4f6ada017c96a6af0f37f1e03b9bded2c2a095a1c691e0b731", "state_after": "b0baa791c5ad2bc1c1788dae031f9b4c037a1c55108fe8ba6b8eb14601f50c11371afcee5adcd38cf063c4c40832ae6f53fb00a044f5e6346a53da11ec74a0aca594b73eea806c400f257bd2dd442c2728f32d327fe51fc3b23d02a553cb0073100074a54b3157db5862bc5f8acf466e2389e4db5dc05d23e2ff4f6ada017c96a6af0f37f1e03b9bded2c2a095a1c691e0b731a28abb119b61b84e0e06b75b1ba82e3db0e729170362d555dec96b8aaa7e9e78f5f444a948eae9ff8135ecbb7a0a0951a393adbbf3", "stream": false }, { "name": "KEY", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f90919293", "state_after": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f9091929339d6980eb203584e7796a528c43add2ac4a869b3ee3eca3f38c20a24f3ef8c3d700561351d9abeac4874095cd2dfed63fa91240e", "stream": false }, { "name": "AD", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f9091929394", "state_after": "bae0a4a91287dbf14fb29a8c67b911d8af49f87177d281f335a5afc3348e520cc67c5e204a480fbb173152cec55284a77b0d9e472d7635e314d9381c7f5dc3094b8256e52afa448ad5d20c7ad5d3b07a635b302b35250e3f82b71829cc1545aa17579be0ffd92a1e5cd5e7120d2a5556ebc99b7cc6de2ba2dd1eb36a3b02dae19073b08ccd4a24b6af4084d141307c077f6cc8cbfddef698adf52fd4d12283c7bc86065f71ca05d8aff53be03a15b2c696119303a3f91270dc848d96b70e7d7396da75111c8ec7d4", "stream": false }, { "name": "send_ENC", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495", "output": "5d5c639d6cd976b7bf01ca2c25d088de6c4de082ff7b542e4903c6dd379bebc1ab3cd30c49f616b9fb45a1fee6ea50d3a3badb747d6ba75e0f7c63dc2a33483e43eb86360224c85c0ec1cf383ebba45e1fa3a05c9e53ac363a66228b47b37fee247d242a2ca2ce13be2379b815ef6cd68170ff29d30a5e263f79d26d4d94c868c2d76d162f015df2e2a28b411d49c06ce22c10273cb5", "state_after": "5d5c639d6cd976b7bf01ca2c25d088de6c4de082ff7b542e4903c6dd379bebc1ab3cd30c49f616b9fb45a1fee6ea50d3a3badb747d6ba75e0f7c63dc2a33483e43eb86360224c85c0ec1cf383ebba45e1fa3a05c9e53ac363a66228b47b37fee247d242a2ca2ce13be2379b815ef6cd68170ff29d30a5e263f79d26d4d94c868c2d76d162f015df2e2a28b411d49c06ce22c10273cb55c28b26d4dc05dfabb78e839e2cee299fd9a2844fbb48e64562c56b56b2ef52476ff952d13bac9a7723fbf1f229a5875453e", "stream": false }, { "name": "KEY", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f90919293949596", "state_after": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495968ddb16d37f51ece45eaf093ae9aec1b1f01d05cf2f0d3d34348c7c0c735c5202fa74f6967aea56c0b919d829dfbc5f0563", "stream": false }, { "name": "AD", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f9091929394959697", "state_after": "5a78d653df9de0d22fab336a29a2908ba50fc42d6841df60265b55c92601d523535f5894a9645911ae6d561542b492b24816080a3265fd6f4f2b65fdcc1fd0a252306a2df5ebb2b722c64514f893a09f73e6a877b4c611a8e67900ae0040db0e1cd4b01d51bf5a284c30ca8626f820ea2fdf4f7aa2af9684f4ac0ff76c0aa3d3bbab746108349bccf125ace9d03914c94eef5d7b8c56e688ddfade1aa0ce0aa70db6ac5b4af73e33c1d54e48f1d4bc8b1ecaf5614b2ba687a20af470cc3a91f5abc97ab94bd08ea6", "stream": false }, { "name": "send_ENC", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798", "output": "68b704466c18d72a7422e17c8619884be1ce9338a1124b5c26d84f34a9ea130700f8062ed30eba82ae05d0e3e40ea2e69beba969cbb84f0371fb7b061c5da5a61a57f202c78c787043f28939207586f0f8dd07a341449a837555c61b2d9275fc971729eaac17cb7d5e9f5b162fec61e8c2cd87cf0eb8941834e9b392ee4b141db35f568edfc43d4f3a79274ff7c984d3dd1878d2483f60612d", "state_after": "68b704466c18d72a7422e17c8619884be1ce9338a1124b5c26d84f34a9ea130700f8062ed30eba82ae05d0e3e40ea2e69beba969cbb84f0371fb7b061c5da5a61a57f202c78c787043f28939207586f0f8dd07a341449a837555c61b2d9275fc971729eaac17cb7d5e9f5b162fec61e8c2cd87cf0eb8941834e9b392ee4b141db35f568edfc43d4f3a79274ff7c984d3dd1878d2483f60612d83880d409d610df0b2d386533b451a80a12af54ea6b7df9008cf78bcc4901ecee52eb875112bcfc66fe0c842ca3bec", "stream": false }, { "name": "KEY", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f90919293949596979899", "state_after": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f90919293949596979899c7e129ed9542b812674e444c1367a1ca51f67a9c7ec0ab0858b347dba4fdf8dab260feaf821ca8550b7e9853bb0c", "stream": false }, { "name": "AD", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a", "state_after": "73725472fe7b1446eacaad482b22455f6b99d0c516d9b67ba3b3cc677554b12599452a0b4b27ee6a086a6629ab513204785662bfcb39ac5ca82a6226e65851ada92560a81ee97e610441181c74c87e506cd40694e235cca59dc5ba13eba0f6bfddd09f8f108b544402b382f03e871e763036f40761ebd3663354c46b75a879c7d6f11a628242f078e6290f6808e7b80219b8d6944159ad297a2747066f3463de73aa0587dc4cea447bc23ea4d541282c0b0a86c00efe8f4c44f94fedca627ec61a918084af61b341", "stream": false }, { "name": "send_ENC", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b", "output": "a5656d80d4124540adfe22d137e225e897a4b2eccae961a313429e685521160228414dfd1920250e2eaaf2e8cef336b1c501b504b84508d1fa5094951691b3889ec02b7dfc5d0db91c7f2320ecf2fe46c3f52a03a276392280c7f8c562d80bd74c647cc8241f8c48c10fd052b4eb58a50fb0859a8afc5efe1f184184d9cebd81e429f1cc2321432f73bb08fabd76c94022f7f4c7413b66e64228cd62", "state_after": "a5656d80d4124540adfe22d137e225e897a4b2eccae961a313429e685521160228414dfd1920250e2eaaf2e8cef336b1c501b504b84508d1fa5094951691b3889ec02b7dfc5d0db91c7f2320ecf2fe46c3f52a03a276392280c7f8c562d80bd74c647cc8241f8c48c10fd052b4eb58a50fb0859a8afc5efe1f184184d9cebd81e429f1cc2321432f73bb08fabd76c94022f7f4c7413b66e64228cd6292e034615482d0551acd9a55b66cda0ec01ca753ab119e964286089c9a2df37f2059ce7bd32bdf928240e3ae", "stream": false }, { "name": "KEY", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c", "state_after": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9cafb4e979698e1ae0beb4e3cf3022c07cb7f52c03582b0f5c027aa4b44746fed3408f64c9eedfc27dc468c6", "stream": false }, { "name": "AD", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d", "state_after": "106c8426fce687d536a2d1cf6b0c38a6de4d6824ea86f63c43ef95ae9d0b83a3fb4cd8bba771a364052bcae9da00290a682e0caff0c220069c69d2c8815b3e1c470d55baaa823b2b27dfef95011a86377c6cd160382414f543462140eef9cd4448ae7113f543d53bf9f99bd0a5c4c4a18260e683a28f0c1db8b5d2859145622dc9c05a86b1a38de8cce6f0deaae6256d5affc6c0064254204b50353c12bd8f9512bc99c170d71c08ffabde72f00dcb3998b3ce6e62ba405ecd070f8fb0a2374613e9ba872226a990", "stream": false }, { "name": "send_ENC", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e", "output": "170596c7b0cf3a8c098da939f8e72de3c6c0b20495cec5c9c268f1e8c7b483b1e560e2d5b4b16c0c68762e8221e3d4ff758c46ab859a2c9a71e4410d4cd8a0f2f28f9d70f011d3cb69df537e90ea1c9fdc2d550ae04a9c15c54c9712185703ab9a0e44d56c2be76fbbe48efab4df88100690de373aad1b0f3a82401518969a22fb085ff4cffb2e4d2bb45259477fc64a20968a8888869469247e73b1c366cd", "state_after": "170596c7b0cf3a8c098da939f8e72de3c6c0b20495cec5c9c268f1e8c7b483b1e560e2d5b4b16c0c68762e8221e3d4ff758c46ab859a2c9a71e4410d4cd8a0f2f28f9d70f011d3cb69df537e90ea1c9fdc2d550ae04a9c15c54c9712185703ab9a0e44d56c2be76fbbe48efab4df88100690de373aad1b0f3a82401518969a22fb085ff4cffb2e4d2bb45259477fc64a20968a8888869469247e73b1c366cd973bc30f7da7b91c5e2c3ad51295d3dfeee4af9c333ef06bcf95556f50fb3c428cabbdbf6da0f37dee", "stream": false }, { "name": "KEY", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f", "state_after": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fc75e80a20bd7fff37eee5d7fcb6039b0e37893cfd993a66238cfb85457266bee05d8f725dc4593ce", "stream": false }, { "name": "AD", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0", "state_after": "05d7c4a13bbc7ac58eb080f71a4f04e0063d81a0cadef198ed04f5668f236748304015402a0ec32ec41bc9c5b4d9c05a94ccd2ce6d5f77d77220f9c857adbd45fc6df7e75d176cb89901f68b6950dd02df764b2d251987da9f83e367e6263d67d17213d318a6342add482a7e414340d5ed4c5f755d7044db1bbc64a7c24e0045d979f80df91c451c268def53aa34a31e9ee7e4fba70db5f20baa30af7fe699f6ce5eec6171135edd0f3d77de40bd5f76cc08e041979b7b1a620c91550a73b39349799f26ef244fad", "stream": false }, { "name": "send_ENC", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1", "output": "26768b7eeec082e83300fad0b91aadb602a1157b30fa35e5bdc2ba0273c46a65b32cabcecfccf82e0b4cd7f1cbf29ab27f0d6c42cde86cd02d99bf267b0a79ccaec93c15f2179a4724354e7059aeaf99ad168b4446e4f354e53a49d4060798f54c17428caeadc7048a5e6465f367f9114a4e71712e4a5d91d64571f9927771f1848ee8b81f02bfcfba07277ea242389625115ed034d30e342666d37322b9a602a77c", "state_after": "26768b7eeec082e83300fad0b91aadb602a1157b30fa35e5bdc2ba0273c46a65b32cabcecfccf82e0b4cd7f1cbf29ab27f0d6c42cde86cd02d99bf267b0a79ccaec93c15f2179a4724354e7059aeaf99ad168b4446e4f354e53a49d4060798f54c17428caeadc7048a5e6465f367f9114a4e71712e4a5d91d64571f9927771f1848ee8b81f02bfcfba07277ea242389625115ed034d30e342666d37322b9a602a77c5859ba81af5c2734d027f72909a90671ea66c74f2ae047b989f37c6f7f0c248effeb09b0e582", "stream": false }, { "name": "KEY", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2", "state_after": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2e4317cfacbce311403b77225eff1fc96796e0e4c237e7707bda1fab3c7a96ae30b7bcaf6f6", "stream": false }, { "name": "AD", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3", "state_after": "22b32d8a527ef72d69cc5b25899c507d073babebc3a89dbf0f7f17739904f770f6990df3c2199552861f35984d990cce3dcb9c4a02ad74a91d6ccbd44bf0876260e5f0b161ab2ca422d321a7db6fc77c2c9494ce71f6148db2688ec75f13b808cd783d4b60918041ef5216f755d732e04b7125ef4bbbd7959cb05f297ccdba7e69aa38ed9cc249fcde69d653a85a288faad8bb35b57bb39f5e1dbcdbbcdc9011831c1dec91bcc8cb192da12a912baf128ffb217e96729ac2389eda7d6882f6b56054f86be4dc6b52", "stream": false }, { "name": "send_ENC", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4", "output": "f616f165916649d0a864788d40e2f58d1e028d4bbfbd21318041fa10af3a52c91cdd97fa9e973e866276e17d84395bea324dc01e41a5cc053ae27ca1a2123823323f27cd6c323b063aa2e5ea3369f102f5918d66579005a843dde506223fe0effd8297e121db6620e7a3b2a17b119199eee9f94733ee4b0d7ee93519ea98e4270eb2459a5365721ff86d96241ab7059d9d90919f3f038d549931e8e47a447286f343839cea", "state_after": "f616f165916649d0a864788d40e2f58d1e028d4bbfbd21318041fa10af3a52c91cdd97fa9e973e866276e17d84395bea324dc01e41a5cc053ae27ca1a2123823323f27cd6c323b063aa2e5ea3369f102f5918d66579005a843dde506223fe0effd8297e121db6620e7a3b2a17b119199eee9f94733ee4b0d7ee93519ea98e4270eb2459a5365721ff86d96241ab7059d9d90919f3f038d549931e8e47a447286f343839cea44de74bfe8dd57e88dd389e587d1154099a9c9e9810d520b0724e616c4091c33f1ffcf", "stream": false }, { "name": "KEY", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5", "state_after": "130f205751b0b6c68ec8c238de814980682d2c93ddf595b0eaa2ade021fbca4d1d546da553d31ae7a320b360d9a6625df495d27a40eddeb084a0ce962630532a45f1fbda3a04099c8ebe6c45c4c625e1063bcfe01c7ac5b4f0a7ea7a77b31db3524aad0789b835afb687053437941f2876d3d3e8ed4eb85d77629c575c005f0a029c7e5a201713a75b84f515497dd10da88bef32ff696fe5194ffda021da4a5f3142edc5a8d61e88364245f1d62f976a99aeaef8dca4ad1f607eb43f0d01f2985c67c5d5a3a53f48", "stream": false }, { "name": "AD", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6", "state_after": "989011d66963d6c9440958e4a72bfc7381ce92f9be7c1bf81a8bc9c7345d88f6400406bd967dbb5a3a29fa7fd4b158077efd041e8baf21629dece85fcf403664946264d2c8b2b9d0a320c2a429c74622f7fa2e25372325efd9ae6e1d0a8d0c7016cd88d91d92fb5159d909ec54b06eec023256a0182cbde4cad927382c532e63145e01367679f6b99da4bd45e80da36ae6ea3055f0ccb90aa8e94d388903f53d8051b8da8cc730a0efb89995b17c16e7d20b0992e45f52c90896435fcfc92c6c8e9ab7b8d271f8cb", "stream": false }, { "name": "send_ENC", "meta": false, "input_data": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7", "output": "948f9286c1af3ad870bfb7066ada250275410f4ac39d7a4dc99717b79f410dd58d6466752f3db43a0be6c45010f2b62b6b22819358e98740949cde517bba07b2be3e3c7238144ee401bca1f847ceabba57888b87c7efa232ba27b093fb7f1a94ca35b7fccfcea7973958f5e49d27e73150499b7d5c55a52e4c58a3d1066a7d14aebf5824b9f9fe654f1eb1a872efc69ecd8bbb36a476c1c407ff85f5da713be7f2b7936b0a8c75a2", "state_after": "75a286e3980b3179e7d81609c092a572fd37e986cd67bf761e898d057533fd46deab8392bd446b04d6d5ba501edf0f03b8d2b9eb27c667e62bfb987eeb86b6bd45c614d806d9094692d9cc7fd54c38a8181bf376e1ec14bf09c9271091d3f06d4a37baeb1799929d02cdba6ed9ab80c08c8cd8801921413e77f226a295de611b8047c3854a9b11e27fc8a6a2b961f87cc661f6a064006c4009d851e6ca5daae517092319dd0a1c1daf69a247eb40f24d121e51ac6dc7d8337c33e345fd2cf2a28cde5ade52324b57", "stream": false } ] } strobe-rs-0.8.1/kat/meta_test_vector.json000064400000000000000000000152431046102023000166000ustar 00000000000000{ "name": "meta tests", "proto_string": "custom string number 2, that's a pretty long string", "security": 128, "_comment": "These were taken from https://github.com/mimoo/StrobeGo/blob/master/strobe/test_vectors/test_vectors.json. Thanks David!", "_comment": "NOTE: recv_MAC throws an authentication error in this file. This is expected.", "operations": [ { "name": "init", "meta": false, "input_data": "", "state_after": "9c7f75fa8b893ab70ad448513c0b5243b2792a3e306706c45f1b9e4a9018920ff37e485e146b9d66fb6a1b4d6f8933e7561d2392d12d331293cc92e8a624acf6e1b60095e322bbfbc845e5b26995fe7d7c841374d1ff5898c92ee0636b06727321c92a603907035349ccbb1b92b7b0057e8fa87fcebc7e88656fcb45ae04bc34cabeaebe79d91750c0e8bf13b966504d1343597265dd8865adf91409cc9b20d5f47444041f97b699ddfbdee91ea87bd09bf8b02da75a96e947f07f5b65bb4e6efefaa16abfd9fbf6", "stream": false }, { "name": "KEY", "meta": false, "input_data": "303130313031", "state_after": "303130313031c70245935ce6fc2fffb47011279f887312c498f2a44a5aafb316e25f24fd46140c84c87f6613d7ff30a22d105ea7b8cde98ac104cf72d0c913bd71c6b7918cf8d1a15f8aa2b6bd6b92416e709b9678b52358884b3855dc4714ae0b93338829fbca58361efeeb58c41e9511258beba1322752c123696de8c20159b6b17303f56df8741c6fecc991611ca8f755d54bed57960feb032f47d64df53030a491151fe6f4cdd0c48f9c0a81e5bce406de061283d6257ac6ef2babc776e5dee146793acef9cf", "stream": false }, { "name": "AD", "meta": true, "input_data": "68656c6c6f2c20686f772061726520796f7520676f6f64207369723f", "state_after": "303130313031c7102df6308a9303dfdc1f6607fefa1632bdf787842d35c0d736913656c246140c84c87f6613d7ff30a22d105ea7b8cde98ac104cf72d0c913bd71c6b7918cf8d1a15f8aa2b6bd6b92416e709b9678b52358884b3855dc4714ae0b93338829fbca58361efeeb58c41e9511258beba1322752c123696de8c20159b6b17303f56df8741c6fecc991611ca8f755d54bed57960feb032f47d64df53030a491151fe6f4cdd0c48f9c0a81e5bce406de061283d6257ac6ef2babc776e5dee146793acef9cf", "stream": false }, { "name": "PRF", "meta": false, "input_data": "00000000000000000000000000000000", "output": "87e57623d5c80f6d1083473a288ccdd7", "state_after": "0000000000000000000000000000000043b52a0e602d1f0ae3ef2604208be72c684fd6815a51820c6309f8a058b5c0789fd3caed49beb6c495a7750d1b542432eaa236d335b6fb348befdccd7104543aade1a95d7a92f5126586ae19a97e067712e23f9d818e3476bcc6fdbf6eec68911c59554ad3ec1cdd030ef5317de98593339d8e2858c26f1974475848d01d4a616be74e54321585a6da031bdbc2e0e47fb7f3d7deab9e814d76945a40c2c017960214317f7e113b877410fd3bbebf77cc66963763ebdd4a23", "stream": false }, { "name": "send_ENC", "meta": true, "input_data": "686920686f772061726520796f75", "output": "f443f226de75b9f1e5d87c0b3bf0", "state_after": "f443f226de75b9f1e5d87c0b3bf057362d4e1d65392207325a927e5066dcb3edfa95a62cac1928df260fb657e717e2453922e81e8748bb3a21fe46d4bf96d2f3c8588cb5d41c87b612e655c5ecaa5b36ca8a2eeff451f95f3d6c74248fff34170515f53830128fdad20ee2833077c542f4be17d587c409a741ae22e552ef33e29cfec9dc6d4175351f7a078eea1cdb48af8b53696de94b97d1f5a60535754d9d86b95298647dbece3721c84a4d79275874a92a19d3ae54598e4ad36297ce0cc1bf02f0c61cc9cd2d", "stream": false }, { "name": "recv_ENC", "meta": true, "input_data": "686920686f772061726520796f75", "output": "a14f034475e956e83d9d2f4e5c1e", "state_after": "686920686f772061726520796f7558c754fc438956e93e4d7fafc2959c69103ff950b4207215888c9f418d0e36d7fc3f27e97ba405134df0926aa429825f99cf16b150fcbbd39dbcc07ba96fb3b2805aa6021d401b934d7eb85c6d1c386be8b312a7286348af8313d359f422f8c450559f91e94ab392e085e05ba73dfc62ab8a5b133114dad48fcfd3f03042283373f51cf36e498a39db073ba5f3c366313a266c156c6b276e9c6d068cf7b2f65615a69b23eadfc812a76a89d0c7547a1b496c65d8782ce02b92ce", "stream": false }, { "name": "send_MAC", "meta": true, "input_data": "00000000000000000000000000000000", "output": "ea4dcfc763fb0492c94c2d21c3cd8083", "state_after": "ea4dcfc763fb0492c94c2d21c3cd80834bda5f60082c659eab8551e36b96cd43667e466789dc3a5301e1ff253517104e160a9471002f2918a74cf9b4af529c2e5b0e118f7430562ec7aed464d677d8fb8ac0834be753afc973fa289332aa53f0b252622594bd9e91eed94d2e19483f2c3ef23866cf90413ca15bc1a6137f1c315031ed4cc8d2b1f10f1bd96f300d38fe4329bc52b655fbbe0a67edba02e529b9d4b0566ce382d7bfbeb03aadfd465fb14bb55f8c36864696b1bca90b32c66f9d3570f7595919903b", "stream": false }, { "name": "recv_MAC", "meta": true, "input_data": "686920686f772061726520796f75", "state_after": "686920686f772061726520796f759a10fcf2396b6a8a6476533c461996b4169cea7cb73f575022be59d0f9a7a98a7fd1c483ccb57310e0c40bde3882e8332217019c716e3f1fc56164dc038a0b28b8169d4e38a24ca7af824654fe37e009a644562de4f0caa825206512d5163638922700f86fe06b6950df9510953390e02310b09cc75c30d884612c617954b37b388e5cf2c8110940efa7b985a666a9a38fcb5040ecf5bed513bf397f2e93530be83b1b92cdc8d407185d2700207a1df85de5f34e754fab507252", "stream": false }, { "name": "send_CLR", "meta": true, "input_data": "686920686f772061726520796f75", "output": "686920686f772061726520796f75", "state_after": "686920686f772061726520796f759a0a949b190305fd441721596660f9c1169cea7cb73f575022be59d0f9a7a98a7fd1c483ccb57310e0c40bde3882e8332217019c716e3f1fc56164dc038a0b28b8169d4e38a24ca7af824654fe37e009a644562de4f0caa825206512d5163638922700f86fe06b6950df9510953390e02310b09cc75c30d884612c617954b37b388e5cf2c8110940efa7b985a666a9a38fcb5040ecf5bed513bf397f2e93530be83b1b92cdc8d407185d2700207a1df85de5f34e754fab507252", "stream": false }, { "name": "recv_CLR", "meta": true, "input_data": "686920686f772061726520796f75", "output": "686920686f772061726520796f75", "state_after": "686920686f772061726520796f759a0a949b190305fd441721596660f9c1198782159757382702df2bb5d9dec6ff7fd1c483ccb57310e0c40bde3882e8332217019c716e3f1fc56164dc038a0b28b8169d4e38a24ca7af824654fe37e009a644562de4f0caa825206512d5163638922700f86fe06b6950df9510953390e02310b09cc75c30d884612c617954b37b388e5cf2c8110940efa7b985a666a9a38fcb5040ecf5bed513bf397f2e93530be83b1b92cdc8d407185d2700207a1df85de5f34e754fab507252", "stream": false }, { "name": "RATCHET", "meta": true, "input_data": "0000000000000000000000000000000000000000000000000000000000000000", "state_after": "00000000000000000000000000000000000000000000000000000000000000009f8ed329237711ff2a4225b0b01d0ef66dcc86a64ae97d28ad9d04507e638c649eae8b798fd36beca30ba37c5ebaf3049dc34107a33c847307a00b60201f3de9ad27fb745acd57d16c334f07cdb34c9518f89ce835912da28cda7f0b67b0e3a4ab5dff54984bcb50136ee74e22569e4a75201f019b5e4e156a1bd9289659683958eadc5b7f2846d110fb6c0faaba64cce760b000c11317e80c4f169fd7e9280ceb4b5e4e97ed50b4", "stream": false } ] } strobe-rs-0.8.1/kat/simple_test_vector.json000064400000000000000000000152061046102023000171420ustar 00000000000000{ "name": "simple tests", "proto_string": "custom string", "security": 128, "_comment": "These were taken from https://github.com/mimoo/StrobeGo/blob/master/strobe/test_vectors/test_vectors.json. Thanks David!", "_comment": "NOTE: recv_MAC throws an authentication error in this file. This is expected.", "operations": [ { "name": "init", "meta": false, "input_data": "", "state_after": "9c7f75fa8b893ab70ad448513c0b5263dc0c475c551526f6733bea22f16cb57cd31f682e660ee912824a772201ee1394226f4afcb62d331293cc92e8a624acf6e1b60095e322bbfbc845e5b26995fe7d7c841374d1ff5898c92ee0636b06727321c92a603907035349ccbb1b92b7b0057e8fa87fcebc7e88656fcb45ae04bc34cabeaebe79d91750c0e8bf13b966504d1343597265dd8865adf91409cc9b20d5f47444041f97b699ddfbdee91ea87bd09bf8b02da75a96e947f07f5b65bb4e6efefaa16abfd9fbf6", "stream": false }, { "name": "KEY", "meta": false, "input_data": "303130313031", "state_after": "3031303130310e6be02d3677fb5a70dfc1f3a6f889f561699f053f97f705d671383c613b13b3e4184397827ad73b9c26e13af703f0bf70ff10d71516bb8a05a5b69775f1722daf9178b71cfca96cf36cd0fab68cac22f3f35afec0bf5066656d142761e3200b9e76a9ddd6ad74932110afd4a776fd82515edfe028dd4858abfda1c3b6bff17e9b82aad3b519e51e704cba48a6e383c8504cd1f7b13d7a6ac6e9690ed05ae90744c5c32a97af08d66f15c9357bf20ea9276cab5ac736b8a68f25b095c409a1c48fd4", "stream": false }, { "name": "AD", "meta": false, "input_data": "68656c6c6f2c20686f772061726520796f7520676f6f64207369723f", "state_after": "3031303130310e6988485a1b947650b7ae848699fb904110f0701ff0986ab2514b55130413b3e4184397827ad73b9c26e13af703f0bf70ff10d71516bb8a05a5b69775f1722daf9178b71cfca96cf36cd0fab68cac22f3f35afec0bf5066656d142761e3200b9e76a9ddd6ad74932110afd4a776fd82515edfe028dd4858abfda1c3b6bff17e9b82aad3b519e51e704cba48a6e383c8504cd1f7b13d7a6ac6e9690ed05ae90744c5c32a97af08d66f15c9357bf20ea9276cab5ac736b8a68f25b095c409a1c48fd4", "stream": false }, { "name": "PRF", "meta": false, "input_data": "00000000000000000000000000000000", "output": "5ce86d0815c02a27d8bdd923f2cb0bd8", "state_after": "000000000000000000000000000000006380b09c7f711ca1c97eb6612cf25c2ab2abfb9cba447b27e72134629c3947281a0be4044d4e03c60564c66885407a2e6982603b07390ab718c0fa70f25e857c189caf2bdf42786669bc2f5d43440869e8feb7d47780383bb82c84705220c4d08b5df18081cb4939f3a38d059ee18529e85c6dade82e3c8b3c6cd0b56203299bb7311dfcbb68d1b5be5df6d2b8697dd60e89ca4fd78ffbd1c22b939311775d913a8bf324b8ebac782e1f99605eccf03c0e59770c177812d1", "stream": false }, { "name": "send_ENC", "meta": false, "input_data": "686920686f772061726520796f75", "output": "dc0c857f045d9941fed8acbfd024", "state_after": "dc0c857f045d9941fed8acbfd024f1a0647e59b1f9c9f7786871ce439f5bf1312ad75b62aa59c3ca8a38044d367ebe4691590525637a7f45075271dd34cd0a05bf987d464fea1353dbf05620dd5f1dde57bb3d768bb52bcba95142437bbc26ca2c0c314aebc894ba07fea87de5ceda015c55f39ef8f2732b76a0d903ddb0f648e1fef2188dfb79c3c2ef4d323d04a81aac8e292f156320b40ec7c8bf7f0f2ec2322768999ce3ca9b5ccb8aad6b93e5dbb4a356c0645e72445cc995fdaa42f902eb4acf0c1bca2cb5", "stream": false }, { "name": "recv_ENC", "meta": false, "input_data": "686920686f772061726520796f75", "output": "aad1a176d7add6ef904f1e1acf53", "state_after": "686920686f772061726520796f75d18d928ffc684bdeaf12976ddcb534b3f340fb8ea4336037b41efc715070db7d87c35acf29cce981dc586393de1e340351b59e8f702273f1d69bb6533343e05963f18018b08a6035d66335d2c4ed4223cebc4f687c3820690b5ed1a890659b8a12a962b7655446635ee73d1ed258e732ac6973611bd7effbbbc0aa68042b80a97b48007d95b220b09bb39713381489c636709397505a20c141dc70cc9d9e0292115d05fbbb8fca1981f8cf9f328e9e3ebddc84c88fbcb50b93d4", "stream": false }, { "name": "send_MAC", "meta": false, "input_data": "00000000000000000000000000000000", "output": "a05d94e152949460c67d648e91bc6d53", "state_after": "a05d94e152949460c67d648e91bc6d539a4a0e9a96b42f580d0c4887170542c134c11f571e5c1a7b6f1282dc07bf41ba08ddd9eebb49e7f1290a6fccd5dfd7c72f5787d6c274013f53453652be13a01dbf390b0cc56d6800f7fae185e77b98ca2a0a689307a228c026eb67ea2cf0f302bf077a4eaf122d211aaa4c839cb3872f34a1693f089997f1984900b91c051428b55232a158d83d78d6d2f5175555c741e3bd78fef961cffc7069ed5e3483b4593a54b079fc934a73073e7b6b0ad56b46286202c927100704", "stream": false }, { "name": "recv_MAC", "meta": false, "input_data": "686920686f772061726520796f75", "state_after": "686920686f772061726520796f75dbd06ff7498e4fe2bc4bd620dd2c4ddf93c8280db4c3c2f7400f50efdd714a6ee108c8db7fc425de03ef1116b477b929c35076f2b0e72e7517f7e57b51cc85d57f73fee55a9db690240ba2f16ea11bd83cfde4df8a70f66c81a52a7e3ca21342ba74662b42273e5129de3c2d1ca8f0dae2349c9a9b7cf0df634ba3112f541a036779f446afbeff32e6423c0e58da979b8d87d66de030eb89bf2e1f95b21efccd41f7b44b8ca5c2e8dfed34e485a6195b3bde6390793866772361", "stream": false }, { "name": "send_CLR", "meta": false, "input_data": "686920686f772061726520796f75", "output": "686920686f772061726520796f75", "state_after": "686920686f772061726520796f75dbda079e69e620959c2aa445fd5522aa93c8280db4c3c2f7400f50efdd714a6ee108c8db7fc425de03ef1116b477b929c35076f2b0e72e7517f7e57b51cc85d57f73fee55a9db690240ba2f16ea11bd83cfde4df8a70f66c81a52a7e3ca21342ba74662b42273e5129de3c2d1ca8f0dae2349c9a9b7cf0df634ba3112f541a036779f446afbeff32e6423c0e58da979b8d87d66de030eb89bf2e1f95b21efccd41f7b44b8ca5c2e8dfed34e485a6195b3bde6390793866772361", "stream": false }, { "name": "recv_CLR", "meta": false, "input_data": "686920686f772061726520796f75", "output": "686920686f772061726520796f75", "state_after": "686920686f772061726520796f75dbda079e69e620959c2aa445fd5522aa9cc3406494abad80606e228afd08251be108c8db7fc425de03ef1116b477b929c35076f2b0e72e7517f7e57b51cc85d57f73fee55a9db690240ba2f16ea11bd83cfde4df8a70f66c81a52a7e3ca21342ba74662b42273e5129de3c2d1ca8f0dae2349c9a9b7cf0df634ba3112f541a036779f446afbeff32e6423c0e58da979b8d87d66de030eb89bf2e1f95b21efccd41f7b44b8ca5c2e8dfed34e485a6195b3bde6390793866772361", "stream": false }, { "name": "RATCHET", "meta": false, "input_data": "0000000000000000000000000000000000000000000000000000000000000000", "state_after": "000000000000000000000000000000000000000000000000000000000000000086bee3a828fc80f502b7f390dbca230c8ba1cea5cb93a958c443277dd0ab0625745898f5ebabc9ec1800db4ea4fb7ad776a49b8aef66874397f0b8f6072df52b2eeb9871046865aea090d503e68cd583fe65064fed4c6a9c8d6f190a9f506e80a79d2b2a5ef56ede1fe2c575fae052505a4032221f796bd09cdc723245c572a6eb500be48728fd0461b09d7813cbf384d479999a79168eadfd567bb20adc9c3cb6b5e7ddf9c86d73", "stream": false } ] } strobe-rs-0.8.1/kat/streaming_test_vector.json000064400000000000000000000074311046102023000176430ustar 00000000000000{ "name": "streaming tests", "proto_string": "custom string number 2, that's a pretty long string", "security": 128, "_comment": "These were taken from https://github.com/mimoo/StrobeGo/blob/master/strobe/test_vectors/test_vectors.json. Thanks David!", "_comment": "NOTE: recv_MAC throws an authentication error in this file. This is expected.", "operations": [ { "name": "init", "input_data": "", "meta": false, "state_after": "9c7f75fa8b893ab70ad448513c0b5243b2792a3e306706c45f1b9e4a9018920ff37e485e146b9d66fb6a1b4d6f8933e7561d2392d12d331293cc92e8a624acf6e1b60095e322bbfbc845e5b26995fe7d7c841374d1ff5898c92ee0636b06727321c92a603907035349ccbb1b92b7b0057e8fa87fcebc7e88656fcb45ae04bc34cabeaebe79d91750c0e8bf13b966504d1343597265dd8865adf91409cc9b20d5f47444041f97b699ddfbdee91ea87bd09bf8b02da75a96e947f07f5b65bb4e6efefaa16abfd9fbf6", "stream": false }, { "name": "KEY", "meta": false, "input_data": "30313031303130313030313030313031303130313031303130313031303031303031", "state_after": "3031303130313031303031303031303130313031303130313031303130303130303124fd46140c84c87f6613d7ff30a22d105ea7b8cde98ac104cf72d0c913bd71c6b7918cf8d1a15f8aa2b6bd6b92416e709b9678b52358884b3855dc4714ae0b93338829fbca58361efeeb58c41e9511258beba1322752c123696de8c20159b6b17303f56df8741c6fecc991611ca8f755d54bed57960feb032f47d64df53030a491151fe6f4cdd0c48f9c0a81e5bce406de061283d6257ac6ef2babc776e5dee146793acef9cf", "stream": false }, { "name": "KEY", "meta": false, "input_data": "30313031303130313030313030313031303130313031303130313031303031303031", "state_after": "30313031303130313030313030313031303130313031303130313031303031303031303130313031303130303130303130313031303130313031303130313030313030318cf8d1a15f8aa2b6bd6b92416e709b9678b52358884b3855dc4714ae0b93338829fbca58361efeeb58c41e9511258beba1322752c123696de8c20159b6b17303f56df8741c6fecc991611ca8f755d54bed57960feb032f47d64df53030a491151fe6f4cdd0c48f9c0a81e5bce406de061283d6257ac6ef2babc776e5dee146793acef9cf", "stream": true }, { "name": "AD", "meta": false, "input_data": "68656c6c6f2c20686f772061726520796f7520676f6f64207369723f203f3f3f3f", "state_after": "30313031303130313030313030313031303130313031303130313031303031303031303130313031303130303130303130313031303130313031303130313030313030318cfab9c433e6cd9a9d03fd364e11e9f358cc4c2da82c573ab86767c779ac13b716c4f558361efeeb58c41e9511258beba1322752c123696de8c20159b6b17303f56df8741c6fecc991611ca8f755d54bed57960feb032f47d64df53030a491151fe6f4cdd0c48f9c0a81e5bce406de061283d6257ac6ef2babc776e5dee146793acef9cf", "stream": false }, { "name": "AD", "meta": false, "input_data": "68656c6c6f2c20686f772061726520796f7520676f6f64207369723f203f3f3f3f", "state_after": "30313031303130313030313030313031303130313031303130313031303031303031303130313031303130303130303130313031303130313031303130313030313030318cfab9c433e6cd9a9d03fd364e11e9f358cc4c2da82c573ab86767c779ac13b716c4f5305372928474e476fa6605ea99c4125e3db4030e0287a6212adfc34c23ca52c74b1c6fecc991611ca8f755d54bed57960feb032f47d64df53030a491151fe6f4cdd0c48f9c0a81e5bce406de061283d6257ac6ef2babc776e5dee146793acef9cf", "stream": true }, { "name": "AD", "meta": false, "input_data": "68656c6c6f2c20686f772061726520796f7520676f6f64207369723f203f3f3f3f", "state_after": "5117b46c2d842655c1be2a69f64f16aaaad2c0050fe2ac5446afe44345a9b10d044c8b3ec8005a9e362c0a431ab5c4d8228c2f890ae56ad3fef4404aa6cc76704b503d627553ae9635d329cdfa86ed29ec0dd79787ff3fcefdee7463c053ef3b4a4fa7c8eb89a6372df2c4ccfc7469d7447bd19a67940642334706e5ff6b1ef58514e55c6b5c6921c58eb7cb5c57978c92c42e598926fcfdcd9705fb948ed6fe9027c65fb0659c98a9c9668d523dfa2b27bde76224944503b686901c989fedac34994dd16daedf00", "stream": false } ] } strobe-rs-0.8.1/kat/verify_test_vector.py000064400000000000000000000057231046102023000166370ustar 00000000000000# This file verifies a JSON-encoded test vector against the STROBE reference implementation. # This file is modified from David Wong's test file: # https://gist.github.com/mimoo/64e5054f4927a0df0033c8f5f29f4029 # Thanks, David! from __future__ import print_function import binascii import fileinput import getopt import json import os import sys setup_instructions = \ """How to run: 1. Download a copy of STROBE into the root directory of this crate and name the folder `strobe-reference` by running `git clone git://git.code.sf.net/p/strobe/code strobe-reference` 2. `cd` back into this folder 3. Run `python2 {} TEST_VECTOR_JSON_FILE` """.format(sys.argv[0]) # Add Python Strobe module to path sys.path.insert(0, "../strobe-reference/python") try: from Strobe.Strobe import * except: print("Error: You forgot to import the STROBE Python reference implemention.") print(setup_instructions) sys.exit(1) # Op flags I,A,C,T,M,K = 1<<0, 1<<1, 1<<2, 1<<3, 1<<4, 1<<5 def create_flag(name): if name == "AD": return A elif name == "KEY": return A|C elif name == "PRF": return I|A|C elif name == "send_CLR": return A|T elif name == "recv_CLR": return I|A|T elif name == "send_ENC": return A|C|T elif name == "recv_ENC": return I|A|C|T elif name == "send_MAC": return C|T elif name == "recv_MAC": return I|C|T elif name == "RATCHET": return C else: print("Op not recognized: {}".format(name)) sys.exit(1) def test(filename): counter = 0 test_vector = json.load(open(filename)) ss = Strobe(bytearray(test_vector["proto_string"], "utf8"), security=test_vector["security"]) for oo in test_vector["operations"]: if oo["name"] == "init": assert(oo["state_after"] == binascii.hexlify(ss.st)) else: flag = create_flag(oo["name"]) input_data = binascii.unhexlify(oo["input_data"]) if oo["meta"]: flag |= M output = None try: # If the operation takes integral inputs, give it the length of the input if (flag & (I|T) != (I|T)) and (flag & (I|A) != A): output = ss.operate(flags=flag, data=len(input_data), more=oo["stream"]) else: output = ss.operate(flags=flag, data=input_data, more=oo["stream"]) except AuthenticationFailed: # We do not expect recv_MAC to succeed on random inputs pass assert(binascii.hexlify(ss.st) == oo["state_after"]) if "output" in oo: assert(binascii.hexlify(output) == oo["output"]) if __name__ == '__main__': if len(sys.argv) < 2: print("\nUsage:\npython2 run_test.py TEST_VECTOR_JSON_FILE\n") sys.exit(1) filename = sys.argv[1] test(filename) print("Test on {} passed".format(os.path.basename(filename))) strobe-rs-0.8.1/src/basic_tests.rs000064400000000000000000000416041046102023000152170ustar 00000000000000/* How to run the Python 2 code listed below: 1. Download a copy of strobe (https://sourceforge.net/p/strobe) into the root directory of this crate and name the folder `orig-strobe` 2. Make a Python file with any of the code below in the root directory of this crate. 3. Run `python2 FILE` */ use crate::{ keccak::KECCAK_BLOCK_SIZE, strobe::{SecParam, Strobe}, }; /* # The Python 2 code used to generate this test vector: import sys sys.path.insert(0, "./orig-strobe/python") from Strobe.Strobe import Strobe s = Strobe("", security=128) print("[{}]".format(', '.join(map("0x{:02x}".format, s.st)))) */ #[test] fn test_init_128() { let s = Strobe::new(b"", SecParam::B128); let initial_st = s.st.0; let expected_st: &[u8; 8 * KECCAK_BLOCK_SIZE] = &[ 0x9c, 0x7f, 0x16, 0x8f, 0xf8, 0xfd, 0x55, 0xda, 0x2a, 0xa7, 0x3c, 0x23, 0x55, 0x65, 0x35, 0x63, 0xdc, 0x0c, 0x47, 0x5c, 0x55, 0x15, 0x26, 0xf6, 0x73, 0x3b, 0xea, 0x22, 0xf1, 0x6c, 0xb5, 0x7c, 0xd3, 0x1f, 0x68, 0x2e, 0x66, 0x0e, 0xe9, 0x12, 0x82, 0x4a, 0x77, 0x22, 0x01, 0xee, 0x13, 0x94, 0x22, 0x6f, 0x4a, 0xfc, 0xb6, 0x2d, 0x33, 0x12, 0x93, 0xcc, 0x92, 0xe8, 0xa6, 0x24, 0xac, 0xf6, 0xe1, 0xb6, 0x00, 0x95, 0xe3, 0x22, 0xbb, 0xfb, 0xc8, 0x45, 0xe5, 0xb2, 0x69, 0x95, 0xfe, 0x7d, 0x7c, 0x84, 0x13, 0x74, 0xd1, 0xff, 0x58, 0x98, 0xc9, 0x2e, 0xe0, 0x63, 0x6b, 0x06, 0x72, 0x73, 0x21, 0xc9, 0x2a, 0x60, 0x39, 0x07, 0x03, 0x53, 0x49, 0xcc, 0xbb, 0x1b, 0x92, 0xb7, 0xb0, 0x05, 0x7e, 0x8f, 0xa8, 0x7f, 0xce, 0xbc, 0x7e, 0x88, 0x65, 0x6f, 0xcb, 0x45, 0xae, 0x04, 0xbc, 0x34, 0xca, 0xbe, 0xae, 0xbe, 0x79, 0xd9, 0x17, 0x50, 0xc0, 0xe8, 0xbf, 0x13, 0xb9, 0x66, 0x50, 0x4d, 0x13, 0x43, 0x59, 0x72, 0x65, 0xdd, 0x88, 0x65, 0xad, 0xf9, 0x14, 0x09, 0xcc, 0x9b, 0x20, 0xd5, 0xf4, 0x74, 0x44, 0x04, 0x1f, 0x97, 0xb6, 0x99, 0xdd, 0xfb, 0xde, 0xe9, 0x1e, 0xa8, 0x7b, 0xd0, 0x9b, 0xf8, 0xb0, 0x2d, 0xa7, 0x5a, 0x96, 0xe9, 0x47, 0xf0, 0x7f, 0x5b, 0x65, 0xbb, 0x4e, 0x6e, 0xfe, 0xfa, 0xa1, 0x6a, 0xbf, 0xd9, 0xfb, 0xf6, ]; assert_eq!(&initial_st[..], &expected_st[..]); } /* # The Python 2 code used to generate this test vector: import sys sys.path.insert(0, "./orig-strobe/python") from Strobe.Strobe import Strobe s = Strobe("", security=256) print("[{}]".format(', '.join(map("0x{:02x}".format, s.st)))) */ #[test] fn test_init_256() { let s = Strobe::new(b"", SecParam::B256); let initial_st = s.st.0; let expected_st: &[u8; 8 * KECCAK_BLOCK_SIZE] = &[ 0x37, 0xc1, 0x15, 0x06, 0xed, 0x61, 0xe7, 0xda, 0x7c, 0x1a, 0x2f, 0x2c, 0x1f, 0x49, 0x74, 0xb0, 0x71, 0x66, 0xc2, 0xea, 0x7f, 0x62, 0xec, 0xa6, 0xe0, 0x36, 0xc1, 0x6e, 0xae, 0x39, 0xb4, 0xdf, 0x3a, 0x06, 0x11, 0xf1, 0x36, 0xc7, 0x33, 0x94, 0x31, 0x13, 0x2c, 0xdb, 0x18, 0x03, 0x08, 0xc0, 0x53, 0x61, 0xab, 0xf7, 0xb9, 0xc6, 0x89, 0x49, 0xab, 0x1e, 0x5c, 0x0b, 0xbf, 0xab, 0x0a, 0xb0, 0x66, 0xa0, 0x13, 0x96, 0xdb, 0x8d, 0xb1, 0x26, 0x02, 0x0c, 0xf7, 0x96, 0xb2, 0x3f, 0x0e, 0xe1, 0xcf, 0x40, 0xda, 0x8f, 0x8b, 0xfc, 0x34, 0x27, 0x34, 0x14, 0x4a, 0x64, 0x08, 0x29, 0x44, 0x5a, 0x67, 0xab, 0x3e, 0x15, 0x46, 0xc0, 0x97, 0xe3, 0x23, 0xd3, 0xda, 0xe7, 0xc6, 0x2e, 0x62, 0xd3, 0xdd, 0xae, 0x90, 0x98, 0x31, 0xa1, 0x64, 0x9c, 0xd8, 0x07, 0x97, 0x7b, 0x5e, 0x44, 0x88, 0xae, 0x42, 0xfc, 0x36, 0xec, 0x2c, 0x5a, 0x78, 0x0d, 0x52, 0xa3, 0x22, 0xa6, 0xe9, 0xbe, 0xff, 0x73, 0x89, 0xcb, 0x8f, 0xe7, 0x6a, 0xb5, 0x5d, 0xc6, 0xa0, 0x60, 0xa7, 0x22, 0xb9, 0x64, 0xb6, 0xe8, 0xfe, 0x8b, 0xb5, 0xb9, 0x1a, 0x9b, 0xbc, 0x61, 0xc0, 0x86, 0x7e, 0x6d, 0xfc, 0x5b, 0x5c, 0x6d, 0xd5, 0xb5, 0xa7, 0x26, 0xc9, 0x18, 0xe4, 0x0b, 0xe9, 0xb1, 0xcf, 0xa7, 0xef, 0xa6, 0x92, 0xf5, 0x05, 0xdc, 0xac, 0xde, 0x80, 0x03, 0xe8, 0xbb, ]; assert_eq!(&initial_st[..], &expected_st[..]); } /* # The Python 2 code used to generate this test vector: import sys sys.path.insert(0, "./orig-strobe/python") from Strobe.Strobe import Strobe s = Strobe("seqtest", security=256) s.prf(10) s.ad("Hello") s.send_enc("World") s.send_clr("foo") s.ratchet() s.recv_clr("bar") s.recv_enc("baz") for i in xrange(100): s.send_enc("X"*i) s.prf(123) s.send_mac() print("[{}]".format(', '.join(map("0x{:02x}".format, s.st)))) */ #[cfg(feature = "std")] #[test] fn test_seq() { let mut s = Strobe::new(b"seqtest", SecParam::B256); let mut buf = [0u8; 10]; s.prf(&mut buf[..], false); s.ad(b"Hello", false); let mut buf = b"World".to_vec(); s.send_enc(buf.as_mut_slice(), false); s.send_clr(b"foo", false); s.ratchet(32, false); s.recv_clr(b"bar", false); let mut buf = b"baz".to_vec(); s.recv_enc(buf.as_mut_slice(), false); for i in 0..100 { let mut buf = vec![b'X'; i]; s.send_enc(buf.as_mut_slice(), false); } let mut buf = [0u8; 123]; s.prf(&mut buf[..], false); let mut buf = [0u8; 16]; s.send_mac(&mut buf[..], false); let final_st = s.st.0; let expected_st = [ 0xdf, 0x7a, 0x38, 0x71, 0x06, 0xcc, 0x24, 0x82, 0x11, 0x31, 0x60, 0x43, 0xa9, 0xf0, 0xf5, 0xd0, 0x49, 0xc2, 0xce, 0xd3, 0x85, 0xfc, 0x9e, 0xa8, 0x0e, 0xc1, 0x46, 0xa4, 0xa1, 0x96, 0x02, 0x30, 0x78, 0xe6, 0x16, 0x62, 0x50, 0x1b, 0xab, 0x23, 0x5d, 0xcb, 0x85, 0x34, 0x3a, 0x67, 0xc6, 0x6c, 0xd8, 0x79, 0x45, 0xee, 0x2b, 0xaa, 0xc0, 0x09, 0x45, 0xc7, 0xf6, 0x42, 0xd9, 0xbc, 0x43, 0xe1, 0xd5, 0x2c, 0x6e, 0x71, 0x6f, 0xfa, 0x9a, 0x39, 0x9d, 0x11, 0xfd, 0x62, 0xfb, 0x15, 0x04, 0x85, 0xf9, 0xe3, 0xc1, 0x24, 0x95, 0x04, 0x84, 0x95, 0x3c, 0x74, 0x38, 0x3d, 0x5e, 0x08, 0x87, 0x64, 0xa3, 0x57, 0xdd, 0xb0, 0x40, 0x5b, 0x40, 0x25, 0x93, 0xb8, 0x3a, 0x75, 0x1d, 0xb7, 0xdf, 0xc4, 0x34, 0x4d, 0xfa, 0x94, 0xc6, 0x98, 0x13, 0xb3, 0x75, 0xf2, 0xdc, 0xd0, 0xe3, 0xe9, 0x44, 0xba, 0xfd, 0x98, 0x13, 0xc1, 0x59, 0xc7, 0x46, 0xa7, 0xb0, 0x65, 0x70, 0x20, 0x3d, 0x56, 0xeb, 0x84, 0x18, 0x1c, 0xca, 0x5b, 0x7a, 0xe4, 0xad, 0x3a, 0x57, 0x6b, 0x40, 0x80, 0x29, 0x0c, 0x63, 0x11, 0xd8, 0x6f, 0x89, 0xb8, 0x32, 0xf0, 0xb1, 0xde, 0x8c, 0x0a, 0x4f, 0x00, 0x90, 0x16, 0x0d, 0xc1, 0x9f, 0xd4, 0x69, 0x9c, 0x56, 0xb1, 0xd8, 0x9e, 0xc0, 0x8d, 0x40, 0x7a, 0x36, 0xe3, 0xb3, 0x9c, 0xd4, 0x91, 0x17, 0xd7, 0xed, 0x4c, 0x4b, 0xa5, ]; assert_eq!(&final_st[..], &expected_st[..]); } /* # The Python 2 code used to generate these test vectors: import sys sys.path.insert(0, "./orig-strobe/python") from Strobe.Strobe import Strobe I,A,C,T,M,K = 1<<0, 1<<1, 1<<2, 1<<3, 1<<4, 1<<5 s = Strobe("metadatatest", security=256) m = s.key("key", meta_flags=A|T|M, metadata="meta1") m += s.prf(10, meta_flags=I|A|C|M, metadata=10) m += s.send_enc("pt", meta_flags=A|T|M, metadata="meta3") print("accumulated metadata == [{}]".format(', '.join(map("0x{:02x}".format, m)))) print("state == [{}]".format(', '.join(map("0x{:02x}".format, s.st)))) */ #[cfg(feature = "std")] #[test] fn test_metadata() { // We will accumulate output over 3 operations and 3 meta-operations let mut s = Strobe::new(b"metadatatest", SecParam::B256); let mut output = std::vec::Vec::new(); let buf = b"meta1"; s.meta_send_clr(buf, false); output.extend_from_slice(buf); // This does not output anything s.key(b"key", false); let mut buf = [0u8; 10]; s.meta_prf(&mut buf, false); output.extend_from_slice(&buf[..]); // We don't have to re-zero the buffer. Our internal special-casing for PRF does this for us s.prf(&mut buf, false); output.extend_from_slice(&buf[..]); let buf = b"meta3"; s.meta_send_clr(buf, false); output.extend(buf); let mut buf = b"pt".to_vec(); s.send_enc(buf.as_mut_slice(), false); output.extend(buf); let expected_output = [ 0x6d, 0x65, 0x74, 0x61, 0x31, 0xa7, 0xe5, 0x96, 0xe0, 0x8f, 0x39, 0x19, 0x3c, 0x4f, 0x84, 0xdb, 0x00, 0xbb, 0xce, 0xbb, 0xf3, 0x7e, 0xc6, 0x33, 0x8b, 0x6d, 0x65, 0x74, 0x61, 0x33, 0xe9, 0x0b, ]; let expected_st = [ 0xe9, 0x0b, 0x29, 0xad, 0x32, 0x0c, 0x27, 0x53, 0x07, 0x48, 0xcd, 0x38, 0xde, 0xf7, 0x23, 0xb0, 0x54, 0x21, 0x14, 0xae, 0xd1, 0xfc, 0x55, 0xd0, 0xc6, 0xc2, 0x58, 0x85, 0xaa, 0x5d, 0x30, 0x30, 0x88, 0xb9, 0x6b, 0x55, 0xf0, 0x01, 0xbd, 0x30, 0xc4, 0xd5, 0x00, 0x72, 0xad, 0x58, 0xad, 0x08, 0xbc, 0x0c, 0x7b, 0x8f, 0xad, 0xe5, 0x02, 0x57, 0xa9, 0xe4, 0xbe, 0xb0, 0x1a, 0x96, 0x44, 0xc6, 0x25, 0x9d, 0x58, 0x30, 0x85, 0xf4, 0xee, 0xe0, 0xdd, 0x32, 0x39, 0x18, 0x8d, 0x46, 0x02, 0xa2, 0x9a, 0x64, 0x3d, 0x7a, 0x4e, 0xd0, 0xaa, 0x57, 0xf1, 0x97, 0x9e, 0xb5, 0xca, 0x18, 0x6c, 0xd2, 0x2b, 0x4f, 0xb6, 0x78, 0x30, 0x2f, 0xe1, 0xb0, 0x34, 0x10, 0x21, 0xdc, 0xd6, 0xdd, 0x63, 0x2f, 0x14, 0x23, 0x41, 0x78, 0xe4, 0x98, 0x9c, 0x5c, 0x8a, 0xae, 0x00, 0x31, 0xb7, 0xa9, 0x90, 0x16, 0x91, 0x41, 0x38, 0x0a, 0xc4, 0xe2, 0x3f, 0x39, 0x4d, 0x5e, 0xc7, 0x58, 0x59, 0x5d, 0xe5, 0x31, 0xdc, 0x7c, 0x0b, 0x06, 0xca, 0x8b, 0x95, 0x75, 0x31, 0x70, 0x9a, 0xee, 0x42, 0xf3, 0x2c, 0xef, 0x88, 0x1c, 0x6e, 0xc9, 0x9b, 0x69, 0xe5, 0xaf, 0xfc, 0x30, 0x93, 0x51, 0x29, 0x17, 0x93, 0x46, 0x21, 0xc5, 0x6c, 0xc9, 0x95, 0xd4, 0x58, 0x7c, 0xeb, 0x5a, 0x9d, 0x90, 0xa6, 0x7d, 0x5d, 0x36, 0xf6, 0x3f, 0xa6, 0xde, 0xb2, 0x48, 0xe2, 0x88, ]; assert_eq!(&output, &expected_output); assert_eq!(&s.st.0[..], &expected_st[..]); } /* # The Python 2 code used to generate this test vector: import sys sys.path.insert(0, "./orig-strobe/python") from Strobe.Strobe import Strobe,I,A,C,T,M,K s = Strobe("bigtest", security=256) # Just a big number and a big slice of data big_n = 9823 big_data = [0x34] * big_n # Run these bad boys through every operation and meta-operation we can s.ad(big_data, meta_flags=A|M, metadata=big_data) s.key(big_data, meta_flags=A|C|M, metadata=big_data) s.send_clr(big_data, meta_flags=A|T|M, metadata=big_data) s.recv_clr(big_data, meta_flags=I|A|T|M, metadata=big_data) s.send_enc(big_data, meta_flags=A|C|T|M, metadata=big_data) s.recv_enc(big_data, meta_flags=I|A|C|T|M, metadata=big_data) # We have to do meta_recv_mac and recv_mac separately, because if we do it as the ops above, it'll # panic on meta_recv_mac (which is called inside recv_mac) and never reach the rest of the recv_mac try: s.operate(I|C|T|M, big_data) except: pass try: s.operate(I|C|T, big_data) except: pass s.ratchet(big_n, meta_flags=C|M, metadata=big_n) s.prf(big_n, meta_flags=I|A|C|M, metadata=big_n) s.send_mac(big_n, meta_flags=C|T|M, metadata=big_n) print("[{}]".format(', '.join(map("0x{:02x}".format, s.st)))) */ #[test] fn test_long_inputs() { let mut s = Strobe::new(b"bigtest", SecParam::B256); const BIG_N: usize = 9823; let big_data = [0x34; BIG_N]; s.meta_ad(&big_data[..], false); s.ad(&big_data[..], false); s.meta_key(&big_data[..], false); s.key(&big_data[..], false); s.meta_send_clr(&big_data[..], false); s.send_clr(&big_data[..], false); s.meta_recv_clr(&big_data[..], false); s.recv_clr(&big_data[..], false); s.meta_send_enc(big_data.to_vec().as_mut_slice(), false); s.send_enc(big_data.to_vec().as_mut_slice(), false); s.meta_recv_enc(big_data.to_vec().as_mut_slice(), false); s.recv_enc(big_data.to_vec().as_mut_slice(), false); let _ = s.meta_recv_mac(big_data.to_vec().as_mut_slice()); let _ = s.recv_mac(big_data.to_vec().as_mut_slice()); let mut big_buf = [0u8; BIG_N]; s.meta_ratchet(BIG_N, false); s.ratchet(BIG_N, false); s.meta_prf(&mut big_buf, false); s.prf(&mut big_buf, false); s.meta_send_mac(&mut big_buf, false); s.send_mac(&mut big_buf, false); let expected_st = [ 0x0c, 0x75, 0x93, 0x6f, 0x9a, 0x39, 0x2c, 0x41, 0xbd, 0x4f, 0xe1, 0xf1, 0x8c, 0x24, 0x3d, 0x37, 0xdd, 0xcb, 0x0f, 0x7b, 0x8a, 0xd4, 0xe0, 0x06, 0xa7, 0xf0, 0xa2, 0x5b, 0xe7, 0x88, 0x9e, 0x34, 0xe3, 0x42, 0xb3, 0xa4, 0x4a, 0xfd, 0xb3, 0x49, 0x9d, 0x27, 0xc5, 0x00, 0x7a, 0x36, 0xd3, 0xc7, 0xb0, 0x27, 0x05, 0x7b, 0x02, 0x96, 0x11, 0xf3, 0x7b, 0x44, 0xd6, 0xf1, 0xb5, 0x64, 0x0e, 0x72, 0xa2, 0xab, 0x2c, 0x08, 0x36, 0x8c, 0xc6, 0x75, 0x40, 0x29, 0x03, 0x6e, 0xdd, 0x96, 0x9a, 0x89, 0xc0, 0x5f, 0x0f, 0x5b, 0x03, 0x8e, 0x6c, 0xe6, 0xce, 0x43, 0xdb, 0x13, 0xcf, 0xd6, 0x0a, 0x5a, 0xfc, 0x60, 0x55, 0xd8, 0xbe, 0x46, 0x8b, 0x9a, 0x26, 0xbb, 0x03, 0xee, 0xa2, 0x9d, 0x0c, 0xd2, 0xee, 0x07, 0x50, 0x47, 0xf6, 0x8c, 0x53, 0xfd, 0x0a, 0xcd, 0x6f, 0xd9, 0x95, 0xda, 0x45, 0x56, 0x9d, 0xcc, 0x63, 0x71, 0x9b, 0x97, 0x32, 0x1d, 0x62, 0x95, 0x89, 0xc6, 0x7c, 0xea, 0x65, 0x83, 0xf8, 0x43, 0xf9, 0xcf, 0x02, 0x2b, 0x1a, 0xb8, 0x49, 0x72, 0x85, 0x71, 0xc4, 0x6b, 0x46, 0xc5, 0xc9, 0x99, 0x90, 0xaa, 0x93, 0x2e, 0xd4, 0xc7, 0x18, 0x34, 0x27, 0xb5, 0xa6, 0xb7, 0xb2, 0x9b, 0x74, 0x7d, 0x32, 0xed, 0x09, 0x5a, 0x2d, 0x0f, 0x84, 0x4c, 0x8e, 0xba, 0x13, 0x10, 0x75, 0x13, 0x55, 0xce, 0x62, 0xa7, 0xf7, 0xc1, 0xdb, 0x73, ]; assert_eq!(&s.st.0[..], &expected_st[..]); } // Test that streaming in data using the `more` flag works as expected #[cfg(feature = "std")] #[test] fn test_streaming_correctness() { // Compute a few things without breaking up their inputs let one_shot_st: std::vec::Vec = { let mut s = Strobe::new(b"streamingtest", SecParam::B256); s.ad(b"mynonce", false); let mut buf = b"hello there".to_vec(); s.recv_enc(buf.as_mut_slice(), false); let mut mac = [0u8; 16]; s.send_mac(&mut mac[..], false); s.ratchet(13, false); s.st.0.to_vec() }; // Now do the same thing but stream the inputs let streamed_st: std::vec::Vec = { let mut s = Strobe::new(b"streamingtest", SecParam::B256); s.ad(b"my", false); s.ad(b"nonce", true); let mut buf = b"hello".to_vec(); s.recv_enc(buf.as_mut_slice(), false); let mut buf = b" there".to_vec(); s.recv_enc(buf.as_mut_slice(), true); let mut mac = [0u8; 16]; s.send_mac(&mut mac[..10], false); s.send_mac(&mut mac[10..], true); s.ratchet(10, false); s.ratchet(3, true); s.st.0.to_vec() }; assert_eq!(one_shot_st, streamed_st); } // Tests that you can't use the `more` flag in a nonsensical way, i.e., without being immediately // after the same op. In this instance, the violating operation is a nonmutating one (it's AD) #[test] #[should_panic] fn test_streaming_soundness_nomutate() { let mut s = Strobe::new(b"mactest", SecParam::B256); // Key with valid steps s.key(b"secret", false); s.key(b"sauce", true); // Do a streaming AD op without an antecedent AD op. This should fail s.ad(b"badmoreflag", true); } // Same as above, but whose violating operation is a mutating one (it's send_enc) #[test] #[should_panic] fn test_streaming_soundness_mutate() { let mut s = Strobe::new(b"mactest", SecParam::B256); // Key with valid steps s.key(b"secret", false); s.key(b"sauce", true); // Do a streaming send_enc op without an antecedent send_enc op. This should fail let mut msg = *b"testing"; s.send_enc(&mut msg, true); } // Same as above but with ratchet #[test] #[should_panic] fn test_streaming_soundness_ratchet() { let mut s = Strobe::new(b"mactest", SecParam::B256); // Key with valid steps s.key(b"secret", false); s.key(b"sauce", true); // Do a streaming ratchet op without an antecedent ratchet op. This should fail s.ratchet(10, true); } // Test that decrypt(encrypt(msg)) == msg #[test] fn test_enc_correctness() { let orig_msg = b"Hello there"; let mut tx = Strobe::new(b"enccorrectnesstest", SecParam::B256); let mut rx = Strobe::new(b"enccorrectnesstest", SecParam::B256); tx.key(b"the-combination-on-my-luggage", false); rx.key(b"the-combination-on-my-luggage", false); // Encrypt and decrypt the original message let mut buf = orig_msg.to_vec(); tx.send_enc(buf.as_mut_slice(), false); rx.recv_enc(buf.as_mut_slice(), false); assert_eq!(orig_msg, buf.as_slice()); } // Test that recv_mac(send_mac()) doesn't error, and recv_mac(otherstuff) does error #[test] fn test_mac_correctness_and_soundness() { let mut tx = Strobe::new(b"mactest", SecParam::B256); let mut rx = Strobe::new(b"mactest", SecParam::B256); // Just do some stuff with the state tx.key(b"secretsauce", false); let mut msg = b"attack at dawn".to_vec(); tx.send_enc(msg.as_mut_slice(), false); let mut mac = [0u8; 16]; tx.send_mac(&mut mac[..], false); rx.key(b"secretsauce", false); rx.recv_enc(&mut msg[..], false); // Test that valid MACs are accepted let mut rx_copy = rx.clone(); let good_res = rx_copy.recv_mac(&mut mac[..]); assert!(good_res.is_ok()); // Test that invalid MACs are rejected let mut bad_mac = { let mut tmp = mac.to_vec(); tmp.push(0); tmp }; let bad_res = rx.recv_mac(&mut bad_mac[..]); assert!(bad_res.is_err()); } strobe-rs-0.8.1/src/kat_tests.rs000064400000000000000000000167761046102023000147310ustar 00000000000000use crate::strobe::{SecParam, Strobe}; use std::{boxed::Box, fs::File, path::Path, string::String, vec::Vec}; use hex; use serde::{de::Error as SError, Deserialize, Deserializer}; use serde_json; // This is the top-level structure of the JSON we find in the test vectors #[derive(Deserialize)] struct TestHead { proto_string: String, #[serde(deserialize_with = "sec_param_from_bits")] security: SecParam, operations: Vec, } // Each individual test case looks like this #[derive(Deserialize)] struct TestOp { name: String, meta: bool, #[serde(deserialize_with = "bytes_from_hex")] input_data: Vec, stream: bool, #[serde(default, rename = "output", deserialize_with = "bytes_from_hex_opt")] expected_output: Option>, #[serde(default, rename = "state_after", deserialize_with = "bytes_from_hex")] expected_state_after: Vec, } // Tells serde how to deserialize a `SecParam` fn sec_param_from_bits<'de, D: Deserializer<'de>>(deserializer: D) -> Result where D: Deserializer<'de>, { let b = u64::deserialize(deserializer)?; match b { 128 => Ok(SecParam::B128), 256 => Ok(SecParam::B256), n => Err(SError::custom(format!("Invalid security parameter: {}", n))), } } // Tells serde how to deserialize bytes from hex fn bytes_from_hex<'de, D>(deserializer: D) -> Result, D::Error> where D: Deserializer<'de>, { let mut hex_str = String::deserialize(deserializer)?; // Prepend a 0 if it's not even length if hex_str.len() % 2 == 1 { hex_str.insert(0, '0'); } hex::decode(hex_str).map_err(|e| SError::custom(format!("{:?}", e))) } // This function is a formality. Some fields are not present, so they're wrapped in Option in the // above structs. Hence, the deserialization function must return an Option. The `default` pragma // on the members ensures, however, that the value is None when the field is missing. fn bytes_from_hex_opt<'de, D>(deserializer: D) -> Result>, D::Error> where D: Deserializer<'de>, { bytes_from_hex(deserializer).map(Some) } // Recall that `ratchet` can take a length argument, so this is the most general type that // represents the input to a STROBE operation enum DataOrLength<'a> { Data(&'a mut [u8]), Length(usize), } // Given the name of the operation and meta flag, returns a closure that performs this operation. // The types are kind of a mess, because the input and output types of the closure have to fit all // possible STROBE operations. fn get_op(op_name: String, meta: bool) -> Box Fn(&mut Strobe, DataOrLength<'a>, bool)> { let f = move |s: &mut Strobe, dol: DataOrLength, more: bool| { let data = match dol { DataOrLength::Length(len) => { if !meta { assert_eq!( op_name.as_str(), "RATCHET", "Got length input without RATCHET op" ); s.ratchet(len, more); return; } else { assert_eq!( op_name.as_str(), "RATCHET", "Got length input without RATCHET op" ); s.meta_ratchet(len, more); return; } } DataOrLength::Data(data) => data, }; // Note: we don't expect recv_MAC to work on random inputs. We test recv_MAC's // correctness in strobe.rs if !meta { match op_name.as_str() { "AD" => s.ad(data, more), "KEY" => s.key(data, more), "PRF" => s.prf(data, more), "send_CLR" => s.send_clr(data, more), "recv_CLR" => s.recv_clr(data, more), "send_ENC" => s.send_enc(data, more), "recv_ENC" => s.recv_enc(data, more), "send_MAC" => s.send_mac(data, more), "recv_MAC" => s.recv_mac(data).unwrap_or(()), "RATCHET" => panic!("Got RATCHET op without length input"), _ => panic!("Unexpected op name: {}", op_name), } } else { match op_name.as_str() { "AD" => s.meta_ad(data, more), "KEY" => s.meta_key(data, more), "PRF" => s.meta_prf(data, more), "send_CLR" => s.meta_send_clr(data, more), "recv_CLR" => s.meta_recv_clr(data, more), "send_ENC" => s.meta_send_enc(data, more), "recv_ENC" => s.meta_recv_enc(data, more), "send_MAC" => s.meta_send_mac(data, more), "recv_MAC" => s.meta_recv_mac(data).unwrap_or(()), "RATCHET" => panic!("Got RATCHET op without length input"), _ => panic!("Unexpected op name: {}", op_name), } } }; Box::new(f) } // If Strobe state serialization is defined, then this function does a // JSON serialization/deserialization round trip on the input state. This is for testing // correctness of our serde impl. #[cfg(feature = "serialize_secret_state")] fn serde_round_trip(s: Strobe) -> Strobe { let b = serde_json::to_vec(&s).unwrap(); let s: Strobe = serde_json::from_slice(&b).unwrap(); s } // If the this feature isn't present, then this is the identity function #[cfg(not(feature = "serialize_secret_state"))] fn serde_round_trip(s: Strobe) -> Strobe { s } // Runs the test vector and compares to the expected output at each step of the way fn test_against_vector>(filename: P) { let file = File::open(filename).unwrap(); let TestHead { proto_string, security, operations, } = serde_json::from_reader(file).unwrap(); let mut s = Strobe::new(proto_string.as_bytes(), security); for test_op in operations.into_iter() { // Test the serde functionality while we're at it. Do a JSON serialization/deserialization // round trip on the state. If not defined, this is the identity function. s = serde_round_trip(s); // Destructure the operation let TestOp { name, meta, mut input_data, stream, expected_output, expected_state_after, } = test_op; if name != "init" { // RATCHET inputs are given as strings of zeros instead of lengths. So just take the // length of the string of zeros. let input = if &name == "RATCHET" { DataOrLength::Length(input_data.len()) } else { DataOrLength::Data(input_data.as_mut_slice()) }; let op = get_op(name.clone(), meta); op(&mut s, input, stream); assert_eq!(&s.st.0[..], expected_state_after.as_slice()); // Only test expected output if the test vector has output to test against if let Some(eo) = expected_output { // The input was presumably mutated; let output = input_data.as_slice(); assert_eq!(output, eo.as_slice()); } } } } #[test] fn simple_test() { test_against_vector("kat/simple_test_vector.json"); } #[test] fn meta_test() { test_against_vector("kat/meta_test_vector.json"); } #[test] fn streaming_test() { test_against_vector("kat/streaming_test_vector.json"); } #[test] fn boundary_test() { test_against_vector("kat/boundary_test_vector.json"); } strobe-rs-0.8.1/src/keccak.rs000064400000000000000000000065021046102023000141330ustar 00000000000000use byteorder::{ByteOrder, LittleEndian}; use zeroize::Zeroize; /// keccak block size in 64-bit words. This is the N parameter in the STROBE spec pub const KECCAK_BLOCK_SIZE: usize = 25; // This is needed to make the version str pub(crate) const KECCAK_BLOCK_BITLEN_STR: &[u8] = b"1600"; // With this feature on, a user can serialize and deserialize the state of a STROBE session #[cfg(feature = "serialize_secret_state")] use serde::{Deserialize, Serialize}; #[cfg(feature = "serialize_secret_state")] use serde_big_array::BigArray; /// This is a wrapper around 200-byte buffer that's always 8-byte aligned to make pointers to it /// safely convertible to a pointer to [u64; 25] (since u64 words must be 8-byte aligned) #[derive(Clone, Zeroize)] #[cfg_attr(feature = "serialize_secret_state", derive(Serialize, Deserialize))] #[repr(align(8))] pub(crate) struct AlignedKeccakState( #[cfg_attr(feature = "serialize_secret_state", serde(with = "BigArray"))] pub(crate) [u8; 8 * KECCAK_BLOCK_SIZE], ); /// Performs the keccakf\[1600\] permutation on a byte buffer // Make a little-endian copy, do the operation, then copy the bytes back. Hopefully the compiler // will optimize out the copy if we' re on a little endian machine. I don't feel comfortable doing // a mem transmute. pub(crate) fn keccakf_u8(st: &mut AlignedKeccakState) { let mut keccak_block = [0u64; KECCAK_BLOCK_SIZE]; LittleEndian::read_u64_into(&st.0, &mut keccak_block); keccak::f1600(&mut keccak_block); LittleEndian::write_u64_into(&keccak_block, &mut st.0); } /* # The Python 2 code used to generate this test vector is below. For more information on how to # get this code running, look at the comment at the top # of `basic_tests.rs` from Strobe.Keccak import KeccakF k = KeccakF() out = k([0]*200) print("[{}]".format(', '.join(map("0x{:02x}".format, out)))) */ #[test] fn zero_keccak() { let mut state = AlignedKeccakState([0u8; 8 * KECCAK_BLOCK_SIZE]); keccakf_u8(&mut state); let expected_output = [ 0xe7, 0xdd, 0xe1, 0x40, 0x79, 0x8f, 0x25, 0xf1, 0x8a, 0x47, 0xc0, 0x33, 0xf9, 0xcc, 0xd5, 0x84, 0xee, 0xa9, 0x5a, 0xa6, 0x1e, 0x26, 0x98, 0xd5, 0x4d, 0x49, 0x80, 0x6f, 0x30, 0x47, 0x15, 0xbd, 0x57, 0xd0, 0x53, 0x62, 0x05, 0x4e, 0x28, 0x8b, 0xd4, 0x6f, 0x8e, 0x7f, 0x2d, 0xa4, 0x97, 0xff, 0xc4, 0x47, 0x46, 0xa4, 0xa0, 0xe5, 0xfe, 0x90, 0x76, 0x2e, 0x19, 0xd6, 0x0c, 0xda, 0x5b, 0x8c, 0x9c, 0x05, 0x19, 0x1b, 0xf7, 0xa6, 0x30, 0xad, 0x64, 0xfc, 0x8f, 0xd0, 0xb7, 0x5a, 0x93, 0x30, 0x35, 0xd6, 0x17, 0x23, 0x3f, 0xa9, 0x5a, 0xeb, 0x03, 0x21, 0x71, 0x0d, 0x26, 0xe6, 0xa6, 0xa9, 0x5f, 0x55, 0xcf, 0xdb, 0x16, 0x7c, 0xa5, 0x81, 0x26, 0xc8, 0x47, 0x03, 0xcd, 0x31, 0xb8, 0x43, 0x9f, 0x56, 0xa5, 0x11, 0x1a, 0x2f, 0xf2, 0x01, 0x61, 0xae, 0xd9, 0x21, 0x5a, 0x63, 0xe5, 0x05, 0xf2, 0x70, 0xc9, 0x8c, 0xf2, 0xfe, 0xbe, 0x64, 0x11, 0x66, 0xc4, 0x7b, 0x95, 0x70, 0x36, 0x61, 0xcb, 0x0e, 0xd0, 0x4f, 0x55, 0x5a, 0x7c, 0xb8, 0xc8, 0x32, 0xcf, 0x1c, 0x8a, 0xe8, 0x3e, 0x8c, 0x14, 0x26, 0x3a, 0xae, 0x22, 0x79, 0x0c, 0x94, 0xe4, 0x09, 0xc5, 0xa2, 0x24, 0xf9, 0x41, 0x18, 0xc2, 0x65, 0x04, 0xe7, 0x26, 0x35, 0xf5, 0x16, 0x3b, 0xa1, 0x30, 0x7f, 0xe9, 0x44, 0xf6, 0x75, 0x49, 0xa2, 0xec, 0x5c, 0x7b, 0xff, 0xf1, 0xea, ]; assert_eq!(&state.0[..], &expected_output[..]); } strobe-rs-0.8.1/src/lib.rs000064400000000000000000000041651046102023000134630ustar 00000000000000//! # strobe-rs //! //! This is a `no_std` implementation of the [Strobe protocol framework][strobe] in pure Rust. It //! is intended to be used as a library to build other protocols and frameworks. This //! implementation currently only supports Keccak-f\[1600\]. //! //! Here is a simple program that encrypts and decrypts a message: //! ``` //! # use strobe_rs::{SecParam, Strobe}; //! # fn main() { //! // Transmitter initializes their STROBE instance with a public context string //! let mut tx = Strobe::new(b"correctnesstest", SecParam::B128); //! // Receiver initializes their STROBE instance with a public context string //! let mut rx = Strobe::new(b"correctnesstest", SecParam::B128); //! //! // Transmitter keys their instance //! tx.key(b"the-combination-on-my-luggage", false); //! // Receiver keys their instance //! rx.key(b"the-combination-on-my-luggage", false); //! //! // Transmitter encrypts a message in place //! let mut msg = b"Attack at dawn".to_vec(); //! tx.send_enc(msg.as_mut_slice(), false); //! //! // Rename for clarity. `msg` has been encrypted in-place. //! let mut ciphertext = msg; //! //! // Receiver takes the message and decrypts it in place //! rx.recv_enc(ciphertext.as_mut_slice(), false); //! //! // Rename for clarity again //! let round_trip_msg = ciphertext; //! //! // Ensure that the sent message was the one received //! assert_eq!(&round_trip_msg, b"Attack at dawn"); //! # } //! ``` //! //! [strobe]: https://strobe.sourceforge.io/ // The doc_cfg feature is only available in nightly. It lets us mark items in documentation as // dependent on specific features. #![cfg_attr(docsrs, feature(doc_cfg))] //-------- no_std stuff --------// #![no_std] #[cfg(feature = "std")] #[macro_use] extern crate std; // An Error type is just something that's Debug and Display #[cfg_attr(docsrs, doc(cfg(feature = "std")))] #[cfg(feature = "std")] impl std::error::Error for AuthError {} //-------- Testing stuff --------// #[cfg(test)] mod basic_tests; // kat_tests requires std #[cfg(all(test, feature = "std"))] mod kat_tests; //-------- Modules and exports--------// mod keccak; mod strobe; pub use crate::strobe::*; strobe-rs-0.8.1/src/strobe.rs000064400000000000000000000515101046102023000142070ustar 00000000000000use crate::keccak::{keccakf_u8, AlignedKeccakState, KECCAK_BLOCK_BITLEN_STR, KECCAK_BLOCK_SIZE}; use bitflags::bitflags; use subtle::{self, ConstantTimeEq}; use zeroize::{Zeroize, ZeroizeOnDrop}; // With this feature on, a user can serialize and deserialize the state of a STROBE session #[cfg(feature = "serialize_secret_state")] use serde::{Deserialize, Serialize}; /// Version of Strobe that this crate implements. pub const STROBE_VERSION: &[u8] = b"1.0.2"; /// A placeholder for STROBE version strings. This is the length of the real version strings, for /// Keccak-f[1600] const TEMPLATE_VERSION_STR: [u8; 29] = *b"Strobe-Keccak-sss/bbbb-vX.Y.Z"; bitflags! { /// Operation flags defined in the Strobe paper. This is defined as a bitflags struct. #[cfg_attr(feature = "serialize_secret_state", derive(Serialize, Deserialize))] pub(crate) struct OpFlags: u8 { /// Is data being moved inbound const I = 1<<0; /// Is data being sent to the application const A = 1<<1; /// Does this operation use cipher output const C = 1<<2; /// Is data being sent for transport const T = 1<<3; /// Use exclusively for metadata operations const M = 1<<4; /// Reserved and currently unimplemented. Using this will cause a panic. const K = 1<<5; } } impl Zeroize for OpFlags { fn zeroize(&mut self) { self.bits.zeroize() } } /// Security parameter. Choice of 128 or 256 bits. #[derive(Clone, Copy)] #[cfg_attr(feature = "serialize_secret_state", derive(Serialize, Deserialize))] #[repr(usize)] pub enum SecParam { B128 = 128, B256 = 256, } /// An empty struct that just indicates that MAC verification failed #[derive(Clone, Copy, Debug, PartialEq, Eq)] pub struct AuthError; impl core::fmt::Display for AuthError { fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { f.write_str("MAC verification failed") } } /// The main Strobe object. This is currently limited to using Keccak-f\[1600\] as the internal /// permutation function. For more information on this object, the [protocol specification][spec] /// is a great resource. /// /// [spec]: https://strobe.sourceforge.io/specs/ /// /// Description of method input /// --------------------------- /// Most operations exposed by `Strobe` take the same set of inputs. The arguments are /// /// * `data` - The input data to the operation. /// * `more` - For streaming purposes. Specifies whether you're trying to add more input / get more /// output to/from the previous operation. For example: /// /// ```rust /// # extern crate strobe_rs; /// # use strobe_rs::{SecParam, Strobe}; /// # fn main() { /// # let mut s = Strobe::new(b"example-of-more", SecParam::B128); /// s.ad(b"hello world", false); /// # } /// ``` /// is equivalent to /// ```rust /// # extern crate strobe_rs; /// # use strobe_rs::{SecParam, Strobe}; /// # fn main() { /// # let mut s = Strobe::new(b"example-of-more", SecParam::B128); /// s.ad(b"hello ", false); /// s.ad(b"world", true); /// # } /// ``` /// /// **NOTE:** If you try to set the `more` flag for an operation that is not preceded by the same /// operation (e.g., if you try `ad` followed by `send_enc` with `more=true`), then **the function /// will panic**, since that is an invalid use of the `more` flag. /// /// Finally, `ratchet` and `meta_ratchet` take a `usize` argument instead of bytes. These functions /// are individually commented below. #[derive(Clone, Zeroize, ZeroizeOnDrop)] #[cfg_attr(feature = "serialize_secret_state", derive(Serialize, Deserialize))] pub struct Strobe { /// Internal Keccak state pub(crate) st: AlignedKeccakState, /// Security parameter (128 or 256) #[zeroize(skip)] sec: SecParam, /// This is the `R` parameter in the Strobe spec rate: usize, /// Index into `st` pos: usize, /// Index into `st` pos_begin: usize, /// Represents whether we're a sender or a receiver or uninitialized is_receiver: Option, /// The last operation performed. This is to verify that the `more` flag is only used across /// identical operations. prev_flags: Option, } // This defines an operation and meta-operation that mutates its input macro_rules! def_op_mut { ($name:ident, $meta_name:ident, $flags:expr, $doc_str:expr) => { #[doc = $doc_str] pub fn $name(&mut self, data: &mut [u8], more: bool) { let flags = $flags; self.operate(flags, data, more); } #[doc = $doc_str] pub fn $meta_name(&mut self, data: &mut [u8], more: bool) { let flags = $flags | OpFlags::M; self.operate(flags, data, more); } }; } // This defines an operation and meta-operation that does not mutate its input macro_rules! def_op_no_mut { ($name:ident, $meta_name:ident, $flags:expr, $doc_str:expr) => { #[doc = $doc_str] pub fn $name(&mut self, data: &[u8], more: bool) { let flags = $flags; self.operate_no_mutate(flags, data, more); } #[doc = $doc_str] pub fn $meta_name(&mut self, data: &[u8], more: bool) { let flags = $flags | OpFlags::M; self.operate_no_mutate(flags, data, more); } }; } impl Strobe { /// Makes a new `Strobe` object with a given protocol byte string and security parameter. pub fn new(proto: &[u8], sec: SecParam) -> Strobe { let rate = KECCAK_BLOCK_SIZE * 8 - (sec as usize) / 4 - 2; assert!(rate >= 1); assert!(rate < 254); // Initialize state: st = F([0x01, R+2, 0x01, 0x00, 0x01, 0x60] + b"STROBEvX.Y.Z") let mut st_buf = [0u8; KECCAK_BLOCK_SIZE * 8]; st_buf[0..6].copy_from_slice(&[0x01, (rate as u8) + 2, 0x01, 0x00, 0x01, 0x60]); st_buf[6..13].copy_from_slice(b"STROBEv"); st_buf[13..18].copy_from_slice(STROBE_VERSION); let mut st = AlignedKeccakState(st_buf); keccakf_u8(&mut st); let mut strobe = Strobe { st, sec, rate, pos: 0, pos_begin: 0, is_receiver: None, prev_flags: None, }; // Mix the protocol into the state strobe.meta_ad(proto, false); strobe } /// Returns a bytestring of the form `Strobe-Keccak-SEC/B-vVER` where `SEC` is the bits of /// security (128 or 256), `B` is the block size (in bits) of the Keccak permutation function, /// and `VER` is the protocol version. pub fn version_str(&self) -> [u8; TEMPLATE_VERSION_STR.len()] { let mut buf = TEMPLATE_VERSION_STR; match self.sec { SecParam::B128 => buf[14..17].copy_from_slice(b"128"), SecParam::B256 => buf[14..17].copy_from_slice(b"256"), } buf[18..22].copy_from_slice(KECCAK_BLOCK_BITLEN_STR); buf[24..29].copy_from_slice(STROBE_VERSION); buf } /// Validates that the `more` flag is being used correctly. Panics when validation fails. fn validate_streaming(&mut self, flags: OpFlags, more: bool) { // Streaming only makes sense if this operation is the same as last. For example you can do // s.ad("hello", false); // s.ad(" world", true). // But you can't do // s.ad("hello", false); // s.key(" world", true). if more { assert_eq!( self.prev_flags, Some(flags), "`more` can only be used when this operation is the same as the previous operation" ); } // Update the last-performed operation (i.e., the one we're about to perform) self.prev_flags = Some(flags); } // Runs the permutation function on the internal state fn run_f(&mut self) { self.st.0[self.pos] ^= self.pos_begin as u8; self.st.0[self.pos + 1] ^= 0x04; self.st.0[self.rate + 1] ^= 0x80; keccakf_u8(&mut self.st); self.pos = 0; self.pos_begin = 0; } /// XORs the given data into the state. This is a special case of the `duplex` code in the /// STROBE paper. fn absorb(&mut self, data: &[u8]) { for b in data { self.st.0[self.pos] ^= *b; self.pos += 1; if self.pos == self.rate { self.run_f(); } } } /// XORs the given data into the state, then sets the data equal the state. This is a special /// case of the `duplex` code in the STROBE paper. fn absorb_and_set(&mut self, data: &mut [u8]) { for b in data { let state_byte = self.st.0.get_mut(self.pos).unwrap(); *state_byte ^= *b; *b = *state_byte; self.pos += 1; if self.pos == self.rate { self.run_f(); } } } /// Copies the internal state into the given buffer. This is a special case of `absorb_and_set` /// where `data` is all zeros. fn copy_state(&mut self, data: &mut [u8]) { for b in data { *b = self.st.0[self.pos]; self.pos += 1; if self.pos == self.rate { self.run_f(); } } } /// Overwrites the state with the given data while XORing the given data with the old state. /// This is a special case of the `duplex` code in the STROBE paper. fn exchange(&mut self, data: &mut [u8]) { for b in data { let state_byte = self.st.0.get_mut(self.pos).unwrap(); *b ^= *state_byte; *state_byte ^= *b; self.pos += 1; if self.pos == self.rate { self.run_f(); } } } /// Overwrites the state with the given data. This is a special case of `Strobe::exchange`, /// where we do not want to mutate the input data. fn overwrite(&mut self, data: &[u8]) { for b in data { self.st.0[self.pos] = *b; self.pos += 1; if self.pos == self.rate { self.run_f(); } } } /// Copies the state into the given buffer and sets the state to 0. This is a special case of /// `Strobe::exchange`, where `data` is assumed to be the all-zeros string. This is precisely /// the case when the current operation is PRF. fn squeeze(&mut self, data: &mut [u8]) { for b in data { let state_byte = self.st.0.get_mut(self.pos).unwrap(); *b = *state_byte; *state_byte = 0; self.pos += 1; if self.pos == self.rate { self.run_f(); } } } /// Overwrites the state with a specified number of zeros. This is a special case of /// `Strobe::exchange`. More specifically, it's a special case of `Strobe::overwrite` and /// `Strobe::squeeze`. It's like `squeeze` in that we assume we've been given all zeros as /// input, and like `overwrite` in that we do not mutate (or take) any input. fn zero_state(&mut self, mut bytes_to_zero: usize) { static ZEROS: [u8; 8 * KECCAK_BLOCK_SIZE] = [0u8; 8 * KECCAK_BLOCK_SIZE]; // Do the zero-writing in chunks while bytes_to_zero > 0 { let slice_len = core::cmp::min(self.rate - self.pos, bytes_to_zero); self.st.0[self.pos..(self.pos + slice_len)].copy_from_slice(&ZEROS[..slice_len]); self.pos += slice_len; bytes_to_zero -= slice_len; if self.pos == self.rate { self.run_f(); } } } /// Mixes the current state index and flags into the state, accounting for whether we are /// sending or receiving fn begin_op(&mut self, mut flags: OpFlags) { if flags.contains(OpFlags::T) { let is_op_receiving = flags.contains(OpFlags::I); // If uninitialized, take on the direction of the first directional operation we get if self.is_receiver.is_none() { self.is_receiver = Some(is_op_receiving); } // So that the sender and receiver agree, toggle the I flag as necessary // This is equivalent to flags ^= is_receiver flags.set(OpFlags::I, self.is_receiver.unwrap() != is_op_receiving); } let old_pos_begin = self.pos_begin; self.pos_begin = self.pos + 1; // Mix in the position and flags let to_mix = &mut [old_pos_begin as u8, flags.bits()]; self.absorb(&to_mix[..]); let force_f = flags.contains(OpFlags::C) || flags.contains(OpFlags::K); if force_f && self.pos != 0 { self.run_f(); } } /// Performs the state / data transformation that corresponds to the given flags. If `more` is /// given, this will treat `data` as a continuation of the data given in the previous /// call to `operate`. pub(crate) fn operate(&mut self, flags: OpFlags, data: &mut [u8], more: bool) { // Make sure the K opflag isn't being used, and that the `more` flag isn't being misused assert!(!flags.contains(OpFlags::K), "Op flag K not implemented"); self.validate_streaming(flags, more); // If `more` isn't set, this is a new operation. Do the begin_op sequence if !more { self.begin_op(flags); } // Meta-ness is only relevant for `begin_op`. Remove it to simplify the below logic. let flags = flags & !OpFlags::M; // TODO?: Assert that input is empty under some flag conditions if flags.contains(OpFlags::C) && flags.contains(OpFlags::T) && !flags.contains(OpFlags::I) { // This is equivalent to the `duplex` operation in the Python implementation, with // `cafter = True` if flags == OpFlags::C | OpFlags::T { // This is `send_mac`. Pretend the input is all zeros self.copy_state(data) } else { self.absorb_and_set(data); } } else if flags == OpFlags::I | OpFlags::A | OpFlags::C { // Special case of case below. This is PRF. Use `squeeze` instead of `exchange`. self.squeeze(data); } else if flags.contains(OpFlags::C) { // This is equivalent to the `duplex` operation in the Python implementation, with // `cbefore = True` self.exchange(data); } else { // This should normally call `absorb`, but `absorb` does not mutate, so the implementor // should have used operate_no_mutate instead panic!("operate should not be called for operations that do not require mutation"); } } /// Performs the state transformation that corresponds to the given flags. If `more` is given, /// this will treat `data` as a continuation of the data given in the previous call to /// `operate`. This uses non-mutating variants of the specializations of the `duplex` function. pub(crate) fn operate_no_mutate(&mut self, flags: OpFlags, data: &[u8], more: bool) { // Make sure the K opflag isn't being used, and that the `more` flag isn't being misused assert!(!flags.contains(OpFlags::K), "Op flag K not implemented"); self.validate_streaming(flags, more); // If `more` isn't set, this is a new operation. Do the begin_op sequence if !more { self.begin_op(flags); } // There are no non-mutating variants of things with flags & (C | T | I) == C | T if flags.contains(OpFlags::C) && flags.contains(OpFlags::T) && !flags.contains(OpFlags::I) { panic!("operate_no_mutate called on something that requires mutation"); } else if flags.contains(OpFlags::C) { // This is equivalent to a non-mutating form of the `duplex` operation in the Python // implementation, with `cbefore = True` self.overwrite(data); } else { // This is equivalent to the `duplex` operation in the Python implementation, with // `cbefore = cafter = False` self.absorb(data); }; } // This is separately defined because it's the only method that can return a `Result`. See docs // for recv_mac and meta_recv_mac. fn generalized_recv_mac(&mut self, data: &mut [u8], is_meta: bool) -> Result<(), AuthError> { // These are the (meta_)recv_mac flags let flags = if is_meta { OpFlags::I | OpFlags::C | OpFlags::T | OpFlags::M } else { OpFlags::I | OpFlags::C | OpFlags::T }; // recv_mac can never be streamed self.operate(flags, data, /* more */ false); // Constant-time MAC check. This accumulates the truth values of byte == 0 let mut all_zero = subtle::Choice::from(1u8); for b in data { all_zero &= b.ct_eq(&0u8); } // If the buffer isn't all zeros, that's an invalid MAC if !bool::from(all_zero) { Err(AuthError) } else { Ok(()) } } /// Attempts to authenticate the current state against the given MAC. On failure, it returns an /// `AuthError`. It behooves the user of this library to check this return value and overreact /// on error. pub fn recv_mac(&mut self, data: &mut [u8]) -> Result<(), AuthError> { self.generalized_recv_mac(data, /* is_meta */ false) } /// Attempts to authenticate the current state against the given MAC. On failure, it returns an /// `AuthError`. It behooves the user of this library to check this return value and overreact /// on error. pub fn meta_recv_mac(&mut self, data: &mut [u8]) -> Result<(), AuthError> { self.generalized_recv_mac(data, /* is_meta */ true) } // This is separately defined because it's the only method that takes an integer and mutates // its input fn generalized_ratchet(&mut self, num_bytes_to_zero: usize, more: bool, is_meta: bool) { // These are the (meta_)ratchet flags let flags = if is_meta { OpFlags::C | OpFlags::M } else { OpFlags::C }; // We don't make an `operate` call, since this is a super special case. That means we have // to validate the flags and make the `begin_op` call manually. self.validate_streaming(flags, more); if !more { self.begin_op(flags); } self.zero_state(num_bytes_to_zero); } /// Ratchets the internal state forward in an irreversible way by zeroing bytes. /// /// Takes a `usize` argument specifying the number of bytes of public state to zero. If the /// size exceeds `self.rate`, Keccak-f will be called before more bytes are zeroed. pub fn ratchet(&mut self, num_bytes_to_zero: usize, more: bool) { self.generalized_ratchet(num_bytes_to_zero, more, /* is_meta */ false) } /// Ratchets the internal state forward in an irreversible way by zeroing bytes. /// /// Takes a `usize` argument specifying the number of bytes of public state to zero. If the /// size exceeds `self.rate`, Keccak-f will be called before more bytes are zeroed. pub fn meta_ratchet(&mut self, num_bytes_to_zero: usize, more: bool) { self.generalized_ratchet(num_bytes_to_zero, more, /* is_meta */ true) } // // These operations mutate their inputs // def_op_mut!( send_enc, meta_send_enc, OpFlags::A | OpFlags::C | OpFlags::T, "Sends an encrypted message." ); def_op_mut!( recv_enc, meta_recv_enc, OpFlags::I | OpFlags::A | OpFlags::C | OpFlags::T, "Receives an encrypted message." ); def_op_mut!( send_mac, meta_send_mac, OpFlags::C | OpFlags::T, "Sends a MAC of the internal state. \ The output is independent of the initial contents of the input buffer." ); def_op_mut!( prf, meta_prf, OpFlags::I | OpFlags::A | OpFlags::C, "Extracts pseudorandom data as a function of the internal state. \ The output is independent of the initial contents of the input buffer." ); // // These operations do not mutate their inputs // def_op_no_mut!( send_clr, meta_send_clr, OpFlags::A | OpFlags::T, "Sends a plaintext message." ); def_op_no_mut!( recv_clr, meta_recv_clr, OpFlags::I | OpFlags::A | OpFlags::T, "Receives a plaintext message." ); def_op_no_mut!( ad, meta_ad, OpFlags::A, "Mixes associated data into the internal state." ); def_op_no_mut!( key, meta_key, OpFlags::A | OpFlags::C, "Sets a symmetric cipher key." ); } #[test] fn version_str() { let s128 = Strobe::new(b"version_str test", SecParam::B128); assert_eq!(&s128.version_str(), b"Strobe-Keccak-128/1600-v1.0.2"); let s256 = Strobe::new(b"version_str test", SecParam::B256); assert_eq!(&s256.version_str(), b"Strobe-Keccak-256/1600-v1.0.2"); }